Преглед на файлове

new: PathUtils#normalize

Mariusz Sieroń преди 6 години
родител
ревизия
53a3e8898d
променени са 2 файла, в които са добавени 48 реда и са изтрити 0 реда
  1. 13 0
      assira/src/main/java/net/ranides/assira/io/PathUtils.java
  2. 35 0
      assira/src/test/java/net/ranides/assira/io/PathUtilsTest.java

+ 13 - 0
assira/src/main/java/net/ranides/assira/io/PathUtils.java

@@ -6,10 +6,15 @@
  */
 package net.ranides.assira.io;
 
+import net.ranides.assira.text.StringUtils;
+
+import java.io.File;
 import java.net.URISyntaxException;
 import java.net.URL;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.ArrayDeque;
+import java.util.Deque;
 
 /**
  *
@@ -61,4 +66,12 @@ public final class PathUtils {
         int index = name.indexOf(".");
         return index<0 ? name : name.substring(0, index);
     }
+
+    public static Path normalize(Path path) {
+        return Paths.get(path.toAbsolutePath().toUri().normalize());
+    }
+
+    public static String normalize(String path) {
+        return Paths.get(Paths.get(path).toUri().normalize()).toString();
+    }
 }

+ 35 - 0
assira/src/test/java/net/ranides/assira/io/PathUtilsTest.java

@@ -8,6 +8,7 @@ package net.ranides.assira.io;
 
 import static net.ranides.assira.junit.NewAssert.*;
 
+import java.io.File;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.nio.file.FileSystemNotFoundException;
@@ -120,6 +121,40 @@ public class PathUtilsTest {
         fail("implement");
     }
 
+    @Test
+    public void canonnical() {
+        Assume.assumeTrue(HostSystem.WINDOWS.detected());
+
+        assertEquals(Paths.get("c:/ms/Home"), PathUtils.normalize(Paths.get("c:/ms/Home")));
+        assertEquals(Paths.get("c:/ms/Home"), PathUtils.normalize(Paths.get("C:\\ms\\home")));
+
+        assertTrue(PathUtils.normalize(Paths.get("C:\\ms\\home")).startsWith(Paths.get("c:/MS")));
+
+        assertEquals(Paths.get("c:/dir/other/end"), PathUtils.normalize(Paths.get("c:/dir/something/../other/./end")));
+
+        assertFalse(Paths.get("c:/dir/something/../other/./end").startsWith("c:/dir/other") );
+        assertTrue(PathUtils.normalize(Paths.get("c:/dir/something/../other/./end")).startsWith("c:/dir/other"));
+
+        assertTrue(PathUtils.normalize(Paths.get("other/./end")).isAbsolute());
+    }
+
+    @Test
+    public void canonnicalString() {
+        Assume.assumeTrue(HostSystem.WINDOWS.detected());
+
+        assertEquals("c:\\ms\\Home", PathUtils.normalize("c:/ms/Home"));
+        assertNotEquals("c:\\ms\\Home", PathUtils.normalize("C:\\ms\\home"));
+
+        assertTrue(PathUtils.normalize("c:\\ms\\home").startsWith("c:\\ms"));
+        assertFalse(PathUtils.normalize("C:\\ms\\home").startsWith("c:\\MS"));
+
+        assertEquals("c:\\dir\\other\\end", PathUtils.normalize("c:/dir/something/../other/./end"));
+
+        assertTrue(PathUtils.normalize("c:/dir/something/../other/./end").startsWith("c:\\dir\\other") );
+
+        assertTrue(new File(PathUtils.normalize("other/./end")).isAbsolute());
+    }
+
     private static Path pce(String path, String ext) {
         return PathUtils.changeExtension(Paths.get(path), ext);
     }