Skip to content

Commit

Permalink
Merge branch 'NigelGreenway-bug/issue-52'
Browse files Browse the repository at this point in the history
Closes #53
Fixes #52
  • Loading branch information
akrabat committed Mar 13, 2016
2 parents 65bb8df + 9b0a353 commit 16fded2
Show file tree
Hide file tree
Showing 4 changed files with 88 additions and 15 deletions.
6 changes: 5 additions & 1 deletion src/Twig.php
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,11 @@ private function addPaths(array $paths)
$loader = new \Twig_Loader_Filesystem();

foreach ($paths as $namespace => $path) {
$loader->addPath($path, $namespace);
if (is_string($namespace)) {
$loader->setPaths($path, $namespace);
} else {
$loader->addPath($path);
}
}

return $loader;
Expand Down
96 changes: 82 additions & 14 deletions tests/TwigTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,26 +14,65 @@

class TwigTest extends \PHPUnit_Framework_TestCase
{
/**
* @var Twig
*/
protected $view;
public function testFetch()
{
$view = new Twig(dirname(__FILE__) . '/templates');

$output = $view->fetch('example.html', [
'name' => 'Josh'
]);

public function setUp()
$this->assertEquals("<p>Hi, my name is Josh.</p>\n", $output);
}

public function testSingleNamespaceAndMultipleDirectories()
{
$this->view = new Twig(dirname(__FILE__) . '/templates');
$weekday = (new \DateTimeImmutable('2016-03-08'))->format('l');

$view = new Twig(
[
'namespace' => [
__DIR__.'/another',
__DIR__.'/templates',
__DIR__.'/multi',
],
]
);

$anotherDirectory = $view->fetch('@namespace/example.html', [
'name' => 'Peter'
]);

$templatesDirectory = $view->fetch('@namespace/another_example.html', [
'name' => 'Peter',
'gender' => 'male',
]);

$outputMulti = $view->fetch('@namespace/directory/template/example.html', [
'weekday' => $weekday,
]);

$this->assertEquals("<p>Hi, my name is Peter.</p>\n", $anotherDirectory);
$this->assertEquals("<p>Hi, my name is Peter and I am male.</p>\n", $templatesDirectory);
$this->assertEquals('Happy Tuesday!', $outputMulti);
}

public function testFetch()
public function testArrayWithASingleTemplateWithANamespace()
{
$output = $this->view->fetch('example.html', [
$views = new Twig([
'One' => [
__DIR__.'/templates',
],
]);

$output = $views->fetch('@One/example.html', [
'name' => 'Josh'
]);

$this->assertEquals("<p>Hi, my name is Josh.</p>\n", $output);
}

public function testSingleTemplateWithANamespace()
public function testASingleTemplateWithANamespace()
{
$views = new Twig([
'One' => __DIR__.'/templates',
Expand All @@ -46,28 +85,57 @@ public function testSingleTemplateWithANamespace()
$this->assertEquals("<p>Hi, my name is Josh.</p>\n", $output);
}

public function testMultipleTemplatesWithMulNamespace()
public function testMultipleTemplatesWithMultipleNamespace()
{
$weekday = (new \DateTimeImmutable('2016-03-08'))->format('l');

$views = new Twig([
'One' => __DIR__.'/templates',
'Two' => __DIR__.'/another',
'One' => __DIR__.'/templates',
'Two' => __DIR__.'/another',
'Three' => [
__DIR__.'/multi',
],
]);

$outputOne = $views->fetch('@One/example.html', [
'name' => 'Peter'
]);

$outputTwo = $views->fetch('@Two/example.html', [
$outputTwo = $views->fetch('@Two/another_example.html', [
'name' => 'Peter',
'gender' => 'male'
]);

$outputThree = $views->fetch('@Three/directory/template/example.html', [
'weekday' => $weekday,
]);

$this->assertEquals("<p>Hi, my name is Peter.</p>\n", $outputOne);
$this->assertEquals("<p>Hi, my name is Peter and I am male.</p>\n", $outputTwo);
$this->assertEquals('Happy Tuesday!', $outputThree);
}

public function testMultipleDirectoriesWithoutNamespaces()
{
$weekday = (new \DateTimeImmutable('2016-03-08'))->format('l');
$view = new Twig([__DIR__.'/multi/', __DIR__.'/another/']);

$rootDirectory = $view->fetch('directory/template/example.html', [
'weekday' => $weekday,
]);
$multiDirectory = $view->fetch('another_example.html', [
'name' => 'Peter',
'gender' => 'male',
]);

$this->assertEquals('Happy Tuesday!', $rootDirectory);
$this->assertEquals("<p>Hi, my name is Peter and I am male.</p>\n", $multiDirectory);
}

public function testRender()
{
$view = new Twig(dirname(__FILE__) . '/templates');

$mockBody = $this->getMockBuilder('Psr\Http\Message\StreamInterface')
->disableOriginalConstructor()
->getMock();
Expand All @@ -85,7 +153,7 @@ public function testRender()
->method('getBody')
->willReturn($mockBody);

$response = $this->view->render($mockResponse, 'example.html', [
$response = $view->render($mockResponse, 'example.html', [
'name' => 'Josh'
]);
$this->assertInstanceOf('Psr\Http\Message\ResponseInterface', $response);
Expand Down
File renamed without changes.
1 change: 1 addition & 0 deletions tests/multi/directory/template/example.html
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Happy {{ weekday }}!

0 comments on commit 16fded2

Please sign in to comment.