Author: dr Date: Mon Aug 13 14:34:51 2007 New Revision: 5898 Log: - Added the ezcBaseFile::isAbsolutePath() method, which returns whether a path is absolute or relative.
Added: trunk/Base/tests/file_is_absolute_path.php (with props) Modified: trunk/Base/ChangeLog trunk/Base/src/features.php trunk/Base/src/file.php trunk/Base/tests/suite.php Modified: trunk/Base/ChangeLog ============================================================================== --- trunk/Base/ChangeLog [iso-8859-1] (original) +++ trunk/Base/ChangeLog [iso-8859-1] Mon Aug 13 14:34:51 2007 @@ -1,3 +1,11 @@ +1.4alpha1 - [RELEASEDATE] +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +- Added the ezcBaseFile class, which was moved from the File component. +- Added the ezcBaseFile::isAbsolutePath() method, which returns whether a path + is absolute or relative. + + 1.3.1 - Monday 30 July 2007 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Modified: trunk/Base/src/features.php ============================================================================== --- trunk/Base/src/features.php [iso-8859-1] (original) +++ trunk/Base/src/features.php [iso-8859-1] Mon Aug 13 14:34:51 2007 @@ -217,6 +217,11 @@ /** * Returns the operating system on which PHP is running. + * + * This method returns a sanitized form of the OS name, example + * return values are "Windows", "Mac", "Linux" and "FreeBSD". In + * all other cases it returns the value of the internal PHP constant + * PHP_OS. * * @return string */ Modified: trunk/Base/src/file.php ============================================================================== --- trunk/Base/src/file.php [iso-8859-1] (original) +++ trunk/Base/src/file.php [iso-8859-1] Mon Aug 13 14:34:51 2007 @@ -210,5 +210,57 @@ return $result; } + + /** + * Returns whether the passed $path is an absolute path, giving the current $os. + * + * With the $os parameter you can tell this function to use the semantics + * for a different operating system to determine whether a path is + * absolute. The $os argument defaults to the OS that the script is running + * on. + * + * @param string $path + * @param string $os + * @returns bool + */ + public static function isAbsolutePath( $path, $os = null ) + { + if ( $os === null ) + { + $os = ezcBaseFeatures::os(); + } + + switch ( $os ) + { + case 'Windows': + // Sanitize the paths to use the correct directory separator for the platform + $path = strtr( $path, '\\/', '\\\\' ); + + // Absolute paths with drive letter: X:\ + if ( preg_match( '@^[A-Z]:[EMAIL PROTECTED]', $path ) ) + { + return true; + } + + // Absolute paths with network paths: \\server\share\ + if ( preg_match( '@[EMAIL PROTECTED]', $path ) ) + { + return true; + } + break; + case 'Mac': + case 'Linux': + case 'FreeBSD': + default: + // Sanitize the paths to use the correct directory separator for the platform + $path = strtr( $path, '\\/', '//' ); + + if ( $path[0] == '/' ) + { + return true; + } + } + return false; + } } ?> Added: trunk/Base/tests/file_is_absolute_path.php ============================================================================== --- trunk/Base/tests/file_is_absolute_path.php (added) +++ trunk/Base/tests/file_is_absolute_path.php [iso-8859-1] Mon Aug 13 14:34:51 2007 @@ -1,0 +1,224 @@ +<?php +/** + * @copyright Copyright (C) 2005-2007 eZ systems as. All rights reserved. + * @license http://ez.no/licenses/new_bsd New BSD License + * @version //autogentag// + * @filesource + * @package Base + * @subpackage Tests + */ + +/** + * @package Base + * @subpackage Tests + */ +class ezcBaseFileIsAbsoluteTest extends ezcTestCase +{ + public static function testAbsoluteWindows1() + { + self::assertEquals( true, ezcBaseFile::isAbsolutePath( 'c:\\winnt\\winnt.sys', 'Windows' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( 'c:\winnt\winnt.sys', 'Windows' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( 'c:\\winnt', 'Windows' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( 'c:\\winnt.sys', 'Windows' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( 'c:\winnt.sys', 'Windows' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( 'c:\\winnt.sys', 'Windows' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( 'c:\table.sys', 'Windows' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'c:winnt', 'Windows' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'c\\winnt.sys', 'Windows' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( '\\winnt.sys', 'Windows' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( '\winnt.sys', 'Windows' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'winnt.sys', 'Windows' ) ); + + self::assertEquals( false, ezcBaseFile::isAbsolutePath( '\\server\share\foo.sys', 'Windows' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '\\\\server\share\foo.sys', 'Windows' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( '\\tequila\share\foo.sys', 'Windows' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '\\\\tequila\share\foo.sys', 'Windows' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( '\\tequila\thare\foo.sys', 'Windows' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '\\\\tequila\thare\foo.sys', 'Windows' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( '\\server\\share\foo.sys', 'Windows' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '\\\\server\\share\foo.sys', 'Windows' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( '\\tequila\\share\foo.sys', 'Windows' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '\\\\tequila\\share\foo.sys', 'Windows' ) ); + + self::assertEquals( false, ezcBaseFile::isAbsolutePath( '\etc\init.d\apache', 'Windows' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( '\\etc\\init.d\\apache', 'Windows' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'etc\init.d\apache', 'Windows' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'etc\\init.d\\apache', 'Windows' ) ); + } + + public static function testAbsoluteWindows2() + { + self::assertEquals( true, ezcBaseFile::isAbsolutePath( 'c://winnt//winnt.sys', 'Windows' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( 'c:/winnt/winnt.sys', 'Windows' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( 'c://winnt', 'Windows' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( 'c://winnt.sys', 'Windows' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( 'c:/winnt.sys', 'Windows' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( 'c://winnt.sys', 'Windows' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( 'c:/table.sys', 'Windows' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'c:winnt', 'Windows' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'c//winnt.sys', 'Windows' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( '//winnt.sys', 'Windows' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( '/winnt.sys', 'Windows' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'winnt.sys', 'Windows' ) ); + + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '//server/share/foo.sys', 'Windows' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( '////server/share/foo.sys', 'Windows' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '//tequila/share/foo.sys', 'Windows' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( '////tequila/share/foo.sys', 'Windows' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '//tequila/thare/foo.sys', 'Windows' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( '////tequila/thare/foo.sys', 'Windows' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( '//server//share/foo.sys', 'Windows' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( '////server//share/foo.sys', 'Windows' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( '//tequila//share/foo.sys', 'Windows' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( '////tequila//share/foo.sys', 'Windows' ) ); + + self::assertEquals( false, ezcBaseFile::isAbsolutePath( '/etc/init.d/apache', 'Windows' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( '//etc//init.d//apache', 'Windows' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'etc/init.d/apache', 'Windows' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'etc//init.d//apache', 'Windows' ) ); + } + + public static function testAbsoluteWindows3() + { + if ( ezcBaseFeatures::os() !== 'Windows' ) + { + self::markTestSkipped( 'Test is for Windows only' ); + } + + self::assertEquals( true, ezcBaseFile::isAbsolutePath( 'c://winnt//winnt.sys' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( 'c:/winnt/winnt.sys' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( 'c://winnt' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( 'c://winnt.sys' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( 'c:/winnt.sys' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( 'c://winnt.sys' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( 'c:/table.sys' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'c:winnt' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'c//winnt.sys' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( '//winnt.sys' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( '/winnt.sys' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'winnt.sys' ) ); + + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '//server/share/foo.sys' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( '////server/share/foo.sys' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '//tequila/share/foo.sys' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( '////tequila/share/foo.sys' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '//tequila/thare/foo.sys' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( '////tequila/thare/foo.sys' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( '//server//share/foo.sys' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( '////server//share/foo.sys' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( '//tequila//share/foo.sys' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( '////tequila//share/foo.sys' ) ); + + self::assertEquals( false, ezcBaseFile::isAbsolutePath( '/etc/init.d/apache' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( '//etc//init.d//apache' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'etc/init.d/apache' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'etc//init.d//apache' ) ); + } + + public static function testAbsoluteLinux1() + { + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'c:\\winnt\\winnt.sys', 'Linux' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'c:\winnt\winnt.sys', 'Linux' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'c:\\winnt', 'Linux' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'c:\\winnt.sys', 'Linux' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'c:\winnt.sys', 'Linux' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'c:\\winnt.sys', 'Linux' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'c:\table.sys', 'Linux' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'c:winnt', 'Linux' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'c\\winnt.sys', 'Linux' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '\\winnt.sys', 'Linux' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '\winnt.sys', 'Linux' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'winnt.sys', 'Linux' ) ); + + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '\\server\share\foo.sys', 'Linux' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '\\\\server\share\foo.sys', 'Linux' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '\\tequila\share\foo.sys', 'Linux' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '\\\\tequila\share\foo.sys', 'Linux' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '\\tequila\thare\foo.sys', 'Linux' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '\\\\tequila\thare\foo.sys', 'Linux' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '\\server\\share\foo.sys', 'Linux' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '\\\\server\\share\foo.sys', 'Linux' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '\\tequila\\share\foo.sys', 'Linux' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '\\\\tequila\\share\foo.sys', 'Linux' ) ); + + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '\etc\init.d\apache', 'Linux' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '\\etc\\init.d\\apache', 'Linux' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'etc\init.d\apache', 'Linux' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'etc\\init.d\\apache', 'Linux' ) ); + } + + public static function testAbsoluteLinux2() + { + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'c://winnt//winnt.sys', 'Linux' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'c:/winnt/winnt.sys', 'Linux' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'c://winnt', 'Linux' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'c://winnt.sys', 'Linux' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'c:/winnt.sys', 'Linux' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'c://winnt.sys', 'Linux' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'c:/table.sys', 'Linux' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'c:winnt', 'Linux' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'c//winnt.sys', 'Linux' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '//winnt.sys', 'Linux' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '/winnt.sys', 'Linux' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'winnt.sys', 'Linux' ) ); + + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '//server/share/foo.sys', 'Linux' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '////server/share/foo.sys', 'Linux' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '//tequila/share/foo.sys', 'Linux' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '////tequila/share/foo.sys', 'Linux' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '//tequila/thare/foo.sys', 'Linux' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '////tequila/thare/foo.sys', 'Linux' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '//server//share/foo.sys', 'Linux' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '////server//share/foo.sys', 'Linux' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '//tequila//share/foo.sys', 'Linux' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '////tequila//share/foo.sys', 'Linux' ) ); + + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '/etc/init.d/apache', 'Linux' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '//etc//init.d//apache', 'Linux' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'etc/init.d/apache', 'Linux' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'etc//init.d//apache', 'Linux' ) ); + } + + public static function testAbsoluteLinux3() + { + if ( ezcBaseFeatures::os() === 'Windows' ) + { + self::markTestSkipped( 'Test is for unix-like systems only' ); + } + + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'c://winnt//winnt.sys' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'c:/winnt/winnt.sys' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'c://winnt' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'c://winnt.sys' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'c:/winnt.sys' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'c://winnt.sys' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'c:/table.sys' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'c:winnt' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'c//winnt.sys' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '//winnt.sys' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '/winnt.sys' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'winnt.sys' ) ); + + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '//server/share/foo.sys' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '////server/share/foo.sys' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '//tequila/share/foo.sys' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '////tequila/share/foo.sys' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '//tequila/thare/foo.sys' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '////tequila/thare/foo.sys' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '//server//share/foo.sys' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '////server//share/foo.sys' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '//tequila//share/foo.sys' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '////tequila//share/foo.sys' ) ); + + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '/etc/init.d/apache' ) ); + self::assertEquals( true, ezcBaseFile::isAbsolutePath( '//etc//init.d//apache' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'etc/init.d/apache' ) ); + self::assertEquals( false, ezcBaseFile::isAbsolutePath( 'etc//init.d//apache' ) ); + } + + public static function suite() + { + return new PHPUnit_Framework_TestSuite( "ezcBaseFileIsAbsoluteTest" ); + } +} +?> Propchange: trunk/Base/tests/file_is_absolute_path.php ------------------------------------------------------------------------------ svn:eol-style = native Modified: trunk/Base/tests/suite.php ============================================================================== --- trunk/Base/tests/suite.php [iso-8859-1] (original) +++ trunk/Base/tests/suite.php [iso-8859-1] Mon Aug 13 14:34:51 2007 @@ -13,6 +13,7 @@ require_once( "base_options_test.php"); require_once( "struct_test.php"); require_once 'file_find_recursive_test.php'; +require_once 'file_is_absolute_path.php'; require_once 'file_remove_recursive_test.php'; require_once 'file_calculate_relative_path_test.php'; @@ -34,6 +35,7 @@ $this->addTest( ezcBaseStructTest::suite() ); $this->addTest( ezcBaseFileCalculateRelativePathTest::suite() ); $this->addTest( ezcBaseFileFindRecursiveTest::suite() ); + $this->addTest( ezcBaseFileIsAbsoluteTest::suite() ); $this->addTest( ezcBaseFileRemoveRecursiveTest::suite() ); } -- svn-components mailing list svn-components@lists.ez.no http://lists.ez.no/mailman/listinfo/svn-components