189 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			189 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
<?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);
 | 
						|
    }
 | 
						|
}
 |