From a1f957af84130963ef20855dfee03ba86ab1a9b6 Mon Sep 17 00:00:00 2001 From: Nathan Guse Date: Mon, 24 Jun 2013 15:28:54 -0500 Subject: [PATCH] [feature/twig] Working on fixing tests PHPBB3-11598 --- phpBB/includes/style/style.php | 2 +- phpBB/includes/template/template.php | 7 +++ phpBB/includes/template/twig/node/begin.php | 34 ++++++++---- phpBB/includes/template/twig/twig.php | 57 +++++++++++++-------- tests/template/template_test_case.php | 35 ++----------- 5 files changed, 72 insertions(+), 63 deletions(-) diff --git a/phpBB/includes/style/style.php b/phpBB/includes/style/style.php index 5aeeac40e4..493c4512a6 100644 --- a/phpBB/includes/style/style.php +++ b/phpBB/includes/style/style.php @@ -160,7 +160,7 @@ class phpbb_style $this->template->set_style_names($names, $appended_paths); } - $this->template->cachepath = $this->phpbb_root_path . 'cache/tpl_' . str_replace('_', '-', $name) . '_'; + //$this->template->cachepath = $this->phpbb_root_path . 'cache/tpl_' . str_replace('_', '-', $name) . '_'; return true; } diff --git a/phpBB/includes/template/template.php b/phpBB/includes/template/template.php index 5dadd34084..15f0b6ee60 100644 --- a/phpBB/includes/template/template.php +++ b/phpBB/includes/template/template.php @@ -130,4 +130,11 @@ interface phpbb_template * @return bool false on error, true on success */ public function alter_block_array($blockname, array $vararray, $key = false, $mode = 'insert'); + + /** + * Clear the cache + * + * @return phpbb_template + */ + public function clear_cache(); } diff --git a/phpBB/includes/template/twig/node/begin.php b/phpBB/includes/template/twig/node/begin.php index 4222295d26..3c1ce1b89b 100644 --- a/phpBB/includes/template/twig/node/begin.php +++ b/phpBB/includes/template/twig/node/begin.php @@ -32,20 +32,36 @@ class phpbb_template_twig_node_begin extends Twig_Node ; $compiler - ->write("foreach (\$parent['" . $this->getAttribute('beginName') . "'] as \$" . $this->getAttribute('beginName') . ") {\n") - ->indent() - // Set up $context correctly so that Twig can get the correct data with $this->getAttribute - ->write("\$this->getEnvironment()->context_recursive_loop_builder(\$" . $this->getAttribute('beginName') . ", \$phpbb_blocks, \$context);\n") + ->write("if (!empty(\$parent['" . $this->getAttribute('beginName') . "'])) {\n") + ->indent() + ->write("foreach (\$parent['" . $this->getAttribute('beginName') . "'] as \$" . $this->getAttribute('beginName') . ") {\n") + ->indent() + // Set up $context correctly so that Twig can get the correct data with $this->getAttribute + ->write("\$this->getEnvironment()->context_recursive_loop_builder(\$" . $this->getAttribute('beginName') . ", \$phpbb_blocks, \$context);\n") - // We store the parent so that we can do this recursively - ->write("\$parent = \$" . $this->getAttribute('beginName') . ";\n") + // We store the parent so that we can do this recursively + ->write("\$parent = \$" . $this->getAttribute('beginName') . ";\n") ; $compiler->subcompile($this->getNode('body')); - $compiler - ->outdent() - ->write("}\n") + $compiler + ->outdent() + ->write("}\n") + ; + + if (null !== $this->getNode('else')) { + $compiler + ->write("} else {\n") + ->indent() + ->subcompile($this->getNode('else')) + ->outdent() + ; + } + + $compiler + ->outdent() + ->write("}\n") // Remove the last item from the blocks storage as we've completed iterating over them all ->write("array_pop(\$phpbb_blocks);\n") diff --git a/phpBB/includes/template/twig/twig.php b/phpBB/includes/template/twig/twig.php index c894fb5567..e2c9afbc78 100644 --- a/phpBB/includes/template/twig/twig.php +++ b/phpBB/includes/template/twig/twig.php @@ -114,10 +114,6 @@ class phpbb_template_twig implements phpbb_template // Initiate the loader, __main__ namespace paths will be setup later in set_style_names() $loader = new Twig_Loader_Filesystem(''); - // Add admin namespace - // @todo use phpbb_admin path - $loader->addPath($this->phpbb_root_path . 'adm/style/', 'admin'); - $this->twig = new phpbb_template_twig_environment($loader, array( 'cache' => $this->cachepath, 'debug' => true, // @todo @@ -133,10 +129,7 @@ class phpbb_template_twig implements phpbb_template // Clear previous cache files (while WIP) // @todo remove - if (is_dir($this->cachepath)) - { - $this->twig->clearCacheFiles(); - } + $this->clear_cache(); $this->twig->addExtension(new phpbb_template_twig_extension); @@ -145,6 +138,21 @@ class phpbb_template_twig implements phpbb_template $this->twig->setLexer($lexer); } + /** + * Clear the cache + * + * @return phpbb_template + */ + public function clear_cache() + { + if (is_dir($this->cachepath)) + { + $this->twig->clearCacheFiles(); + } + + return $this; + } + /** * Sets the template filenames for handles. * @@ -177,6 +185,10 @@ class phpbb_template_twig implements phpbb_template { $this->twig->getLoader()->setPaths($style_paths, 'core'); + // Add admin namespace + // @todo use phpbb_admin path + $loader->addPath($this->phpbb_root_path . 'adm/style/', 'admin'); + // Add all namespaces for all extensions if ($this->extension_manager instanceof phpbb_extension_manager) { @@ -415,25 +427,28 @@ class phpbb_template_twig implements phpbb_template $vars = array(); // Work-around for now - foreach ($this->user->lang as $key => $value) + if (!empty($this->user->lang)) { - if (!is_string($value)) + foreach ($this->user->lang as $key => $value) { - continue; + if (!is_string($value)) + { + continue; + } + + $vars['L_' . strtoupper($key)] = $value; + $vars['LA_' . strtoupper($key)] = addslashes($value); } - $vars['L_' . strtoupper($key)] = $value; - $vars['LA_' . strtoupper($key)] = addslashes($value); + $vars = array_merge( + $vars, + $this->context->get_rootref(), + array( + '_phpbb_blocks' => $this->context->get_tpldata(), + ) + ); } - $vars = array_merge( - $vars, - $this->context->get_rootref(), - array( - '_phpbb_blocks' => $this->context->get_tpldata(), - ) - ); - // Must do this so that works correctly // (only for the base loops, the rest are properly handled by the begin node) foreach ($this->context->get_tpldata() as $block_name => $block_values) diff --git a/tests/template/template_test_case.php b/tests/template/template_test_case.php index e39896b970..5ff15fff53 100644 --- a/tests/template/template_test_case.php +++ b/tests/template/template_test_case.php @@ -77,32 +77,15 @@ class phpbb_template_template_test_case extends phpbb_test_case // Test the engine can be used $this->setup_engine(); - $template_cache_dir = dirname($this->template->cachepath); - if (!is_writable($template_cache_dir)) - { - $this->markTestSkipped("Template cache directory ({$template_cache_dir}) is not writable."); - } - - foreach (glob($this->template->cachepath . '*') as $file) - { - unlink($file); - } - - $this->setup_engine(); + $this->template->clear_cache(); } protected function tearDown() { - if (is_object($this->template)) - { - foreach (glob($this->template->cachepath . '*') as $file) - { - unlink($file); - } - } + $this->template->clear_cache(); } - protected function run_template($file, array $vars, array $block_vars, array $destroy, $expected, $cache_file) + protected function run_template($file, array $vars, array $block_vars, array $destroy, $expected) { $this->template->set_filenames(array('test' => $file)); $this->template->assign_vars($vars); @@ -123,22 +106,10 @@ class phpbb_template_template_test_case extends phpbb_test_case try { $this->assertEquals($expected, $this->display('test'), "Testing $file"); - $this->assertFileExists($cache_file); } catch (ErrorException $e) { - if (file_exists($cache_file)) - { - copy($cache_file, str_replace('ctpl_', 'tests_ctpl_', $cache_file)); - } throw $e; } - - // For debugging. - // When testing eval path the cache file may not exist. - if (self::PRESERVE_CACHE && file_exists($cache_file)) - { - copy($cache_file, str_replace('ctpl_', 'tests_ctpl_', $cache_file)); - } } }