diff options
author | Sven Gothel <[email protected]> | 2013-11-28 12:50:12 +0100 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2013-11-28 12:50:12 +0100 |
commit | 67dd9498368f0250180528d4fa10a09854066fea (patch) | |
tree | d912a62139a600d5ef563bb773c79a51245797b6 /src | |
parent | 4c835f0337674a0181c43f448d44d961e27b2f54 (diff) |
IOUtil.encodeToURI(): Only use method if required
Only use IOUtil.encodeToURI() if required,
i.e. 'new URI(String)' but not 'new URI(scheme, ...)' since the latter already encodes the path.
TestIOUtilURIHandling.test00BasicCoding() validates above findings.
Diffstat (limited to 'src')
-rw-r--r-- | src/java/com/jogamp/common/util/IOUtil.java | 6 | ||||
-rw-r--r-- | src/junit/com/jogamp/common/util/TestIOUtilURIHandling.java | 110 |
2 files changed, 113 insertions, 3 deletions
diff --git a/src/java/com/jogamp/common/util/IOUtil.java b/src/java/com/jogamp/common/util/IOUtil.java index d6ef87a..bbda235 100644 --- a/src/java/com/jogamp/common/util/IOUtil.java +++ b/src/java/com/jogamp/common/util/IOUtil.java @@ -313,7 +313,7 @@ public class IOUtil { * @throws URISyntaxException if the resulting string does not comply w/ an RFC 2396 URI */ public static URI toURISimple(File file) throws URISyntaxException { - return new URI(FILE_SCHEME, null, encodeToURI(slashify(file.getAbsolutePath(), true /* startWithSlash */, file.isDirectory() /* endWithSlash */)), null); + return new URI(FILE_SCHEME, null, slashify(file.getAbsolutePath(), true /* startWithSlash */, file.isDirectory() /* endWithSlash */), null); } /** @@ -322,7 +322,7 @@ public class IOUtil { * @throws URISyntaxException if the resulting string does not comply w/ an RFC 2396 URI */ public static URI toURISimple(String protocol, String path, boolean isDirectory) throws URISyntaxException { - return new URI(protocol, null, encodeToURI(slashify(new File(path).getAbsolutePath(), true /* startWithSlash */, isDirectory /* endWithSlash */)), null); + return new URI(protocol, null, slashify(new File(path).getAbsolutePath(), true /* startWithSlash */, isDirectory /* endWithSlash */), null); } /** @@ -804,7 +804,7 @@ public class IOUtil { * @throws URISyntaxException if path is empty or has no parent directory available while resolving <code>../</code> */ public static URI getRelativeOf(URI baseURI, String relativePath) throws URISyntaxException { - return compose(baseURI.getScheme(), baseURI.getSchemeSpecificPart(), encodeToURI(relativePath), baseURI.getFragment()); + return compose(baseURI.getScheme(), baseURI.getSchemeSpecificPart(), relativePath, baseURI.getFragment()); } /** diff --git a/src/junit/com/jogamp/common/util/TestIOUtilURIHandling.java b/src/junit/com/jogamp/common/util/TestIOUtilURIHandling.java index 6103d9a..ecf950b 100644 --- a/src/junit/com/jogamp/common/util/TestIOUtilURIHandling.java +++ b/src/junit/com/jogamp/common/util/TestIOUtilURIHandling.java @@ -168,6 +168,111 @@ public class TestIOUtilURIHandling extends JunitTracer { }; @Test + public void test00BasicCoding() throws IOException, URISyntaxException { + final String string = "Hallo Welt öä"; + System.err.println("sp1 "+string); + { + String sp2 = IOUtil.encodeToURI(string); + String sp3 = IOUtil.encodeToURI(sp2); + System.err.println("sp2 "+sp2); + System.err.println("sp3 "+sp3); + } + final File file = new File(string); + System.err.println("file "+file); + System.err.println("file.path.dec "+file.getPath()); + System.err.println("file.path.abs "+file.getAbsolutePath()); + System.err.println("file.path.can "+file.getCanonicalPath()); + final URI uri0 = file.toURI(); + System.err.println("uri0.string: "+uri0.toString()); + System.err.println("uri0.path : "+uri0.getPath()); + System.err.println("uri0.ascii : "+uri0.toASCIIString()); + boolean ok = true; + { + final URI uri1 = IOUtil.toURISimple(file); + final boolean equalString= uri0.toString().equals(uri1.toString()); + final boolean equalPath = uri0.getPath().equals(uri1.getPath()); + final boolean equalASCII= uri0.toASCIIString().equals(uri1.toASCIIString()); + System.err.println("uri1.string: "+uri1.toString()+" - "+(equalString?"OK":"ERROR")); + System.err.println("uri1.path : "+uri1.getPath()+" - "+(equalPath?"OK":"ERROR")); + System.err.println("uri1.ascii : "+uri1.toASCIIString()+" - "+(equalASCII?"OK":"ERROR")); + ok = equalString && equalPath && equalASCII && ok; + } + { + final String s2 = IOUtil.slashify(file.getAbsolutePath(), true /* startWithSlash */, file.isDirectory() /* endWithSlash */); + System.err.println("uri2.slashify: "+s2); + { + // Expected !equals due to double-escaping of space %20 -> %25%20 + // Double escaping is due to IOUtil.encodeToURI(s2). + final String s3 = IOUtil.encodeToURI(s2); + System.err.println("uri2.encoded: "+s3); + final URI uri1 = new URI(IOUtil.FILE_SCHEME, null, s3, null); + final boolean equalString= uri0.toString().equals(uri1.toString()); + final boolean equalPath = uri0.getPath().equals(uri1.getPath()); + final boolean equalASCII= uri0.toASCIIString().equals(uri1.toASCIIString()); + System.err.println("uri2.string: "+uri1.toString()+" - "+(equalString?"EQUAL":"NOT_EQUAL")); + System.err.println("uri2.path : "+uri1.getPath()+" - "+(equalPath?"EQUAL":"NOT_EQUAL")); + System.err.println("uri2.ascii : "+uri1.toASCIIString()+" - "+(equalASCII?"EQUAL":"NOT_EQUAL")); + } + final URI uri1 = new URI(IOUtil.FILE_SCHEME, null, s2, null); + final boolean equalString= uri0.toString().equals(uri1.toString()); + final boolean equalPath = uri0.getPath().equals(uri1.getPath()); + final boolean equalASCII= uri0.toASCIIString().equals(uri1.toASCIIString()); + System.err.println("uri2.string: "+uri1.toString()+" - "+(equalString?"OK":"ERROR")); + System.err.println("uri2.path : "+uri1.getPath()+" - "+(equalPath?"OK":"ERROR")); + System.err.println("uri2.ascii : "+uri1.toASCIIString()+" - "+(equalASCII?"OK":"ERROR")); + ok = equalString && equalPath && equalASCII && ok; + } + { + final String s2 = "/"+string; + System.err.println("uri3.orig: "+s2); + final URI uri1 = new URI(IOUtil.FILE_SCHEME, s2, null); + final String rString = "file:/Hallo%20Welt%20öä"; + final String rPath = s2; + final String rASCII = "file:/Hallo%20Welt%20%C3%B6%C3%A4"; + final boolean equalString= rString.equals(uri1.toString()); + final boolean equalPath = rPath.equals(uri1.getPath()); + final boolean equalASCII= rASCII.equals(uri1.toASCIIString()); + System.err.println("uri3.string: "+uri1.toString()+" - "+(equalString?"OK":"ERROR")); + System.err.println("uri3.path : "+uri1.getPath()+" - "+(equalPath?"OK":"ERROR")); + System.err.println("uri3.ascii : "+uri1.toASCIIString()+" - "+(equalASCII?"OK":"ERROR")); + ok = equalString && equalPath && equalASCII && ok; + } + { + final String s2 = "//lala.org/"+string; + System.err.println("uri4.orig: "+s2); + final URI uri1 = new URI(IOUtil.HTTP_SCHEME, s2, null); + final String rString = "http://lala.org/Hallo%20Welt%20öä"; + final String rPath = "/"+string; + final String rASCII = "http://lala.org/Hallo%20Welt%20%C3%B6%C3%A4"; + final boolean equalString= rString.equals(uri1.toString()); + final boolean equalPath = rPath.equals(uri1.getPath()); + final boolean equalASCII= rASCII.equals(uri1.toASCIIString()); + System.err.println("uri4.string: "+uri1.toString()+" - "+(equalString?"OK":"ERROR")); + System.err.println("uri4.path : "+uri1.getPath()+" - "+(equalPath?"OK":"ERROR")); + System.err.println("uri4.ascii : "+uri1.toASCIIString()+" - "+(equalASCII?"OK":"ERROR")); + ok = equalString && equalPath && equalASCII && ok; + } + { + final String s2 = "http://lala.org/"+string; + final String s2enc = IOUtil.encodeToURI(s2); + System.err.println("uri5.orig: "+s2); + System.err.println("uri5.enc : "+s2enc); + final URI uri1 = new URI(s2enc); + final String rString = "http://lala.org/Hallo%20Welt%20öä"; + final String rPath = "/"+string; + final String rASCII = "http://lala.org/Hallo%20Welt%20%C3%B6%C3%A4"; + final boolean equalString= rString.equals(uri1.toString()); + final boolean equalPath = rPath.equals(uri1.getPath()); + final boolean equalASCII= rASCII.equals(uri1.toASCIIString()); + System.err.println("uri5.string: "+uri1.toString()+" - "+(equalString?"OK":"ERROR")); + System.err.println("uri5.path : "+uri1.getPath()+" - "+(equalPath?"OK":"ERROR")); + System.err.println("uri5.ascii : "+uri1.toASCIIString()+" - "+(equalASCII?"OK":"ERROR")); + ok = equalString && equalPath && equalASCII && ok; + } + Assert.assertTrue("One or more errors occured see stderr above", ok); + } + + @Test public void test01HttpURI2URL() throws IOException, URISyntaxException { testURI2URL(getSimpleTestName("."), uriHttpSArray); } @@ -257,6 +362,11 @@ public class TestIOUtilURIHandling extends JunitTracer { static boolean testFile2URI(String fileSource, String uriEncExpected, String uriDecExpected, String fileExpected) throws IOException, URISyntaxException { final File file = new File(fileSource); + { + final URI uri0 = file.toURI(); + System.err.println("uri.string: "+uri0.toString()); + System.err.println("uri.ascii : "+uri0.toASCIIString()); + } final URI uri0 = IOUtil.toURISimple(file); System.err.println("uri.string: "+uri0.toString()); System.err.println("uri.ascii : "+uri0.toASCIIString()); |