143 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			143 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			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));
 | |
|     }
 | |
| }
 | 
