martinc     2004/10/24 11:34:23

  Modified:    io/src/java/org/apache/commons/io FilenameUtils.java
               io/src/test/org/apache/commons/io FilenameUtilsTestCase.java
  Log:
  Make getExtension() and hence removeExtension() work for both Windows and
  *nix paths. Enable (and fix) tests for both.
  
  Revision  Changes    Path
  1.13      +37 -3     
jakarta-commons/io/src/java/org/apache/commons/io/FilenameUtils.java
  
  Index: FilenameUtils.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/io/src/java/org/apache/commons/io/FilenameUtils.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- FilenameUtils.java        24 Oct 2004 04:20:07 -0000      1.12
  +++ FilenameUtils.java        24 Oct 2004 18:34:23 -0000      1.13
  @@ -53,12 +53,23 @@
    * @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
    * @author <a href="mailto:[EMAIL PROTECTED]">Jeff Turner</a>
    * @author Matthew Hawthorne
  + * @author Martin Cooper
    * @author <a href="mailto:[EMAIL PROTECTED]">Jeremias Maerki</a>
    * @version $Id$
    */
   public class FilenameUtils {
   
       /**
  +     * Standard separator char used when internalizing paths.
  +     */
  +    private static final char INTERNAL_SEPARATOR_CHAR = '/';
  +
  +    /**
  +     * Standard separator string used when internalizing paths.
  +     */
  +    private static final String INTERNAL_SEPARATOR = "/";
  +
  +    /**
        * Instances should NOT be constructed in standard programming.
        */
       public FilenameUtils() { }
  @@ -140,10 +151,11 @@
       public static String getExtension(final String filename) {
           String suffix = "";
           String shortFilename = filename;
  +        String ifilename = internalize(filename);
   
  -        int lastDirSeparator = filename.lastIndexOf(File.separatorChar);
  +        int lastDirSeparator = ifilename.lastIndexOf(INTERNAL_SEPARATOR_CHAR);
           if (lastDirSeparator > 0) {
  -            shortFilename = filename.substring(lastDirSeparator + 1);
  +            shortFilename = ifilename.substring(lastDirSeparator + 1);
           }
   
           int index = shortFilename.lastIndexOf('.');
  @@ -429,6 +441,28 @@
           return file;
       }
   
  +    /**
  +     * Convert all separators to the internal form. This allows manipulation
  +     * of paths without concern for which separators are used within them.
  +     * @param path The path to be internalized.
  +     * @return The internalized path.
  +     */
  +    private static String internalize(String path) {
  +        return path.replace('\\', INTERNAL_SEPARATOR_CHAR);
  +    }
  +
  +    /**
  +     * Convert all separators to their external form. That is, ensure that all
  +     * separators are the same as File.separator.
  +     * @param path The path to be externalized.
  +     * @return The externalized path.
  +     */
  +    private static String externalize(String path) {
  +        if (INTERNAL_SEPARATOR_CHAR != File.separatorChar) {
  +            path = path.replace(INTERNAL_SEPARATOR_CHAR, File.separatorChar);
  +        }
  +        return path;
  +    }
   
       // DEPRECATED. Though no replacement exists.
   
  
  
  
  1.11      +16 -19    
jakarta-commons/io/src/test/org/apache/commons/io/FilenameUtilsTestCase.java
  
  Index: FilenameUtilsTestCase.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/io/src/test/org/apache/commons/io/FilenameUtilsTestCase.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- FilenameUtilsTestCase.java        24 Oct 2004 01:27:13 -0000      1.10
  +++ FilenameUtilsTestCase.java        24 Oct 2004 18:34:23 -0000      1.11
  @@ -29,6 +29,7 @@
    *
    * @author Peter Donald
    * @author Matthew Hawthorne
  + * @author Martin Cooper
    * @version $Id$
    * @see FilenameUtils
    */
  @@ -220,13 +221,13 @@
   
       public void testGetExtensionWithPaths() {
           String[][] testsWithPaths =
  -            { { File.separator + "tmp" + File.separator + "foo" + File.separator + 
"filename.ext", "ext" }, {
  -                //"C:\\temp\\foo\\filename.ext", "ext" }, {
  -                File.separator + "tmp" + File.separator + "foo.bar" + 
File.separator + "filename.ext", "ext" }, {
  -                //"C:\\temp\\foo.bar\\filename.ext", "ext" }, {
  -                File.separator + "tmp" + File.separator + "foo.bar" + 
File.separator + "README", "" }, {
  -                //"C:\\temp\\foo.bar\\README", "" }, {
  -                ".." + File.separator + "filename.ext", "ext" }
  +            { { "/tmp/foo/filename.ext", "ext" }, {
  +                "C:\\temp\\foo\\filename.ext", "ext" }, {
  +                "/tmp/foo.bar/filename.ext", "ext" }, {
  +                "C:\\temp\\foo.bar\\filename.ext", "ext" }, {
  +                "/tmp/foo.bar/README", "" }, {
  +                "C:\\temp\\foo.bar\\README", "" }, {
  +                "../filename.ext", "ext" }
           };
           for (int i = 0; i < testsWithPaths.length; i++) {
               assertEquals(
  @@ -256,17 +257,13 @@
   
       public void testRemoveExtensionWithPaths() {
           String[][] testsWithPaths =
  -            { { File.separator + "tmp" + File.separator + "foo" + File.separator + 
"filename.ext",
  -                File.separator + "tmp" + File.separator + "foo" + File.separator + 
"filename" }, {
  -                //"C:\\temp\\foo\\filename.ext", "filename" }, {
  -                File.separator + "tmp" + File.separator + "foo.bar" + 
File.separator + "filename.ext",
  -                File.separator + "tmp" + File.separator + "foo.bar" + 
File.separator + "filename" }, {
  -                //"C:\\temp\\foo.bar\\filename.ext", "filename" }, {
  -                File.separator + "tmp" + File.separator + "foo.bar" + 
File.separator + "README",
  -                File.separator + "tmp" + File.separator + "foo.bar" + 
File.separator + "README" }, {
  -                //"C:\\temp\\foo.bar\\README", "README" }, {
  -                ".." + File.separator + "filename.ext",
  -                ".." + File.separator + "filename" }
  +            { { "/tmp/foo/filename.ext", "/tmp/foo/filename" }, {
  +                "C:\\temp\\foo\\filename.ext", "C:\\temp\\foo\\filename" }, {
  +                "/tmp/foo.bar/filename.ext", "/tmp/foo.bar/filename" }, {
  +                "C:\\temp\\foo.bar\\filename.ext", "C:\\temp\\foo.bar\\filename" }, 
{
  +                "/tmp/foo.bar/README", "/tmp/foo.bar/README" }, {
  +                "C:\\temp\\foo.bar\\README", "C:\\temp\\foo.bar\\README" }, {
  +                "../filename.ext", "../filename" }
           };
   
           for (int i = 0; i < testsWithPaths.length; i++) {
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to