diff options
Diffstat (limited to 'tests/filesystem/helper_realpath_test.php')
-rw-r--r-- | tests/filesystem/helper_realpath_test.php | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/tests/filesystem/helper_realpath_test.php b/tests/filesystem/helper_realpath_test.php new file mode 100644 index 0000000000..bfb871384b --- /dev/null +++ b/tests/filesystem/helper_realpath_test.php @@ -0,0 +1,83 @@ +<?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\filesystem\helper as filesystem_helper; + +class phpbb_filesystem_helper_realpath_test extends phpbb_test_case +{ + protected static $filesystem_helper_phpbb_own_realpath; + + static public function setUpBeforeClass() + { + parent::setUpBeforeClass(); + + self::$filesystem_helper_phpbb_own_realpath = new ReflectionMethod('\phpbb\filesystem\helper', 'phpbb_own_realpath'); + self::$filesystem_helper_phpbb_own_realpath->setAccessible(true); + } + + public function setUp(): void + { + parent::setUp(); + } + + public function realpath_resolve_absolute_without_symlinks_data() + { + // Constant data + yield [__DIR__, __DIR__]; + yield [__DIR__ . '/../filesystem/../filesystem', __DIR__]; + yield [__DIR__ . '/././', __DIR__]; + yield [__DIR__ . '/non_existent', false]; + + yield [__FILE__, __FILE__]; + yield [__FILE__ . '../', false]; + } + + public function realpath_resolve_relative_without_symlinks_data() + { + if (!function_exists('getcwd')) + { + yield []; + } + else + { + $relative_path = filesystem_helper::make_path_relative(__DIR__, getcwd()); + + yield [$relative_path, __DIR__]; + yield [$relative_path . '../filesystem/../filesystem', __DIR__]; + yield [$relative_path . '././', __DIR__]; + + yield [$relative_path . 'helper_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_helper_phpbb_own_realpath->invoke(null, $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_helper_phpbb_own_realpath->invoke(null, $path)); + } +} |