diff options
Diffstat (limited to 'tests/filesystem')
| -rw-r--r-- | tests/filesystem/clean_path_test.php | 2 | ||||
| -rw-r--r-- | tests/filesystem/is_absolute_test.php | 68 | ||||
| -rw-r--r-- | tests/filesystem/realpath_test.php | 90 | 
3 files changed, 159 insertions, 1 deletions
| diff --git a/tests/filesystem/clean_path_test.php b/tests/filesystem/clean_path_test.php index c585b17155..d2dec424b4 100644 --- a/tests/filesystem/clean_path_test.php +++ b/tests/filesystem/clean_path_test.php @@ -18,7 +18,7 @@ class phpbb_filesystem_clean_path_test extends phpbb_test_case  	public function setUp()  	{  		parent::setUp(); -		$this->filesystem = new \phpbb\filesystem(); +		$this->filesystem = new \phpbb\filesystem\filesystem();  	}  	public function clean_path_data() diff --git a/tests/filesystem/is_absolute_test.php b/tests/filesystem/is_absolute_test.php new file mode 100644 index 0000000000..7a50989b74 --- /dev/null +++ b/tests/filesystem/is_absolute_test.php @@ -0,0 +1,68 @@ +<?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_filesystem_is_absolute_test extends phpbb_test_case +{ +	/** @var \phpbb\filesystem\filesystem_interface */ +	protected $filesystem; + +	public function setUp() +	{ +		parent::setUp(); + +		$this->filesystem = new \phpbb\filesystem\filesystem(); +	} + +	static public function is_absolute_data() +	{ +		return array( +			// Empty +			array('', false), + +			// Absolute unix style +			array('/etc/phpbb', true), +			// Unix does not support \ so that is not an absolute path +			array('\etc\phpbb', false), + +			// Absolute windows style +			array('c:\windows', true), +			array('C:\Windows', true), +			array('c:/windows', true), +			array('C:/Windows', true), + +			// Executable +			array('etc/phpbb', false), +			array('explorer.exe', false), + +			// Relative subdir +			array('Windows\System32', false), +			array('Windows\System32\explorer.exe', false), +			array('Windows/System32', false), +			array('Windows/System32/explorer.exe', false), + +			// Relative updir +			array('..\Windows\System32', false), +			array('..\Windows\System32\explorer.exe', false), +			array('../Windows/System32', false), +			array('../Windows/System32/explorer.exe', false), +		); +	} + +	/** +	 * @dataProvider is_absolute_data +	 */ +	public function test_is_absolute($path, $expected) +	{ +		$this->assertEquals($expected, $this->filesystem->is_absolute_path($path)); +	} +} diff --git a/tests/filesystem/realpath_test.php b/tests/filesystem/realpath_test.php new file mode 100644 index 0000000000..d994935f94 --- /dev/null +++ b/tests/filesystem/realpath_test.php @@ -0,0 +1,90 @@ +<?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_filesystem_realpath_test extends phpbb_test_case +{ +	static protected $filesystem_own_realpath; + +	/** @var \phpbb\filesystem\filesystem_interface */ +	protected $filesystem; + +	static public function setUpBeforeClass() +	{ +		parent::setUpBeforeClass(); + +		$reflection_class = new ReflectionClass('\phpbb\filesystem\filesystem'); +		self::$filesystem_own_realpath = $reflection_class->getMethod('phpbb_own_realpath'); +		self::$filesystem_own_realpath->setAccessible(true); +	} + +	public function setUp() +	{ +		parent::setUp(); + +		$this->filesystem = new \phpbb\filesystem\filesystem(); +	} + +	public function realpath_resolve_absolute_without_symlinks_data() +	{ +		return array( +			// Constant data +			array(__DIR__, __DIR__), +			array(__DIR__ . '/../filesystem/../filesystem', __DIR__), +			array(__DIR__ . '/././', __DIR__), +			array(__DIR__ . '/non_existent', false), + +			array(__FILE__, __FILE__), +			array(__FILE__ . '../', false), +		); +	} + +	public function realpath_resolve_relative_without_symlinks_data() +	{ +		if (!function_exists('getcwd')) +		{ +			return array(); +		} + +		$filesystem = new \phpbb\filesystem\filesystem(); +		$relative_path = $filesystem->make_path_relative(__DIR__, getcwd()); + +		return array( +			array($relative_path, __DIR__), +			array($relative_path . '../filesystem/../filesystem', __DIR__), +			array($relative_path . '././', __DIR__), + +			array($relative_path . 'realpath_test.php', __FILE__), +		); +	} + +	/** +	 * @dataProvider realpath_resolve_absolute_without_symlinks_data +	 */ +	public function test_realpath_absolute_without_links($path, $expected) +	{ +		$this->assertEquals($expected, self::$filesystem_own_realpath->invoke($this->filesystem, $path)); +	} + +	/** +	 * @dataProvider realpath_resolve_relative_without_symlinks_data +	 */ +	public function test_realpath_relative_without_links($path, $expected) +	{ +		if (!function_exists('getcwd')) +		{ +			$this->markTestSkipped('phpbb_own_realpath() cannot be tested with relative paths: getcwd is not available.'); +		} + +		$this->assertEquals($expected, self::$filesystem_own_realpath->invoke($this->filesystem, $path)); +	} +} | 
