Skip to content

Commit

Permalink
[VarDumper] Fix source links with latests Twig versions
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolas-grekas committed Oct 18, 2016
1 parent ee8203a commit f3b09d9
Show file tree
Hide file tree
Showing 4 changed files with 113 additions and 32 deletions.
18 changes: 11 additions & 7 deletions src/Symfony/Component/VarDumper/Caster/ExceptionCaster.php
Expand Up @@ -150,15 +150,19 @@ public static function castFrameStub(FrameStub $frame, array $a, Stub $stub, $is

if (!empty($f['class']) && is_subclass_of($f['class'], 'Twig_Template') && method_exists($f['class'], 'getDebugInfo')) {
$template = isset($f['object']) ? $f['object'] : new $f['class'](new \Twig_Environment(new \Twig_Loader_Filesystem()));

try {
$templateName = $template->getTemplateName();
$templateSrc = explode("\n", method_exists($template, 'getSource') ? $template->getSource() : $template->getEnvironment()->getLoader()->getSource($templateName));
$templateInfo = $template->getDebugInfo();
if (isset($templateInfo[$f['line']])) {
$templateName = $template->getTemplateName();
$templateSrc = method_exists($template, 'getSourceContext') ? $template->getSourceContext()->getCode() : (method_exists($template, 'getSource') ? $template->getSource() : '');
$templateInfo = $template->getDebugInfo();
if (isset($templateInfo[$f['line']])) {
if (method_exists($template, 'getSourceContext')) {
$templateName = $template->getSourceContext()->getPath() ?: $templateName;
}
if ($templateSrc) {
$templateSrc = explode("\n", $templateSrc);
$src[$templateName.':'.$templateInfo[$f['line']]] = self::extractSource($templateSrc, $templateInfo[$f['line']], self::$srcContext);
} else {
$src[$templateName] = $templateInfo[$f['line']];
}
} catch (\Twig_Error_Loader $e) {
}
}
} else {
Expand Down
@@ -0,0 +1,85 @@
<?php

/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace Symfony\Component\VarDumper\Tests\Caster;

use Symfony\Component\VarDumper\Caster\FrameStub;
use Symfony\Component\VarDumper\Test\VarDumperTestCase;

class ExceptionCasterTest extends VarDumperTestCase
{
/**
* @requires function Twig_Template::getSourceContext
*/
public function testFrameWithTwig()
{
require_once dirname(__DIR__).'/Fixtures/Twig.php';

$f = array(
new FrameStub(array(
'file' => dirname(__DIR__).'/Fixtures/Twig.php',
'line' => 19,
'class' => '__TwigTemplate_VarDumperFixture_u75a09',
'object' => new \__TwigTemplate_VarDumperFixture_u75a09(new \Twig_Environment(new \Twig_Loader_Filesystem())),
)),
new FrameStub(array(
'file' => dirname(__DIR__).'/Fixtures/Twig.php',
'line' => 19,
'class' => '__TwigTemplate_VarDumperFixture_u75a09',
'object' => new \__TwigTemplate_VarDumperFixture_u75a09(new \Twig_Environment(new \Twig_Loader_Filesystem()), null),
)),
);

$expectedDump = <<<'EODUMP'
array:2 [
0 => {
class: "__TwigTemplate_VarDumperFixture_u75a09"
object: __TwigTemplate_VarDumperFixture_u75a09 {
%A
}
src: {
%sTwig.php:19: """
// line 2\n
throw new \Exception('Foobar');\n
}\n
"""
bar.twig:2: """
foo bar\n
twig source\n
\n
"""
}
}
1 => {
class: "__TwigTemplate_VarDumperFixture_u75a09"
object: __TwigTemplate_VarDumperFixture_u75a09 {
%A
}
src: {
%sTwig.php:19: """
// line 2\n
throw new \Exception('Foobar');\n
}\n
"""
foo.twig:2: """
foo bar\n
twig source\n
\n
"""
}
}
]
EODUMP;

$this->assertDumpMatchesFormat($expectedDump, $f);
}
}
23 changes: 9 additions & 14 deletions src/Symfony/Component/VarDumper/Tests/CliDumperTest.php
Expand Up @@ -201,6 +201,9 @@ public function testClosedResource()
);
}

/**
* @requires function Twig_Template::getSourceContext
*/
public function testThrowingCaster()
{
$out = fopen('php://memory', 'r+b');
Expand Down Expand Up @@ -235,19 +238,6 @@ public function testThrowingCaster()
rewind($out);
$out = stream_get_contents($out);

if (method_exists($twig, 'getSource')) {
$twig = <<<EOTXT
foo.twig:2: """
foo bar\\n
twig source\\n
\\n
"""
EOTXT;
} else {
$twig = '';
}

$r = defined('HHVM_VERSION') ? '' : '#%d';
$this->assertStringMatchesFormat(
<<<EOTXT
Expand All @@ -269,7 +259,12 @@ public function testThrowingCaster()
throw new \Exception('Foobar');\\n
}\\n
"""
{$twig} }
bar.twig:2: """
foo bar\\n
twig source\\n
\\n
"""
}
}
%d. Twig_Template->displayWithErrorHandling() ==> __TwigTemplate_VarDumperFixture_u75a09->doDisplay(): {
src: {
Expand Down
19 changes: 8 additions & 11 deletions src/Symfony/Component/VarDumper/Tests/Fixtures/Twig.php
Expand Up @@ -3,14 +3,14 @@
/* foo.twig */
class __TwigTemplate_VarDumperFixture_u75a09 extends Twig_Template
{
public function __construct(Twig_Environment $env)
private $filename;

public function __construct(Twig_Environment $env, $filename = 'bar.twig')
{
parent::__construct($env);

$this->parent = false;

$this->blocks = array(
);
$this->blocks = array();
$this->filename = $filename;
}

protected function doDisplay(array $context, array $blocks = array())
Expand All @@ -26,14 +26,11 @@ public function getTemplateName()

public function getDebugInfo()
{
return array (19 => 2);
return array(19 => 2);
}

public function getSource()
public function getSourceContext()
{
return " foo bar
twig source
";
return new Twig_Source(" foo bar\n twig source\n\n", 'foo.twig', $this->filename);
}
}

0 comments on commit f3b09d9

Please sign in to comment.