<?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 testTwigExceptionAddsFileAndLineWhenMissing() {
$loader = new Twig_Loader_Array(array(
'index' => "\n\n{{ foo.bar }}\n\n\n{{ 'foo' }}",
));
$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('Variable "foo" does not exist in "index" at line 3', $e
->getMessage());
$this
->assertEquals(3, $e
->getTemplateLine());
$this
->assertEquals('index', $e
->getTemplateFile());
}
}
public function testRenderWrapsExceptions() {
$loader = new Twig_Loader_Array(array(
'index' => "\n\n\n{{ foo.bar }}\n\n\n\n{{ 'foo' }}",
));
$twig = new Twig_Environment($loader, array(
'strict_variables' => true,
'debug' => true,
'cache' => false,
));
$template = $twig
->loadTemplate('index');
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" at line 4.', $e
->getMessage());
$this
->assertEquals(4, $e
->getTemplateLine());
$this
->assertEquals('index', $e
->getTemplateFile());
}
}
public function testTwigExceptionAddsFileAndLineWhenMissingWithInheritance() {
$loader = new Twig_Loader_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 %}',
));
$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('Variable "foo" does not exist in "index" at line 3', $e
->getMessage());
$this
->assertEquals(3, $e
->getTemplateLine());
$this
->assertEquals('index', $e
->getTemplateFile());
}
}
}
class Twig_Tests_ErrorTest_Foo {
public function bar() {
throw new Exception('Runtime error...');
}
}