Seditio Source
Root |
./othercms/croogo-4.0.7/vendor/sebastian/recursion-context/tests/ContextTest.php
<?php
/*
 * This file is part of the Recursion Context package.
 *
 * (c) Sebastian Bergmann <sebastian@phpunit.de>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace SebastianBergmann\RecursionContext;

use
PHPUnit\Framework\TestCase;

/**
 * @covers SebastianBergmann\RecursionContext\Context
 */
class ContextTest extends TestCase
{
   
/**
     * @var \SebastianBergmann\RecursionContext\Context
     */
   
private $context;

    protected function
setUp()
    {
       
$this->context = new Context();
    }

    public function
failsProvider()
    {
        return array(
            array(
true),
            array(
false),
            array(
null),
            array(
'string'),
            array(
1),
            array(
1.5),
            array(
fopen('php://memory', 'r'))
        );
    }

    public function
valuesProvider()
    {
       
$obj2      = new \stdClass();
       
$obj2->foo = 'bar';

       
$obj3 = (object) array(1,2,"Test\r\n",4,5,6,7,8);

       
$obj = new \stdClass();
       
//@codingStandardsIgnoreStart
       
$obj->null = null;
       
//@codingStandardsIgnoreEnd
       
$obj->boolean     = true;
       
$obj->integer     = 1;
       
$obj->double      = 1.2;
       
$obj->string      = '1';
       
$obj->text        = "this\nis\na\nvery\nvery\nvery\nvery\nvery\nvery\rlong\n\rtext";
       
$obj->object      = $obj2;
       
$obj->objectagain = $obj2;
       
$obj->array       = array('foo' => 'bar');
       
$obj->array2      = array(1,2,3,4,5,6);
       
$obj->array3      = array($obj, $obj2, $obj3);
       
$obj->self        = $obj;

       
$storage = new \SplObjectStorage();
       
$storage->attach($obj2);
       
$storage->foo = $obj2;

        return array(
            array(
$obj, spl_object_hash($obj)),
            array(
$obj2, spl_object_hash($obj2)),
            array(
$obj3, spl_object_hash($obj3)),
            array(
$storage, spl_object_hash($storage)),
            array(
$obj->array, 0),
            array(
$obj->array2, 0),
            array(
$obj->array3, 0)
        );
    }

   
/**
     * @covers       SebastianBergmann\RecursionContext\Context::add
     * @uses         SebastianBergmann\RecursionContext\InvalidArgumentException
     * @dataProvider failsProvider
     */
   
public function testAddFails($value)
    {
       
$this->expectException(Exception::class);
       
$this->expectExceptionMessage('Only arrays and objects are supported');

       
$this->context->add($value);
    }

   
/**
     * @covers       SebastianBergmann\RecursionContext\Context::contains
     * @uses         SebastianBergmann\RecursionContext\InvalidArgumentException
     * @dataProvider failsProvider
     */
   
public function testContainsFails($value)
    {
       
$this->expectException(Exception::class);
       
$this->expectExceptionMessage('Only arrays and objects are supported');

       
$this->context->contains($value);
    }

   
/**
     * @covers       SebastianBergmann\RecursionContext\Context::add
     * @dataProvider valuesProvider
     */
   
public function testAdd($value, $key)
    {
       
$this->assertEquals($key, $this->context->add($value));

       
// Test we get the same key on subsequent adds
       
$this->assertEquals($key, $this->context->add($value));
    }

   
/**
     * @covers       SebastianBergmann\RecursionContext\Context::contains
     * @uses         SebastianBergmann\RecursionContext\Context::add
     * @depends      testAdd
     * @dataProvider valuesProvider
     */
   
public function testContainsFound($value, $key)
    {
       
$this->context->add($value);
       
$this->assertEquals($key, $this->context->contains($value));

       
// Test we get the same key on subsequent calls
       
$this->assertEquals($key, $this->context->contains($value));
    }

   
/**
     * @covers       SebastianBergmann\RecursionContext\Context::contains
     * @dataProvider valuesProvider
     */
   
public function testContainsNotFound($value)
    {
       
$this->assertFalse($this->context->contains($value));
    }
}