From 4c835f0337674a0181c43f448d44d961e27b2f54 Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Thu, 28 Nov 2013 12:47:46 +0100 Subject: IOUtil.toURL(..) Apply decodeFromURI(uri.getPath()) if file-scheme; Add IOUtil.decodeURIToFilePath(..) for native usage. Refine comments, API doc. toURL(..): Apply space conversion, decodeFromURI(..), on file-scheme path, ensuring decoded space. ++ Add decodeURIToFilePath(String uriPath) and decodeURIToFilePath(URI uri) Both methods shall simplify decoding a file-URI for native platform usage. Tested in TestIOUtilURIHandling +++ --- .../jogamp/common/util/TestIOUtilURIHandling.java | 184 +++++++++++++++++++-- 1 file changed, 168 insertions(+), 16 deletions(-) (limited to 'src/junit/com/jogamp/common/util/TestIOUtilURIHandling.java') diff --git a/src/junit/com/jogamp/common/util/TestIOUtilURIHandling.java b/src/junit/com/jogamp/common/util/TestIOUtilURIHandling.java index 73f6ce7..6103d9a 100644 --- a/src/junit/com/jogamp/common/util/TestIOUtilURIHandling.java +++ b/src/junit/com/jogamp/common/util/TestIOUtilURIHandling.java @@ -1,13 +1,18 @@ package com.jogamp.common.util; import static com.jogamp.common.net.URIDumpUtil.showURX; +import static com.jogamp.common.net.URIDumpUtil.showURI; +import static com.jogamp.common.net.URIDumpUtil.showURL; +import java.io.File; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.net.URLConnection; +import jogamp.common.os.PlatformPropsImpl; + import org.junit.Assert; import org.junit.Test; @@ -25,6 +30,11 @@ public class TestIOUtilURIHandling extends JunitTracer { new String[] {"http://localhost/gluegen/build-x86_64/gluegen-rt.jar", "http://localhost/gluegen/build-x86_64/gluegen-rt.jar"}, + new String[] {"http://localhost/gluegen/build-x86_64%20lala/gluegen-rt.jar", + "http://localhost/gluegen/build-x86_64%20lala/gluegen-rt.jar" + // "http://localhost/gluegen/build-x86_64 lala/gluegen-rt.jar" + }, + new String[] {"http://localhost/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar", "http://localhost/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar" // "http://localhost/gluegen/build-x86_64 öä lala/gluegen-rt.jar" @@ -45,12 +55,20 @@ public class TestIOUtilURIHandling extends JunitTracer { "jar:http://localhost/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class" // "jar:http://localhost/gluegen/build-x86_64 öä lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class" }, + /** Not possible, '#' is fragment in URI + new String[] {"jar:http://localhost/gluegen/%23/gluegen-rt.jar!/", + "jar:http://localhost/gluegen/%23/gluegen-rt.jar!/" + // "jar:http://localhost/gluegen/#/gluegen-rt.jar!/" + }, */ }; static final String[][] uriFileSArrayUnix = new String[][] { new String[] {"file:/gluegen/build-x86_64/gluegen-rt.jar", "file:/gluegen/build-x86_64/gluegen-rt.jar"}, + new String[] {"file:/gluegen/build-x86_64%20lala/gluegen-rt.jar", + "file:/gluegen/build-x86_64 lala/gluegen-rt.jar"}, + new String[] {"file:/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar", "file:/gluegen/build-x86_64 öä lala/gluegen-rt.jar"}, @@ -65,12 +83,19 @@ public class TestIOUtilURIHandling extends JunitTracer { new String[] {"jar:file:/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class", "jar:file:/gluegen/build-x86_64 öä lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class" }, + + /** Not possible, '#' is fragment in URI + new String[] {"jar:file:/gluegen/%23/gluegen-rt.jar!/", + "jar:file:/gluegen/#/gluegen-rt.jar!/" }, */ }; static final String[][] uriFileSArrayWindows = new String[][] { new String[] {"file:/C:/gluegen/build-x86_64/gluegen-rt.jar", "file:/C:/gluegen/build-x86_64/gluegen-rt.jar"}, + new String[] {"file:/C:/gluegen/build-x86_64%20lala/gluegen-rt.jar", + "file:/C:/gluegen/build-x86_64 lala/gluegen-rt.jar"}, + new String[] {"file:/C:/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar", "file:/C:/gluegen/build-x86_64 öä lala/gluegen-rt.jar"}, @@ -85,46 +110,172 @@ public class TestIOUtilURIHandling extends JunitTracer { new String[] {"jar:file:/C:/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class", "jar:file:/C:/gluegen/build-x86_64 öä lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class" }, + + /** Not possible, '#' is fragment in URI + new String[] {"jar:file:/C:/gluegen/%23/gluegen-rt.jar!/", + "jar:file:/C:/gluegen/#/gluegen-rt.jar!/" }, */ + }; + + static final String[][] fileSArrayUnix = new String[][] { + new String[] {"/gluegen/build-x86_64/gluegen-rt.jar", + "file:/gluegen/build-x86_64/gluegen-rt.jar", + "file:/gluegen/build-x86_64/gluegen-rt.jar", + "/gluegen/build-x86_64/gluegen-rt.jar"}, + + new String[] {"/gluegen/build-x86_64 lala/gluegen-rt.jar", + "file:/gluegen/build-x86_64%20lala/gluegen-rt.jar", + "file:/gluegen/build-x86_64 lala/gluegen-rt.jar", + "/gluegen/build-x86_64 lala/gluegen-rt.jar"}, + + new String[] {"/gluegen/build-x86_64 öä lala/gluegen-rt.jar", + "file:/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar", + "file:/gluegen/build-x86_64 öä lala/gluegen-rt.jar", + "/gluegen/build-x86_64 öä lala/gluegen-rt.jar"}, + + /* No support for '#' fragment in URI path ! + new String[] {"/gluegen/#/gluegen-rt.jar", + "file:/gluegen/%23/gluegen-rt.jar", + "file:/gluegen/#/gluegen-rt.jar", + "/gluegen/#/gluegen-rt.jar" }, */ + }; + + static final String[][] fileSArrayWindows = new String[][] { + new String[] {"C:/gluegen/build-x86_64/gluegen-rt.jar", + "file:/C:/gluegen/build-x86_64/gluegen-rt.jar", + "file:/C:/gluegen/build-x86_64/gluegen-rt.jar", + "C:\\gluegen\\build-x86_64\\gluegen-rt.jar"}, + + new String[] {"C:/gluegen/build-x86_64 lala/gluegen-rt.jar", + "file:/C:/gluegen/build-x86_64%20lala/gluegen-rt.jar", + "file:/C:/gluegen/build-x86_64 lala/gluegen-rt.jar", + "C:\\gluegen\\build-x86_64 lala\\gluegen-rt.jar"}, + + new String[] {"C:/gluegen/build-x86_64 öä lala/gluegen-rt.jar", + "file:/C:/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar", + "file:/C:/gluegen/build-x86_64 öä lala/gluegen-rt.jar", + "C:\\gluegen\\build-x86_64 öä lala\\gluegen-rt.jar"}, + + new String[] {"C:\\gluegen\\build-x86_64 öä lala\\gluegen-rt.jar", + "file:/C:/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar", + "file:/C:/gluegen/build-x86_64 öä lala/gluegen-rt.jar", + "C:\\gluegen\\build-x86_64 öä lala\\gluegen-rt.jar"}, + + /* No support for '#' fragment in URI path ! + new String[] {"C:/gluegen/#/gluegen-rt.jar", + "file:/C:/gluegen/%23/gluegen-rt.jar", + "file:/C:/gluegen/#/gluegen-rt.jar", + "C:\\gluegen\\#\\gluegen-rt.jar" }, */ }; @Test public void test01HttpURI2URL() throws IOException, URISyntaxException { - testURI2URL(uriHttpSArray, false /*usesFile*/, false /*matchOS*/); + testURI2URL(getSimpleTestName("."), uriHttpSArray); } @Test public void test02FileUnixURI2URL() throws IOException, URISyntaxException { - testURI2URL(uriFileSArrayUnix, true /*usesFile*/, Platform.OSType.WINDOWS != Platform.getOSType() /*matchOS*/); + testURI2URL(getSimpleTestName("."), uriFileSArrayUnix); } @Test - public void test02FileWindowsURI2URL() throws IOException, URISyntaxException { - testURI2URL(uriFileSArrayWindows, true /*usesFile*/, Platform.OSType.WINDOWS == Platform.getOSType() /*matchOS*/); + public void test03FileWindowsURI2URL() throws IOException, URISyntaxException { + testURI2URL(getSimpleTestName("."), uriFileSArrayWindows); } - static void testURI2URL(String[][] uriSArray, boolean usesFile, boolean matchOS) throws IOException, URISyntaxException { + @Test + public void test04FileUnixURI2URL() throws IOException, URISyntaxException { + if( Platform.OSType.WINDOWS != PlatformPropsImpl.OS_TYPE ) { + testFile2URI(getSimpleTestName("."), fileSArrayUnix); + } + } + + @Test + public void test05FileWindowsURI2URL() throws IOException, URISyntaxException { + if( Platform.OSType.WINDOWS == PlatformPropsImpl.OS_TYPE ) { + testFile2URI(getSimpleTestName("."), fileSArrayWindows); + } + } + + static void testURI2URL(String testname, String[][] uriSArray) throws IOException, URISyntaxException { + boolean ok = true; for(int i=0; i