From d8c0f1df1abab2aff166cf78267c07c3bfe2e852 Mon Sep 17 00:00:00 2001 From: Carson Full Date: Wed, 6 Apr 2016 11:07:13 -0500 Subject: [PATCH] [Bridge][Twig] Optionally pass dumper into DumpExtension --- .../Bridge/Twig/Extension/DumpExtension.php | 11 ++++-- .../Tests/Extension/DumpExtensionTest.php | 36 +++++++++++++++++++ 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Bridge/Twig/Extension/DumpExtension.php b/src/Symfony/Bridge/Twig/Extension/DumpExtension.php index 30318ecac6d0..6c7a9c9a345f 100644 --- a/src/Symfony/Bridge/Twig/Extension/DumpExtension.php +++ b/src/Symfony/Bridge/Twig/Extension/DumpExtension.php @@ -23,10 +23,12 @@ class DumpExtension extends \Twig_Extension { private $cloner; + private $dumper; - public function __construct(ClonerInterface $cloner) + public function __construct(ClonerInterface $cloner, HtmlDumper $dumper = null) { $this->cloner = $cloner; + $this->dumper = $dumper ?: new HtmlDumper(); } public function getFunctions() @@ -67,11 +69,14 @@ public function dump(\Twig_Environment $env, $context) } $dump = fopen('php://memory', 'r+b'); - $dumper = new HtmlDumper($dump); + $prevOutput = $this->dumper->setOutput($dump); foreach ($vars as $value) { - $dumper->dump($this->cloner->cloneVar($value)); + $this->dumper->dump($this->cloner->cloneVar($value)); } + + $this->dumper->setOutput($prevOutput); + rewind($dump); return stream_get_contents($dump); diff --git a/src/Symfony/Bridge/Twig/Tests/Extension/DumpExtensionTest.php b/src/Symfony/Bridge/Twig/Tests/Extension/DumpExtensionTest.php index af93114e5ae5..92803be90e66 100644 --- a/src/Symfony/Bridge/Twig/Tests/Extension/DumpExtensionTest.php +++ b/src/Symfony/Bridge/Twig/Tests/Extension/DumpExtensionTest.php @@ -12,6 +12,7 @@ namespace Symfony\Bridge\Twig\Tests\Extension; use Symfony\Bridge\Twig\Extension\DumpExtension; +use Symfony\Component\VarDumper\Dumper\HtmlDumper; use Symfony\Component\VarDumper\VarDumper; use Symfony\Component\VarDumper\Cloner\VarCloner; @@ -103,4 +104,39 @@ public function getDumpArgs() ), ); } + + public function testCustomDumper() + { + $output = ''; + $lineDumper = function ($line) use (&$output) { + $output .= $line; + }; + + $dumper = new HtmlDumper($lineDumper); + + $dumper->setDumpHeader(''); + $dumper->setDumpBoundaries( + '
',
+            '
' + ); + $extension = new DumpExtension(new VarCloner(), $dumper); + $twig = new \Twig_Environment($this->getMock('Twig_LoaderInterface'), array( + 'debug' => true, + 'cache' => false, + 'optimizations' => 0, + )); + + $dump = $extension->dump($twig, array(), 'foo'); + $dump = preg_replace('/sf-dump-\d+/', 'sf-dump', $dump); + + $this->assertEquals( + '
"'.
+            "foo\"\n".
+            "
\n", + $dump, + 'Custom dumper should be used to dump data.' + ); + + $this->assertEmpty($output, 'Dumper output should be ignored.'); + } }