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@0
|
40 "IS_EXPLICIT_ABSTRACT" => 32
|
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@12
|
88 public function testClosureCasterExcludingVerbosity()
|
Chris@12
|
89 {
|
Chris@12
|
90 $var = function () {};
|
Chris@12
|
91
|
Chris@12
|
92 $expectedDump = <<<EOTXT
|
Chris@12
|
93 Closure {
|
Chris@12
|
94 class: "Symfony\Component\VarDumper\Tests\Caster\ReflectionCasterTest"
|
Chris@12
|
95 this: Symfony\Component\VarDumper\Tests\Caster\ReflectionCasterTest { …}
|
Chris@12
|
96 }
|
Chris@12
|
97 EOTXT;
|
Chris@12
|
98
|
Chris@12
|
99 $this->assertDumpEquals($expectedDump, $var, Caster::EXCLUDE_VERBOSE);
|
Chris@12
|
100 }
|
Chris@12
|
101
|
Chris@0
|
102 public function testReflectionParameter()
|
Chris@0
|
103 {
|
Chris@0
|
104 $var = new \ReflectionParameter(__NAMESPACE__.'\reflectionParameterFixture', 0);
|
Chris@0
|
105
|
Chris@0
|
106 $this->assertDumpMatchesFormat(
|
Chris@0
|
107 <<<'EOTXT'
|
Chris@0
|
108 ReflectionParameter {
|
Chris@0
|
109 +name: "arg1"
|
Chris@0
|
110 position: 0
|
Chris@0
|
111 typeHint: "Symfony\Component\VarDumper\Tests\Fixtures\NotLoadableClass"
|
Chris@0
|
112 default: null
|
Chris@0
|
113 }
|
Chris@0
|
114 EOTXT
|
Chris@0
|
115 , $var
|
Chris@0
|
116 );
|
Chris@0
|
117 }
|
Chris@0
|
118
|
Chris@0
|
119 /**
|
Chris@0
|
120 * @requires PHP 7.0
|
Chris@0
|
121 */
|
Chris@0
|
122 public function testReflectionParameterScalar()
|
Chris@0
|
123 {
|
Chris@0
|
124 $f = eval('return function (int $a) {};');
|
Chris@0
|
125 $var = new \ReflectionParameter($f, 0);
|
Chris@0
|
126
|
Chris@0
|
127 $this->assertDumpMatchesFormat(
|
Chris@0
|
128 <<<'EOTXT'
|
Chris@0
|
129 ReflectionParameter {
|
Chris@0
|
130 +name: "a"
|
Chris@0
|
131 position: 0
|
Chris@0
|
132 typeHint: "int"
|
Chris@0
|
133 }
|
Chris@0
|
134 EOTXT
|
Chris@0
|
135 , $var
|
Chris@0
|
136 );
|
Chris@0
|
137 }
|
Chris@0
|
138
|
Chris@0
|
139 /**
|
Chris@0
|
140 * @requires PHP 7.0
|
Chris@0
|
141 */
|
Chris@0
|
142 public function testReturnType()
|
Chris@0
|
143 {
|
Chris@0
|
144 $f = eval('return function ():int {};');
|
Chris@0
|
145 $line = __LINE__ - 1;
|
Chris@0
|
146
|
Chris@0
|
147 $this->assertDumpMatchesFormat(
|
Chris@0
|
148 <<<EOTXT
|
Chris@0
|
149 Closure {
|
Chris@0
|
150 returnType: "int"
|
Chris@0
|
151 class: "Symfony\Component\VarDumper\Tests\Caster\ReflectionCasterTest"
|
Chris@0
|
152 this: Symfony\Component\VarDumper\Tests\Caster\ReflectionCasterTest { …}
|
Chris@0
|
153 file: "%sReflectionCasterTest.php($line) : eval()'d code"
|
Chris@0
|
154 line: "1 to 1"
|
Chris@0
|
155 }
|
Chris@0
|
156 EOTXT
|
Chris@0
|
157 , $f
|
Chris@0
|
158 );
|
Chris@0
|
159 }
|
Chris@0
|
160
|
Chris@0
|
161 /**
|
Chris@0
|
162 * @requires PHP 7.0
|
Chris@0
|
163 */
|
Chris@0
|
164 public function testGenerator()
|
Chris@0
|
165 {
|
Chris@0
|
166 if (extension_loaded('xdebug')) {
|
Chris@0
|
167 $this->markTestSkipped('xdebug is active');
|
Chris@0
|
168 }
|
Chris@0
|
169
|
Chris@0
|
170 $generator = new GeneratorDemo();
|
Chris@0
|
171 $generator = $generator->baz();
|
Chris@0
|
172
|
Chris@0
|
173 $expectedDump = <<<'EODUMP'
|
Chris@0
|
174 Generator {
|
Chris@0
|
175 this: Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo { …}
|
Chris@0
|
176 executing: {
|
Chris@12
|
177 Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo->baz() {
|
Chris@12
|
178 %sGeneratorDemo.php:14 {
|
Chris@12
|
179 › {
|
Chris@12
|
180 › yield from bar();
|
Chris@12
|
181 › }
|
Chris@0
|
182 }
|
Chris@0
|
183 }
|
Chris@0
|
184 }
|
Chris@0
|
185 closed: false
|
Chris@0
|
186 }
|
Chris@0
|
187 EODUMP;
|
Chris@0
|
188
|
Chris@0
|
189 $this->assertDumpMatchesFormat($expectedDump, $generator);
|
Chris@0
|
190
|
Chris@0
|
191 foreach ($generator as $v) {
|
Chris@0
|
192 break;
|
Chris@0
|
193 }
|
Chris@0
|
194
|
Chris@0
|
195 $expectedDump = <<<'EODUMP'
|
Chris@0
|
196 array:2 [
|
Chris@0
|
197 0 => ReflectionGenerator {
|
Chris@0
|
198 this: Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo { …}
|
Chris@0
|
199 trace: {
|
Chris@12
|
200 %s%eTests%eFixtures%eGeneratorDemo.php:9 {
|
Chris@12
|
201 › {
|
Chris@12
|
202 › yield 1;
|
Chris@12
|
203 › }
|
Chris@0
|
204 }
|
Chris@12
|
205 %s%eTests%eFixtures%eGeneratorDemo.php:20 { …}
|
Chris@12
|
206 %s%eTests%eFixtures%eGeneratorDemo.php:14 { …}
|
Chris@0
|
207 }
|
Chris@0
|
208 closed: false
|
Chris@0
|
209 }
|
Chris@0
|
210 1 => Generator {
|
Chris@0
|
211 executing: {
|
Chris@12
|
212 Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo::foo() {
|
Chris@12
|
213 %sGeneratorDemo.php:10 {
|
Chris@12
|
214 › yield 1;
|
Chris@12
|
215 › }
|
Chris@12
|
216 ›
|
Chris@0
|
217 }
|
Chris@0
|
218 }
|
Chris@0
|
219 }
|
Chris@0
|
220 closed: false
|
Chris@0
|
221 }
|
Chris@0
|
222 ]
|
Chris@0
|
223 EODUMP;
|
Chris@0
|
224
|
Chris@0
|
225 $r = new \ReflectionGenerator($generator);
|
Chris@0
|
226 $this->assertDumpMatchesFormat($expectedDump, array($r, $r->getExecutingGenerator()));
|
Chris@0
|
227
|
Chris@0
|
228 foreach ($generator as $v) {
|
Chris@0
|
229 }
|
Chris@0
|
230
|
Chris@0
|
231 $expectedDump = <<<'EODUMP'
|
Chris@0
|
232 Generator {
|
Chris@0
|
233 closed: true
|
Chris@0
|
234 }
|
Chris@0
|
235 EODUMP;
|
Chris@0
|
236 $this->assertDumpMatchesFormat($expectedDump, $generator);
|
Chris@0
|
237 }
|
Chris@0
|
238 }
|
Chris@0
|
239
|
Chris@0
|
240 function reflectionParameterFixture(NotLoadableClass $arg1 = null, $arg2)
|
Chris@0
|
241 {
|
Chris@0
|
242 }
|