PluralTest.php #1

  • //
  • guest/
  • thomas_gray/
  • jambox/
  • main/
  • swarm/
  • tests/
  • phpunit/
  • P4Test/
  • Spec/
  • PluralTest.php
  • View
  • Commits
  • Open Download .zip Download (6 KB)
<?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]
        );
    }
}
# Change User Description Committed
#1 18730 Liz Lam clean up code and move things around