Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 /*
|
Chris@0
|
4 * This file is part of the Symfony package.
|
Chris@0
|
5 *
|
Chris@0
|
6 * (c) Fabien Potencier <fabien@symfony.com>
|
Chris@0
|
7 *
|
Chris@0
|
8 * For the full copyright and license information, please view the LICENSE
|
Chris@0
|
9 * file that was distributed with this source code.
|
Chris@0
|
10 */
|
Chris@0
|
11
|
Chris@0
|
12 namespace Symfony\Component\VarDumper\Tests\Caster;
|
Chris@0
|
13
|
Chris@0
|
14 use PHPUnit\Framework\TestCase;
|
Chris@12
|
15 use Symfony\Component\VarDumper\Caster\Caster;
|
Chris@0
|
16 use Symfony\Component\VarDumper\Test\VarDumperTestTrait;
|
Chris@0
|
17 use Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo;
|
Chris@0
|
18 use Symfony\Component\VarDumper\Tests\Fixtures\NotLoadableClass;
|
Chris@0
|
19
|
Chris@0
|
20 /**
|
Chris@0
|
21 * @author Nicolas Grekas <p@tchwork.com>
|
Chris@0
|
22 */
|
Chris@0
|
23 class ReflectionCasterTest extends TestCase
|
Chris@0
|
24 {
|
Chris@0
|
25 use VarDumperTestTrait;
|
Chris@0
|
26
|
Chris@0
|
27 public function testReflectionCaster()
|
Chris@0
|
28 {
|
Chris@0
|
29 $var = new \ReflectionClass('ReflectionClass');
|
Chris@0
|
30
|
Chris@0
|
31 $this->assertDumpMatchesFormat(
|
Chris@0
|
32 <<<'EOTXT'
|
Chris@0
|
33 ReflectionClass {
|
Chris@0
|
34 +name: "ReflectionClass"
|
Chris@0
|
35 %Aimplements: array:%d [
|
Chris@0
|
36 0 => "Reflector"
|
Chris@0
|
37 %A]
|
Chris@0
|
38 constants: array:3 [
|
Chris@0
|
39 "IS_IMPLICIT_ABSTRACT" => 16
|
Chris@18
|
40 "IS_EXPLICIT_ABSTRACT" => %d
|
Chris@0
|
41 "IS_FINAL" => %d
|
Chris@0
|
42 ]
|
Chris@0
|
43 properties: array:%d [
|
Chris@0
|
44 "name" => ReflectionProperty {
|
Chris@0
|
45 %A +name: "name"
|
Chris@0
|
46 +class: "ReflectionClass"
|
Chris@0
|
47 %A modifiers: "public"
|
Chris@0
|
48 }
|
Chris@0
|
49 %A]
|
Chris@0
|
50 methods: array:%d [
|
Chris@0
|
51 %A
|
Chris@0
|
52 "export" => ReflectionMethod {
|
Chris@0
|
53 +name: "export"
|
Chris@0
|
54 +class: "ReflectionClass"
|
Chris@0
|
55 %A parameters: {
|
Chris@0
|
56 $%s: ReflectionParameter {
|
Chris@0
|
57 %A position: 0
|
Chris@0
|
58 %A
|
Chris@0
|
59 }
|
Chris@0
|
60 EOTXT
|
Chris@0
|
61 , $var
|
Chris@0
|
62 );
|
Chris@0
|
63 }
|
Chris@0
|
64
|
Chris@0
|
65 public function testClosureCaster()
|
Chris@0
|
66 {
|
Chris@0
|
67 $a = $b = 123;
|
Chris@0
|
68 $var = function ($x) use ($a, &$b) {};
|
Chris@0
|
69
|
Chris@0
|
70 $this->assertDumpMatchesFormat(
|
Chris@0
|
71 <<<EOTXT
|
Chris@0
|
72 Closure {
|
Chris@0
|
73 %Aparameters: {
|
Chris@0
|
74 \$x: {}
|
Chris@0
|
75 }
|
Chris@0
|
76 use: {
|
Chris@0
|
77 \$a: 123
|
Chris@0
|
78 \$b: & 123
|
Chris@0
|
79 }
|
Chris@0
|
80 file: "%sReflectionCasterTest.php"
|
Chris@12
|
81 line: "68 to 68"
|
Chris@0
|
82 }
|
Chris@0
|
83 EOTXT
|
Chris@0
|
84 , $var
|
Chris@0
|
85 );
|
Chris@0
|
86 }
|
Chris@0
|
87
|
Chris@17
|
88 public function testFromCallableClosureCaster()
|
Chris@17
|
89 {
|
Chris@17
|
90 if (\defined('HHVM_VERSION_ID')) {
|
Chris@17
|
91 $this->markTestSkipped('Not for HHVM.');
|
Chris@17
|
92 }
|
Chris@17
|
93 $var = [
|
Chris@17
|
94 (new \ReflectionMethod($this, __FUNCTION__))->getClosure($this),
|
Chris@17
|
95 (new \ReflectionMethod(__CLASS__, 'tearDownAfterClass'))->getClosure(),
|
Chris@17
|
96 ];
|
Chris@17
|
97
|
Chris@17
|
98 $this->assertDumpMatchesFormat(
|
Chris@17
|
99 <<<EOTXT
|
Chris@17
|
100 array:2 [
|
Chris@17
|
101 0 => Symfony\Component\VarDumper\Tests\Caster\ReflectionCasterTest::testFromCallableClosureCaster {
|
Chris@17
|
102 this: Symfony\Component\VarDumper\Tests\Caster\ReflectionCasterTest { …}
|
Chris@17
|
103 file: "%sReflectionCasterTest.php"
|
Chris@17
|
104 line: "%d to %d"
|
Chris@17
|
105 }
|
Chris@17
|
106 1 => %sTestCase::tearDownAfterClass {
|
Chris@17
|
107 file: "%sTestCase.php"
|
Chris@17
|
108 line: "%d to %d"
|
Chris@17
|
109 }
|
Chris@17
|
110 ]
|
Chris@17
|
111 EOTXT
|
Chris@17
|
112 , $var
|
Chris@17
|
113 );
|
Chris@17
|
114 }
|
Chris@17
|
115
|
Chris@12
|
116 public function testClosureCasterExcludingVerbosity()
|
Chris@12
|
117 {
|
Chris@12
|
118 $var = function () {};
|
Chris@12
|
119
|
Chris@12
|
120 $expectedDump = <<<EOTXT
|
Chris@12
|
121 Closure {
|
Chris@12
|
122 class: "Symfony\Component\VarDumper\Tests\Caster\ReflectionCasterTest"
|
Chris@12
|
123 this: Symfony\Component\VarDumper\Tests\Caster\ReflectionCasterTest { …}
|
Chris@12
|
124 }
|
Chris@12
|
125 EOTXT;
|
Chris@12
|
126
|
Chris@12
|
127 $this->assertDumpEquals($expectedDump, $var, Caster::EXCLUDE_VERBOSE);
|
Chris@12
|
128 }
|
Chris@12
|
129
|
Chris@0
|
130 public function testReflectionParameter()
|
Chris@0
|
131 {
|
Chris@0
|
132 $var = new \ReflectionParameter(__NAMESPACE__.'\reflectionParameterFixture', 0);
|
Chris@0
|
133
|
Chris@0
|
134 $this->assertDumpMatchesFormat(
|
Chris@0
|
135 <<<'EOTXT'
|
Chris@0
|
136 ReflectionParameter {
|
Chris@0
|
137 +name: "arg1"
|
Chris@0
|
138 position: 0
|
Chris@0
|
139 typeHint: "Symfony\Component\VarDumper\Tests\Fixtures\NotLoadableClass"
|
Chris@0
|
140 default: null
|
Chris@0
|
141 }
|
Chris@0
|
142 EOTXT
|
Chris@0
|
143 , $var
|
Chris@0
|
144 );
|
Chris@0
|
145 }
|
Chris@0
|
146
|
Chris@0
|
147 /**
|
Chris@0
|
148 * @requires PHP 7.0
|
Chris@0
|
149 */
|
Chris@0
|
150 public function testReflectionParameterScalar()
|
Chris@0
|
151 {
|
Chris@0
|
152 $f = eval('return function (int $a) {};');
|
Chris@0
|
153 $var = new \ReflectionParameter($f, 0);
|
Chris@0
|
154
|
Chris@0
|
155 $this->assertDumpMatchesFormat(
|
Chris@0
|
156 <<<'EOTXT'
|
Chris@0
|
157 ReflectionParameter {
|
Chris@0
|
158 +name: "a"
|
Chris@0
|
159 position: 0
|
Chris@0
|
160 typeHint: "int"
|
Chris@0
|
161 }
|
Chris@0
|
162 EOTXT
|
Chris@0
|
163 , $var
|
Chris@0
|
164 );
|
Chris@0
|
165 }
|
Chris@0
|
166
|
Chris@0
|
167 /**
|
Chris@0
|
168 * @requires PHP 7.0
|
Chris@0
|
169 */
|
Chris@0
|
170 public function testReturnType()
|
Chris@0
|
171 {
|
Chris@0
|
172 $f = eval('return function ():int {};');
|
Chris@0
|
173 $line = __LINE__ - 1;
|
Chris@0
|
174
|
Chris@0
|
175 $this->assertDumpMatchesFormat(
|
Chris@0
|
176 <<<EOTXT
|
Chris@0
|
177 Closure {
|
Chris@0
|
178 returnType: "int"
|
Chris@0
|
179 class: "Symfony\Component\VarDumper\Tests\Caster\ReflectionCasterTest"
|
Chris@0
|
180 this: Symfony\Component\VarDumper\Tests\Caster\ReflectionCasterTest { …}
|
Chris@0
|
181 file: "%sReflectionCasterTest.php($line) : eval()'d code"
|
Chris@0
|
182 line: "1 to 1"
|
Chris@0
|
183 }
|
Chris@0
|
184 EOTXT
|
Chris@0
|
185 , $f
|
Chris@0
|
186 );
|
Chris@0
|
187 }
|
Chris@0
|
188
|
Chris@0
|
189 /**
|
Chris@0
|
190 * @requires PHP 7.0
|
Chris@0
|
191 */
|
Chris@0
|
192 public function testGenerator()
|
Chris@0
|
193 {
|
Chris@17
|
194 if (\extension_loaded('xdebug')) {
|
Chris@0
|
195 $this->markTestSkipped('xdebug is active');
|
Chris@0
|
196 }
|
Chris@0
|
197
|
Chris@0
|
198 $generator = new GeneratorDemo();
|
Chris@0
|
199 $generator = $generator->baz();
|
Chris@0
|
200
|
Chris@0
|
201 $expectedDump = <<<'EODUMP'
|
Chris@0
|
202 Generator {
|
Chris@0
|
203 this: Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo { …}
|
Chris@0
|
204 executing: {
|
Chris@12
|
205 Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo->baz() {
|
Chris@12
|
206 %sGeneratorDemo.php:14 {
|
Chris@12
|
207 › {
|
Chris@12
|
208 › yield from bar();
|
Chris@12
|
209 › }
|
Chris@0
|
210 }
|
Chris@0
|
211 }
|
Chris@0
|
212 }
|
Chris@0
|
213 closed: false
|
Chris@0
|
214 }
|
Chris@0
|
215 EODUMP;
|
Chris@0
|
216
|
Chris@0
|
217 $this->assertDumpMatchesFormat($expectedDump, $generator);
|
Chris@0
|
218
|
Chris@0
|
219 foreach ($generator as $v) {
|
Chris@0
|
220 break;
|
Chris@0
|
221 }
|
Chris@0
|
222
|
Chris@0
|
223 $expectedDump = <<<'EODUMP'
|
Chris@0
|
224 array:2 [
|
Chris@0
|
225 0 => ReflectionGenerator {
|
Chris@0
|
226 this: Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo { …}
|
Chris@0
|
227 trace: {
|
Chris@12
|
228 %s%eTests%eFixtures%eGeneratorDemo.php:9 {
|
Chris@12
|
229 › {
|
Chris@12
|
230 › yield 1;
|
Chris@12
|
231 › }
|
Chris@0
|
232 }
|
Chris@12
|
233 %s%eTests%eFixtures%eGeneratorDemo.php:20 { …}
|
Chris@12
|
234 %s%eTests%eFixtures%eGeneratorDemo.php:14 { …}
|
Chris@0
|
235 }
|
Chris@0
|
236 closed: false
|
Chris@0
|
237 }
|
Chris@0
|
238 1 => Generator {
|
Chris@0
|
239 executing: {
|
Chris@12
|
240 Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo::foo() {
|
Chris@12
|
241 %sGeneratorDemo.php:10 {
|
Chris@12
|
242 › yield 1;
|
Chris@12
|
243 › }
|
Chris@12
|
244 ›
|
Chris@0
|
245 }
|
Chris@0
|
246 }
|
Chris@0
|
247 }
|
Chris@0
|
248 closed: false
|
Chris@0
|
249 }
|
Chris@0
|
250 ]
|
Chris@0
|
251 EODUMP;
|
Chris@0
|
252
|
Chris@0
|
253 $r = new \ReflectionGenerator($generator);
|
Chris@17
|
254 $this->assertDumpMatchesFormat($expectedDump, [$r, $r->getExecutingGenerator()]);
|
Chris@0
|
255
|
Chris@0
|
256 foreach ($generator as $v) {
|
Chris@0
|
257 }
|
Chris@0
|
258
|
Chris@0
|
259 $expectedDump = <<<'EODUMP'
|
Chris@0
|
260 Generator {
|
Chris@0
|
261 closed: true
|
Chris@0
|
262 }
|
Chris@0
|
263 EODUMP;
|
Chris@0
|
264 $this->assertDumpMatchesFormat($expectedDump, $generator);
|
Chris@0
|
265 }
|
Chris@0
|
266 }
|
Chris@0
|
267
|
Chris@0
|
268 function reflectionParameterFixture(NotLoadableClass $arg1 = null, $arg2)
|
Chris@0
|
269 {
|
Chris@0
|
270 }
|