4 * This file is part of the Symfony package.
6 * (c) Fabien Potencier <fabien@symfony.com>
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
12 namespace Symfony\Component\VarDumper\Tests\Cloner;
14 use PHPUnit\Framework\TestCase;
15 use Symfony\Component\VarDumper\Cloner\VarCloner;
18 * @author Nicolas Grekas <p@tchwork.com>
20 class VarClonerTest extends TestCase
22 public function testMaxIntBoundary()
24 $data = array(PHP_INT_MAX => 123);
26 $cloner = new VarCloner();
27 $clone = $cloner->cloneVar($data);
30 Symfony\Component\VarDumper\Cloner\Data Object
32 [data:Symfony\Component\VarDumper\Cloner\Data:private] => Array
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
58 $this->assertSame(sprintf($expected, PHP_INT_MAX), print_r($clone, true));
61 public function testClone()
63 $json = json_decode('{"1":{"var":"val"},"2":{"var":"val"}}');
65 $cloner = new VarCloner();
66 $clone = $cloner->cloneVar($json);
69 Symfony\Component\VarDumper\Cloner\Data Object
71 [data:Symfony\Component\VarDumper\Cloner\Data:private] => Array
75 [0] => Symfony\Component\VarDumper\Cloner\Stub Object
94 [\000+\0001] => Symfony\Component\VarDumper\Cloner\Stub Object
109 [\000+\0002] => Symfony\Component\VarDumper\Cloner\Stub Object
128 [\000+\000var] => val
133 [\000+\000var] => val
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
146 $this->assertStringMatchesFormat($expected, print_r($clone, true));
149 public function testLimits()
183 // Test setMaxString:
184 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
189 $cloner = new VarCloner();
190 $cloner->setMinDepth(2);
191 $cloner->setMaxItems(5);
192 $cloner->setMaxString(20);
193 $clone = $cloner->cloneVar($data);
196 Symfony\Component\VarDumper\Cloner\Data Object
198 [data:Symfony\Component\VarDumper\Cloner\Data:private] => Array
226 [3] => Level 1 Item 0
263 [1] => Level 2 Item 0
268 [0] => Level 2 Item 1
273 [0] => Symfony\Component\VarDumper\Cloner\Stub Object
277 [value] => ABCDEFGHIJKLMNOPQRST
293 [0] => Level 3 Item 0
294 [1] => Level 3 Item 1
295 [2] => Level 3 Item 2
296 [3] => Level 3 Item 3
301 [0] => Level 3 Item 4
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
314 $this->assertStringMatchesFormat($expected, print_r($clone, true));
317 public function testJsonCast()
319 if (2 == ini_get('xdebug.overload_var_dump')) {
320 $this->markTestSkipped('xdebug is active');
323 $data = (array) json_decode('{"1":{}}');
325 $cloner = new VarCloner();
326 $clone = $cloner->cloneVar($data);
328 $expected = <<<'EOTXT'
329 object(Symfony\Component\VarDumper\Cloner\Data)#%i (6) {
330 ["data":"Symfony\Component\VarDumper\Cloner\Data":private]=>
343 object(Symfony\Component\VarDumper\Cloner\Stub)#%i (8) {
364 ["position":"Symfony\Component\VarDumper\Cloner\Data":private]=>
366 ["key":"Symfony\Component\VarDumper\Cloner\Data":private]=>
368 ["maxDepth":"Symfony\Component\VarDumper\Cloner\Data":private]=>
370 ["maxItemsPerDepth":"Symfony\Component\VarDumper\Cloner\Data":private]=>
372 ["useRefHandles":"Symfony\Component\VarDumper\Cloner\Data":private]=>
379 $this->assertStringMatchesFormat(\PHP_VERSION_ID >= 70200 ? str_replace('"1"', '1', $expected) : $expected, ob_get_clean());
382 public function testCaster()
384 $cloner = new VarCloner(array(
385 '*' => function ($obj, $array) {
386 return array('foo' => 123);
388 __CLASS__ => function ($obj, $array) {
394 $clone = $cloner->cloneVar($this);
397 Symfony\Component\VarDumper\Cloner\Data Object
399 [data:Symfony\Component\VarDumper\Cloner\Data:private] => Array
403 [0] => Symfony\Component\VarDumper\Cloner\Stub Object
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
435 $this->assertStringMatchesFormat($expected, print_r($clone, true));