Location: PHPKode > projects > Nella Framework > nella-framework-7e780c6/tests/cases/Application/UI/ControlTest.php
<?php
/**
 * This file is part of the Nella Framework (http://nellafw.org).
 *
 * Copyright (c) 2006, 2012 Patrik Votoček (http://patrik.votocek.cz)
 *
 * For the full copyright and license information, please view the file LICENSE.txt that was distributed with this source code.
 */

namespace NellaTests\Application\UI;

class ControlTest extends \Nella\Testing\TestCase
{
	/** @var Control\ControlMock */
	private $control;

	public function setup()
	{
		parent::setup();

		$context = $this->getContext();

		$formatter = new \Nella\Templating\TemplateFilesFormatter;
		$formatter->addDir(__DIR__, 5)
				->addDir($context->parameters['appDir'], 999)
				->addDir($context->expand('%appDir%/Nella'), 0);

		if (!$context->hasService('nella')) {
			$context->addService('nella', new \Nette\DI\NestedAccessor($context, 'nella'));
		}

		$context->removeService('nella.templateFilesFormatter');
		$context->addService('nella.templateFilesFormatter', $formatter);

		$this->control = new Control\ControlMock(new Control\PresenterMock($context), 'test');
	}

	public function dataFormatTemplateFiles()
	{
		$context = $this->getContext();
		return array(
			array('render', array(
				$context->parameters['appDir'] . "/Application/UI/Control/ControlMock.latte",
				$context->parameters['appDir'] . "/Application/UI/Control/ControlMock/@global.latte",
				$context->parameters['appDir'] . "/Application/UI/Control/@global.latte",
				__DIR__ . "/Application/UI/Control/ControlMock.latte",
				__DIR__ . "/Application/UI/Control/ControlMock/@global.latte",
				__DIR__ . "/Application/UI/Control/@global.latte",
				$context->expand('%appDir%/Nella') . "/Application/UI/Control/ControlMock.latte",
				$context->expand('%appDir%/Nella') . "/Application/UI/Control/ControlMock/@global.latte",
				$context->expand('%appDir%/Nella') . "/Application/UI/Control/@global.latte",
			)),
			array('renderTest', array(
				$context->parameters['appDir'] . "/Application/UI/Control/ControlMock/test.latte",
				$context->parameters['appDir'] . "/Application/UI/Control/ControlMock.test.latte",
				$context->parameters['appDir'] . "/Application/UI/Control/ControlMock/@global.latte",
				$context->parameters['appDir'] . "/Application/UI/Control/@global.latte",
				__DIR__ . "/Application/UI/Control/ControlMock/test.latte",
				__DIR__ . "/Application/UI/Control/ControlMock.test.latte",
				__DIR__ . "/Application/UI/Control/ControlMock/@global.latte",
				__DIR__ . "/Application/UI/Control/@global.latte",
				$context->expand('%appDir%/Nella') . "/Application/UI/Control/ControlMock/test.latte",
				$context->expand('%appDir%/Nella') . "/Application/UI/Control/ControlMock.test.latte",
				$context->expand('%appDir%/Nella') . "/Application/UI/Control/ControlMock/@global.latte",
				$context->expand('%appDir%/Nella') . "/Application/UI/Control/@global.latte",
			)),
		);
	}

	/**
	 * @dataProvider dataFormatTemplateFiles
	 */
	public function testFormatTemplateFiles($method, $eq)
	{
		$files = $this->control->formatTemplateFilesMock($method);

		$this->assertEquals($eq, $files, "->formatTemplateFiles('$method')");
	}

	public function testFormatTemplateFile()
	{
		$fixturesDir = $this->getContext()->parameters['fixturesDir'];
		$this->getContext()->getService('nella.templateFilesFormatter')
				->addDir($fixturesDir);

		$this->assertEquals(
			$fixturesDir . "/Application/UI/Control/ControlMock.latte",
			$this->control->formatTemplateFileMock('render'),
			"->formatTemplateFile for default view"
		);
	}

	/**
	 * @expectedException Nette\InvalidStateException
	 */
	public function testFormatTemplateFileException()
	{
		$this->control->formatTemplateFileMock('renderFoo');
	}

	/**
	 * @depends testFormatTemplateFile
	 */
	public function testRender()
	{
		$this->getContext()->getService('nella.templateFilesFormatter')
				->addDir($this->getContext()->parameters['fixturesDir']);

		ob_start();
		$this->control->render();
		$data = ob_get_clean();

		$this->assertEquals("TEST", $data, "->render()");
	}
}

namespace NellaTests\Application\UI\Control;

class PresenterMock extends \Nella\Application\UI\Presenter { }

class ControlMock extends \Nella\Application\UI\Control
{
	public function formatTemplateFilesMock($method)
	{
		return $this->formatTemplateFiles($method);
	}

	public function formatTemplateFileMock($method)
	{
		return $this->formatTemplateFile($method);
	}

	public function render()
	{
		$this->_render(__METHOD__);
	}
}
Return current item: Nella Framework