Security update for Core, with self-updated composer
[yaffs-website] / vendor / symfony / var-dumper / Tests / Cloner / VarClonerTest.php
1 <?php
2
3 /*
4  * This file is part of the Symfony package.
5  *
6  * (c) Fabien Potencier <fabien@symfony.com>
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11
12 namespace Symfony\Component\VarDumper\Tests\Cloner;
13
14 use PHPUnit\Framework\TestCase;
15 use Symfony\Component\VarDumper\Cloner\VarCloner;
16
17 /**
18  * @author Nicolas Grekas <p@tchwork.com>
19  */
20 class VarClonerTest extends TestCase
21 {
22     public function testMaxIntBoundary()
23     {
24         $data = array(PHP_INT_MAX => 123);
25
26         $cloner = new VarCloner();
27         $clone = $cloner->cloneVar($data);
28
29         $expected = <<<EOTXT
30 Symfony\Component\VarDumper\Cloner\Data Object
31 (
32     [data:Symfony\Component\VarDumper\Cloner\Data:private] => Array
33         (
34             [0] => Array
35                 (
36                     [0] => Array
37                         (
38                             [1] => 1
39                         )
40
41                 )
42
43             [1] => Array
44                 (
45                     [%s] => 123
46                 )
47
48         )
49
50     [position:Symfony\Component\VarDumper\Cloner\Data:private] => 0
51     [key:Symfony\Component\VarDumper\Cloner\Data:private] => 0
52     [maxDepth:Symfony\Component\VarDumper\Cloner\Data:private] => 20
53     [maxItemsPerDepth:Symfony\Component\VarDumper\Cloner\Data:private] => -1
54     [useRefHandles:Symfony\Component\VarDumper\Cloner\Data:private] => -1
55 )
56
57 EOTXT;
58         $this->assertSame(sprintf($expected, PHP_INT_MAX), print_r($clone, true));
59     }
60
61     public function testClone()
62     {
63         $json = json_decode('{"1":{"var":"val"},"2":{"var":"val"}}');
64
65         $cloner = new VarCloner();
66         $clone = $cloner->cloneVar($json);
67
68         $expected = <<<EOTXT
69 Symfony\Component\VarDumper\Cloner\Data Object
70 (
71     [data:Symfony\Component\VarDumper\Cloner\Data:private] => Array
72         (
73             [0] => Array
74                 (
75                     [0] => Symfony\Component\VarDumper\Cloner\Stub Object
76                         (
77                             [type] => 4
78                             [class] => stdClass
79                             [value] => 
80                             [cut] => 0
81                             [handle] => %i
82                             [refCount] => 0
83                             [position] => 1
84                             [attr] => Array
85                                 (
86                                 )
87
88                         )
89
90                 )
91
92             [1] => Array
93                 (
94                     [\000+\0001] => Symfony\Component\VarDumper\Cloner\Stub Object
95                         (
96                             [type] => 4
97                             [class] => stdClass
98                             [value] => 
99                             [cut] => 0
100                             [handle] => %i
101                             [refCount] => 0
102                             [position] => 2
103                             [attr] => Array
104                                 (
105                                 )
106
107                         )
108
109                     [\000+\0002] => Symfony\Component\VarDumper\Cloner\Stub Object
110                         (
111                             [type] => 4
112                             [class] => stdClass
113                             [value] => 
114                             [cut] => 0
115                             [handle] => %i
116                             [refCount] => 0
117                             [position] => 3
118                             [attr] => Array
119                                 (
120                                 )
121
122                         )
123
124                 )
125
126             [2] => Array
127                 (
128                     [\000+\000var] => val
129                 )
130
131             [3] => Array
132                 (
133                     [\000+\000var] => val
134                 )
135
136         )
137
138     [position:Symfony\Component\VarDumper\Cloner\Data:private] => 0
139     [key:Symfony\Component\VarDumper\Cloner\Data:private] => 0
140     [maxDepth:Symfony\Component\VarDumper\Cloner\Data:private] => 20
141     [maxItemsPerDepth:Symfony\Component\VarDumper\Cloner\Data:private] => -1
142     [useRefHandles:Symfony\Component\VarDumper\Cloner\Data:private] => -1
143 )
144
145 EOTXT;
146         $this->assertStringMatchesFormat($expected, print_r($clone, true));
147     }
148
149     public function testLimits()
150     {
151         // Level 0:
152         $data = array(
153             // Level 1:
154             array(
155                 // Level 2:
156                 array(
157                     // Level 3:
158                     'Level 3 Item 0',
159                     'Level 3 Item 1',
160                     'Level 3 Item 2',
161                     'Level 3 Item 3',
162                 ),
163                 array(
164                     'Level 3 Item 4',
165                     'Level 3 Item 5',
166                     'Level 3 Item 6',
167                 ),
168                 array(
169                     'Level 3 Item 7',
170                 ),
171             ),
172             array(
173                 array(
174                     'Level 3 Item 8',
175                 ),
176                 'Level 2 Item 0',
177             ),
178             array(
179                 'Level 2 Item 1',
180             ),
181             'Level 1 Item 0',
182             array(
183                 // Test setMaxString:
184                 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
185                 'SHORT',
186             ),
187         );
188
189         $cloner = new VarCloner();
190         $cloner->setMinDepth(2);
191         $cloner->setMaxItems(5);
192         $cloner->setMaxString(20);
193         $clone = $cloner->cloneVar($data);
194
195         $expected = <<<EOTXT
196 Symfony\Component\VarDumper\Cloner\Data Object
197 (
198     [data:Symfony\Component\VarDumper\Cloner\Data:private] => Array
199         (
200             [0] => Array
201                 (
202                     [0] => Array
203                         (
204                             [2] => 1
205                         )
206
207                 )
208
209             [1] => Array
210                 (
211                     [0] => Array
212                         (
213                             [2] => 2
214                         )
215
216                     [1] => Array
217                         (
218                             [2] => 3
219                         )
220
221                     [2] => Array
222                         (
223                             [2] => 4
224                         )
225
226                     [3] => Level 1 Item 0
227                     [4] => Array
228                         (
229                             [2] => 5
230                         )
231
232                 )
233
234             [2] => Array
235                 (
236                     [0] => Array
237                         (
238                             [2] => 6
239                         )
240
241                     [1] => Array
242                         (
243                             [0] => 2
244                             [2] => 7
245                         )
246
247                     [2] => Array
248                         (
249                             [0] => 1
250                             [2] => 0
251                         )
252
253                 )
254
255             [3] => Array
256                 (
257                     [0] => Array
258                         (
259                             [0] => 1
260                             [2] => 0
261                         )
262
263                     [1] => Level 2 Item 0
264                 )
265
266             [4] => Array
267                 (
268                     [0] => Level 2 Item 1
269                 )
270
271             [5] => Array
272                 (
273                     [0] => Symfony\Component\VarDumper\Cloner\Stub Object
274                         (
275                             [type] => 2
276                             [class] => 2
277                             [value] => ABCDEFGHIJKLMNOPQRST
278                             [cut] => 6
279                             [handle] => 0
280                             [refCount] => 0
281                             [position] => 0
282                             [attr] => Array
283                                 (
284                                 )
285
286                         )
287
288                     [1] => SHORT
289                 )
290
291             [6] => Array
292                 (
293                     [0] => Level 3 Item 0
294                     [1] => Level 3 Item 1
295                     [2] => Level 3 Item 2
296                     [3] => Level 3 Item 3
297                 )
298
299             [7] => Array
300                 (
301                     [0] => Level 3 Item 4
302                 )
303
304         )
305
306     [position:Symfony\Component\VarDumper\Cloner\Data:private] => 0
307     [key:Symfony\Component\VarDumper\Cloner\Data:private] => 0
308     [maxDepth:Symfony\Component\VarDumper\Cloner\Data:private] => 20
309     [maxItemsPerDepth:Symfony\Component\VarDumper\Cloner\Data:private] => -1
310     [useRefHandles:Symfony\Component\VarDumper\Cloner\Data:private] => -1
311 )
312
313 EOTXT;
314         $this->assertStringMatchesFormat($expected, print_r($clone, true));
315     }
316
317     public function testJsonCast()
318     {
319         if (2 == ini_get('xdebug.overload_var_dump')) {
320             $this->markTestSkipped('xdebug is active');
321         }
322
323         $data = (array) json_decode('{"1":{}}');
324
325         $cloner = new VarCloner();
326         $clone = $cloner->cloneVar($data);
327
328         $expected = <<<'EOTXT'
329 object(Symfony\Component\VarDumper\Cloner\Data)#%i (6) {
330   ["data":"Symfony\Component\VarDumper\Cloner\Data":private]=>
331   array(2) {
332     [0]=>
333     array(1) {
334       [0]=>
335       array(1) {
336         [1]=>
337         int(1)
338       }
339     }
340     [1]=>
341     array(1) {
342       ["1"]=>
343       object(Symfony\Component\VarDumper\Cloner\Stub)#%i (8) {
344         ["type"]=>
345         int(4)
346         ["class"]=>
347         string(8) "stdClass"
348         ["value"]=>
349         NULL
350         ["cut"]=>
351         int(0)
352         ["handle"]=>
353         int(%i)
354         ["refCount"]=>
355         int(0)
356         ["position"]=>
357         int(0)
358         ["attr"]=>
359         array(0) {
360         }
361       }
362     }
363   }
364   ["position":"Symfony\Component\VarDumper\Cloner\Data":private]=>
365   int(0)
366   ["key":"Symfony\Component\VarDumper\Cloner\Data":private]=>
367   int(0)
368   ["maxDepth":"Symfony\Component\VarDumper\Cloner\Data":private]=>
369   int(20)
370   ["maxItemsPerDepth":"Symfony\Component\VarDumper\Cloner\Data":private]=>
371   int(-1)
372   ["useRefHandles":"Symfony\Component\VarDumper\Cloner\Data":private]=>
373   int(-1)
374 }
375
376 EOTXT;
377         ob_start();
378         var_dump($clone);
379         $this->assertStringMatchesFormat(\PHP_VERSION_ID >= 70200 ? str_replace('"1"', '1', $expected) : $expected, ob_get_clean());
380     }
381
382     public function testCaster()
383     {
384         $cloner = new VarCloner(array(
385             '*' => function ($obj, $array) {
386                 return array('foo' => 123);
387             },
388             __CLASS__ => function ($obj, $array) {
389                 ++$array['foo'];
390
391                 return $array;
392             },
393         ));
394         $clone = $cloner->cloneVar($this);
395
396         $expected = <<<EOTXT
397 Symfony\Component\VarDumper\Cloner\Data Object
398 (
399     [data:Symfony\Component\VarDumper\Cloner\Data:private] => Array
400         (
401             [0] => Array
402                 (
403                     [0] => Symfony\Component\VarDumper\Cloner\Stub Object
404                         (
405                             [type] => 4
406                             [class] => %s
407                             [value] => 
408                             [cut] => 0
409                             [handle] => %i
410                             [refCount] => 0
411                             [position] => 1
412                             [attr] => Array
413                                 (
414                                 )
415
416                         )
417
418                 )
419
420             [1] => Array
421                 (
422                     [foo] => 124
423                 )
424
425         )
426
427     [position:Symfony\Component\VarDumper\Cloner\Data:private] => 0
428     [key:Symfony\Component\VarDumper\Cloner\Data:private] => 0
429     [maxDepth:Symfony\Component\VarDumper\Cloner\Data:private] => 20
430     [maxItemsPerDepth:Symfony\Component\VarDumper\Cloner\Data:private] => -1
431     [useRefHandles:Symfony\Component\VarDumper\Cloner\Data:private] => -1
432 )
433
434 EOTXT;
435         $this->assertStringMatchesFormat($expected, print_r($clone, true));
436     }
437 }