annotate vendor/symfony/var-dumper/Tests/Cloner/VarClonerTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
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@17 24 $data = [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@12 149 public function testLimits()
Chris@12 150 {
Chris@12 151 // Level 0:
Chris@17 152 $data = [
Chris@12 153 // Level 1:
Chris@17 154 [
Chris@12 155 // Level 2:
Chris@17 156 [
Chris@12 157 // Level 3:
Chris@12 158 'Level 3 Item 0',
Chris@12 159 'Level 3 Item 1',
Chris@12 160 'Level 3 Item 2',
Chris@12 161 'Level 3 Item 3',
Chris@17 162 ],
Chris@17 163 [
Chris@12 164 'Level 3 Item 4',
Chris@12 165 'Level 3 Item 5',
Chris@12 166 'Level 3 Item 6',
Chris@17 167 ],
Chris@17 168 [
Chris@12 169 'Level 3 Item 7',
Chris@17 170 ],
Chris@17 171 ],
Chris@17 172 [
Chris@17 173 [
Chris@12 174 'Level 3 Item 8',
Chris@17 175 ],
Chris@12 176 'Level 2 Item 0',
Chris@17 177 ],
Chris@17 178 [
Chris@12 179 'Level 2 Item 1',
Chris@17 180 ],
Chris@12 181 'Level 1 Item 0',
Chris@17 182 [
Chris@12 183 // Test setMaxString:
Chris@12 184 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
Chris@12 185 'SHORT',
Chris@17 186 ],
Chris@17 187 ];
Chris@12 188
Chris@12 189 $cloner = new VarCloner();
Chris@12 190 $cloner->setMinDepth(2);
Chris@12 191 $cloner->setMaxItems(5);
Chris@12 192 $cloner->setMaxString(20);
Chris@12 193 $clone = $cloner->cloneVar($data);
Chris@12 194
Chris@12 195 $expected = <<<EOTXT
Chris@12 196 Symfony\Component\VarDumper\Cloner\Data Object
Chris@12 197 (
Chris@12 198 [data:Symfony\Component\VarDumper\Cloner\Data:private] => Array
Chris@12 199 (
Chris@12 200 [0] => Array
Chris@12 201 (
Chris@12 202 [0] => Array
Chris@12 203 (
Chris@12 204 [2] => 1
Chris@12 205 )
Chris@12 206
Chris@12 207 )
Chris@12 208
Chris@12 209 [1] => Array
Chris@12 210 (
Chris@12 211 [0] => Array
Chris@12 212 (
Chris@12 213 [2] => 2
Chris@12 214 )
Chris@12 215
Chris@12 216 [1] => Array
Chris@12 217 (
Chris@12 218 [2] => 3
Chris@12 219 )
Chris@12 220
Chris@12 221 [2] => Array
Chris@12 222 (
Chris@12 223 [2] => 4
Chris@12 224 )
Chris@12 225
Chris@12 226 [3] => Level 1 Item 0
Chris@12 227 [4] => Array
Chris@12 228 (
Chris@12 229 [2] => 5
Chris@12 230 )
Chris@12 231
Chris@12 232 )
Chris@12 233
Chris@12 234 [2] => Array
Chris@12 235 (
Chris@12 236 [0] => Array
Chris@12 237 (
Chris@12 238 [2] => 6
Chris@12 239 )
Chris@12 240
Chris@12 241 [1] => Array
Chris@12 242 (
Chris@12 243 [0] => 2
Chris@12 244 [2] => 7
Chris@12 245 )
Chris@12 246
Chris@12 247 [2] => Array
Chris@12 248 (
Chris@12 249 [0] => 1
Chris@12 250 [2] => 0
Chris@12 251 )
Chris@12 252
Chris@12 253 )
Chris@12 254
Chris@12 255 [3] => Array
Chris@12 256 (
Chris@12 257 [0] => Array
Chris@12 258 (
Chris@12 259 [0] => 1
Chris@12 260 [2] => 0
Chris@12 261 )
Chris@12 262
Chris@12 263 [1] => Level 2 Item 0
Chris@12 264 )
Chris@12 265
Chris@12 266 [4] => Array
Chris@12 267 (
Chris@12 268 [0] => Level 2 Item 1
Chris@12 269 )
Chris@12 270
Chris@12 271 [5] => Array
Chris@12 272 (
Chris@12 273 [0] => Symfony\Component\VarDumper\Cloner\Stub Object
Chris@12 274 (
Chris@12 275 [type] => 2
Chris@12 276 [class] => 2
Chris@12 277 [value] => ABCDEFGHIJKLMNOPQRST
Chris@12 278 [cut] => 6
Chris@12 279 [handle] => 0
Chris@12 280 [refCount] => 0
Chris@12 281 [position] => 0
Chris@12 282 [attr] => Array
Chris@12 283 (
Chris@12 284 )
Chris@12 285
Chris@12 286 )
Chris@12 287
Chris@12 288 [1] => SHORT
Chris@12 289 )
Chris@12 290
Chris@12 291 [6] => Array
Chris@12 292 (
Chris@12 293 [0] => Level 3 Item 0
Chris@12 294 [1] => Level 3 Item 1
Chris@12 295 [2] => Level 3 Item 2
Chris@12 296 [3] => Level 3 Item 3
Chris@12 297 )
Chris@12 298
Chris@12 299 [7] => Array
Chris@12 300 (
Chris@12 301 [0] => Level 3 Item 4
Chris@12 302 )
Chris@12 303
Chris@12 304 )
Chris@12 305
Chris@12 306 [position:Symfony\Component\VarDumper\Cloner\Data:private] => 0
Chris@12 307 [key:Symfony\Component\VarDumper\Cloner\Data:private] => 0
Chris@12 308 [maxDepth:Symfony\Component\VarDumper\Cloner\Data:private] => 20
Chris@12 309 [maxItemsPerDepth:Symfony\Component\VarDumper\Cloner\Data:private] => -1
Chris@12 310 [useRefHandles:Symfony\Component\VarDumper\Cloner\Data:private] => -1
Chris@12 311 )
Chris@12 312
Chris@12 313 EOTXT;
Chris@12 314 $this->assertStringMatchesFormat($expected, print_r($clone, true));
Chris@12 315 }
Chris@12 316
Chris@0 317 public function testJsonCast()
Chris@0 318 {
Chris@0 319 if (2 == ini_get('xdebug.overload_var_dump')) {
Chris@0 320 $this->markTestSkipped('xdebug is active');
Chris@0 321 }
Chris@0 322
Chris@0 323 $data = (array) json_decode('{"1":{}}');
Chris@0 324
Chris@0 325 $cloner = new VarCloner();
Chris@0 326 $clone = $cloner->cloneVar($data);
Chris@0 327
Chris@0 328 $expected = <<<'EOTXT'
Chris@0 329 object(Symfony\Component\VarDumper\Cloner\Data)#%i (6) {
Chris@0 330 ["data":"Symfony\Component\VarDumper\Cloner\Data":private]=>
Chris@0 331 array(2) {
Chris@0 332 [0]=>
Chris@0 333 array(1) {
Chris@0 334 [0]=>
Chris@0 335 array(1) {
Chris@0 336 [1]=>
Chris@0 337 int(1)
Chris@0 338 }
Chris@0 339 }
Chris@0 340 [1]=>
Chris@0 341 array(1) {
Chris@0 342 ["1"]=>
Chris@0 343 object(Symfony\Component\VarDumper\Cloner\Stub)#%i (8) {
Chris@0 344 ["type"]=>
Chris@0 345 int(4)
Chris@0 346 ["class"]=>
Chris@0 347 string(8) "stdClass"
Chris@0 348 ["value"]=>
Chris@0 349 NULL
Chris@0 350 ["cut"]=>
Chris@0 351 int(0)
Chris@0 352 ["handle"]=>
Chris@0 353 int(%i)
Chris@0 354 ["refCount"]=>
Chris@0 355 int(0)
Chris@0 356 ["position"]=>
Chris@0 357 int(0)
Chris@0 358 ["attr"]=>
Chris@0 359 array(0) {
Chris@0 360 }
Chris@0 361 }
Chris@0 362 }
Chris@0 363 }
Chris@0 364 ["position":"Symfony\Component\VarDumper\Cloner\Data":private]=>
Chris@0 365 int(0)
Chris@0 366 ["key":"Symfony\Component\VarDumper\Cloner\Data":private]=>
Chris@0 367 int(0)
Chris@0 368 ["maxDepth":"Symfony\Component\VarDumper\Cloner\Data":private]=>
Chris@0 369 int(20)
Chris@0 370 ["maxItemsPerDepth":"Symfony\Component\VarDumper\Cloner\Data":private]=>
Chris@0 371 int(-1)
Chris@0 372 ["useRefHandles":"Symfony\Component\VarDumper\Cloner\Data":private]=>
Chris@0 373 int(-1)
Chris@0 374 }
Chris@0 375
Chris@0 376 EOTXT;
Chris@0 377 ob_start();
Chris@0 378 var_dump($clone);
Chris@0 379 $this->assertStringMatchesFormat(\PHP_VERSION_ID >= 70200 ? str_replace('"1"', '1', $expected) : $expected, ob_get_clean());
Chris@0 380 }
Chris@0 381
Chris@0 382 public function testCaster()
Chris@0 383 {
Chris@17 384 $cloner = new VarCloner([
Chris@0 385 '*' => function ($obj, $array) {
Chris@17 386 return ['foo' => 123];
Chris@0 387 },
Chris@0 388 __CLASS__ => function ($obj, $array) {
Chris@0 389 ++$array['foo'];
Chris@0 390
Chris@0 391 return $array;
Chris@0 392 },
Chris@17 393 ]);
Chris@0 394 $clone = $cloner->cloneVar($this);
Chris@0 395
Chris@0 396 $expected = <<<EOTXT
Chris@0 397 Symfony\Component\VarDumper\Cloner\Data Object
Chris@0 398 (
Chris@0 399 [data:Symfony\Component\VarDumper\Cloner\Data:private] => Array
Chris@0 400 (
Chris@0 401 [0] => Array
Chris@0 402 (
Chris@0 403 [0] => Symfony\Component\VarDumper\Cloner\Stub Object
Chris@0 404 (
Chris@0 405 [type] => 4
Chris@0 406 [class] => %s
Chris@0 407 [value] =>
Chris@0 408 [cut] => 0
Chris@0 409 [handle] => %i
Chris@0 410 [refCount] => 0
Chris@0 411 [position] => 1
Chris@0 412 [attr] => Array
Chris@0 413 (
Chris@0 414 )
Chris@0 415
Chris@0 416 )
Chris@0 417
Chris@0 418 )
Chris@0 419
Chris@0 420 [1] => Array
Chris@0 421 (
Chris@0 422 [foo] => 124
Chris@0 423 )
Chris@0 424
Chris@0 425 )
Chris@0 426
Chris@0 427 [position:Symfony\Component\VarDumper\Cloner\Data:private] => 0
Chris@0 428 [key:Symfony\Component\VarDumper\Cloner\Data:private] => 0
Chris@0 429 [maxDepth:Symfony\Component\VarDumper\Cloner\Data:private] => 20
Chris@0 430 [maxItemsPerDepth:Symfony\Component\VarDumper\Cloner\Data:private] => -1
Chris@0 431 [useRefHandles:Symfony\Component\VarDumper\Cloner\Data:private] => -1
Chris@0 432 )
Chris@0 433
Chris@0 434 EOTXT;
Chris@0 435 $this->assertStringMatchesFormat($expected, print_r($clone, true));
Chris@0 436 }
Chris@0 437 }