|
12 | 12 | namespace Symfony\Component\VarDumper\Tests\Cloner; |
13 | 13 |
|
14 | 14 | use PHPUnit\Framework\TestCase; |
| 15 | +use Symfony\Component\VarDumper\Caster\DateCaster; |
| 16 | +use Symfony\Component\VarDumper\Cloner\AbstractCloner; |
| 17 | +use Symfony\Component\VarDumper\Cloner\Stub; |
15 | 18 | use Symfony\Component\VarDumper\Cloner\VarCloner; |
| 19 | +use Symfony\Component\VarDumper\Dumper\CliDumper; |
16 | 20 | use Symfony\Component\VarDumper\Tests\Fixtures\Php74; |
17 | 21 | use Symfony\Component\VarDumper\Tests\Fixtures\Php81Enums; |
18 | 22 |
|
|
21 | 25 | */ |
22 | 26 | class VarClonerTest extends TestCase |
23 | 27 | { |
| 28 | + public function testAddCaster() |
| 29 | + { |
| 30 | + $o1 = new class() { |
| 31 | + public string $p1 = 'p1'; |
| 32 | + }; |
| 33 | + $o2 = new class() { |
| 34 | + public string $p2 = 'p2'; |
| 35 | + }; |
| 36 | + |
| 37 | + AbstractCloner::addDefaultCasters([ |
| 38 | + $o1::class => function ($obj, $array) { |
| 39 | + $array['p1'] = 123; |
| 40 | + |
| 41 | + return $array; |
| 42 | + }, |
| 43 | + // Test we can override the default casters |
| 44 | + \DateTimeInterface::class => function (\DateTimeInterface $obj, $array, Stub $stub, bool $isNested, int $filter) { |
| 45 | + $array = DateCaster::castDateTime($obj, $array, $stub, $isNested, $filter); |
| 46 | + $array['foo'] = 'bar'; |
| 47 | + |
| 48 | + return $array; |
| 49 | + }, |
| 50 | + ]); |
| 51 | + $cloner = new VarCloner(); |
| 52 | + $cloner->addCasters([ |
| 53 | + $o2::class => function ($obj, $array) { |
| 54 | + $array['p2'] = 456; |
| 55 | + |
| 56 | + return $array; |
| 57 | + }, |
| 58 | + ]); |
| 59 | + |
| 60 | + $dumper = new CliDumper('php://output'); |
| 61 | + $dumper->setColors(false); |
| 62 | + |
| 63 | + ob_start(); |
| 64 | + $dumper->dump($cloner->cloneVar([$o1, $o2, new \DateTime('Mon Jan 4 15:26:20 2010 +0100')])); |
| 65 | + $out = ob_get_clean(); |
| 66 | + $out = preg_replace('/[ \t]+$/m', '', $out); |
| 67 | + $this->assertStringMatchesFormat( |
| 68 | + <<<EOTXT |
| 69 | + array:3 [ |
| 70 | + 0 => class@anonymous {#%d |
| 71 | + +p1: 123 |
| 72 | + } |
| 73 | + 1 => class@anonymous {#%d |
| 74 | + +p2: 456 |
| 75 | + } |
| 76 | + 2 => DateTime @1262615180 {#%d |
| 77 | + date: 2010-01-04 15:26:20.0 +01:00 |
| 78 | + +foo: "bar" |
| 79 | + } |
| 80 | + ] |
| 81 | + EOTXT, |
| 82 | + $out |
| 83 | + ); |
| 84 | + } |
| 85 | + |
24 | 86 | public function testMaxIntBoundary() |
25 | 87 | { |
26 | 88 | $data = [\PHP_INT_MAX => 123]; |
@@ -427,7 +489,7 @@ public function testCaster() |
427 | 489 | [attr] => Array |
428 | 490 | ( |
429 | 491 | [file] => %a%eVarClonerTest.php |
430 | | - [line] => 22 |
| 492 | + [line] => 26 |
431 | 493 | ) |
432 | 494 |
|
433 | 495 | ) |
|
0 commit comments