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));
|
||
|
}
|
||
|
}
|