View source
<?php
class Twig_Tests_ErrorTest extends PHPUnit_Framework_TestCase {
public function testErrorWithObjectFilename() {
$error = new Twig_Error('foo');
$error
->setTemplateFile(new SplFileInfo(__FILE__));
$this
->assertContains('test' . DIRECTORY_SEPARATOR . 'Twig' . DIRECTORY_SEPARATOR . 'Tests' . DIRECTORY_SEPARATOR . 'ErrorTest.php', $error
->getMessage());
}
public function testErrorWithArrayFilename() {
$error = new Twig_Error('foo');
$error
->setTemplateFile(array(
'foo' => 'bar',
));
$this
->assertEquals('foo in {"foo":"bar"}', $error
->getMessage());
}
public function testTwigExceptionAddsFileAndLineWhenMissingWithInheritanceOnDisk() {
$loader = new Twig_Loader_Filesystem(dirname(__FILE__) . '/Fixtures/errors');
$twig = new Twig_Environment($loader, array(
'strict_variables' => true,
'debug' => true,
'cache' => false,
));
$template = $twig
->loadTemplate('index.html');
try {
$template
->render(array());
$this
->fail();
} catch (Twig_Error_Runtime $e) {
$this
->assertEquals('Variable "foo" does not exist in "index.html" at line 3', $e
->getMessage());
$this
->assertEquals(3, $e
->getTemplateLine());
$this
->assertEquals('index.html', $e
->getTemplateFile());
}
try {
$template
->render(array(
'foo' => new Twig_Tests_ErrorTest_Foo(),
));
$this
->fail();
} catch (Twig_Error_Runtime $e) {
$this
->assertEquals('An exception has been thrown during the rendering of a template ("Runtime error...") in "index.html" at line 3.', $e
->getMessage());
$this
->assertEquals(3, $e
->getTemplateLine());
$this
->assertEquals('index.html', $e
->getTemplateFile());
}
}
public function testTwigExceptionAddsFileAndLine($templates, $name, $line) {
$loader = new Twig_Loader_Array($templates);
$twig = new Twig_Environment($loader, array(
'strict_variables' => true,
'debug' => true,
'cache' => false,
));
$template = $twig
->loadTemplate('index');
try {
$template
->render(array());
$this
->fail();
} catch (Twig_Error_Runtime $e) {
$this
->assertEquals(sprintf('Variable "foo" does not exist in "%s" at line %d', $name, $line), $e
->getMessage());
$this
->assertEquals($line, $e
->getTemplateLine());
$this
->assertEquals($name, $e
->getTemplateFile());
}
try {
$template
->render(array(
'foo' => new Twig_Tests_ErrorTest_Foo(),
));
$this
->fail();
} catch (Twig_Error_Runtime $e) {
$this
->assertEquals(sprintf('An exception has been thrown during the rendering of a template ("Runtime error...") in "%s" at line %d.', $name, $line), $e
->getMessage());
$this
->assertEquals($line, $e
->getTemplateLine());
$this
->assertEquals($name, $e
->getTemplateFile());
}
}
public function getErroredTemplates() {
return array(
array(
array(
'index' => "\n\n{{ foo.bar }}\n\n\n{{ 'foo' }}",
),
'index',
3,
),
array(
array(
'index' => "{% include 'partial' %}",
'partial' => '{{ foo.bar }}',
),
'partial',
1,
),
array(
array(
'index' => "{% extends 'base' %}\n {% block content %}\n {{ parent() }}\n {% endblock %}",
'base' => '{% block content %}{{ foo.bar }}{% endblock %}',
),
'base',
1,
),
array(
array(
'index' => "{% extends 'base' %}\n {% block content %}\n {{ foo.bar }}\n {% endblock %}\n {% block foo %}\n {{ foo.bar }}\n {% endblock %}",
'base' => '{% block content %}{% endblock %}',
),
'index',
3,
),
);
}
}
class Twig_Tests_ErrorTest_Foo {
public function bar() {
throw new Exception('Runtime error...');
}
}