Permalink
Browse files

Merge pull request #1226 from LouisLandry/issue-1220

Fix JPath::clean() to support UNC style paths. [#1220]
  • Loading branch information...
2 parents 7983df6 + 9b9462c commit 77e7351b97d258eee78b9451d10b472b19b7ec01 @pasamio pasamio committed May 27, 2012
Showing with 88 additions and 81 deletions.
  1. +6 −1 libraries/joomla/filesystem/path.php
  2. +82 −80 tests/suites/unit/joomla/filesystem/JPathTest.php
@@ -200,9 +200,14 @@ public static function clean($path, $ds = DIRECTORY_SEPARATOR)
{
$path = JPATH_ROOT;
}
+ // Remove double slashes and backslashes and convert all slashes and backslashes to DIRECTORY_SEPARATOR
+ // If dealing with a UNC path don't forget to prepend the path with a backslash.
+ elseif (($ds == '\\') && ($path[0] == '\\' ) && ( $path[1] == '\\' ))
+ {
+ $path = "\\" . preg_replace('#[/\\\\]+#', $ds, $path);
+ }
else
{
- // Remove double slashes and backslashes and convert all slashes and backslashes to DIRECTORY_SEPARATOR
$path = preg_replace('#[/\\\\]+#', $ds, $path);
}
@@ -1,110 +1,112 @@
<?php
/**
* @package Joomla.UnitTest
+ * @subpackage Filesystem
*
- * @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
+ * @copyright Copyright (C) 2005 - 2011 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
-include_once JPATH_PLATFORM . '/joomla/filesystem/path.php';
+JLoader::register('JPath', JPATH_PLATFORM . '/joomla/filesystem/path.php');
/**
- * Test class for JPath.
- * Generated by PHPUnit on 2011-10-26 at 19:32:34.
+ * Tests for the JPath class.
+ *
+ * @package Joomla.UnitTest
+ * @subpackage Filesystem
+ * @since 12.2
*/
-class JPathTest extends PHPUnit_Framework_TestCase {
-
- /**
- * @var JPath
- */
- protected $object;
-
- /**
- * Sets up the fixture, for example, opens a network connection.
- * This method is called before a test is executed.
- */
- protected function setUp() {
- $this->object = new JPath;
- }
+class JPathTest extends TestCase
+{
+ /**
+ * Data provider for testClean() method.
+ *
+ * @return array
+ *
+ * @since 12.2
+ */
+ public function getCleanData()
+ {
+ return array(
+ // Input Path, Directory Separator, Expected Output
+ 'Nothing to do.' => array('/var/www/foo/bar/baz', '/', '/var/www/foo/bar/baz'),
+ 'One backslash.' => array('/var/www/foo\\bar/baz', '/', '/var/www/foo/bar/baz'),
+ 'Two and one backslashes.' => array('/var/www\\\\foo\\bar/baz', '/', '/var/www/foo/bar/baz'),
+ 'Mixed backslashes and double forward slashes.' => array('/var\\/www//foo\\bar/baz', '/', '/var/www/foo/bar/baz'),
+ 'UNC path.' => array('\\\\www\\docroot', '\\', '\\\\www\\docroot'),
+ 'UNC path with forward slash.' => array('\\\\www/docroot', '\\', '\\\\www\\docroot'),
+ 'UNC path with UNIX directory separator.' => array('\\\\www/docroot', '/', '/www/docroot'),
+ );
+ }
- /**
- * Tears down the fixture, for example, closes a network connection.
- * This method is called after a test is executed.
- */
- protected function tearDown() {
-
- }
-
- /**
+ /**
* @todo Implement testCanChmod().
*/
- public function testCanChmod() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete(
- 'This test has not been implemented yet.'
- );
- }
+ public function testCanChmod()
+ {
+ // Remove the following lines when you implement this test.
+ $this->markTestIncomplete('This test has not been implemented yet.');
+ }
- /**
+ /**
* @todo Implement testSetPermissions().
*/
- public function testSetPermissions() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete(
- 'This test has not been implemented yet.'
- );
- }
+ public function testSetPermissions()
+ {
+ // Remove the following lines when you implement this test.
+ $this->markTestIncomplete('This test has not been implemented yet.');
+ }
- /**
+ /**
* @todo Implement testGetPermissions().
*/
- public function testGetPermissions() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete(
- 'This test has not been implemented yet.'
- );
- }
+ public function testGetPermissions()
+ {
+ // Remove the following lines when you implement this test.
+ $this->markTestIncomplete('This test has not been implemented yet.');
+ }
- /**
+ /**
* @todo Implement testCheck().
*/
- public function testCheck() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete(
- 'This test has not been implemented yet.'
- );
- }
+ public function testCheck()
+ {
+ // Remove the following lines when you implement this test.
+ $this->markTestIncomplete('This test has not been implemented yet.');
+ }
- /**
- * @todo Implement testClean().
- */
- public function testClean() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete(
- 'This test has not been implemented yet.'
- );
- }
+ /**
+ * Tests the clean method.
+ *
+ * @return void
+ *
+ * @covers JPath::clean
+ * @dataProvider getCleanData
+ * @since 12.2
+ */
+ public function testClean($input, $ds, $expected)
+ {
+ $this->assertEquals(
+ $expected,
+ JPath::clean($input, $ds)
+ );
+ }
- /**
+ /**
* @todo Implement testIsOwner().
*/
- public function testIsOwner() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete(
- 'This test has not been implemented yet.'
- );
- }
+ public function testIsOwner()
+ {
+ // Remove the following lines when you implement this test.
+ $this->markTestIncomplete('This test has not been implemented yet.');
+ }
- /**
+ /**
* @todo Implement testFind().
*/
- public function testFind() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete(
- 'This test has not been implemented yet.'
- );
- }
-
+ public function testFind()
+ {
+ // Remove the following lines when you implement this test.
+ $this->markTestIncomplete('This test has not been implemented yet.');
+ }
}
-
-?>

0 comments on commit 77e7351

Please sign in to comment.