- <?php
- /**
- * This is a test thoroughly exercises the Spec_PluralAbstract via the PluralMock class.
- * It is used to thoroughly exercise the base plural spec functionality so latter implementors
- * can focus on testing only their own additions/modifications.
- *
- * The actual spec type represented by PluralMock is of no importance and should not be considered
- * tested in this context.
- *
- * @copyright 2012 Perforce Software. All rights reserved.
- * @license Please see LICENSE.txt in top-level folder of this distribution.
- * @version <release>/<patch>
- */
-
- namespace P4Test\Spec;
-
- use P4Test\TestCase;
-
- class PluralTest extends TestCase
- {
- /**
- * Test setId
- */
- public function testSetIdBad()
- {
- $tests = array(
- __LINE__ .' empty string' => '',
- __LINE__ .' pure numeric' => '1234',
- __LINE__ .' bool' => true,
- __LINE__ .' array' => array(),
- __LINE__ .' int' => 10,
- __LINE__ .' float' => 10.10,
- __LINE__ .' space' => ' ',
- __LINE__ .' tab' => "\t",
- __LINE__ .' newline' => "\n",
- __LINE__ .' inside space' => 'te st',
- __LINE__ .' inside tab' => "te\tst",
- __LINE__ .' inside newline' => "te\nst",
- __LINE__ .' hash' => '#',
- __LINE__ .' inside hash' => 'te#st',
- __LINE__ .' ampersand' => '@',
- __LINE__ .' inside at' => 'te@st',
- __LINE__ .' ...' => '...',
- __LINE__ .' inside ...' => 'te...st',
- __LINE__ .' *' => '*',
- __LINE__ .' inside *' => 'te*st',
- );
-
- foreach ($tests as $title => $value) {
- $spec = new PluralMock;
-
- try {
- $spec->setId($value);
-
- $this->fail('Expected setId for: '.$title.' to fail');
- } catch (\InvalidArgumentException $e) {
- $this->assertSame(
- "Cannot set id. Id is invalid.",
- $e->getMessage(),
- $title.' Unexpected message in exception'
- );
- } catch (\PHPUnit\Framework\AssertionFailedError $e) {
- throw $e;
- } catch (\Exception $e) {
- $this->fail($title.' Unexpected Exception ('. get_class($e) .'): '. $e->getMessage());
- }
- }
- }
-
- /**
- * Test setId Good values, also ends up testing getId somewhat
- */
- public function testSetIdGood()
- {
- $tests = array(
- __LINE__ .' alpha string' => 'abcd',
- __LINE__ .' trailing numeric' => 'abcd1234',
- __LINE__ .' leading numeric' => '1234abcd',
- __LINE__ .' inside numeric' => 'ab1234cd',
- __LINE__ .' null' => null,
- );
-
- foreach ($tests as $title => $value) {
- $spec = new PluralMock;
-
- try {
- $spec->setId($value);
-
- $this->assertSame(
- $value,
- $spec->getId(),
- $title.' Expected matching input/output'
- );
- } catch (\PHPUnit\Framework\AssertionFailedError $e) {
- throw $e;
- } catch (\Exception $e) {
- $this->fail($title.' Unexpected Exception ('. get_class($e) .'): '. $e->getMessage());
- }
- }
- }
-
- /**
- * Test getId on an empty object
- */
- public function testGetIdEmptyObject()
- {
- $spec = new PluralMock;
-
- $this->assertSame(
- null,
- $spec->getId(),
- 'Expected default ID to be null'
- );
- }
-
- /**
- * Test getId and compare to other access methods
- */
- public function testGetId()
- {
- $value = 'abc123';
- $spec = new PluralMock;
-
- $spec->setId($value);
-
- // Verify passed value returned by getId
- $this->assertSame(
- $value,
- $spec->getId(),
- 'Expected id to match set value'
- );
-
- // Verify get on Id Field matches set value
- $this->assertSame(
- $value,
- $spec->get($spec::ID_FIELD),
- 'Expected get(id) to match set value'
- );
-
- // Verify get version of Id field mathes set value
- $fields = $spec->get();
- $this->assertSame(
- $value,
- $fields[$spec::ID_FIELD],
- 'Expected get()[id] to match set value'
- );
- }
-
- /**
- * Test exists with Bad Id's.
- * This is somewhat pointless as we are testing a function in the mock object.
- * It does however give us confidence this function isn't causing issues.
- */
- public function testExistsBadId()
- {
- $this->assertFalse(
- PluralMock::exists('BadId'),
- 'Expected BadId would not exist'
- );
-
- // try with passed connection
- $connection = PluralMock::getDefaultConnection();
- $this->assertFalse(
- PluralMock::exists('BadId', $connection),
- 'Expected BadId would not exist, using passed connection'
- );
- }
-
- /**
- * Test exists with Good Id's.
- * This is somewhat pointless as we are testing a function in the mock object.
- * It does however give us confidence this function isn't causing issues.
- */
- public function testExistsGoodId()
- {
- $spec = new PluralMock;
-
- // Ensure a 'goodId' record exists
- $spec->setId('goodId')->set('Description', 'test!')->save();
-
- $this->assertTrue(
- PluralMock::exists('goodId'),
- 'Expected goodId would exist'
- );
-
- // try with passed connection
- $connection = PluralMock::getDefaultConnection();
- $this->assertTrue(
- PluralMock::exists('goodId', $connection),
- 'Expected goodId would exist, using passed connection'
- );
- }
-
- /**
- * Do a quick check that trigger noise is/isn't present as expected
- */
- public function testNoisyTrigger()
- {
- $data = $this->p4->run(PluralMock::SPEC_TYPE, '-o')->getData();
-
- if (!USE_NOISY_TRIGGERS) {
- $this->assertSame(1, count($data));
- return;
- }
-
- $this->assertSame(2, count($data));
- $this->assertSame(
- PluralMock::SPEC_TYPE . "-form-out stdout\n" . PluralMock::SPEC_TYPE . "-form-out stderr",
- $data[0]
- );
- }
- }