| 
<?php/*
 * This file is part of the Recursion Context package.
 *
 * (c) Sebastian Bergmann <[email protected]>
 *
 * 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 PHPUnit_Framework_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->setExpectedException(
 'SebastianBergmann\\RecursionContext\\Exception',
 '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->setExpectedException(
 'SebastianBergmann\\RecursionContext\\Exception',
 '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));
 }
 }
 
 |