diff options
Diffstat (limited to 'tests/template/template_test_case.php')
| -rw-r--r-- | tests/template/template_test_case.php | 127 | 
1 files changed, 127 insertions, 0 deletions
diff --git a/tests/template/template_test_case.php b/tests/template/template_test_case.php new file mode 100644 index 0000000000..c75b1e5065 --- /dev/null +++ b/tests/template/template_test_case.php @@ -0,0 +1,127 @@ +<?php +/** +* +* @package testing +* @copyright (c) 2011 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +require_once dirname(__FILE__) . '/../../phpBB/includes/functions.php'; + +class phpbb_template_template_test_case extends phpbb_test_case +{ +	protected $template; +	protected $template_path; +	protected $user; + +	protected $test_path = 'tests/template'; + +	// Keep the contents of the cache for debugging? +	const PRESERVE_CACHE = true; + +	protected function display($handle) +	{ +		ob_start(); + +		try +		{ +			$this->template->display($handle, false); +		} +		catch (Exception $exception) +		{ +			// reset output buffering even when an error occurred +			// PHPUnit turns trigger_error into exceptions as well +			ob_end_clean(); +			throw $exception; +		} + +		$result = self::trim_template_result(ob_get_clean()); + +		return $result; +	} + +	protected static function trim_template_result($result) +	{ +		return str_replace("\n\n", "\n", implode("\n", array_map('trim', explode("\n", trim($result))))); +	} + +	protected function config_defaults() +	{ +		$defaults = array( +			'load_tplcompile'	=> true, +			'tpl_allow_php'		=> false, +		); +		return $defaults; +	} + +	protected function setup_engine(array $new_config = array()) +	{ +		global $phpbb_root_path, $phpEx; + +		$defaults = $this->config_defaults(); +		$config = new \phpbb\config\config(array_merge($defaults, $new_config)); +		$this->user = new \phpbb\user; + +		$path_helper = new \phpbb\path_helper( +			new \phpbb\symfony_request( +				new phpbb_mock_request() +			), +			new \phpbb\filesystem(), +			$phpbb_root_path, +			$phpEx +		); + +		$this->template_path = $this->test_path . '/templates'; +		$this->template = new \phpbb\template\twig\twig($path_helper, $config, $this->user, new \phpbb\template\context()); +		$this->template->set_custom_style('tests', $this->template_path); +	} + +	protected function setUp() +	{ +		// Test the engine can be used +		$this->setup_engine(); + +		$this->template->clear_cache(); +	} + +	protected function tearDown() +	{ +		if ($this->template) +		{ +			$this->template->clear_cache(); +		} +	} + +	protected function run_template($file, array $vars, array $block_vars, array $destroy, $expected, $lang_vars = array()) +	{ +		$this->template->set_filenames(array('test' => $file)); +		$this->template->assign_vars($vars); + +		foreach ($block_vars as $block => $loops) +		{ +			foreach ($loops as $_vars) +			{ +				$this->template->assign_block_vars($block, $_vars); +			} +		} + +		foreach ($destroy as $block) +		{ +			$this->template->destroy_block_vars($block); +		} + +		// Previous functionality was $cachefile (string), which was removed, check to prevent errors +		if (is_array($lang_vars)) +		{ +			foreach ($lang_vars as $name => $value) +			{ +				$this->user->lang[$name] = $value; +			} +		} + +		$expected = str_replace(array("\n", "\r", "\t"), '', $expected); +		$output = str_replace(array("\n", "\r", "\t"), '', $this->display('test')); +		$this->assertEquals($expected, $output, "Testing $file"); +	} +}  | 
