145 lines
4.1 KiB
PHP
145 lines
4.1 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 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));
|
|
}
|
|
}
|