From ba525f193d451ef2822bee341851ce83dc3f402c Mon Sep 17 00:00:00 2001 From: miri-cohen20 Date: Wed, 21 Jan 2026 12:55:45 +0200 Subject: [PATCH 1/4] [IO-745] Fix FilenameUtils#getPrefixLength for UNC paths without trailing slash --- .../org/apache/commons/io/FilenameUtils.java | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/apache/commons/io/FilenameUtils.java b/src/main/java/org/apache/commons/io/FilenameUtils.java index 416720a02f8..fcf7300bf79 100644 --- a/src/main/java/org/apache/commons/io/FilenameUtils.java +++ b/src/main/java/org/apache/commons/io/FilenameUtils.java @@ -16,6 +16,7 @@ */ package org.apache.commons.io; +import java.io.Console; import java.io.File; import java.util.ArrayDeque; import java.util.ArrayList; @@ -930,15 +931,27 @@ public static int getPrefixLength(final String fileName) { if (!isSeparator(ch0) || !isSeparator(ch1)) { return isSeparator(ch0) ? 1 : 0; } + + // UNC path: //hostname or //hostname/... int posUnix = fileName.indexOf(UNIX_NAME_SEPARATOR, 2); int posWin = fileName.indexOf(WINDOWS_NAME_SEPARATOR, 2); - if (posUnix == NOT_FOUND && posWin == NOT_FOUND || posUnix == 2 || posWin == 2) { + + if (posUnix == 2 || posWin == 2) { return NOT_FOUND; } - posUnix = posUnix == NOT_FOUND ? posWin : posUnix; - posWin = posWin == NOT_FOUND ? posUnix : posWin; - final int pos = Math.min(posUnix, posWin) + 1; - final String hostnamePart = fileName.substring(2, pos - 1); + int pos; + String hostnamePart; + if(posUnix == NOT_FOUND && posWin == NOT_FOUND){ + pos = fileName.length(); + hostnamePart = fileName.substring(2); + } + else{ + posUnix = posUnix == NOT_FOUND ? posWin : posUnix; + posWin = posWin == NOT_FOUND ? posUnix : posWin; + pos = Math.min(posUnix, posWin) + 1; + hostnamePart = fileName.substring(2, pos - 1); + } + return isValidHostName(hostnamePart) ? pos : NOT_FOUND; } From 318c9197a098c07b5301ed8daf51be8e043a058a Mon Sep 17 00:00:00 2001 From: miri-cohen20 Date: Wed, 21 Jan 2026 12:58:43 +0200 Subject: [PATCH 2/4] [IO-745] Fix FilenameUtilsTest Adding and modifying tests to match the correct logic --- .../apache/commons/io/FilenameUtilsTest.java | 33 ++++++++++--------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/src/test/java/org/apache/commons/io/FilenameUtilsTest.java b/src/test/java/org/apache/commons/io/FilenameUtilsTest.java index 3049b9ae098..967ff179533 100644 --- a/src/test/java/org/apache/commons/io/FilenameUtilsTest.java +++ b/src/test/java/org/apache/commons/io/FilenameUtilsTest.java @@ -70,7 +70,7 @@ public void setUp() throws Exception { + " as the parent directory does not exist"); } try (BufferedOutputStream output3 = - new BufferedOutputStream(Files.newOutputStream(testFile1))) { + new BufferedOutputStream(Files.newOutputStream(testFile1))) { TestUtils.generateTestData(output3, testFile1Size); } if (!Files.exists(testFile2.getParent())) { @@ -78,7 +78,7 @@ public void setUp() throws Exception { + " as the parent directory does not exist"); } try (BufferedOutputStream output2 = - new BufferedOutputStream(Files.newOutputStream(testFile2))) { + new BufferedOutputStream(Files.newOutputStream(testFile2))) { TestUtils.generateTestData(output2, testFile2Size); } if (!Files.exists(testFile1.getParent())) { @@ -86,7 +86,7 @@ public void setUp() throws Exception { + " as the parent directory does not exist"); } try (BufferedOutputStream output1 = - new BufferedOutputStream(Files.newOutputStream(testFile1))) { + new BufferedOutputStream(Files.newOutputStream(testFile1))) { TestUtils.generateTestData(output1, testFile1Size); } if (!Files.exists(testFile2.getParent())) { @@ -94,7 +94,7 @@ public void setUp() throws Exception { + " as the parent directory does not exist"); } try (BufferedOutputStream output = - new BufferedOutputStream(Files.newOutputStream(testFile2))) { + new BufferedOutputStream(Files.newOutputStream(testFile2))) { TestUtils.generateTestData(output, testFile2Size); } } @@ -192,7 +192,6 @@ void testEqualsNormalized() { void testEqualsNormalizedError_IO_128() { assertFalse(FilenameUtils.equalsNormalizedOnSystem("//file.txt", "file.txt")); assertFalse(FilenameUtils.equalsNormalizedOnSystem("file.txt", "//file.txt")); - assertFalse(FilenameUtils.equalsNormalizedOnSystem("//file.txt", "//file.txt")); } @Test @@ -275,7 +274,6 @@ void testGetFullPath() { assertNull(FilenameUtils.getFullPath("1:")); assertNull(FilenameUtils.getFullPath("1:a")); assertNull(FilenameUtils.getFullPath("///a/b/c.txt")); - assertNull(FilenameUtils.getFullPath("//a")); assertEquals("", FilenameUtils.getFullPath("")); @@ -288,6 +286,7 @@ void testGetFullPath() { assertEquals("C:/", FilenameUtils.getFullPath("C:/")); assertEquals("//server/", FilenameUtils.getFullPath("//server/")); + assertEquals("//server", FilenameUtils.getFullPath("//server")); assertEquals("~/", FilenameUtils.getFullPath("~")); assertEquals("~/", FilenameUtils.getFullPath("~/")); assertEquals("~user/", FilenameUtils.getFullPath("~user")); @@ -317,7 +316,6 @@ void testGetFullPathNoEndSeparator() { assertNull(FilenameUtils.getFullPathNoEndSeparator("1:")); assertNull(FilenameUtils.getFullPathNoEndSeparator("1:a")); assertNull(FilenameUtils.getFullPathNoEndSeparator("///a/b/c.txt")); - assertNull(FilenameUtils.getFullPathNoEndSeparator("//a")); assertEquals("", FilenameUtils.getFullPathNoEndSeparator("")); @@ -330,6 +328,7 @@ void testGetFullPathNoEndSeparator() { assertEquals("C:/", FilenameUtils.getFullPathNoEndSeparator("C:/")); assertEquals("//server/", FilenameUtils.getFullPathNoEndSeparator("//server/")); + assertEquals("//server", FilenameUtils.getFullPathNoEndSeparator("//server")); assertEquals("~", FilenameUtils.getFullPathNoEndSeparator("~")); assertEquals("~/", FilenameUtils.getFullPathNoEndSeparator("~/")); assertEquals("~user", FilenameUtils.getFullPathNoEndSeparator("~user")); @@ -408,12 +407,12 @@ void testGetPath() { assertNull(FilenameUtils.getPath("1:")); assertNull(FilenameUtils.getPath("1:a")); assertNull(FilenameUtils.getPath("///a/b/c.txt")); - assertNull(FilenameUtils.getPath("//a")); assertEquals("", FilenameUtils.getPath("")); assertEquals("", FilenameUtils.getPath(DRIVE_C)); assertEquals("", FilenameUtils.getPath("C:/")); assertEquals("", FilenameUtils.getPath("//server/")); + assertEquals("",FilenameUtils.getPath("//server")); assertEquals("", FilenameUtils.getPath("~")); assertEquals("", FilenameUtils.getPath("~/")); assertEquals("", FilenameUtils.getPath("~user")); @@ -450,12 +449,12 @@ void testGetPathNoEndSeparator() { assertNull(FilenameUtils.getPathNoEndSeparator("1:")); assertNull(FilenameUtils.getPathNoEndSeparator("1:a")); assertNull(FilenameUtils.getPathNoEndSeparator("///a/b/c.txt")); - assertNull(FilenameUtils.getPathNoEndSeparator("//a")); assertEquals("", FilenameUtils.getPathNoEndSeparator("")); assertEquals("", FilenameUtils.getPathNoEndSeparator(DRIVE_C)); assertEquals("", FilenameUtils.getPathNoEndSeparator("C:/")); assertEquals("", FilenameUtils.getPathNoEndSeparator("//server/")); + assertEquals("",FilenameUtils.getPathNoEndSeparator("//server")); assertEquals("", FilenameUtils.getPathNoEndSeparator("~")); assertEquals("", FilenameUtils.getPathNoEndSeparator("~/")); assertEquals("", FilenameUtils.getPathNoEndSeparator("~user")); @@ -484,7 +483,6 @@ void testGetPrefix() { assertNull(FilenameUtils.getPrefix("1:")); assertNull(FilenameUtils.getPrefix("1:a")); assertNull(FilenameUtils.getPrefix("\\\\\\a\\b\\c.txt")); - assertNull(FilenameUtils.getPrefix("\\\\a")); assertEquals("", FilenameUtils.getPrefix("")); assertEquals("\\", FilenameUtils.getPrefix("\\")); @@ -498,6 +496,7 @@ void testGetPrefix() { assertEquals("C:\\", FilenameUtils.getPrefix("C:\\")); assertEquals("//server/", FilenameUtils.getPrefix("//server/")); + assertEquals("//server", FilenameUtils.getPrefix("//server")); assertEquals("~/", FilenameUtils.getPrefix("~")); assertEquals("~/", FilenameUtils.getPrefix("~/")); assertEquals("~user/", FilenameUtils.getPrefix("~user")); @@ -507,6 +506,7 @@ void testGetPrefix() { assertEquals("\\", FilenameUtils.getPrefix("\\a\\b\\c.txt")); assertEquals("C:\\", FilenameUtils.getPrefix("C:\\a\\b\\c.txt")); assertEquals("\\\\server\\", FilenameUtils.getPrefix("\\\\server\\a\\b\\c.txt")); + assertEquals("\\\\a", FilenameUtils.getPrefix("\\\\a")); assertEquals("", FilenameUtils.getPrefix("a/b/c.txt")); assertEquals("/", FilenameUtils.getPrefix("/a/b/c.txt")); @@ -534,7 +534,6 @@ void testGetPrefixLength() { assertEquals(-1, FilenameUtils.getPrefixLength("1:")); assertEquals(-1, FilenameUtils.getPrefixLength("1:a")); assertEquals(-1, FilenameUtils.getPrefixLength("\\\\\\a\\b\\c.txt")); - assertEquals(-1, FilenameUtils.getPrefixLength("\\\\a")); assertEquals(0, FilenameUtils.getPrefixLength("")); assertEquals(1, FilenameUtils.getPrefixLength("\\")); @@ -548,6 +547,7 @@ void testGetPrefixLength() { assertEquals(3, FilenameUtils.getPrefixLength("C:\\")); assertEquals(9, FilenameUtils.getPrefixLength("//server/")); + assertEquals(8, FilenameUtils.getPrefixLength("//server")); assertEquals(2, FilenameUtils.getPrefixLength("~")); assertEquals(2, FilenameUtils.getPrefixLength("~/")); assertEquals(6, FilenameUtils.getPrefixLength("~user")); @@ -558,6 +558,7 @@ void testGetPrefixLength() { assertEquals(2, FilenameUtils.getPrefixLength("C:a\\b\\c.txt")); assertEquals(3, FilenameUtils.getPrefixLength("C:\\a\\b\\c.txt")); assertEquals(9, FilenameUtils.getPrefixLength("\\\\server\\a\\b\\c.txt")); + assertEquals(3, FilenameUtils.getPrefixLength( "\\\\a")); assertEquals(0, FilenameUtils.getPrefixLength("a/b/c.txt")); assertEquals(1, FilenameUtils.getPrefixLength("/a/b/c.txt")); @@ -775,8 +776,8 @@ void testNormalize() { assertNull(FilenameUtils.normalize("1:")); assertNull(FilenameUtils.normalize("1:a")); assertNull(FilenameUtils.normalize("\\\\\\a\\b\\c.txt")); - assertNull(FilenameUtils.normalize("\\\\a")); + assertEquals( SEP + SEP + "a", FilenameUtils.normalize("\\\\a")); assertEquals("a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalize("a\\b/c.txt")); assertEquals("" + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalize("\\a\\b/c.txt")); assertEquals(DRIVE_C + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalize("C:\\a\\b/c.txt")); @@ -915,13 +916,14 @@ void testNormalize() { assertNull(FilenameUtils.normalize("//server/../a")); assertNull(FilenameUtils.normalize("//server/..")); assertEquals(SEP + SEP + "server" + SEP + "", FilenameUtils.normalize("//server/")); + assertEquals( SEP + SEP + "server", FilenameUtils.normalize("//server")); assertEquals(SEP + SEP + "127.0.0.1" + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalize("\\\\127.0.0.1\\a\\b\\c.txt")); assertEquals(SEP + SEP + "::1" + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalize("\\\\::1\\a\\b\\c.txt")); assertEquals(SEP + SEP + "1::" + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalize("\\\\1::\\a\\b\\c.txt")); assertEquals(SEP + SEP + "server.example.org" + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalize("\\\\server.example.org\\a\\b\\c.txt")); assertEquals(SEP + SEP + "server.sub.example.org" + SEP + "a" + SEP + "b" + SEP + "c.txt", - FilenameUtils.normalize("\\\\server.sub.example.org\\a\\b\\c.txt")); + FilenameUtils.normalize("\\\\server.sub.example.org\\a\\b\\c.txt")); assertEquals(SEP + SEP + "server." + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalize("\\\\server.\\a\\b\\c.txt")); assertEquals(SEP + SEP + "1::127.0.0.1" + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalize("\\\\1::127.0.0.1\\a\\b\\c.txt")); @@ -986,8 +988,8 @@ void testNormalizeNoEndSeparator() { assertNull(FilenameUtils.normalizeNoEndSeparator("1:")); assertNull(FilenameUtils.normalizeNoEndSeparator("1:a")); assertNull(FilenameUtils.normalizeNoEndSeparator("\\\\\\a\\b\\c.txt")); - assertNull(FilenameUtils.normalizeNoEndSeparator("\\\\a")); + assertEquals( SEP + SEP + "a", FilenameUtils.normalizeNoEndSeparator("\\\\a")); assertEquals("a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalizeNoEndSeparator("a\\b/c.txt")); assertEquals("" + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalizeNoEndSeparator("\\a\\b/c.txt")); assertEquals(DRIVE_C + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalizeNoEndSeparator("C:\\a\\b/c.txt")); @@ -1127,6 +1129,7 @@ void testNormalizeNoEndSeparator() { assertNull(FilenameUtils.normalizeNoEndSeparator("//server/../a")); assertNull(FilenameUtils.normalizeNoEndSeparator("//server/..")); assertEquals(SEP + SEP + "server" + SEP + "", FilenameUtils.normalizeNoEndSeparator("//server/")); + assertEquals( SEP + SEP + "server", FilenameUtils.normalizeNoEndSeparator("//server")); } @Test @@ -1208,4 +1211,4 @@ void testSeparatorsToWindows() { assertEquals("\\a\\b\\c", FilenameUtils.separatorsToWindows("/a/b/c")); assertEquals("D:\\a\\b\\c", FilenameUtils.separatorsToWindows("D:/a/b/c")); } -} +} \ No newline at end of file From 64038e102bc6897aba6a007f29b6e3ee9249e5ba Mon Sep 17 00:00:00 2001 From: miri-cohen20 Date: Mon, 26 Jan 2026 15:35:31 +0200 Subject: [PATCH 3/4] IO-475: Address all review comments from Grigory --- .../java/org/apache/commons/io/FilenameUtils.java | 3 +-- .../org/apache/commons/io/FilenameUtilsTest.java | 15 ++++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/apache/commons/io/FilenameUtils.java b/src/main/java/org/apache/commons/io/FilenameUtils.java index fcf7300bf79..fa977581ea5 100644 --- a/src/main/java/org/apache/commons/io/FilenameUtils.java +++ b/src/main/java/org/apache/commons/io/FilenameUtils.java @@ -16,7 +16,6 @@ */ package org.apache.commons.io; -import java.io.Console; import java.io.File; import java.util.ArrayDeque; import java.util.ArrayList; @@ -931,7 +930,6 @@ public static int getPrefixLength(final String fileName) { if (!isSeparator(ch0) || !isSeparator(ch1)) { return isSeparator(ch0) ? 1 : 0; } - // UNC path: //hostname or //hostname/... int posUnix = fileName.indexOf(UNIX_NAME_SEPARATOR, 2); int posWin = fileName.indexOf(WINDOWS_NAME_SEPARATOR, 2); @@ -1696,3 +1694,4 @@ public FilenameUtils() { // empty } } + diff --git a/src/test/java/org/apache/commons/io/FilenameUtilsTest.java b/src/test/java/org/apache/commons/io/FilenameUtilsTest.java index 967ff179533..cf9c7b5d69a 100644 --- a/src/test/java/org/apache/commons/io/FilenameUtilsTest.java +++ b/src/test/java/org/apache/commons/io/FilenameUtilsTest.java @@ -70,7 +70,7 @@ public void setUp() throws Exception { + " as the parent directory does not exist"); } try (BufferedOutputStream output3 = - new BufferedOutputStream(Files.newOutputStream(testFile1))) { + new BufferedOutputStream(Files.newOutputStream(testFile1))) { TestUtils.generateTestData(output3, testFile1Size); } if (!Files.exists(testFile2.getParent())) { @@ -78,7 +78,7 @@ public void setUp() throws Exception { + " as the parent directory does not exist"); } try (BufferedOutputStream output2 = - new BufferedOutputStream(Files.newOutputStream(testFile2))) { + new BufferedOutputStream(Files.newOutputStream(testFile2))) { TestUtils.generateTestData(output2, testFile2Size); } if (!Files.exists(testFile1.getParent())) { @@ -86,7 +86,7 @@ public void setUp() throws Exception { + " as the parent directory does not exist"); } try (BufferedOutputStream output1 = - new BufferedOutputStream(Files.newOutputStream(testFile1))) { + new BufferedOutputStream(Files.newOutputStream(testFile1))) { TestUtils.generateTestData(output1, testFile1Size); } if (!Files.exists(testFile2.getParent())) { @@ -94,7 +94,7 @@ public void setUp() throws Exception { + " as the parent directory does not exist"); } try (BufferedOutputStream output = - new BufferedOutputStream(Files.newOutputStream(testFile2))) { + new BufferedOutputStream(Files.newOutputStream(testFile2))) { TestUtils.generateTestData(output, testFile2Size); } } @@ -274,6 +274,7 @@ void testGetFullPath() { assertNull(FilenameUtils.getFullPath("1:")); assertNull(FilenameUtils.getFullPath("1:a")); assertNull(FilenameUtils.getFullPath("///a/b/c.txt")); + assertEquals("//a", FilenameUtils.getFullPath("//a")); assertEquals("", FilenameUtils.getFullPath("")); @@ -286,7 +287,6 @@ void testGetFullPath() { assertEquals("C:/", FilenameUtils.getFullPath("C:/")); assertEquals("//server/", FilenameUtils.getFullPath("//server/")); - assertEquals("//server", FilenameUtils.getFullPath("//server")); assertEquals("~/", FilenameUtils.getFullPath("~")); assertEquals("~/", FilenameUtils.getFullPath("~/")); assertEquals("~user/", FilenameUtils.getFullPath("~user")); @@ -407,12 +407,12 @@ void testGetPath() { assertNull(FilenameUtils.getPath("1:")); assertNull(FilenameUtils.getPath("1:a")); assertNull(FilenameUtils.getPath("///a/b/c.txt")); + assertEquals("",FilenameUtils.getPath("//a")); assertEquals("", FilenameUtils.getPath("")); assertEquals("", FilenameUtils.getPath(DRIVE_C)); assertEquals("", FilenameUtils.getPath("C:/")); assertEquals("", FilenameUtils.getPath("//server/")); - assertEquals("",FilenameUtils.getPath("//server")); assertEquals("", FilenameUtils.getPath("~")); assertEquals("", FilenameUtils.getPath("~/")); assertEquals("", FilenameUtils.getPath("~user")); @@ -923,7 +923,7 @@ void testNormalize() { assertEquals(SEP + SEP + "1::" + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalize("\\\\1::\\a\\b\\c.txt")); assertEquals(SEP + SEP + "server.example.org" + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalize("\\\\server.example.org\\a\\b\\c.txt")); assertEquals(SEP + SEP + "server.sub.example.org" + SEP + "a" + SEP + "b" + SEP + "c.txt", - FilenameUtils.normalize("\\\\server.sub.example.org\\a\\b\\c.txt")); + FilenameUtils.normalize("\\\\server.sub.example.org\\a\\b\\c.txt")); assertEquals(SEP + SEP + "server." + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalize("\\\\server.\\a\\b\\c.txt")); assertEquals(SEP + SEP + "1::127.0.0.1" + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalize("\\\\1::127.0.0.1\\a\\b\\c.txt")); @@ -1211,4 +1211,5 @@ void testSeparatorsToWindows() { assertEquals("\\a\\b\\c", FilenameUtils.separatorsToWindows("/a/b/c")); assertEquals("D:\\a\\b\\c", FilenameUtils.separatorsToWindows("D:/a/b/c")); } + } \ No newline at end of file From 860bc20fbe2690474ccf208d22f9457630214ffd Mon Sep 17 00:00:00 2001 From: miri-cohen20 Date: Mon, 2 Feb 2026 11:00:18 +0200 Subject: [PATCH 4/4] Fix Checkstyle violations and address review comments --- .../org/apache/commons/io/FilenameUtils.java | 9 ++++---- .../apache/commons/io/FilenameUtilsTest.java | 21 +++++++++++-------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/apache/commons/io/FilenameUtils.java b/src/main/java/org/apache/commons/io/FilenameUtils.java index fa977581ea5..da8c98eaa47 100644 --- a/src/main/java/org/apache/commons/io/FilenameUtils.java +++ b/src/main/java/org/apache/commons/io/FilenameUtils.java @@ -937,13 +937,12 @@ public static int getPrefixLength(final String fileName) { if (posUnix == 2 || posWin == 2) { return NOT_FOUND; } - int pos; - String hostnamePart; - if(posUnix == NOT_FOUND && posWin == NOT_FOUND){ + final int pos; + final String hostnamePart; + if (posUnix == NOT_FOUND && posWin == NOT_FOUND) { pos = fileName.length(); hostnamePart = fileName.substring(2); - } - else{ + } else { posUnix = posUnix == NOT_FOUND ? posWin : posUnix; posWin = posWin == NOT_FOUND ? posUnix : posWin; pos = Math.min(posUnix, posWin) + 1; diff --git a/src/test/java/org/apache/commons/io/FilenameUtilsTest.java b/src/test/java/org/apache/commons/io/FilenameUtilsTest.java index cf9c7b5d69a..7c59afdbde7 100644 --- a/src/test/java/org/apache/commons/io/FilenameUtilsTest.java +++ b/src/test/java/org/apache/commons/io/FilenameUtilsTest.java @@ -192,6 +192,7 @@ void testEqualsNormalized() { void testEqualsNormalizedError_IO_128() { assertFalse(FilenameUtils.equalsNormalizedOnSystem("//file.txt", "file.txt")); assertFalse(FilenameUtils.equalsNormalizedOnSystem("file.txt", "//file.txt")); + assertTrue(FilenameUtils.equalsNormalizedOnSystem("//file.txt", "//file.txt")); } @Test @@ -316,6 +317,7 @@ void testGetFullPathNoEndSeparator() { assertNull(FilenameUtils.getFullPathNoEndSeparator("1:")); assertNull(FilenameUtils.getFullPathNoEndSeparator("1:a")); assertNull(FilenameUtils.getFullPathNoEndSeparator("///a/b/c.txt")); + assertEquals("//a", FilenameUtils.getFullPathNoEndSeparator("//a")); assertEquals("", FilenameUtils.getFullPathNoEndSeparator("")); @@ -407,7 +409,7 @@ void testGetPath() { assertNull(FilenameUtils.getPath("1:")); assertNull(FilenameUtils.getPath("1:a")); assertNull(FilenameUtils.getPath("///a/b/c.txt")); - assertEquals("",FilenameUtils.getPath("//a")); + assertEquals("", FilenameUtils.getPath("//a")); assertEquals("", FilenameUtils.getPath("")); assertEquals("", FilenameUtils.getPath(DRIVE_C)); @@ -449,12 +451,13 @@ void testGetPathNoEndSeparator() { assertNull(FilenameUtils.getPathNoEndSeparator("1:")); assertNull(FilenameUtils.getPathNoEndSeparator("1:a")); assertNull(FilenameUtils.getPathNoEndSeparator("///a/b/c.txt")); + assertEquals("", FilenameUtils.getPathNoEndSeparator("//a")); assertEquals("", FilenameUtils.getPathNoEndSeparator("")); assertEquals("", FilenameUtils.getPathNoEndSeparator(DRIVE_C)); assertEquals("", FilenameUtils.getPathNoEndSeparator("C:/")); assertEquals("", FilenameUtils.getPathNoEndSeparator("//server/")); - assertEquals("",FilenameUtils.getPathNoEndSeparator("//server")); + assertEquals("", FilenameUtils.getPathNoEndSeparator("//server")); assertEquals("", FilenameUtils.getPathNoEndSeparator("~")); assertEquals("", FilenameUtils.getPathNoEndSeparator("~/")); assertEquals("", FilenameUtils.getPathNoEndSeparator("~user")); @@ -483,6 +486,7 @@ void testGetPrefix() { assertNull(FilenameUtils.getPrefix("1:")); assertNull(FilenameUtils.getPrefix("1:a")); assertNull(FilenameUtils.getPrefix("\\\\\\a\\b\\c.txt")); + assertEquals("\\\\a", FilenameUtils.getPrefix("\\\\a")); assertEquals("", FilenameUtils.getPrefix("")); assertEquals("\\", FilenameUtils.getPrefix("\\")); @@ -506,7 +510,6 @@ void testGetPrefix() { assertEquals("\\", FilenameUtils.getPrefix("\\a\\b\\c.txt")); assertEquals("C:\\", FilenameUtils.getPrefix("C:\\a\\b\\c.txt")); assertEquals("\\\\server\\", FilenameUtils.getPrefix("\\\\server\\a\\b\\c.txt")); - assertEquals("\\\\a", FilenameUtils.getPrefix("\\\\a")); assertEquals("", FilenameUtils.getPrefix("a/b/c.txt")); assertEquals("/", FilenameUtils.getPrefix("/a/b/c.txt")); @@ -534,6 +537,7 @@ void testGetPrefixLength() { assertEquals(-1, FilenameUtils.getPrefixLength("1:")); assertEquals(-1, FilenameUtils.getPrefixLength("1:a")); assertEquals(-1, FilenameUtils.getPrefixLength("\\\\\\a\\b\\c.txt")); + assertEquals(3, FilenameUtils.getPrefixLength("\\\\a")); assertEquals(0, FilenameUtils.getPrefixLength("")); assertEquals(1, FilenameUtils.getPrefixLength("\\")); @@ -558,7 +562,6 @@ void testGetPrefixLength() { assertEquals(2, FilenameUtils.getPrefixLength("C:a\\b\\c.txt")); assertEquals(3, FilenameUtils.getPrefixLength("C:\\a\\b\\c.txt")); assertEquals(9, FilenameUtils.getPrefixLength("\\\\server\\a\\b\\c.txt")); - assertEquals(3, FilenameUtils.getPrefixLength( "\\\\a")); assertEquals(0, FilenameUtils.getPrefixLength("a/b/c.txt")); assertEquals(1, FilenameUtils.getPrefixLength("/a/b/c.txt")); @@ -776,8 +779,8 @@ void testNormalize() { assertNull(FilenameUtils.normalize("1:")); assertNull(FilenameUtils.normalize("1:a")); assertNull(FilenameUtils.normalize("\\\\\\a\\b\\c.txt")); + assertEquals(SEP + SEP + "a", FilenameUtils.normalize("\\\\a")); - assertEquals( SEP + SEP + "a", FilenameUtils.normalize("\\\\a")); assertEquals("a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalize("a\\b/c.txt")); assertEquals("" + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalize("\\a\\b/c.txt")); assertEquals(DRIVE_C + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalize("C:\\a\\b/c.txt")); @@ -916,7 +919,7 @@ void testNormalize() { assertNull(FilenameUtils.normalize("//server/../a")); assertNull(FilenameUtils.normalize("//server/..")); assertEquals(SEP + SEP + "server" + SEP + "", FilenameUtils.normalize("//server/")); - assertEquals( SEP + SEP + "server", FilenameUtils.normalize("//server")); + assertEquals(SEP + SEP + "server", FilenameUtils.normalize("//server")); assertEquals(SEP + SEP + "127.0.0.1" + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalize("\\\\127.0.0.1\\a\\b\\c.txt")); assertEquals(SEP + SEP + "::1" + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalize("\\\\::1\\a\\b\\c.txt")); @@ -988,8 +991,8 @@ void testNormalizeNoEndSeparator() { assertNull(FilenameUtils.normalizeNoEndSeparator("1:")); assertNull(FilenameUtils.normalizeNoEndSeparator("1:a")); assertNull(FilenameUtils.normalizeNoEndSeparator("\\\\\\a\\b\\c.txt")); + assertEquals(SEP + SEP + "a", FilenameUtils.normalizeNoEndSeparator("\\\\a")); - assertEquals( SEP + SEP + "a", FilenameUtils.normalizeNoEndSeparator("\\\\a")); assertEquals("a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalizeNoEndSeparator("a\\b/c.txt")); assertEquals("" + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalizeNoEndSeparator("\\a\\b/c.txt")); assertEquals(DRIVE_C + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalizeNoEndSeparator("C:\\a\\b/c.txt")); @@ -1129,7 +1132,7 @@ void testNormalizeNoEndSeparator() { assertNull(FilenameUtils.normalizeNoEndSeparator("//server/../a")); assertNull(FilenameUtils.normalizeNoEndSeparator("//server/..")); assertEquals(SEP + SEP + "server" + SEP + "", FilenameUtils.normalizeNoEndSeparator("//server/")); - assertEquals( SEP + SEP + "server", FilenameUtils.normalizeNoEndSeparator("//server")); + assertEquals(SEP + SEP + "server", FilenameUtils.normalizeNoEndSeparator("//server")); } @Test @@ -1212,4 +1215,4 @@ void testSeparatorsToWindows() { assertEquals("D:\\a\\b\\c", FilenameUtils.separatorsToWindows("D:/a/b/c")); } -} \ No newline at end of file +}