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\Cloner;
|
Chris@0
|
13
|
Chris@0
|
14 use PHPUnit\Framework\TestCase;
|
Chris@0
|
15 use Symfony\Component\VarDumper\Cloner\VarCloner;
|
Chris@0
|
16
|
Chris@0
|
17 /**
|
Chris@0
|
18 * @author Nicolas Grekas <p@tchwork.com>
|
Chris@0
|
19 */
|
Chris@0
|
20 class VarClonerTest extends TestCase
|
Chris@0
|
21 {
|
Chris@0
|
22 public function testMaxIntBoundary()
|
Chris@0
|
23 {
|
Chris@0
|
24 $data = array(PHP_INT_MAX => 123);
|
Chris@0
|
25
|
Chris@0
|
26 $cloner = new VarCloner();
|
Chris@0
|
27 $clone = $cloner->cloneVar($data);
|
Chris@0
|
28
|
Chris@0
|
29 $expected = <<<EOTXT
|
Chris@0
|
30 Symfony\Component\VarDumper\Cloner\Data Object
|
Chris@0
|
31 (
|
Chris@0
|
32 [data:Symfony\Component\VarDumper\Cloner\Data:private] => Array
|
Chris@0
|
33 (
|
Chris@0
|
34 [0] => Array
|
Chris@0
|
35 (
|
Chris@0
|
36 [0] => Array
|
Chris@0
|
37 (
|
Chris@0
|
38 [1] => 1
|
Chris@0
|
39 )
|
Chris@0
|
40
|
Chris@0
|
41 )
|
Chris@0
|
42
|
Chris@0
|
43 [1] => Array
|
Chris@0
|
44 (
|
Chris@0
|
45 [%s] => 123
|
Chris@0
|
46 )
|
Chris@0
|
47
|
Chris@0
|
48 )
|
Chris@0
|
49
|
Chris@0
|
50 [position:Symfony\Component\VarDumper\Cloner\Data:private] => 0
|
Chris@0
|
51 [key:Symfony\Component\VarDumper\Cloner\Data:private] => 0
|
Chris@0
|
52 [maxDepth:Symfony\Component\VarDumper\Cloner\Data:private] => 20
|
Chris@0
|
53 [maxItemsPerDepth:Symfony\Component\VarDumper\Cloner\Data:private] => -1
|
Chris@0
|
54 [useRefHandles:Symfony\Component\VarDumper\Cloner\Data:private] => -1
|
Chris@0
|
55 )
|
Chris@0
|
56
|
Chris@0
|
57 EOTXT;
|
Chris@0
|
58 $this->assertSame(sprintf($expected, PHP_INT_MAX), print_r($clone, true));
|
Chris@0
|
59 }
|
Chris@0
|
60
|
Chris@0
|
61 public function testClone()
|
Chris@0
|
62 {
|
Chris@0
|
63 $json = json_decode('{"1":{"var":"val"},"2":{"var":"val"}}');
|
Chris@0
|
64
|
Chris@0
|
65 $cloner = new VarCloner();
|
Chris@0
|
66 $clone = $cloner->cloneVar($json);
|
Chris@0
|
67
|
Chris@0
|
68 $expected = <<<EOTXT
|
Chris@0
|
69 Symfony\Component\VarDumper\Cloner\Data Object
|
Chris@0
|
70 (
|
Chris@0
|
71 [data:Symfony\Component\VarDumper\Cloner\Data:private] => Array
|
Chris@0
|
72 (
|
Chris@0
|
73 [0] => Array
|
Chris@0
|
74 (
|
Chris@0
|
75 [0] => Symfony\Component\VarDumper\Cloner\Stub Object
|
Chris@0
|
76 (
|
Chris@0
|
77 [type] => 4
|
Chris@0
|
78 [class] => stdClass
|
Chris@0
|
79 [value] =>
|
Chris@0
|
80 [cut] => 0
|
Chris@0
|
81 [handle] => %i
|
Chris@0
|
82 [refCount] => 0
|
Chris@0
|
83 [position] => 1
|
Chris@0
|
84 [attr] => Array
|
Chris@0
|
85 (
|
Chris@0
|
86 )
|
Chris@0
|
87
|
Chris@0
|
88 )
|
Chris@0
|
89
|
Chris@0
|
90 )
|
Chris@0
|
91
|
Chris@0
|
92 [1] => Array
|
Chris@0
|
93 (
|
Chris@0
|
94 [\000+\0001] => Symfony\Component\VarDumper\Cloner\Stub Object
|
Chris@0
|
95 (
|
Chris@0
|
96 [type] => 4
|
Chris@0
|
97 [class] => stdClass
|
Chris@0
|
98 [value] =>
|
Chris@0
|
99 [cut] => 0
|
Chris@0
|
100 [handle] => %i
|
Chris@0
|
101 [refCount] => 0
|
Chris@0
|
102 [position] => 2
|
Chris@0
|
103 [attr] => Array
|
Chris@0
|
104 (
|
Chris@0
|
105 )
|
Chris@0
|
106
|
Chris@0
|
107 )
|
Chris@0
|
108
|
Chris@0
|
109 [\000+\0002] => Symfony\Component\VarDumper\Cloner\Stub Object
|
Chris@0
|
110 (
|
Chris@0
|
111 [type] => 4
|
Chris@0
|
112 [class] => stdClass
|
Chris@0
|
113 [value] =>
|
Chris@0
|
114 [cut] => 0
|
Chris@0
|
115 [handle] => %i
|
Chris@0
|
116 [refCount] => 0
|
Chris@0
|
117 [position] => 3
|
Chris@0
|
118 [attr] => Array
|
Chris@0
|
119 (
|
Chris@0
|
120 )
|
Chris@0
|
121
|
Chris@0
|
122 )
|
Chris@0
|
123
|
Chris@0
|
124 )
|
Chris@0
|
125
|
Chris@0
|
126 [2] => Array
|
Chris@0
|
127 (
|
Chris@0
|
128 [\000+\000var] => val
|
Chris@0
|
129 )
|
Chris@0
|
130
|
Chris@0
|
131 [3] => Array
|
Chris@0
|
132 (
|
Chris@0
|
133 [\000+\000var] => val
|
Chris@0
|
134 )
|
Chris@0
|
135
|
Chris@0
|
136 )
|
Chris@0
|
137
|
Chris@0
|
138 [position:Symfony\Component\VarDumper\Cloner\Data:private] => 0
|
Chris@0
|
139 [key:Symfony\Component\VarDumper\Cloner\Data:private] => 0
|
Chris@0
|
140 [maxDepth:Symfony\Component\VarDumper\Cloner\Data:private] => 20
|
Chris@0
|
141 [maxItemsPerDepth:Symfony\Component\VarDumper\Cloner\Data:private] => -1
|
Chris@0
|
142 [useRefHandles:Symfony\Component\VarDumper\Cloner\Data:private] => -1
|
Chris@0
|
143 )
|
Chris@0
|
144
|
Chris@0
|
145 EOTXT;
|
Chris@0
|
146 $this->assertStringMatchesFormat($expected, print_r($clone, true));
|
Chris@0
|
147 }
|
Chris@0
|
148
|
Chris@0
|
149 public function testJsonCast()
|
Chris@0
|
150 {
|
Chris@0
|
151 if (2 == ini_get('xdebug.overload_var_dump')) {
|
Chris@0
|
152 $this->markTestSkipped('xdebug is active');
|
Chris@0
|
153 }
|
Chris@0
|
154
|
Chris@0
|
155 $data = (array) json_decode('{"1":{}}');
|
Chris@0
|
156
|
Chris@0
|
157 $cloner = new VarCloner();
|
Chris@0
|
158 $clone = $cloner->cloneVar($data);
|
Chris@0
|
159
|
Chris@0
|
160 $expected = <<<'EOTXT'
|
Chris@0
|
161 object(Symfony\Component\VarDumper\Cloner\Data)#%i (6) {
|
Chris@0
|
162 ["data":"Symfony\Component\VarDumper\Cloner\Data":private]=>
|
Chris@0
|
163 array(2) {
|
Chris@0
|
164 [0]=>
|
Chris@0
|
165 array(1) {
|
Chris@0
|
166 [0]=>
|
Chris@0
|
167 array(1) {
|
Chris@0
|
168 [1]=>
|
Chris@0
|
169 int(1)
|
Chris@0
|
170 }
|
Chris@0
|
171 }
|
Chris@0
|
172 [1]=>
|
Chris@0
|
173 array(1) {
|
Chris@0
|
174 ["1"]=>
|
Chris@0
|
175 object(Symfony\Component\VarDumper\Cloner\Stub)#%i (8) {
|
Chris@0
|
176 ["type"]=>
|
Chris@0
|
177 int(4)
|
Chris@0
|
178 ["class"]=>
|
Chris@0
|
179 string(8) "stdClass"
|
Chris@0
|
180 ["value"]=>
|
Chris@0
|
181 NULL
|
Chris@0
|
182 ["cut"]=>
|
Chris@0
|
183 int(0)
|
Chris@0
|
184 ["handle"]=>
|
Chris@0
|
185 int(%i)
|
Chris@0
|
186 ["refCount"]=>
|
Chris@0
|
187 int(0)
|
Chris@0
|
188 ["position"]=>
|
Chris@0
|
189 int(0)
|
Chris@0
|
190 ["attr"]=>
|
Chris@0
|
191 array(0) {
|
Chris@0
|
192 }
|
Chris@0
|
193 }
|
Chris@0
|
194 }
|
Chris@0
|
195 }
|
Chris@0
|
196 ["position":"Symfony\Component\VarDumper\Cloner\Data":private]=>
|
Chris@0
|
197 int(0)
|
Chris@0
|
198 ["key":"Symfony\Component\VarDumper\Cloner\Data":private]=>
|
Chris@0
|
199 int(0)
|
Chris@0
|
200 ["maxDepth":"Symfony\Component\VarDumper\Cloner\Data":private]=>
|
Chris@0
|
201 int(20)
|
Chris@0
|
202 ["maxItemsPerDepth":"Symfony\Component\VarDumper\Cloner\Data":private]=>
|
Chris@0
|
203 int(-1)
|
Chris@0
|
204 ["useRefHandles":"Symfony\Component\VarDumper\Cloner\Data":private]=>
|
Chris@0
|
205 int(-1)
|
Chris@0
|
206 }
|
Chris@0
|
207
|
Chris@0
|
208 EOTXT;
|
Chris@0
|
209 ob_start();
|
Chris@0
|
210 var_dump($clone);
|
Chris@0
|
211 $this->assertStringMatchesFormat(\PHP_VERSION_ID >= 70200 ? str_replace('"1"', '1', $expected) : $expected, ob_get_clean());
|
Chris@0
|
212 }
|
Chris@0
|
213
|
Chris@0
|
214 public function testCaster()
|
Chris@0
|
215 {
|
Chris@0
|
216 $cloner = new VarCloner(array(
|
Chris@0
|
217 '*' => function ($obj, $array) {
|
Chris@0
|
218 return array('foo' => 123);
|
Chris@0
|
219 },
|
Chris@0
|
220 __CLASS__ => function ($obj, $array) {
|
Chris@0
|
221 ++$array['foo'];
|
Chris@0
|
222
|
Chris@0
|
223 return $array;
|
Chris@0
|
224 },
|
Chris@0
|
225 ));
|
Chris@0
|
226 $clone = $cloner->cloneVar($this);
|
Chris@0
|
227
|
Chris@0
|
228 $expected = <<<EOTXT
|
Chris@0
|
229 Symfony\Component\VarDumper\Cloner\Data Object
|
Chris@0
|
230 (
|
Chris@0
|
231 [data:Symfony\Component\VarDumper\Cloner\Data:private] => Array
|
Chris@0
|
232 (
|
Chris@0
|
233 [0] => Array
|
Chris@0
|
234 (
|
Chris@0
|
235 [0] => Symfony\Component\VarDumper\Cloner\Stub Object
|
Chris@0
|
236 (
|
Chris@0
|
237 [type] => 4
|
Chris@0
|
238 [class] => %s
|
Chris@0
|
239 [value] =>
|
Chris@0
|
240 [cut] => 0
|
Chris@0
|
241 [handle] => %i
|
Chris@0
|
242 [refCount] => 0
|
Chris@0
|
243 [position] => 1
|
Chris@0
|
244 [attr] => Array
|
Chris@0
|
245 (
|
Chris@0
|
246 )
|
Chris@0
|
247
|
Chris@0
|
248 )
|
Chris@0
|
249
|
Chris@0
|
250 )
|
Chris@0
|
251
|
Chris@0
|
252 [1] => Array
|
Chris@0
|
253 (
|
Chris@0
|
254 [foo] => 124
|
Chris@0
|
255 )
|
Chris@0
|
256
|
Chris@0
|
257 )
|
Chris@0
|
258
|
Chris@0
|
259 [position:Symfony\Component\VarDumper\Cloner\Data:private] => 0
|
Chris@0
|
260 [key:Symfony\Component\VarDumper\Cloner\Data:private] => 0
|
Chris@0
|
261 [maxDepth:Symfony\Component\VarDumper\Cloner\Data:private] => 20
|
Chris@0
|
262 [maxItemsPerDepth:Symfony\Component\VarDumper\Cloner\Data:private] => -1
|
Chris@0
|
263 [useRefHandles:Symfony\Component\VarDumper\Cloner\Data:private] => -1
|
Chris@0
|
264 )
|
Chris@0
|
265
|
Chris@0
|
266 EOTXT;
|
Chris@0
|
267 $this->assertStringMatchesFormat($expected, print_r($clone, true));
|
Chris@0
|
268 }
|
Chris@0
|
269 }
|