comparison vendor/symfony/var-dumper/Tests/Cloner/VarClonerTest.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 7a779792577d
comparison
equal deleted inserted replaced
-1:000000000000 0:4c8ae668cc8c
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 testJsonCast()
150 {
151 if (2 == ini_get('xdebug.overload_var_dump')) {
152 $this->markTestSkipped('xdebug is active');
153 }
154
155 $data = (array) json_decode('{"1":{}}');
156
157 $cloner = new VarCloner();
158 $clone = $cloner->cloneVar($data);
159
160 $expected = <<<'EOTXT'
161 object(Symfony\Component\VarDumper\Cloner\Data)#%i (6) {
162 ["data":"Symfony\Component\VarDumper\Cloner\Data":private]=>
163 array(2) {
164 [0]=>
165 array(1) {
166 [0]=>
167 array(1) {
168 [1]=>
169 int(1)
170 }
171 }
172 [1]=>
173 array(1) {
174 ["1"]=>
175 object(Symfony\Component\VarDumper\Cloner\Stub)#%i (8) {
176 ["type"]=>
177 int(4)
178 ["class"]=>
179 string(8) "stdClass"
180 ["value"]=>
181 NULL
182 ["cut"]=>
183 int(0)
184 ["handle"]=>
185 int(%i)
186 ["refCount"]=>
187 int(0)
188 ["position"]=>
189 int(0)
190 ["attr"]=>
191 array(0) {
192 }
193 }
194 }
195 }
196 ["position":"Symfony\Component\VarDumper\Cloner\Data":private]=>
197 int(0)
198 ["key":"Symfony\Component\VarDumper\Cloner\Data":private]=>
199 int(0)
200 ["maxDepth":"Symfony\Component\VarDumper\Cloner\Data":private]=>
201 int(20)
202 ["maxItemsPerDepth":"Symfony\Component\VarDumper\Cloner\Data":private]=>
203 int(-1)
204 ["useRefHandles":"Symfony\Component\VarDumper\Cloner\Data":private]=>
205 int(-1)
206 }
207
208 EOTXT;
209 ob_start();
210 var_dump($clone);
211 $this->assertStringMatchesFormat(\PHP_VERSION_ID >= 70200 ? str_replace('"1"', '1', $expected) : $expected, ob_get_clean());
212 }
213
214 public function testCaster()
215 {
216 $cloner = new VarCloner(array(
217 '*' => function ($obj, $array) {
218 return array('foo' => 123);
219 },
220 __CLASS__ => function ($obj, $array) {
221 ++$array['foo'];
222
223 return $array;
224 },
225 ));
226 $clone = $cloner->cloneVar($this);
227
228 $expected = <<<EOTXT
229 Symfony\Component\VarDumper\Cloner\Data Object
230 (
231 [data:Symfony\Component\VarDumper\Cloner\Data:private] => Array
232 (
233 [0] => Array
234 (
235 [0] => Symfony\Component\VarDumper\Cloner\Stub Object
236 (
237 [type] => 4
238 [class] => %s
239 [value] =>
240 [cut] => 0
241 [handle] => %i
242 [refCount] => 0
243 [position] => 1
244 [attr] => Array
245 (
246 )
247
248 )
249
250 )
251
252 [1] => Array
253 (
254 [foo] => 124
255 )
256
257 )
258
259 [position:Symfony\Component\VarDumper\Cloner\Data:private] => 0
260 [key:Symfony\Component\VarDumper\Cloner\Data:private] => 0
261 [maxDepth:Symfony\Component\VarDumper\Cloner\Data:private] => 20
262 [maxItemsPerDepth:Symfony\Component\VarDumper\Cloner\Data:private] => -1
263 [useRefHandles:Symfony\Component\VarDumper\Cloner\Data:private] => -1
264 )
265
266 EOTXT;
267 $this->assertStringMatchesFormat($expected, print_r($clone, true));
268 }
269 }