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"); + } +} |