<?php
class Twig_Tests_Loader_FilesystemTest extends PHPUnit_Framework_TestCase {
public function testSecurity($template) {
$loader = new Twig_Loader_Filesystem(array(
dirname(__FILE__) . '/../Fixtures',
));
try {
$loader
->getCacheKey($template);
$this
->fail();
} catch (Twig_Error_Loader $e) {
$this
->assertNotContains('Unable to find template', $e
->getMessage());
}
}
public function getSecurityTests() {
return array(
array(
"AutoloaderTest\0.php",
),
array(
'..\\AutoloaderTest.php',
),
array(
'..\\\\\\AutoloaderTest.php',
),
array(
'../AutoloaderTest.php',
),
array(
'..////AutoloaderTest.php',
),
array(
'./../AutoloaderTest.php',
),
array(
'.\\..\\AutoloaderTest.php',
),
array(
'././././././../AutoloaderTest.php',
),
array(
'.\\./.\\./.\\./../AutoloaderTest.php',
),
array(
'foo/../../AutoloaderTest.php',
),
array(
'foo\\..\\..\\AutoloaderTest.php',
),
array(
'foo/../bar/../../AutoloaderTest.php',
),
array(
'foo/bar/../../../AutoloaderTest.php',
),
array(
'filters/../../AutoloaderTest.php',
),
array(
'filters//..//..//AutoloaderTest.php',
),
array(
'filters\\..\\..\\AutoloaderTest.php',
),
array(
'filters\\\\..\\\\..\\\\AutoloaderTest.php',
),
array(
'filters\\//../\\/\\..\\AutoloaderTest.php',
),
array(
'/../AutoloaderTest.php',
),
);
}
public function testPaths() {
$basePath = dirname(__FILE__) . '/Fixtures';
$loader = new Twig_Loader_Filesystem(array(
$basePath . '/normal',
$basePath . '/normal_bis',
));
$loader
->setPaths(array(
$basePath . '/named',
$basePath . '/named_bis',
), 'named');
$loader
->addPath($basePath . '/named_ter', 'named');
$loader
->addPath($basePath . '/normal_ter');
$loader
->prependPath($basePath . '/normal_final');
$loader
->prependPath($basePath . '/named_final', 'named');
$this
->assertEquals(array(
$basePath . '/normal_final',
$basePath . '/normal',
$basePath . '/normal_bis',
$basePath . '/normal_ter',
), $loader
->getPaths());
$this
->assertEquals(array(
$basePath . '/named_final',
$basePath . '/named',
$basePath . '/named_bis',
$basePath . '/named_ter',
), $loader
->getPaths('named'));
$this
->assertEquals("path (final)\n", $loader
->getSource('index.html'));
$this
->assertEquals("path (final)\n", $loader
->getSource('@__main__/index.html'));
$this
->assertEquals("named path (final)\n", $loader
->getSource('@named/index.html'));
}
public function testGetNamespaces() {
$loader = new Twig_Loader_Filesystem(sys_get_temp_dir());
$this
->assertEquals(array(
'__main__',
), $loader
->getNamespaces());
$loader
->addPath(sys_get_temp_dir(), 'named');
$this
->assertEquals(array(
'__main__',
'named',
), $loader
->getNamespaces());
}
}