Fix adding mock extension to Twig environment

When the extension class is not defined in a file but in eval'd code
we cannot assume ReflectionObject::getFileName will return
a valid file path.

https://bugs.php.net/bug.php?id=63901
This commit is contained in:
Jérôme Tamarelle
2015-10-13 20:33:02 +02:00
committed by Jerome TAMARELLE
parent 53aa70a3f4
commit a57b1cc3be
2 changed files with 17 additions and 1 deletions
+1 -1
View File
@@ -462,7 +462,7 @@ class Twig_Environment
if (0 === $this->lastModifiedExtension) {
foreach ($this->extensions as $extension) {
$r = new ReflectionObject($extension);
if (($extensionTime = filemtime($r->getFileName())) > $this->lastModifiedExtension) {
if (file_exists($r->getFileName()) && ($extensionTime = filemtime($r->getFileName())) > $this->lastModifiedExtension) {
$this->lastModifiedExtension = $extensionTime;
}
}
+16
View File
@@ -292,6 +292,22 @@ class Twig_Tests_EnvironmentTest extends PHPUnit_Framework_TestCase
$this->assertCount(2, $twig->getNodeVisitors());
}
public function testAddMockExtension()
{
$extension = $this->getMock('Twig_ExtensionInterface');
$extension->expects($this->once())
->method('getName')
->will($this->returnValue('mock'));
$loader = new Twig_Loader_Array(array('page' => 'hey'));
$twig = new Twig_Environment($loader);
$twig->addExtension($extension);
$this->assertInstanceOf('Twig_ExtensionInterface', $twig->getExtension('mock'));
$this->assertTrue($twig->isTemplateFresh('page', time()));
}
protected function getMockLoader($templateName, $templateContent)
{
$loader = $this->getMock('Twig_LoaderInterface');