From 5af36fa2553681b84d298ae1776e187d86b121c7 Mon Sep 17 00:00:00 2001 From: uwetews Date: Mon, 21 Dec 2015 22:45:49 +0100 Subject: [PATCH] add filepath normalization tests --- .../PathNormalizationTest.php | 77 +++++++++++++++++++ .../A_0/PathNormalization/cache/dummy.txt | 0 .../PathNormalization/templates_c/dummy.txt | 0 3 files changed, 77 insertions(+) create mode 100644 tests/UnitTests/A_0/PathNormalization/PathNormalizationTest.php create mode 100644 tests/UnitTests/A_0/PathNormalization/cache/dummy.txt create mode 100644 tests/UnitTests/A_0/PathNormalization/templates_c/dummy.txt diff --git a/tests/UnitTests/A_0/PathNormalization/PathNormalizationTest.php b/tests/UnitTests/A_0/PathNormalization/PathNormalizationTest.php new file mode 100644 index 00000000..08721bf5 --- /dev/null +++ b/tests/UnitTests/A_0/PathNormalization/PathNormalizationTest.php @@ -0,0 +1,77 @@ +setUpSmarty(__DIR__); + } + + public function testNormalizeToAbsolute() { + $d = $this->smarty->_realpath('./foo/a.foo', true); + $this->assertEquals(getcwd() . DIRECTORY_SEPARATOR . 'foo' . DIRECTORY_SEPARATOR . 'a.foo', $d); + } + public function testNormalizeAbsolute() { + if (DIRECTORY_SEPARATOR == '/') { + $d = $this->smarty->_realpath('\\foo\\a.foo', true); + $this->assertEquals('/foo/a.foo', $d); + } else { + $d = $this->smarty->_realpath('/foo/a.foo', true); + $this->assertEquals(substr(getcwd(), 0, 2) . DIRECTORY_SEPARATOR . 'foo' . DIRECTORY_SEPARATOR . 'a.foo', $d); + $d = $this->smarty->_realpath(substr(getcwd(), 0, 2) . '/foo/a.foo', true); + $this->assertEquals(substr(getcwd(), 0, 2) . DIRECTORY_SEPARATOR . 'foo' . DIRECTORY_SEPARATOR . 'a.foo', $d); + } + } + public function testNormalizeToAbsoluteNoStart() { + $d = $this->smarty->_realpath('foo/a.foo', true); + $this->assertEquals(getcwd() . DIRECTORY_SEPARATOR . 'foo' . DIRECTORY_SEPARATOR . 'a.foo', $d); + } + public function testNormalizeToAbsoluteNoStart2() { + $d = $this->smarty->_realpath('a.foo', true); + $this->assertEquals(getcwd() . DIRECTORY_SEPARATOR . 'a.foo', $d); + } + public function testNormalizeToAbsolutePathLeadingDot() { + $d = $this->smarty->_realpath('.foo/a.foo', true); + $this->assertEquals(getcwd() . DIRECTORY_SEPARATOR . '.foo' . DIRECTORY_SEPARATOR . 'a.foo', $d); + } + public function testNormalizeToAbsolutePathTrailingDot() { + $d = $this->smarty->_realpath('./foo./a.foo', true); + $this->assertEquals(getcwd() . DIRECTORY_SEPARATOR . 'foo.' . DIRECTORY_SEPARATOR . 'a.foo', $d); + } + public function testNormalizeToAbsolutePathBubbleUp() { + $ds = '\\' . DIRECTORY_SEPARATOR; + $prefix = preg_replace("#[{$ds}][^{$ds}]+$#", '', getcwd()); + $d = $this->smarty->_realpath('./../a.foo', true); + $this->assertEquals($prefix . DIRECTORY_SEPARATOR . 'a.foo', $d); + } + public function testNormalizeToAbsolutePathBubbleUp2() { + $ds = '\\' . DIRECTORY_SEPARATOR; + $prefix = preg_replace("#[{$ds}][^{$ds}]+$#", '', getcwd()); + $d = $this->smarty->_realpath('././../././a.foo', true); + $this->assertEquals($prefix . DIRECTORY_SEPARATOR . 'a.foo', $d); + } + public function testNormalizeToAbsolutePathBubbleUp3() { + $ds = '\\' . DIRECTORY_SEPARATOR; + $prefix = preg_replace("#[{$ds}][^{$ds}]+[{$ds}][^{$ds}]+$#", '', getcwd()); + $d = $this->smarty->_realpath('././.././.././a.foo', true); + $this->assertEquals($prefix . DIRECTORY_SEPARATOR . 'a.foo', $d); + } + public function testNormalizeToAbsoluteKomplex() { + $d = $this->smarty->_realpath('./foo/\\./bar/jo/wie/so/../../go/../..//.././../a.foo', true); + $this->assertEquals(getcwd() . DIRECTORY_SEPARATOR . 'foo' . DIRECTORY_SEPARATOR . 'a.foo', $d); + } + +} diff --git a/tests/UnitTests/A_0/PathNormalization/cache/dummy.txt b/tests/UnitTests/A_0/PathNormalization/cache/dummy.txt new file mode 100644 index 00000000..e69de29b diff --git a/tests/UnitTests/A_0/PathNormalization/templates_c/dummy.txt b/tests/UnitTests/A_0/PathNormalization/templates_c/dummy.txt new file mode 100644 index 00000000..e69de29b