<?php
/**
* Test methods for the P4 Triggers class.
*
* @copyright 2011 Perforce Software. All rights reserved.
* @license Please see LICENSE.txt in top-level folder of this distribution.
* @version <release>/<patch>
*/
class P4_TriggersTest extends TestCase
{
/**
* Test getting values
*/
public function testGetValues()
{
// Test default values
$triggers = new P4_Triggers;
$expected = array (
'Triggers' => array(),
);
$this->assertSame(
$expected,
$triggers->getValues(),
'Expected default values to match'
);
// set new values.
$values = array(
array(
'name' => 'write',
'type' => 'archive',
'path' => '//test/...',
'command' => 'myscript.sh'
)
);
$triggers->setTriggers($values);
// Verify instance reflects updated values via accessor
$this->assertSame(
$values,
$triggers->getTriggers(),
'Expected instance values to match'
);
// Verify field and accessor give same result
$this->assertSame(
$triggers->getValue('Triggers'),
$triggers->getTriggers(),
'Expected instance values in field to match accessor'
);
$this->assertSame(
array('Triggers' => $values),
$triggers->getValues(),
'Expected instance values array to match'
);
// test save.
$triggers->save();
$triggers = P4_Triggers::fetch();
$this->assertSame(
$values,
$triggers->getTriggers(),
'Expected saved values to match'
);
// Verify field and accessor give same result
$this->assertSame(
$triggers->getValue('Triggers'),
$triggers->getTriggers(),
'Expected saved values in field to match accessor'
);
$this->assertSame(
array('Triggers' => $values),
$triggers->getValues(),
'Expected saved values array to match'
);
}
/**
* Test setting valid and invalid values.
*/
public function testSetValues()
{
$tests = array(
array(
'label' => __LINE__ . " string input",
'value' => "my-trigger archive //test/... /path/to/myscript.sh",
'error' => true
),
array(
'label' => __LINE__ . " bool input",
'value' => true,
'error' => true
),
array(
'label' => __LINE__ . " string input, doubled-up space",
'value' => array("my-trigger archive //test/... /path/to/myscript.sh"),
'error' => true
),
array(
'label' => __LINE__ . " string input, space in field",
'value' => array("my trigger archive //test/... /path/to/myscript.sh"),
'error' => true
),
array(
'label' => __LINE__ . " string input, missing field",
'value' => array("archive //test/... /path/to/myscript.sh"),
'error' => true
),
array(
'label' => __LINE__ . " string input, space in unquoted path",
'value' => array("my-trigger archive //test/... /with/spa ce/myscript.sh"),
'error' => true
),
array(
'label' => __LINE__ . " array input, name has space",
'value' => array (
0 => array (
'name' => "my trigger",
'type' => "user",
'path' => "//test with spaces/...",
'command' => "/path/to/script.sh"
)
),
'error' => true,
),
array(
'label' => __LINE__ . " array input, missing type",
'value' => array (
0 => array (
'name' => "my-trigger",
'path' => "//test with spaces/...",
'command' => "/path/to/script.sh"
)
),
'error' => true,
),
array(
'label' => __LINE__ . " array input, missing path",
'value' => array (
0 => array (
'name' => "my-trigger",
'type' => "form-in",
'command' => "/path/to/script.sh"
)
),
'error' => true,
),
array(
'label' => __LINE__ . " one string input, path has spaces.",
'value' => array('my-trigger form-delete "//test spaces/..." /cmd/nospace.sh'),
'error' => false,
'out' => array (
0 => array (
'name' => "my-trigger",
'type' => "form-delete",
'path' => "//test spaces/...",
'command' => "/cmd/nospace.sh"
)
)
),
array(
'label' => __LINE__ . " one string input, command has spaces.",
'value' => array('my-trigger form-delete "//test/..." "/cmd/spa ce.sh"'),
'error' => false,
'out' => array (
0 => array (
'name' => "my-trigger",
'type' => "form-delete",
'path' => "//test/...",
'command' => "/cmd/spa ce.sh"
)
)
),
array(
'label' => __LINE__ . " one array input, path has spaces.",
'value' => array (
0 => array (
'name' => "my-trigger",
'type' => "form-delete",
'path' => "//test spaces/...",
'command' => "/cmd/spa ce.sh"
)
),
'error' => false,
),
array(
'label' => __LINE__ . " four string input",
'value' => array(
'atrigger form-delete //testfolder1/... /cmd/sample.sh',
'my-trigger form-out //testfolder2/... /path/to/go',
'identify form-in //testfolder3/... /scripts/test.py',
'gogo fix-add //testfolder4/... /scripts/test.php',
),
'out' => array (
0 => array (
'name' => "atrigger",
'type' => "form-delete",
'path' => "//testfolder1/...",
'command' => "/cmd/sample.sh"
),
1 => array (
'name' => "my-trigger",
'type' => "form-out",
'path' => "//testfolder2/...",
'command' => "/path/to/go"
),
2 => array (
'name' => "identify",
'type' => "form-in",
'path' => "//testfolder3/...",
'command' => "/scripts/test.py"
),
3 => array (
'name' => "gogo",
'type' => "fix-add",
'path' => "//testfolder4/...",
'command' => "/scripts/test.php"
)
),
'error' => false
),
array(
'label' => __LINE__ . " four array input",
'value' => array (
0 => array (
'name' => "atrigger",
'type' => "form-delete",
'path' => "//testfolder1/...",
'command' => "/cmd/sample.sh"
),
1 => array (
'name' => "my-trigger",
'type' => "form-out",
'path' => "//testfolder2/...",
'command' => "/path/to/go"
),
2 => array (
'name' => "identify",
'type' => "form-in",
'path' => "//testfolder3/...",
'command' => "/scripts/test.py"
),
3 => array (
'name' => "identify",
'type' => "fix-add",
'path' => "//testfolder4/...",
'command' => "/scripts/test.php"
)
),
'error' => false
),
array(
'label' => __LINE__ . " mixed string/array input",
'value' => array(
0 => 'atrigger form-delete //testfolder1/... /cmd/sample.sh',
1 => array (
'name' => "my-trigger",
'type' => "form-out",
'path' => "//testfolder2/...",
'command' => "/path/to/go"
),
2 => 'identify form-in //testfolder3/... /scripts/test.py',
3 => array (
'name' => "identify",
'type' => "fix-add",
'path' => "//testfolder4/...",
'command' => "/scripts/test.php"
)
),
'out' => array (
0 => array (
'name' => "atrigger",
'type' => "form-delete",
'path' => "//testfolder1/...",
'command' => "/cmd/sample.sh"
),
1 => array (
'name' => "my-trigger",
'type' => "form-out",
'path' => "//testfolder2/...",
'command' => "/path/to/go"
),
2 => array (
'name' => "identify",
'type' => "form-in",
'path' => "//testfolder3/...",
'command' => "/scripts/test.py"
),
3 => array (
'name' => "identify",
'type' => "fix-add",
'path' => "//testfolder4/...",
'command' => "/scripts/test.php"
)
),
'error' => false
),
);
foreach ($tests as $test) {
$label = $test['label'];
$triggers = new P4_Triggers;
try {
$triggers->setTriggers($test['value']);
if ($test['error']) {
$this->fail("$label: Unexpected success.");
}
$expected = array_key_exists('out', $test) ? $test['out'] : $test['value'];
$this->assertSame(
$expected,
$triggers->getTriggers(),
"$label: Unexpected Output"
);
} catch (InvalidArgumentException $e) {
if (!$test['error']) {
$this->fail("$label: Unexpected failure.");
} else {
$this->assertTrue(true, "$label: Expected exception found");
}
} catch (PHPUnit_Framework_AssertionFailedError $e) {
$this->fail($e->getMessage());
} catch (Exception $e) {
$this->fail(
"$label: Unexpected Exception (" . get_class($e) . '): ' . $e->getMessage()
);
}
}
}
}