Chris@14
|
1 <?php
|
Chris@14
|
2 /*
|
Chris@14
|
3 * This file is part of Object Enumerator.
|
Chris@14
|
4 *
|
Chris@14
|
5 * (c) Sebastian Bergmann <sebastian@phpunit.de>
|
Chris@14
|
6 *
|
Chris@14
|
7 * For the full copyright and license information, please view the LICENSE
|
Chris@14
|
8 * file that was distributed with this source code.
|
Chris@14
|
9 */
|
Chris@14
|
10
|
Chris@14
|
11 namespace SebastianBergmann\ObjectEnumerator;
|
Chris@14
|
12
|
Chris@14
|
13 use SebastianBergmann\ObjectEnumerator\Fixtures\ExceptionThrower;
|
Chris@14
|
14 use PHPUnit\Framework\TestCase;
|
Chris@14
|
15
|
Chris@14
|
16 /**
|
Chris@14
|
17 * @covers SebastianBergmann\ObjectEnumerator\Enumerator
|
Chris@14
|
18 */
|
Chris@14
|
19 class EnumeratorTest extends TestCase
|
Chris@14
|
20 {
|
Chris@14
|
21 /**
|
Chris@14
|
22 * @var Enumerator
|
Chris@14
|
23 */
|
Chris@14
|
24 private $enumerator;
|
Chris@14
|
25
|
Chris@14
|
26 protected function setUp()
|
Chris@14
|
27 {
|
Chris@14
|
28 $this->enumerator = new Enumerator;
|
Chris@14
|
29 }
|
Chris@14
|
30
|
Chris@14
|
31 public function testEnumeratesSingleObject()
|
Chris@14
|
32 {
|
Chris@14
|
33 $a = new \stdClass;
|
Chris@14
|
34
|
Chris@14
|
35 $objects = $this->enumerator->enumerate($a);
|
Chris@14
|
36
|
Chris@14
|
37 $this->assertCount(1, $objects);
|
Chris@14
|
38 $this->assertSame($a, $objects[0]);
|
Chris@14
|
39 }
|
Chris@14
|
40
|
Chris@14
|
41 public function testEnumeratesArrayWithSingleObject()
|
Chris@14
|
42 {
|
Chris@14
|
43 $a = new \stdClass;
|
Chris@14
|
44
|
Chris@14
|
45 $objects = $this->enumerator->enumerate([$a]);
|
Chris@14
|
46
|
Chris@14
|
47 $this->assertCount(1, $objects);
|
Chris@14
|
48 $this->assertSame($a, $objects[0]);
|
Chris@14
|
49 }
|
Chris@14
|
50
|
Chris@14
|
51 public function testEnumeratesArrayWithTwoReferencesToTheSameObject()
|
Chris@14
|
52 {
|
Chris@14
|
53 $a = new \stdClass;
|
Chris@14
|
54
|
Chris@14
|
55 $objects = $this->enumerator->enumerate([$a, $a]);
|
Chris@14
|
56
|
Chris@14
|
57 $this->assertCount(1, $objects);
|
Chris@14
|
58 $this->assertSame($a, $objects[0]);
|
Chris@14
|
59 }
|
Chris@14
|
60
|
Chris@14
|
61 public function testEnumeratesArrayOfObjects()
|
Chris@14
|
62 {
|
Chris@14
|
63 $a = new \stdClass;
|
Chris@14
|
64 $b = new \stdClass;
|
Chris@14
|
65
|
Chris@14
|
66 $objects = $this->enumerator->enumerate([$a, $b, null]);
|
Chris@14
|
67
|
Chris@14
|
68 $this->assertCount(2, $objects);
|
Chris@14
|
69 $this->assertSame($a, $objects[0]);
|
Chris@14
|
70 $this->assertSame($b, $objects[1]);
|
Chris@14
|
71 }
|
Chris@14
|
72
|
Chris@14
|
73 public function testEnumeratesObjectWithAggregatedObject()
|
Chris@14
|
74 {
|
Chris@14
|
75 $a = new \stdClass;
|
Chris@14
|
76 $b = new \stdClass;
|
Chris@14
|
77
|
Chris@14
|
78 $a->b = $b;
|
Chris@14
|
79 $a->c = null;
|
Chris@14
|
80
|
Chris@14
|
81 $objects = $this->enumerator->enumerate($a);
|
Chris@14
|
82
|
Chris@14
|
83 $this->assertCount(2, $objects);
|
Chris@14
|
84 $this->assertSame($a, $objects[0]);
|
Chris@14
|
85 $this->assertSame($b, $objects[1]);
|
Chris@14
|
86 }
|
Chris@14
|
87
|
Chris@14
|
88 public function testEnumeratesObjectWithAggregatedObjectsInArray()
|
Chris@14
|
89 {
|
Chris@14
|
90 $a = new \stdClass;
|
Chris@14
|
91 $b = new \stdClass;
|
Chris@14
|
92
|
Chris@14
|
93 $a->b = [$b];
|
Chris@14
|
94
|
Chris@14
|
95 $objects = $this->enumerator->enumerate($a);
|
Chris@14
|
96
|
Chris@14
|
97 $this->assertCount(2, $objects);
|
Chris@14
|
98 $this->assertSame($a, $objects[0]);
|
Chris@14
|
99 $this->assertSame($b, $objects[1]);
|
Chris@14
|
100 }
|
Chris@14
|
101
|
Chris@14
|
102 public function testEnumeratesObjectsWithCyclicReferences()
|
Chris@14
|
103 {
|
Chris@14
|
104 $a = new \stdClass;
|
Chris@14
|
105 $b = new \stdClass;
|
Chris@14
|
106
|
Chris@14
|
107 $a->b = $b;
|
Chris@14
|
108 $b->a = $a;
|
Chris@14
|
109
|
Chris@14
|
110 $objects = $this->enumerator->enumerate([$a, $b]);
|
Chris@14
|
111
|
Chris@14
|
112 $this->assertCount(2, $objects);
|
Chris@14
|
113 $this->assertSame($a, $objects[0]);
|
Chris@14
|
114 $this->assertSame($b, $objects[1]);
|
Chris@14
|
115 }
|
Chris@14
|
116
|
Chris@14
|
117 public function testEnumeratesClassThatThrowsException()
|
Chris@14
|
118 {
|
Chris@14
|
119 $thrower = new ExceptionThrower();
|
Chris@14
|
120
|
Chris@14
|
121 $objects = $this->enumerator->enumerate($thrower);
|
Chris@14
|
122
|
Chris@14
|
123 $this->assertSame($thrower, $objects[0]);
|
Chris@14
|
124 }
|
Chris@14
|
125
|
Chris@14
|
126 public function testExceptionIsRaisedForInvalidArgument()
|
Chris@14
|
127 {
|
Chris@14
|
128 $this->expectException(InvalidArgumentException::class);
|
Chris@14
|
129
|
Chris@14
|
130 $this->enumerator->enumerate(null);
|
Chris@14
|
131 }
|
Chris@14
|
132
|
Chris@14
|
133 public function testExceptionIsRaisedForInvalidArgument2()
|
Chris@14
|
134 {
|
Chris@14
|
135 $this->expectException(InvalidArgumentException::class);
|
Chris@14
|
136
|
Chris@14
|
137 $this->enumerator->enumerate([], '');
|
Chris@14
|
138 }
|
Chris@14
|
139 }
|