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;
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
36 [0] => Symfony\Component\VarDumper\Cloner\Stub Object
56 [maxDepth:Symfony\Component\VarDumper\Cloner\Data:private] => 20
57 [maxItemsPerDepth:Symfony\Component\VarDumper\Cloner\Data:private] => -1
58 [useRefHandles:Symfony\Component\VarDumper\Cloner\Data:private] => -1
62 $this->assertSame(sprintf($expected, PHP_INT_MAX), print_r($clone, true));
65 public function testClone()
67 $json = json_decode('{"1":{"var":"val"},"2":{"var":"val"}}');
69 $cloner = new VarCloner();
70 $clone = $cloner->cloneVar($json);
73 Symfony\Component\VarDumper\Cloner\Data Object
75 [data:Symfony\Component\VarDumper\Cloner\Data:private] => Array
79 [0] => Symfony\Component\VarDumper\Cloner\Stub Object
94 [\000+\0001] => Symfony\Component\VarDumper\Cloner\Stub Object
105 [\000+\0002] => Symfony\Component\VarDumper\Cloner\Stub Object
120 [\000+\000var] => val
125 [\000+\000var] => val
130 [maxDepth:Symfony\Component\VarDumper\Cloner\Data:private] => 20
131 [maxItemsPerDepth:Symfony\Component\VarDumper\Cloner\Data:private] => -1
132 [useRefHandles:Symfony\Component\VarDumper\Cloner\Data:private] => -1
136 $this->assertStringMatchesFormat($expected, print_r($clone, true));
139 public function testJsonCast()
141 if (ini_get('xdebug.overload_var_dump') == 2) {
142 $this->markTestSkipped('xdebug is active');
145 $data = (array) json_decode('{"1":{}}');
147 $cloner = new VarCloner();
148 $clone = $cloner->cloneVar($data);
150 $expected = <<<'EOTXT'
151 object(Symfony\Component\VarDumper\Cloner\Data)#%i (4) {
152 ["data":"Symfony\Component\VarDumper\Cloner\Data":private]=>
157 object(Symfony\Component\VarDumper\Cloner\Stub)#%i (7) {
177 object(Symfony\Component\VarDumper\Cloner\Stub)#%i (7) {
195 ["maxDepth":"Symfony\Component\VarDumper\Cloner\Data":private]=>
197 ["maxItemsPerDepth":"Symfony\Component\VarDumper\Cloner\Data":private]=>
199 ["useRefHandles":"Symfony\Component\VarDumper\Cloner\Data":private]=>
206 $this->assertStringMatchesFormat($expected, ob_get_clean());
209 public function testCaster()
211 $cloner = new VarCloner(array(
212 '*' => function ($obj, $array) {
213 return array('foo' => 123);
215 __CLASS__ => function ($obj, $array) {
221 $clone = $cloner->cloneVar($this);
224 Symfony\Component\VarDumper\Cloner\Data Object
226 [data:Symfony\Component\VarDumper\Cloner\Data:private] => Array
230 [0] => Symfony\Component\VarDumper\Cloner\Stub Object
250 [maxDepth:Symfony\Component\VarDumper\Cloner\Data:private] => 20
251 [maxItemsPerDepth:Symfony\Component\VarDumper\Cloner\Data:private] => -1
252 [useRefHandles:Symfony\Component\VarDumper\Cloner\Data:private] => -1
256 $this->assertStringMatchesFormat($expected, print_r($clone, true));