From 0e53f95f72be6bed1dded6aa73d5c02821c84808 Mon Sep 17 00:00:00 2001 From: Maxime Steinhausser Date: Tue, 9 Jul 2019 17:43:55 +0200 Subject: [PATCH] [VarDumper] Allow to configure VarDumperTestTrait casters & flags --- .../VarDumper/Test/VarDumperTestTrait.php | 36 +++++++++++++++---- .../Tests/Test/VarDumperTestTraitTest.php | 36 +++++++++++++++++++ 2 files changed, 66 insertions(+), 6 deletions(-) diff --git a/src/Symfony/Component/VarDumper/Test/VarDumperTestTrait.php b/src/Symfony/Component/VarDumper/Test/VarDumperTestTrait.php index 11c9b92659069..4526c63a5663f 100644 --- a/src/Symfony/Component/VarDumper/Test/VarDumperTestTrait.php +++ b/src/Symfony/Component/VarDumper/Test/VarDumperTestTrait.php @@ -19,6 +19,23 @@ */ trait VarDumperTestTrait { + private static $casters = []; + private static $varCloner; + private static $flags; + + protected static function setUpVarDumper(array $casters, int $flags = null): void + { + self::$varCloner = null; + self::$casters = $casters; + self::$flags = $flags; + } + + protected static function tearDownVarDumper(): void + { + self::$casters = []; + self::$flags = self::$varCloner = null; + } + public function assertDumpEquals($expected, $data, $filter = 0, $message = '') { $this->assertSame($this->prepareExpectation($expected, $filter), $this->getDump($data, null, $filter), $message); @@ -31,15 +48,22 @@ public function assertDumpMatchesFormat($expected, $data, $filter = 0, $message protected function getDump($data, $key = null, $filter = 0) { - $flags = getenv('DUMP_LIGHT_ARRAY') ? CliDumper::DUMP_LIGHT_ARRAY : 0; - $flags |= getenv('DUMP_STRING_LENGTH') ? CliDumper::DUMP_STRING_LENGTH : 0; - $flags |= getenv('DUMP_COMMA_SEPARATOR') ? CliDumper::DUMP_COMMA_SEPARATOR : 0; + $flags = self::$flags; + if (null === $flags) { + $flags = getenv('DUMP_LIGHT_ARRAY') ? CliDumper::DUMP_LIGHT_ARRAY : 0; + $flags |= getenv('DUMP_STRING_LENGTH') ? CliDumper::DUMP_STRING_LENGTH : 0; + $flags |= getenv('DUMP_COMMA_SEPARATOR') ? CliDumper::DUMP_COMMA_SEPARATOR : 0; + } + + if (!self::$varCloner) { + self::$varCloner = new VarCloner(); + self::$varCloner->addCasters(self::$casters); + } - $cloner = new VarCloner(); - $cloner->setMaxItems(-1); + self::$varCloner->setMaxItems(-1); $dumper = new CliDumper(null, null, $flags); $dumper->setColors(false); - $data = $cloner->cloneVar($data, $filter)->withRefHandles(false); + $data = self::$varCloner->cloneVar($data, $filter)->withRefHandles(false); if (null !== $key && null === $data = $data->seek($key)) { return; } diff --git a/src/Symfony/Component/VarDumper/Tests/Test/VarDumperTestTraitTest.php b/src/Symfony/Component/VarDumper/Tests/Test/VarDumperTestTraitTest.php index a4d489cf34053..4f1c9a9d383be 100644 --- a/src/Symfony/Component/VarDumper/Tests/Test/VarDumperTestTraitTest.php +++ b/src/Symfony/Component/VarDumper/Tests/Test/VarDumperTestTraitTest.php @@ -12,6 +12,9 @@ namespace Symfony\Component\VarDumper\Tests\Test; use PHPUnit\Framework\TestCase; +use Symfony\Component\VarDumper\Cloner\Stub; +use Symfony\Component\VarDumper\Cloner\VarCloner; +use Symfony\Component\VarDumper\Dumper\CliDumper; use Symfony\Component\VarDumper\Test\VarDumperTestTrait; class VarDumperTestTraitTest extends TestCase @@ -43,4 +46,37 @@ public function testAllowsNonScalarExpectation() { $this->assertDumpEquals(new \ArrayObject(['bim' => 'bam']), new \ArrayObject(['bim' => 'bam'])); } + + public function testItCanBeConfigured() + { + self::setUpVarDumper($casters = [ + \DateTimeInterface::class => static function (\DateTimeInterface $date, array $a, Stub $stub): array { + $stub->class = 'DateTime'; + + return ['date' => $date->format('d/m/Y')]; + }, + ], CliDumper::DUMP_LIGHT_ARRAY | CliDumper::DUMP_COMMA_SEPARATOR); + + $this->assertSame(CliDumper::DUMP_LIGHT_ARRAY | CliDumper::DUMP_COMMA_SEPARATOR, self::$flags); + $this->assertSame($casters, self::$casters); + + $this->assertDumpEquals(<<assertInstanceOf(VarCloner::class, self::$varCloner); + + self::tearDownVarDumper(); + + $this->assertNull(self::$varCloner); + $this->assertNull(self::$flags); + $this->assertSame([], self::$casters); + } }