Chris@14: Chris@14: * Chris@14: * For the full copyright and license information, please view the LICENSE Chris@14: * file that was distributed with this source code. Chris@14: */ Chris@14: Chris@14: namespace SebastianBergmann\ObjectEnumerator; Chris@14: Chris@14: use SebastianBergmann\ObjectEnumerator\Fixtures\ExceptionThrower; Chris@14: use PHPUnit\Framework\TestCase; Chris@14: Chris@14: /** Chris@14: * @covers SebastianBergmann\ObjectEnumerator\Enumerator Chris@14: */ Chris@14: class EnumeratorTest extends TestCase Chris@14: { Chris@14: /** Chris@14: * @var Enumerator Chris@14: */ Chris@14: private $enumerator; Chris@14: Chris@14: protected function setUp() Chris@14: { Chris@14: $this->enumerator = new Enumerator; Chris@14: } Chris@14: Chris@14: public function testEnumeratesSingleObject() Chris@14: { Chris@14: $a = new \stdClass; Chris@14: Chris@14: $objects = $this->enumerator->enumerate($a); Chris@14: Chris@14: $this->assertCount(1, $objects); Chris@14: $this->assertSame($a, $objects[0]); Chris@14: } Chris@14: Chris@14: public function testEnumeratesArrayWithSingleObject() Chris@14: { Chris@14: $a = new \stdClass; Chris@14: Chris@14: $objects = $this->enumerator->enumerate([$a]); Chris@14: Chris@14: $this->assertCount(1, $objects); Chris@14: $this->assertSame($a, $objects[0]); Chris@14: } Chris@14: Chris@14: public function testEnumeratesArrayWithTwoReferencesToTheSameObject() Chris@14: { Chris@14: $a = new \stdClass; Chris@14: Chris@14: $objects = $this->enumerator->enumerate([$a, $a]); Chris@14: Chris@14: $this->assertCount(1, $objects); Chris@14: $this->assertSame($a, $objects[0]); Chris@14: } Chris@14: Chris@14: public function testEnumeratesArrayOfObjects() Chris@14: { Chris@14: $a = new \stdClass; Chris@14: $b = new \stdClass; Chris@14: Chris@14: $objects = $this->enumerator->enumerate([$a, $b, null]); Chris@14: Chris@14: $this->assertCount(2, $objects); Chris@14: $this->assertSame($a, $objects[0]); Chris@14: $this->assertSame($b, $objects[1]); Chris@14: } Chris@14: Chris@14: public function testEnumeratesObjectWithAggregatedObject() Chris@14: { Chris@14: $a = new \stdClass; Chris@14: $b = new \stdClass; Chris@14: Chris@14: $a->b = $b; Chris@14: $a->c = null; Chris@14: Chris@14: $objects = $this->enumerator->enumerate($a); Chris@14: Chris@14: $this->assertCount(2, $objects); Chris@14: $this->assertSame($a, $objects[0]); Chris@14: $this->assertSame($b, $objects[1]); Chris@14: } Chris@14: Chris@14: public function testEnumeratesObjectWithAggregatedObjectsInArray() Chris@14: { Chris@14: $a = new \stdClass; Chris@14: $b = new \stdClass; Chris@14: Chris@14: $a->b = [$b]; Chris@14: Chris@14: $objects = $this->enumerator->enumerate($a); Chris@14: Chris@14: $this->assertCount(2, $objects); Chris@14: $this->assertSame($a, $objects[0]); Chris@14: $this->assertSame($b, $objects[1]); Chris@14: } Chris@14: Chris@14: public function testEnumeratesObjectsWithCyclicReferences() Chris@14: { Chris@14: $a = new \stdClass; Chris@14: $b = new \stdClass; Chris@14: Chris@14: $a->b = $b; Chris@14: $b->a = $a; Chris@14: Chris@14: $objects = $this->enumerator->enumerate([$a, $b]); Chris@14: Chris@14: $this->assertCount(2, $objects); Chris@14: $this->assertSame($a, $objects[0]); Chris@14: $this->assertSame($b, $objects[1]); Chris@14: } Chris@14: Chris@14: public function testEnumeratesClassThatThrowsException() Chris@14: { Chris@14: $thrower = new ExceptionThrower(); Chris@14: Chris@14: $objects = $this->enumerator->enumerate($thrower); Chris@14: Chris@14: $this->assertSame($thrower, $objects[0]); Chris@14: } Chris@14: Chris@14: public function testExceptionIsRaisedForInvalidArgument() Chris@14: { Chris@14: $this->expectException(InvalidArgumentException::class); Chris@14: Chris@14: $this->enumerator->enumerate(null); Chris@14: } Chris@14: Chris@14: public function testExceptionIsRaisedForInvalidArgument2() Chris@14: { Chris@14: $this->expectException(InvalidArgumentException::class); Chris@14: Chris@14: $this->enumerator->enumerate([], ''); Chris@14: } Chris@14: }