mirror of
				https://github.com/phpbb/phpbb.git
				synced 2025-10-26 21:21:32 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			425 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			425 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?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.
 | |
| *
 | |
| */
 | |
| 
 | |
| class phpbb_path_helper_test extends phpbb_test_case
 | |
| {
 | |
| 	/** @var \phpbb\path_helper */
 | |
| 	protected $path_helper;
 | |
| 	protected $phpbb_root_path = '';
 | |
| 
 | |
| 	public function setUp()
 | |
| 	{
 | |
| 		parent::setUp();
 | |
| 
 | |
| 		$filesystem = new \phpbb\filesystem();
 | |
| 		$this->set_phpbb_root_path($filesystem);
 | |
| 
 | |
| 		$this->path_helper = new \phpbb\path_helper(
 | |
| 			new \phpbb\symfony_request(
 | |
| 				new phpbb_mock_request()
 | |
| 			),
 | |
| 			new \phpbb\filesystem(),
 | |
| 			$this->getMock('\phpbb\request\request'),
 | |
| 			$this->phpbb_root_path,
 | |
| 			'php'
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	* Set the phpbb_root_path
 | |
| 	*
 | |
| 	* This is necessary because dataProvider functions are called
 | |
| 	*	before setUp or setUpBeforeClass; so we must set the path
 | |
| 	*	any time we wish to use it in one of these functions (and
 | |
| 	*	also in general for everything else)
 | |
| 	*/
 | |
| 	public function set_phpbb_root_path($filesystem)
 | |
| 	{
 | |
| 		$this->phpbb_root_path = $filesystem->clean_path(dirname(__FILE__) . '/../../phpBB/');
 | |
| 	}
 | |
| 
 | |
| 	public function test_get_web_root_path()
 | |
| 	{
 | |
| 		// Symfony Request = null, so always should return phpbb_root_path
 | |
| 		$this->assertEquals($this->phpbb_root_path, $this->path_helper->get_web_root_path());
 | |
| 	}
 | |
| 
 | |
| 	public function basic_update_web_root_path_data()
 | |
| 	{
 | |
| 		$filesystem = new \phpbb\filesystem();
 | |
| 		$this->set_phpbb_root_path($filesystem);
 | |
| 
 | |
| 		return array(
 | |
| 			array(
 | |
| 				'http://www.test.com/test.php',
 | |
| 				'http://www.test.com/test.php',
 | |
| 				'/',
 | |
| 			),
 | |
| 			array(
 | |
| 				$this->phpbb_root_path . 'test.php',
 | |
| 				$this->phpbb_root_path . 'test.php',
 | |
| 			),
 | |
| 			array(
 | |
| 				'test.php',
 | |
| 				'test.php',
 | |
| 			),
 | |
| 			array(
 | |
| 				$this->phpbb_root_path . $this->phpbb_root_path . 'test.php',
 | |
| 				$filesystem->clean_path($this->phpbb_root_path . $this->phpbb_root_path . 'test.php'),
 | |
| 			),
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	* @dataProvider basic_update_web_root_path_data
 | |
| 	*/
 | |
| 	public function test_basic_update_web_root_path($input, $expected)
 | |
| 	{
 | |
| 		$this->assertEquals($expected, $this->path_helper->update_web_root_path($input));
 | |
| 	}
 | |
| 
 | |
| 	public function update_web_root_path_data()
 | |
| 	{
 | |
| 		$this->set_phpbb_root_path(new \phpbb\filesystem());
 | |
| 
 | |
| 		return array(
 | |
| 			array(
 | |
| 				$this->phpbb_root_path . 'test.php',
 | |
| 				'/',
 | |
| 				null,
 | |
| 				null,
 | |
| 				'',
 | |
| 			),
 | |
| 			array(
 | |
| 				$this->phpbb_root_path . 'test.php',
 | |
| 				'//',
 | |
| 				null,
 | |
| 				null,
 | |
| 				'./../',
 | |
| 			),
 | |
| 			array(
 | |
| 				$this->phpbb_root_path . 'test.php',
 | |
| 				'//',
 | |
| 				'foo/bar.php',
 | |
| 				'bar.php',
 | |
| 				'./../',
 | |
| 			),
 | |
| 			array(
 | |
| 				$this->phpbb_root_path . 'test.php',
 | |
| 				'/foo/template',
 | |
| 				'/phpbb3-fork/phpBB/app.php/foo/template',
 | |
| 				'/phpbb3-fork/phpBB/app.php',
 | |
| 				'./../../',
 | |
| 			),
 | |
| 			array(
 | |
| 				$this->phpbb_root_path . 'test.php',
 | |
| 				'/foo/template',
 | |
| 				'/phpbb3-fork/phpBB/foo/template',
 | |
| 				'/phpbb3-fork/phpBB/app.php',
 | |
| 				'./../',
 | |
| 			),
 | |
| 			array(
 | |
| 				$this->phpbb_root_path . 'test.php',
 | |
| 				'/',
 | |
| 				'/phpbb3-fork/phpBB/app.php/',
 | |
| 				'/phpbb3-fork/phpBB/app.php',
 | |
| 				'./../',
 | |
| 			),
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	* @dataProvider update_web_root_path_data
 | |
| 	*/
 | |
| 	public function test_update_web_root_path($input, $getPathInfo, $getRequestUri, $getScriptName, $correction)
 | |
| 	{
 | |
| 		$symfony_request = $this->getMock('\phpbb\symfony_request', array(), array(
 | |
| 			new phpbb_mock_request(),
 | |
| 		));
 | |
| 		$symfony_request->expects($this->any())
 | |
| 			->method('getPathInfo')
 | |
| 			->will($this->returnValue($getPathInfo));
 | |
| 		$symfony_request->expects($this->any())
 | |
| 			->method('getRequestUri')
 | |
| 			->will($this->returnValue($getRequestUri));
 | |
| 		$symfony_request->expects($this->any())
 | |
| 			->method('getScriptName')
 | |
| 			->will($this->returnValue($getScriptName));
 | |
| 
 | |
| 		$path_helper = new \phpbb\path_helper(
 | |
| 			$symfony_request,
 | |
| 			new \phpbb\filesystem(),
 | |
| 			$this->getMock('\phpbb\request\request'),
 | |
| 			$this->phpbb_root_path,
 | |
| 			'php'
 | |
| 		);
 | |
| 
 | |
| 		$this->assertEquals($correction . $input, $path_helper->update_web_root_path($input, $symfony_request));
 | |
| 	}
 | |
| 
 | |
| 	public function clean_url_data()
 | |
| 	{
 | |
| 		return array(
 | |
| 			array('', ''),
 | |
| 			array('://', '://'),
 | |
| 			array('http://', 'http://'),
 | |
| 			array('http://one/two/three', 'http://one/two/three'),
 | |
| 			array('http://../one/two', 'http://../one/two'),
 | |
| 			array('http://one/../two/three', 'http://two/three'),
 | |
| 			array('http://one/two/../three', 'http://one/three'),
 | |
| 			array('http://one/two/../../three', 'http://three'),
 | |
| 			array('http://one/two/../../../three', 'http://../three'),
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	* @dataProvider clean_url_data
 | |
| 	*/
 | |
| 	public function test_clean_url($input, $expected)
 | |
| 	{
 | |
| 		$this->assertEquals($expected, $this->path_helper->clean_url($input));
 | |
| 	}
 | |
| 
 | |
| 	public function glue_url_params_data()
 | |
| 	{
 | |
| 		return array(
 | |
| 			array(
 | |
| 				array(),
 | |
| 				'',
 | |
| 			),
 | |
| 			array(
 | |
| 				array('test' => 'xyz'),
 | |
| 				'test=xyz',
 | |
| 			),
 | |
| 			array(
 | |
| 				array('test' => 'xyz', 'var' => 'value'),
 | |
| 				'test=xyz&var=value',
 | |
| 			),
 | |
| 			array(
 | |
| 				array('test' => null),
 | |
| 				'test',
 | |
| 			),
 | |
| 			array(
 | |
| 				array('test' => null, 'var' => null),
 | |
| 				'test&var',
 | |
| 			),
 | |
| 			array(
 | |
| 				array('test' => 'xyz', 'var' => null, 'bar' => 'value'),
 | |
| 				'test=xyz&var&bar=value',
 | |
| 			),
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	* @dataProvider glue_url_params_data
 | |
| 	*/
 | |
| 	public function test_glue_url_params($params, $expected)
 | |
| 	{
 | |
| 		$this->assertEquals($expected, $this->path_helper->glue_url_params($params));
 | |
| 	}
 | |
| 
 | |
| 	public function get_url_parts_data()
 | |
| 	{
 | |
| 		return array(
 | |
| 			array(
 | |
| 				'viewtopic.php',
 | |
| 				true,
 | |
| 				array('base' => 'viewtopic.php', 'params' => array()),
 | |
| 			),
 | |
| 			array(
 | |
| 				'./viewtopic.php?t=5&f=6',
 | |
| 				true,
 | |
| 				array('base' => './viewtopic.php', 'params' => array('t' => '5', 'f' => '6')),
 | |
| 			),
 | |
| 			array(
 | |
| 				'viewtopic.php?t=5&f=6',
 | |
| 				false,
 | |
| 				array('base' => 'viewtopic.php', 'params' => array('t' => '5', 'f' => '6')),
 | |
| 			),
 | |
| 			array(
 | |
| 				'https://phpbb.com/community/viewtopic.php?t=5&f=6',
 | |
| 				true,
 | |
| 				array('base' => 'https://phpbb.com/community/viewtopic.php', 'params' => array('t' => '5', 'f' => '6')),
 | |
| 			),
 | |
| 			array(
 | |
| 				'test.php?topic=post=5&f=3',
 | |
| 				true,
 | |
| 				array('base' => 'test.php', 'params' => array('topic' => 'post=5', 'f' => '3')),
 | |
| 			),
 | |
| 			array(
 | |
| 				'mcp.php?&t=4&f=3',
 | |
| 				true,
 | |
| 				array('base' => 'mcp.php', 'params' => array('t' => '4', 'f' => '3')),
 | |
| 			),
 | |
| 			array(
 | |
| 				'mcp.php?=4&f=3',
 | |
| 				true,
 | |
| 				array('base' => 'mcp.php', 'params' => array('f' => '3')),
 | |
| 			),
 | |
| 			array(
 | |
| 				'index.php?ready',
 | |
| 				false,
 | |
| 				array('base' => 'index.php', 'params' => array('ready' => null)),
 | |
| 			),
 | |
| 			array(
 | |
| 				'index.php?i=1&ready',
 | |
| 				true,
 | |
| 				array('base' => 'index.php', 'params' => array('i' => '1', 'ready' => null)),
 | |
| 			),
 | |
| 			array(
 | |
| 				'index.php?ready&i=1',
 | |
| 				false,
 | |
| 				array('base' => 'index.php', 'params' => array('ready' => null, 'i' => '1')),
 | |
| 			),
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	* @dataProvider get_url_parts_data
 | |
| 	*/
 | |
| 	public function test_get_url_parts($url, $is_amp, $expected)
 | |
| 	{
 | |
| 		$this->assertEquals($expected, $this->path_helper->get_url_parts($url, $is_amp));
 | |
| 	}
 | |
| 
 | |
| 	public function strip_url_params_data()
 | |
| 	{
 | |
| 		return array(
 | |
| 			array(
 | |
| 				'viewtopic.php',
 | |
| 				'sid',
 | |
| 				false,
 | |
| 				'viewtopic.php',
 | |
| 			),
 | |
| 			array(
 | |
| 				'./viewtopic.php?t=5&f=6',
 | |
| 				'f',
 | |
| 				true,
 | |
| 				'./viewtopic.php?t=5',
 | |
| 			),
 | |
| 			array(
 | |
| 				'viewtopic.php?t=5&f=6&sid=19adc288814103cbb4625e74e77455aa',
 | |
| 				array('t'),
 | |
| 				false,
 | |
| 				'viewtopic.php?f=6&sid=19adc288814103cbb4625e74e77455aa',
 | |
| 			),
 | |
| 			array(
 | |
| 				'https://phpbb.com/community/viewtopic.php?t=5&f=6',
 | |
| 				array('t', 'f'),
 | |
| 				true,
 | |
| 				'https://phpbb.com/community/viewtopic.php',
 | |
| 			),
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	* @dataProvider strip_url_params_data
 | |
| 	*/
 | |
| 	public function test_strip_url_params($url, $strip, $is_amp, $expected)
 | |
| 	{
 | |
| 		$this->assertEquals($expected, $this->path_helper->strip_url_params($url, $strip, $is_amp));
 | |
| 	}
 | |
| 
 | |
| 	public function append_url_params_data()
 | |
| 	{
 | |
| 		return array(
 | |
| 			array(
 | |
| 				'viewtopic.php',
 | |
| 				array(),
 | |
| 				false,
 | |
| 				'viewtopic.php',
 | |
| 			),
 | |
| 			array(
 | |
| 				'./viewtopic.php?t=5&f=6',
 | |
| 				array('t' => '7'),
 | |
| 				true,
 | |
| 				'./viewtopic.php?t=7&f=6',
 | |
| 			),
 | |
| 			array(
 | |
| 				'viewtopic.php?t=5&f=6&sid=19adc288814103cbb4625e74e77455aa',
 | |
| 				array('p' => '5'),
 | |
| 				false,
 | |
| 				'viewtopic.php?t=5&f=6&p=5&sid=19adc288814103cbb4625e74e77455aa',
 | |
| 			),
 | |
| 			array(
 | |
| 				'https://phpbb.com/community/viewtopic.php',
 | |
| 				array('t' => '7', 'f' => '8'),
 | |
| 				true,
 | |
| 				'https://phpbb.com/community/viewtopic.php?t=7&f=8',
 | |
| 			),
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	* @dataProvider append_url_params_data
 | |
| 	*/
 | |
| 	public function test_append_url_params($url, $params, $is_amp, $expected)
 | |
| 	{
 | |
| 		$this->assertEquals($expected, $this->path_helper->append_url_params($url, $params, $is_amp));
 | |
| 	}
 | |
| 
 | |
| 	public function get_web_root_path_from_ajax_referer_data()
 | |
| 	{
 | |
| 		return array(
 | |
| 			array(
 | |
| 				'http://www.phpbb.com/community/route1/route2/',
 | |
| 				'http://www.phpbb.com/community',
 | |
| 				'../../',
 | |
| 			),
 | |
| 			array(
 | |
| 				'http://www.phpbb.com/community/route1/route2',
 | |
| 				'http://www.phpbb.com/community',
 | |
| 				'../',
 | |
| 			),
 | |
| 			array(
 | |
| 				'http://www.phpbb.com/community/route1',
 | |
| 				'http://www.phpbb.com/community',
 | |
| 				'',
 | |
| 			),
 | |
| 			array(
 | |
| 				'http://www.phpbb.com/community/',
 | |
| 				'http://www.phpbb.com/community',
 | |
| 				'',
 | |
| 			),
 | |
| 			array(
 | |
| 				'http://www.phpbb.com/notcommunity/route1/route2/',
 | |
| 				'http://www.phpbb.com/community',
 | |
| 				'../../../community/',
 | |
| 			),
 | |
| 			array(
 | |
| 				'http://www.phpbb.com/notcommunity/route1/route2',
 | |
| 				'http://www.phpbb.com/community',
 | |
| 				'../../community/',
 | |
| 			),
 | |
| 			array(
 | |
| 				'http://www.phpbb.com/notcommunity/route1',
 | |
| 				'http://www.phpbb.com/community',
 | |
| 				'../community/',
 | |
| 			),
 | |
| 			array(
 | |
| 				'http://www.phpbb.com/notcommunity/',
 | |
| 				'http://www.phpbb.com/community',
 | |
| 				'../community/',
 | |
| 			),
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	* @dataProvider get_web_root_path_from_ajax_referer_data
 | |
| 	*/
 | |
| 	public function test_get_web_root_path_from_ajax_referer($referer_url, $board_url, $expected)
 | |
| 	{
 | |
| 		$this->assertEquals($this->phpbb_root_path . $expected, $this->path_helper->get_web_root_path_from_ajax_referer($referer_url, $board_url));
 | |
| 	}
 | |
| }
 |