diff options
Diffstat (limited to 'tests/template')
25 files changed, 563 insertions, 28 deletions
| diff --git a/tests/template/asset_test.php b/tests/template/asset_test.php new file mode 100644 index 0000000000..3d2fdd8959 --- /dev/null +++ b/tests/template/asset_test.php @@ -0,0 +1,49 @@ +<?php +/** +* +* This file is part of the phpBB Forum Software package. +* +* @copyright (c) phpBB Limited <https://www.phpbb.com> +* @license GNU General Public License, version 2 (GPL-2.0) +* +* For full copyright and license information, please see +* the docs/CREDITS.txt file. +* +*/ + +use phpbb\template\asset; + +class phpbb_template_asset_test extends phpbb_test_case +{ +	public function set_path_data() +	{ +		return array( +			// array(phpbb_root_path, given path, expected path), +			array('.', 'foo/bar', 'foo/bar'), +			array('../', 'foo/bar', 'foo/bar'), +			array('./phpBB/', 'foo/bar', 'foo/bar'), +			array('../', __DIR__ . '/foo/bar', '../' . basename(dirname(dirname(__DIR__))) . '/tests/template/foo/bar'), +			array('./', __DIR__ . '/foo/bar', './tests/template/foo/bar'), +			array('./phpBB/', __DIR__ . '/foo/bar', 'tests/template/foo/bar'), +		); +	} + +	/** +	 * @dataProvider set_path_data +	 */ +	public function test_set_path($phpbb_root_path, $path, $expected) +	{ +		$path_helper = $this->getMockBuilder('\phpbb\path_helper') +			->disableOriginalConstructor() +			->setMethods(array()) +			->getMock(); + +		$path_helper->method('get_phpbb_root_path') +			->willReturn($phpbb_root_path); + +		$asset = new asset('', $path_helper, new phpbb\filesystem\filesystem()); + +		$asset->set_path($path, true); +		$this->assertEquals($expected, $asset->get_path()); +	} +} diff --git a/tests/template/includephp_test.php b/tests/template/includephp_test.php index fdddbef4f2..722e10e42d 100644 --- a/tests/template/includephp_test.php +++ b/tests/template/includephp_test.php @@ -39,8 +39,9 @@ class phpbb_template_includephp_test extends phpbb_template_template_test_case  	{  		global $phpbb_root_path; +		$filesystem = new \phpbb\filesystem\filesystem();  		$path_to_php = str_replace('\\', '/', dirname(__FILE__)) . '/templates/_dummy_include.php.inc'; -		$this->assertTrue(phpbb_is_absolute($path_to_php)); +		$this->assertTrue($filesystem->is_absolute_path($path_to_php));  		$template_text = "Path is absolute.\n<!-- INCLUDEPHP $path_to_php -->";  		$cache_dir = $phpbb_root_path . 'cache/'; diff --git a/tests/template/template_allfolder_test.php b/tests/template/template_allfolder_test.php index b4ad84e9c3..9a0f1f512e 100644 --- a/tests/template/template_allfolder_test.php +++ b/tests/template/template_allfolder_test.php @@ -28,13 +28,18 @@ class phpbb_template_allfolder_test extends phpbb_template_template_test_case  		$defaults = $this->config_defaults();  		$config = new \phpbb\config\config(array_merge($defaults, $new_config)); -		$this->user = new \phpbb\user('\phpbb\datetime'); +		$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx); +		$lang = new \phpbb\language\language($lang_loader); +		$user = new \phpbb\user($lang, '\phpbb\datetime'); +		$this->user = $user; + +		$filesystem = new \phpbb\filesystem\filesystem();  		$path_helper = new \phpbb\path_helper(  			new \phpbb\symfony_request(  				new phpbb_mock_request()  			), -			new \phpbb\filesystem(), +			$filesystem,  			$this->getMock('\phpbb\request\request'),  			$phpbb_root_path,  			$phpEx @@ -51,9 +56,30 @@ class phpbb_template_allfolder_test extends phpbb_template_template_test_case  			)  		); +		$container = new phpbb_mock_container_builder(); +		$cache_path = $phpbb_root_path . 'cache/twig'; +		$context = new \phpbb\template\context(); +		$loader = new \phpbb\template\twig\loader(new \phpbb\filesystem\filesystem(), ''); +		$twig = new \phpbb\template\twig\environment( +			$config, +			$filesystem, +			$path_helper, +			$container, +			$cache_path, +			$this->extension_manager, +			$loader, +			array( +				'cache'			=> false, +				'debug'			=> false, +				'auto_reload'	=> true, +				'autoescape'	=> false, +			) +		); +		$this->template = new \phpbb\template\twig\twig($path_helper, $config, $context, $twig, $cache_path, $this->user, array(new \phpbb\template\twig\extension($context, $this->user)), $this->extension_manager); +		$container->set('template.twig.lexer', new \phpbb\template\twig\lexer($twig)); +  		$this->template_path = $this->test_path . '/templates';  		$this->ext_template_path = 'tests/extension/ext/vendor4/bar/styles/all/template'; -		$this->template = new \phpbb\template\twig\twig($path_helper, $config, $this->user, new \phpbb\template\context(), $this->extension_manager);  		$this->template->set_custom_style('all', array($this->template_path, $this->ext_template_path));  	}  } diff --git a/tests/template/template_events_test.php b/tests/template/template_events_test.php index c415c969fe..54e08652a1 100644 --- a/tests/template/template_events_test.php +++ b/tests/template/template_events_test.php @@ -138,16 +138,40 @@ Zeta test event in all',  		$this->extension_manager = new phpbb_mock_filesystem_extension_manager(  			dirname(__FILE__) . "/datasets/$dataset/"  		); + +		$filesystem = new \phpbb\filesystem\filesystem();  		$path_helper = new \phpbb\path_helper(  			new \phpbb\symfony_request(  				new phpbb_mock_request()  			), -			new \phpbb\filesystem(), +			new \phpbb\filesystem\filesystem(),  			$this->getMock('\phpbb\request\request'),  			$phpbb_root_path,  			$phpEx  		); -		$this->template = new \phpbb\template\twig\twig($path_helper, $config, $user, new \phpbb\template\context, $this->extension_manager); + +		$container = new phpbb_mock_container_builder(); +		$cache_path = $phpbb_root_path . 'cache/twig'; +		$context = new \phpbb\template\context(); +		$loader = new \phpbb\template\twig\loader(new \phpbb\filesystem\filesystem(), ''); +		$twig = new \phpbb\template\twig\environment( +			$config, +			$filesystem, +			$path_helper, +			$container, +			$cache_path, +			$this->extension_manager, +			$loader, +			array( +				'cache'			=> false, +				'debug'			=> false, +				'auto_reload'	=> true, +				'autoescape'	=> false, +			) +		); +		$this->template = new \phpbb\template\twig\twig($path_helper, $config, $context, $twig, $cache_path, $this->user, array(new \phpbb\template\twig\extension($context, $this->user)), $this->extension_manager); +		$container->set('template.twig.lexer', new \phpbb\template\twig\lexer($twig)); +  		$this->template->set_custom_style(((!empty($style_names)) ? $style_names : 'silver'), array($this->template_path));  	}  } diff --git a/tests/template/template_includecss_test.php b/tests/template/template_includecss_test.php index 4ef9b90ec4..ac62e820ae 100644 --- a/tests/template/template_includecss_test.php +++ b/tests/template/template_includecss_test.php @@ -15,6 +15,12 @@ require_once dirname(__FILE__) . '/template_test_case_with_tree.php';  class phpbb_template_template_includecss_test extends phpbb_template_template_test_case_with_tree  { +	/** @var \phpbb\path_helper */ +	protected $phpbb_path_helper; + +	/** @var string */ +	protected $parent_template_path; +  	protected function setup_engine(array $new_config = array())  	{  		global $phpbb_root_path, $phpEx, $user; @@ -22,11 +28,13 @@ class phpbb_template_template_includecss_test extends phpbb_template_template_te  		$defaults = $this->config_defaults();  		$config = new \phpbb\config\config(array_merge($defaults, $new_config)); +		$filesystem = new \phpbb\filesystem\filesystem(); +  		$this->phpbb_path_helper = new \phpbb\path_helper(  			new \phpbb\symfony_request(  				new phpbb_mock_request()  			), -			new \phpbb\filesystem(), +			$filesystem,  			$this->getMock('\phpbb\request\request'),  			$phpbb_root_path,  			$phpEx @@ -34,11 +42,33 @@ class phpbb_template_template_includecss_test extends phpbb_template_template_te  		$this->template_path = $this->test_path . '/templates';  		$this->parent_template_path = $this->test_path . '/parent_templates'; +		$container = new phpbb_mock_container_builder(); +		$cache_path = $phpbb_root_path . 'cache/twig'; +		$context = new \phpbb\template\context(); +		$loader = new \phpbb\template\twig\loader(new \phpbb\filesystem\filesystem(), ''); +		$twig = new \phpbb\template\twig\environment( +			$config, +			$filesystem, +			$this->phpbb_path_helper, +			$container, +			$cache_path, +			null, +			$loader, +			array( +				'cache'			=> false, +				'debug'			=> false, +				'auto_reload'	=> true, +				'autoescape'	=> false, +			) +		);  		$this->template = new phpbb\template\twig\twig(  			$this->phpbb_path_helper,  			$config, -			$user, -			new phpbb\template\context(), +			$context, +			$twig, +			$cache_path, +			$this->user, +			array(new \phpbb\template\twig\extension($context, $this->user)),  			new phpbb_mock_extension_manager(  				dirname(__FILE__) . '/',  				array( @@ -50,18 +80,12 @@ class phpbb_template_template_includecss_test extends phpbb_template_template_te  				)  			)  		); +		$container->set('template.twig.lexer', new \phpbb\template\twig\lexer($twig));  		$this->template->set_custom_style('tests', array($this->template_path, $this->parent_template_path));  	}  	public function template_data()  	{ -		$url_base = explode('/', dirname(__FILE__)); -		foreach ($url_base as &$dir) -		{ -			$dir = rawurlencode($dir); -		} -		$url_base = implode('/', $url_base); -  		return array(  			/*  			array( @@ -79,11 +103,11 @@ class phpbb_template_template_includecss_test extends phpbb_template_template_te  			),  			array(  				array('TEST' => 3), -				'<link href="' . $url_base . '/ext/include/css/styles/all/theme/test.css?assets_version=1" rel="stylesheet" type="text/css" media="screen" />', +				'<link href="tests/template/ext/include/css/styles/all/theme/test.css?assets_version=1" rel="stylesheet" type="text/css" media="screen" />',  			),  			array(  				array('TEST' => 4), -				'<link href="' . $url_base . '/ext/include/css/styles/all/theme/child_only.css?assets_version=1" rel="stylesheet" type="text/css" media="screen" />', +				'<link href="tests/template/ext/include/css/styles/all/theme/child_only.css?assets_version=1" rel="stylesheet" type="text/css" media="screen" />',  			),  		);  	} diff --git a/tests/template/template_test.php b/tests/template/template_test.php index 0bbfe3848d..33dc4ca551 100644 --- a/tests/template/template_test.php +++ b/tests/template/template_test.php @@ -130,6 +130,34 @@ class phpbb_template_template_test extends phpbb_template_template_test_case  				"loop\nloop\nloop\nloop\nloop#0-block#0\nloop#0-block#1\nloop#1-block#0\nloop#1-block#1",  			),  			array( +				'loop_twig.html', +				array(), +				array(), +				array(), +				"noloop\nnoloop", +			), +			array( +				'loop_twig.html', +				array(), +				array('test_loop' => array(array())), +				array(), +				"loop\nloop", +			), +			array( +				'loop_twig.html', +				array(), +				array('test_loop' => array(array(), array()), 'test_loop.block' => array(array())), +				array(), +				"loop\nloop\nloop\nloop", +			), +			array( +				'loop_twig.html', +				array(), +				array('test_loop' => array(array(), array()), 'test_loop.block' => array(array()), 'block' => array(array(), array())), +				array(), +				"loop\nloop\nloop\nloop\nloop#0-block#0\nloop#0-block#1\nloop#1-block#0\nloop#1-block#1", +			), +			array(  				'loop_vars.html',  				array(),  				array('test_loop' => array(array('VARIABLE' => 'x'))), @@ -151,6 +179,27 @@ class phpbb_template_template_test extends phpbb_template_template_test_case  				"first\n0 - a\nx - b\nset\n1 - a\ny - b\nset\nlast\n0 - c\n1 - c\nlast inner",  			),  			array( +				'loop_vars_twig.html', +				array(), +				array('test_loop' => array(array('VARIABLE' => 'x'))), +				array(), +				"first\n0 - a\nx - b\nset\nlast", +			), +			array( +				'loop_vars_twig.html', +				array(), +				array('test_loop' => array(array('VARIABLE' => 'x'), array('VARIABLE' => 'y'))), +				array(), +				"first\n0 - a\nx - b\nset\n1 - a\ny - b\nset\nlast", +			), +			array( +				'loop_vars_twig.html', +				array(), +				array('test_loop' => array(array('VARIABLE' => 'x'), array('VARIABLE' => 'y')), 'test_loop.inner' => array(array(), array())), +				array(), +				"first\n0 - a\nx - b\nset\n1 - a\ny - b\nset\nlast\n0 - c\n1 - c\nlast inner", +			), +			array(  				'loop_advanced.html',  				array(),  				array('test_loop' => array(array(), array(), array(), array(), array(), array(), array())), @@ -158,6 +207,13 @@ class phpbb_template_template_test extends phpbb_template_template_test_case  				"101234561\nx\n101234561\nx\n101234561\nx\n1234561\nx\n1\nx\n101\nx\n234\nx\n10\nx\n561\nx\n561",  			),  			array( +				'loop_advanced_twig.html', +				array(), +				array('test_loop' => array(array(), array(), array(), array(), array(), array(), array())), +				array(), +				"101234561\nx\n101234561\nx\n101234561\nx\n1234561\nx\n1\nx\n101\nx\n234\nx\n10\nx\n561\nx\n561", +			), +			array(  				'loop_nested2.html',  				array(),  				array('outer' => array(array(), array()), 'outer.middle' => array(array(), array())), @@ -165,6 +221,13 @@ class phpbb_template_template_test extends phpbb_template_template_test_case  				"o0o1m01m11",  			),  			array( +				'loop_nested2_twig.html', +				array(), +				array('outer' => array(array(), array()), 'outer.middle' => array(array(), array())), +				array(), +				"o0o1m01m11", +			), +			array(  				'define.html',  				array(),  				array('test_loop' => array(array(), array(), array(), array(), array(), array(), array()), 'test' => array(array()), 'test.deep' => array(array()), 'test.deep.defines' => array(array())), @@ -244,6 +307,13 @@ class phpbb_template_template_test extends phpbb_template_template_test_case  				'',  			),  			array( +				'loop_vars_twig.html', +				array(), +				array('test_loop' => array(array('VARIABLE' => 'x'), array('VARIABLE' => 'y')), 'test_loop.inner' => array(array(), array())), +				array('test_loop'), +				'', +			), +			array(  				'include_define_variable.html',  				array('VARIABLE' => 'variable.html'),  				array(), @@ -275,6 +345,15 @@ class phpbb_template_template_test extends phpbb_template_template_test_case  				"noloop\nnoloop",  			),  			array( +				// Just like a regular loop but the name begins +				// with an underscore +				'loop_underscore_twig.html', +				array(), +				array(), +				array(), +				"noloop\nnoloop", +			), +			array(  				'lang.html',  				array(),  				array(), @@ -286,7 +365,7 @@ class phpbb_template_template_test extends phpbb_template_template_test_case  				array(),  				array(),  				array(), -				"Value'\n1 O'Clock\nValue\'\n1 O\'Clock", +				"Value'\n1 O'Clock\nValue\\x27\n1\\x20O\\x27Clock",  				array('VARIABLE' => "Value'", '1_VARIABLE' => "1 O'Clock"),  			),  			array( @@ -297,6 +376,13 @@ class phpbb_template_template_test extends phpbb_template_template_test_case  				"top-level content",  			),  			array( +				'loop_nested_multilevel_ref_twig.html', +				array(), +				array(), +				array(), +				"top-level content", +			), +			array(  				'loop_nested_multilevel_ref.html',  				array(),  				array('outer' => array(array('VARIABLE' => 'x'), array('VARIABLE' => 'y')), 'outer.inner' => array(array('VARIABLE' => 'z'), array('VARIABLE' => 'zz'))), @@ -304,6 +390,13 @@ class phpbb_template_template_test extends phpbb_template_template_test_case  				"top-level content\nouter x\nouter y\ninner z\nfirst row\n\ninner zz",  			),  			array( +				'loop_nested_multilevel_ref_twig.html', +				array(), +				array('outer' => array(array('VARIABLE' => 'x'), array('VARIABLE' => 'y')), 'outer.inner' => array(array('VARIABLE' => 'z'), array('VARIABLE' => 'zz'))), +				array(), +				"top-level content\nouter x\nouter y\ninner z\nfirst row\n\ninner zz", +			), +			array(  				'loop_nested_deep_multilevel_ref.html',  				array(),  				array('outer' => array(array()), 'outer.middle' => array(array()), 'outer.middle.inner' => array(array('VARIABLE' => 'z'), array('VARIABLE' => 'zz'))), @@ -311,6 +404,13 @@ class phpbb_template_template_test extends phpbb_template_template_test_case  				"top-level content\nouter\nmiddle\ninner z\nfirst row of 2 in inner\n\ninner zz",  			),  			array( +				'loop_nested_deep_multilevel_ref_twig.html', +				array(), +				array('outer' => array(array()), 'outer.middle' => array(array()), 'outer.middle.inner' => array(array('VARIABLE' => 'z'), array('VARIABLE' => 'zz'))), +				array(), +				"top-level content\nouter\nmiddle\ninner z\nfirst row of 2 in inner\n\ninner zz", +			), +			array(  				'loop_size.html',  				array(),  				array('test_loop' => array(array()), 'empty_loop' => array()), @@ -318,6 +418,13 @@ class phpbb_template_template_test extends phpbb_template_template_test_case  				"nonexistent = 0\n! nonexistent\n\nempty = 0\n! empty\nloop\n\nin loop",  			),  			array( +				'loop_size_twig.html', +				array(), +				array('test_loop' => array(array()), 'empty_loop' => array()), +				array(), +				"nonexistent = 0\n! nonexistent\n\nempty = 0\n! empty\nloop\n\nin loop", +			), +			array(  				'loop_include.html',  				array(),  				array('test_loop' => array(array('foo' => 'bar'), array('foo' => 'bar1'))), @@ -325,6 +432,13 @@ class phpbb_template_template_test extends phpbb_template_template_test_case  				"barbarbar1bar1",  			),  			array( +				'loop_include_twig.html', +				array(), +				array('test_loop' => array(array('foo' => 'bar'), array('foo' => 'bar1'))), +				array(), +				"barbarbar1bar1", +			), +			array(  				'loop_nested_include.html',  				array(),  				array( @@ -335,6 +449,17 @@ class phpbb_template_template_test extends phpbb_template_template_test_case  				"[bar|[bar|]][bar1|[bar1|[bar1|works]]]",  				array(),  			), +			array( +				'loop_nested_include_twig.html', +				array(), +				array( +					'test_loop' => array(array('foo' => 'bar'), array('foo' => 'bar1')), +					'test_loop.inner' => array(array('myinner' => 'works')), +				), +				array(), +				"[bar|[bar|]][bar1|[bar1|[bar1|works]]]", +				array(), +			),  			/* Does not pass with the current implementation.  			array(  				'loop_reuse.html', @@ -343,8 +468,15 @@ class phpbb_template_template_test extends phpbb_template_template_test_case  				array(),  				// Not entirely sure what should be outputted but the current output of "a" is most certainly wrong  				"a\nb\nc\nd", +			),*/ +			array( +				'loop_reuse_twig.html', +				array(), +				array('one' => array(array('VAR' => 'a'), array('VAR' => 'b')), 'one.one' => array(array('VAR' => 'c'), array('VAR' => 'd'))), +				array(), +				// Not entirely sure what should be outputted but the current output of "a" is most certainly wrong +				"a\nb\nc\nd",  			), -			*/  			array(  				'twig.html',  				array('VARIABLE' => 'FOObar',), @@ -359,6 +491,27 @@ class phpbb_template_template_test extends phpbb_template_template_test_case  				array(),  				'inner_value',  			), +			array( +				'loop_expressions.html', +				array(), +				array('loop' => array(array(),array(),array(),array(),array(),array()),), +				array(), +				'yesnononoyesnoyesnonoyesnono', +			), +			array( +				'loop_expressions_twig.html', +				array(), +				array('loop' => array(array(),array(),array(),array(),array(),array()),), +				array(), +				'yesnononoyesnoyesnonoyesnono', +			), +			array( +				'loop_expressions_twig2.html', +				array('loop' => array(array(),array(),array(),array(),array(),array()),), +				array(), +				array(), +				'yesnononoyesnoyesnonoyesnono', +			),  		);  	} diff --git a/tests/template/template_test_case.php b/tests/template/template_test_case.php index 1250397401..62eea0d361 100644 --- a/tests/template/template_test_case.php +++ b/tests/template/template_test_case.php @@ -15,6 +15,7 @@ require_once dirname(__FILE__) . '/../../phpBB/includes/functions.php';  class phpbb_template_template_test_case extends phpbb_test_case  { +	protected $lang;  	protected $template;  	protected $template_path;  	protected $user; @@ -24,6 +25,17 @@ class phpbb_template_template_test_case extends phpbb_test_case  	// Keep the contents of the cache for debugging?  	const PRESERVE_CACHE = true; +	static protected $language_reflection_lang; + +	static public function setUpBeforeClass() +	{ +		parent::setUpBeforeClass(); + +		$reflection = new ReflectionClass('\phpbb\language\language'); +		self::$language_reflection_lang = $reflection->getProperty('lang'); +		self::$language_reflection_lang->setAccessible(true); +	} +  	protected function display($handle)  	{  		ob_start(); @@ -65,20 +77,46 @@ class phpbb_template_template_test_case extends phpbb_test_case  		$defaults = $this->config_defaults();  		$config = new \phpbb\config\config(array_merge($defaults, $new_config)); -		$this->user = new \phpbb\user('\phpbb\datetime'); +		$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx); +		$this->lang = $lang = new \phpbb\language\language($lang_loader); +		$user = new \phpbb\user($lang, '\phpbb\datetime'); +		$this->user = $user; + +		$filesystem = new \phpbb\filesystem\filesystem();  		$path_helper = new \phpbb\path_helper(  			new \phpbb\symfony_request(  				new phpbb_mock_request()  			), -			new \phpbb\filesystem(), +			$filesystem,  			$this->getMock('\phpbb\request\request'),  			$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()); + +		$container = new phpbb_mock_container_builder(); +		$cache_path = $phpbb_root_path . 'cache/twig'; +		$context = new \phpbb\template\context(); +		$loader = new \phpbb\template\twig\loader(new \phpbb\filesystem\filesystem(), ''); +		$twig = new \phpbb\template\twig\environment( +			$config, +			$filesystem, +			$path_helper, +			$container, +			$cache_path, +			null, +			$loader, +			array( +				'cache'			=> false, +				'debug'			=> false, +				'auto_reload'	=> true, +				'autoescape'	=> false, +			) +		); +		$this->template = new phpbb\template\twig\twig($path_helper, $config, $context, $twig, $cache_path, $this->user, array(new \phpbb\template\twig\extension($context, $this->user))); +		$container->set('template.twig.lexer', new \phpbb\template\twig\lexer($twig));  		$this->template->set_custom_style('tests', $this->template_path);  	} @@ -88,6 +126,10 @@ class phpbb_template_template_test_case extends phpbb_test_case  		$this->setup_engine();  		$this->template->clear_cache(); + +		global $phpbb_filesystem; + +		$phpbb_filesystem = new \phpbb\filesystem\filesystem();  	}  	protected function tearDown() @@ -121,7 +163,10 @@ class phpbb_template_template_test_case extends phpbb_test_case  		{  			foreach ($lang_vars as $name => $value)  			{ -				$this->user->lang[$name] = $value; +				self::$language_reflection_lang->setValue($this->lang, array_merge( +					self::$language_reflection_lang->getValue($this->lang), +					array($name => $value) +				));  			}  		} diff --git a/tests/template/template_test_case_with_tree.php b/tests/template/template_test_case_with_tree.php index 68ecc4b706..bf5de6b85e 100644 --- a/tests/template/template_test_case_with_tree.php +++ b/tests/template/template_test_case_with_tree.php @@ -22,11 +22,13 @@ class phpbb_template_template_test_case_with_tree extends phpbb_template_templat  		$defaults = $this->config_defaults();  		$config = new \phpbb\config\config(array_merge($defaults, $new_config)); +		$filesystem = new \phpbb\filesystem\filesystem(); +  		$this->phpbb_path_helper = new \phpbb\path_helper(  			new \phpbb\symfony_request(  				new phpbb_mock_request()  			), -			new \phpbb\filesystem(), +			$filesystem,  			$this->getMock('\phpbb\request\request'),  			$phpbb_root_path,  			$phpEx @@ -34,7 +36,28 @@ class phpbb_template_template_test_case_with_tree extends phpbb_template_templat  		$this->template_path = $this->test_path . '/templates';  		$this->parent_template_path = $this->test_path . '/parent_templates'; -		$this->template = new phpbb\template\twig\twig($this->phpbb_path_helper, $config, $user, new phpbb\template\context()); + +		$container = new phpbb_mock_container_builder(); +		$cache_path = $phpbb_root_path . 'cache/twig'; +		$context = new \phpbb\template\context(); +		$loader = new \phpbb\template\twig\loader(new \phpbb\filesystem\filesystem(), ''); +		$twig = new \phpbb\template\twig\environment( +			$config, +			$filesystem, +			$this->phpbb_path_helper, +			$container, +			$cache_path, +			null, +			$loader, +			array( +				'cache'			=> false, +				'debug'			=> false, +				'auto_reload'	=> true, +				'autoescape'	=> false, +			) +		); +		$this->template = new phpbb\template\twig\twig($this->phpbb_path_helper, $config, $context, $twig, $cache_path, $this->user, array(new \phpbb\template\twig\extension($context, $this->user))); +		$container->set('template.twig.lexer', new \phpbb\template\twig\lexer($twig));  		$this->template->set_custom_style('tests', array($this->template_path, $this->parent_template_path));  	}  } diff --git a/tests/template/templates/loop_advanced_twig.html b/tests/template/templates/loop_advanced_twig.html new file mode 100644 index 0000000000..fd9fcae045 --- /dev/null +++ b/tests/template/templates/loop_advanced_twig.html @@ -0,0 +1,19 @@ +{% for test_loop_inner in test_loop %}{{ test_loop_inner.S_FIRST_ROW }}{{ test_loop_inner.S_ROW_COUNT }}{{ test_loop_inner.S_LAST_ROW }}{% endfor %} +x +{% for test_loop_inner in test_loop|subset(0) %}{{ test_loop_inner.S_FIRST_ROW }}{{ test_loop_inner.S_ROW_COUNT }}{{ test_loop_inner.S_LAST_ROW }}{% endfor %} +x +{% for test_loop_inner in test_loop|subset(0,-1) %}{{ test_loop_inner.S_FIRST_ROW }}{{ test_loop_inner.S_ROW_COUNT }}{{ test_loop_inner.S_LAST_ROW }}{% endfor %} +x +{% for test_loop_inner in test_loop|subset(1) %}{{ test_loop_inner.S_FIRST_ROW }}{{ test_loop_inner.S_ROW_COUNT }}{{ test_loop_inner.S_LAST_ROW }}{% endfor %} +x +{% for test_loop_inner in test_loop|subset(1,1) %}{{ test_loop_inner.S_FIRST_ROW }}{{ test_loop_inner.S_ROW_COUNT }}{{ test_loop_inner.S_LAST_ROW }}{% endfor %} +x +{% for test_loop_inner in test_loop|subset(0,1) %}{{ test_loop_inner.S_FIRST_ROW }}{{ test_loop_inner.S_ROW_COUNT }}{{ test_loop_inner.S_LAST_ROW }}{% endfor %} +x +{% for test_loop_inner in test_loop|subset(2,4) %}{{ test_loop_inner.S_FIRST_ROW }}{{ test_loop_inner.S_ROW_COUNT }}{{ test_loop_inner.S_LAST_ROW }}{% endfor %} +x +{% for test_loop_inner in test_loop|subset(0,-7) %}{{ test_loop_inner.S_FIRST_ROW }}{{ test_loop_inner.S_ROW_COUNT }}{{ test_loop_inner.S_LAST_ROW }}{% endfor %} +x +{% for test_loop_inner in test_loop|subset(-2,6) %}{{ test_loop_inner.S_FIRST_ROW }}{{ test_loop_inner.S_ROW_COUNT }}{{ test_loop_inner.S_LAST_ROW }}{% endfor %} +x +{% for test_loop_inner in test_loop|subset(-2,-1) %}{{ test_loop_inner.S_FIRST_ROW }}{{ test_loop_inner.S_ROW_COUNT }}{{ test_loop_inner.S_LAST_ROW }}{% endfor %} diff --git a/tests/template/templates/loop_expressions.html b/tests/template/templates/loop_expressions.html index 6bff53f388..ddb9fd52fa 100644 --- a/tests/template/templates/loop_expressions.html +++ b/tests/template/templates/loop_expressions.html @@ -1,11 +1,11 @@  <!-- BEGIN loop --> -<!-- IF loop.S_ROW_NUM is even by 4 -->on<!-- ELSE -->off<!-- ENDIF --> +<!-- IF loop.S_ROW_NUM is divisible by(4) -->yes<!-- ELSE -->no<!-- ENDIF -->  <!-- END loop -->  <!-- BEGIN loop --> -<!-- IF loop.S_ROW_NUM is odd by 3 -->on<!-- ELSE -->off<!-- ENDIF --> +<!-- IF loop.S_ROW_NUM is divisible by(3) -->yes<!-- ELSE -->no<!-- ENDIF -->  <!-- END loop --> diff --git a/tests/template/templates/loop_expressions_twig.html b/tests/template/templates/loop_expressions_twig.html new file mode 100644 index 0000000000..5ca8cc3601 --- /dev/null +++ b/tests/template/templates/loop_expressions_twig.html @@ -0,0 +1,11 @@ +{% for loop_inner in loop %} + +{% if loop_inner.S_ROW_NUM is divisible by(4) %}yes{% else %}no{% endif %} + +{% endfor %} + +{% for loop_inner in loop %} + +{% if loop_inner.S_ROW_NUM is divisible by(3) %}yes{% else %}no{% endif %} + +{% endfor %} diff --git a/tests/template/templates/loop_expressions_twig2.html b/tests/template/templates/loop_expressions_twig2.html new file mode 100644 index 0000000000..16159ead4c --- /dev/null +++ b/tests/template/templates/loop_expressions_twig2.html @@ -0,0 +1,11 @@ +{% for loop_inner in loop %} + +{% if loop.index0 is divisible by(4) %}yes{% else %}no{% endif %} + +{% endfor %} + +{% for loop_inner in loop %} + +{% if loop.index0 is divisible by(3) %}yes{% else %}no{% endif %} + +{% endfor %} diff --git a/tests/template/templates/loop_include1_twig.html b/tests/template/templates/loop_include1_twig.html new file mode 100644 index 0000000000..2ff9f61b02 --- /dev/null +++ b/tests/template/templates/loop_include1_twig.html @@ -0,0 +1 @@ +{{ test_loop_inner.foo }} diff --git a/tests/template/templates/loop_include_twig.html b/tests/template/templates/loop_include_twig.html new file mode 100644 index 0000000000..1a534e2dbc --- /dev/null +++ b/tests/template/templates/loop_include_twig.html @@ -0,0 +1,4 @@ +{% for test_loop_inner in test_loop %} +	{{ test_loop_inner.foo }} +	{% INCLUDE 'loop_include1_twig.html' %} +{% endfor %} diff --git a/tests/template/templates/loop_nested2_twig.html b/tests/template/templates/loop_nested2_twig.html new file mode 100644 index 0000000000..cf802dc69f --- /dev/null +++ b/tests/template/templates/loop_nested2_twig.html @@ -0,0 +1,6 @@ +{% for outer_inner in outer %} +	o{{ outer_inner.S_ROW_COUNT }} +	{% for middle in outer_inner.middle %} +		m{{ middle.S_ROW_COUNT }}{{ outer_inner.S_ROW_COUNT }} +	{% endfor %} +{% endfor %} diff --git a/tests/template/templates/loop_nested_deep_multilevel_ref_twig.html b/tests/template/templates/loop_nested_deep_multilevel_ref_twig.html new file mode 100644 index 0000000000..9bc68e6e2e --- /dev/null +++ b/tests/template/templates/loop_nested_deep_multilevel_ref_twig.html @@ -0,0 +1,13 @@ +top-level content +{% for outer_inner in outer %} +	outer +	{% for middle in outer_inner.middle %} +		{{ middle.S_BLOCK_NAME }} +		{% for inner in middle.inner %} +			inner {{ inner.VARIABLE }} +			{% if inner.S_FIRST_ROW %} +				first row of {{ inner.S_NUM_ROWS }} in {{ inner.S_BLOCK_NAME }} +			{% endif %} +		{% endfor %} +	{% endfor %} +{% endfor %} diff --git a/tests/template/templates/loop_nested_include1_twig.html b/tests/template/templates/loop_nested_include1_twig.html new file mode 100644 index 0000000000..4c2ebb5f15 --- /dev/null +++ b/tests/template/templates/loop_nested_include1_twig.html @@ -0,0 +1,5 @@ +[{{ test_loop_inner.foo }}| +{% for inner in test_loop_inner.inner %} +	[{{ test_loop_inner.foo }}| +	{{ inner.myinner }}] +{% endfor %}] diff --git a/tests/template/templates/loop_nested_include_twig.html b/tests/template/templates/loop_nested_include_twig.html new file mode 100644 index 0000000000..c92ac922d1 --- /dev/null +++ b/tests/template/templates/loop_nested_include_twig.html @@ -0,0 +1,4 @@ +{% for test_loop_inner in test_loop %} +	[{{ test_loop_inner.foo }} +	|{% INCLUDE 'loop_nested_include1_twig.html' %}] +{% endfor %} diff --git a/tests/template/templates/loop_nested_multilevel_ref_twig.html b/tests/template/templates/loop_nested_multilevel_ref_twig.html new file mode 100644 index 0000000000..336a57d0bc --- /dev/null +++ b/tests/template/templates/loop_nested_multilevel_ref_twig.html @@ -0,0 +1,10 @@ +top-level content +{% for outer_inner in outer %} +	outer {{ outer_inner.VARIABLE }} +	{% for inner in outer_inner.inner %} +		inner {{ inner.VARIABLE }} +		{% if inner.S_FIRST_ROW %} +			first row +		{% endif %} +	{% endfor %} +{% endfor %} diff --git a/tests/template/templates/loop_nested_twig.html b/tests/template/templates/loop_nested_twig.html new file mode 100644 index 0000000000..b294226b3a --- /dev/null +++ b/tests/template/templates/loop_nested_twig.html @@ -0,0 +1,6 @@ +{% for outer_inner in outer %} +outer - {{ outer_inner.S_ROW_COUNT }}{% if outer_inner.VARIABLE %} - {{ outer_inner.VARIABLE }}{% endif %}{% if TEST_MORE %}[{{ outer_inner.S_BLOCK_NAME }}|{{ outer_inner.S_NUM_ROWS }}]{% endif %} +{% for middle in outer_inner.middle %} +middle - {{ middle.S_ROW_COUNT }}{% if middle.VARIABLE %} - {{ middle.VARIABLE }}{% endif %}{% if TEST_MORE %}[{{ middle.S_BLOCK_NAME }}|{{ middle.S_NUM_ROWS }}]{% endif %} +{% endfor %} +{% endfor %} diff --git a/tests/template/templates/loop_reuse_twig.html b/tests/template/templates/loop_reuse_twig.html new file mode 100644 index 0000000000..67452a737f --- /dev/null +++ b/tests/template/templates/loop_reuse_twig.html @@ -0,0 +1,6 @@ +{% for one_inner in one %} +	{{ one_inner.VAR }} +	{% for one_one_inner in one_inner.one %} +		{{ one_one_inner.VAR }} +	{% endfor %} +{% endfor %} diff --git a/tests/template/templates/loop_size_twig.html b/tests/template/templates/loop_size_twig.html new file mode 100644 index 0000000000..f6d2571e11 --- /dev/null +++ b/tests/template/templates/loop_size_twig.html @@ -0,0 +1,39 @@ +{% if nonexistent_loop|length %} +nonexistent +{% endif %} + +{% if nonexistent_loop|length == 0 %} +nonexistent = 0 +{% endif %} + +{% if ! nonexistent_loop|length %} +! nonexistent +{% endif %} + +{% if empty_loop|length %} +empty +{% endif %} + +{% if empty_loop|length == 0 %} +empty = 0 +{% endif %} + +{% if ! empty_loop|length %} +! empty +{% endif %} + +{% if test_loop|length %} +loop +{% endif %} + +{% if test_loop|length == 0 %} +loop = 0 +{% endif %} + +{% if ! test_loop|length %} +! loop +{% endif %} + +{% for test_loop_inner in test_loop %} +in loop +{% endfor %} diff --git a/tests/template/templates/loop_twig.html b/tests/template/templates/loop_twig.html new file mode 100644 index 0000000000..fb24f331b3 --- /dev/null +++ b/tests/template/templates/loop_twig.html @@ -0,0 +1,21 @@ +{% for test_loop_inner in test_loop %} +loop +{% else %} +noloop +{% endfor %} + +{% if test_loop|length %} +loop +{% else %} +noloop +{% endif %} + +{% if test_loop|length == 2 %} +loop +{% endif %} + +{% for test_loop_inner in test_loop %} +{% for block_inner in block %} +loop#{{ test_loop_inner.S_ROW_COUNT }}-block#{{ block_inner.S_ROW_COUNT }} +{% endfor %} +{% endfor %} diff --git a/tests/template/templates/loop_underscore_twig.html b/tests/template/templates/loop_underscore_twig.html new file mode 100644 index 0000000000..44b095c882 --- /dev/null +++ b/tests/template/templates/loop_underscore_twig.html @@ -0,0 +1,21 @@ +{% for _underscore_loop_inner in _underscore_loop %} +loop +{% else %} +noloop +{% endfor %} + +{% if _underscore_loop|length %} +loop +{% else %} +noloop +{% endif %} + +{% if _underscore_loop|length == 2 %} +loop +{% endif %} + +{% for _underscore_loop_inner in _underscore_loop %} +{% for block_inner in block %} +loop#{{ loop.S_ROW_COUNT }}-block#{{ block_inner.S_ROW_COUNT }} +{% endfor %} +{% endfor %} diff --git a/tests/template/templates/loop_vars_twig.html b/tests/template/templates/loop_vars_twig.html new file mode 100644 index 0000000000..af6c63d8e3 --- /dev/null +++ b/tests/template/templates/loop_vars_twig.html @@ -0,0 +1,13 @@ +{% for test_loop_inner in test_loop %} +{% if test_loop_inner.S_FIRST_ROW %}first{% endif %} +{{ test_loop_inner.S_ROW_NUM }} - a +{{ test_loop_inner.VARIABLE }} - b +{% if test_loop_inner.VARIABLE %}set{% endif %} +{% if test_loop_inner.S_LAST_ROW %} +last +{% endif %} +{% for inner_inner in test_loop_inner.inner %} +{{ inner_inner.S_ROW_NUM }} - c +{% if inner_inner.S_LAST_ROW and inner_inner.S_ROW_COUNT and inner_inner.S_NUM_ROWS %}last inner{% endif %} +{% endfor %} +{% endfor %} | 
