In this repo i store all my websites, each in a different branch
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

188 lines
5.5 KiB

<?php
/**
* Slim Framework (http://slimframework.com)
*
* @link https://github.com/codeguy/Slim
* @copyright Copyright (c) 2011-2015 Josh Lockhart
* @license https://github.com/codeguy/Slim/blob/master/LICENSE (MIT License)
*/
namespace Slim\Tests\Views;
use Slim\Views\Twig;
require dirname(__DIR__) . '/vendor/autoload.php';
class TwigTest extends \PHPUnit_Framework_TestCase
{
public function testFetch()
{
$view = new Twig(dirname(__FILE__) . '/templates');
$output = $view->fetch('example.html', [
'name' => 'Josh'
]);
$this->assertEquals("<p>Hi, my name is Josh.</p>\n", $output);
}
public function testFetchFromString()
{
$view = new Twig(dirname(__FILE__) . '/templates');
$output = $view->fetchFromString("<p>Hi, my name is {{ name }}.</p>", [
'name' => 'Josh'
]);
$this->assertEquals("<p>Hi, my name is Josh.</p>", $output);
}
public function testFetchBlock()
{
$view = new Twig(dirname(__FILE__) . '/templates');
$outputOne = $view->fetchBlock('block_example.html', 'first', [
'name' => 'Josh'
]);
$outputTwo = $view->fetchBlock('block_example.html', 'second', [
'name' => 'Peter'
]);
$this->assertEquals("<p>Hi, my name is Josh.</p>", $outputOne);
$this->assertEquals("<p>My name is not Peter.</p>", $outputTwo);
}
public function testSingleNamespaceAndMultipleDirectories()
{
$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 testArrayWithASingleTemplateWithANamespace()
{
$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 testASingleTemplateWithANamespace()
{
$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 testMultipleTemplatesWithMultipleNamespace()
{
$weekday = (new \DateTimeImmutable('2016-03-08'))->format('l');
$views = new Twig([
'One' => __DIR__.'/templates',
'Two' => __DIR__.'/another',
'Three' => [
__DIR__.'/multi',
],
]);
$outputOne = $views->fetch('@One/example.html', [
'name' => 'Peter'
]);
$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();
$mockResponse = $this->getMockBuilder('Psr\Http\Message\ResponseInterface')
->disableOriginalConstructor()
->getMock();
$mockBody->expects($this->once())
->method('write')
->with("<p>Hi, my name is Josh.</p>\n")
->willReturn(28);
$mockResponse->expects($this->once())
->method('getBody')
->willReturn($mockBody);
$response = $view->render($mockResponse, 'example.html', [
'name' => 'Josh'
]);
$this->assertInstanceOf('Psr\Http\Message\ResponseInterface', $response);
}
}