diff options
author | Sven Gothel <[email protected]> | 2014-09-08 05:09:02 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2014-09-08 05:09:02 +0200 |
commit | dde91a061cb0bc209442fe0e74a532b91d1bb4b8 (patch) | |
tree | 9c046c2d5deb74cb45296cbd400c56cf0a2c60fd /src/junit/com/jogamp/common/net/TestUri03Resolving.java | |
parent | 6322991799268166e46aeeacb142c11d45950f48 (diff) |
Bug 1063: Complete Uri impl. and adoption throughout GlueGen
- Uri:
- Add error correction (fix) of path at ctor
in case a a contained Uri is requested from an opaque one.
The latter might come from URI/URL and is not properly encoded!
See Uri.PARSE_HINT_FIX_PATH
- Simplify conversion methods:
- valueOf(URI/URL): Re-encode only if not opaque
- getNativeFilePath() -> toFile()
- Move IOUtil Uri related constants to class Uri
- Add DEBUG and DEBUG_SHOWFIX
- Complete adoption of URI -> Uri changes
- IOUtil, JarUtil and TempJarCache still holds some
left over deprecated methods, which will be removed
after officially starting 2.3.0 (JOGL dependencies)
- Otherwise not URI utilization left
- Tests
- Cleaned ip TestUri01 and TestUri03Resolving
- TestUri03Resolving also tests URL -> Uri,
and hence mentioned Uri.PARSE_HINT_FIX_PATH
Diffstat (limited to 'src/junit/com/jogamp/common/net/TestUri03Resolving.java')
-rw-r--r-- | src/junit/com/jogamp/common/net/TestUri03Resolving.java | 258 |
1 files changed, 168 insertions, 90 deletions
diff --git a/src/junit/com/jogamp/common/net/TestUri03Resolving.java b/src/junit/com/jogamp/common/net/TestUri03Resolving.java index 9445100..54e2976 100644 --- a/src/junit/com/jogamp/common/net/TestUri03Resolving.java +++ b/src/junit/com/jogamp/common/net/TestUri03Resolving.java @@ -2,6 +2,7 @@ package com.jogamp.common.net; import java.io.File; import java.io.IOException; +import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.net.URLConnection; @@ -13,7 +14,6 @@ import org.junit.Test; import com.jogamp.common.net.Uri; import com.jogamp.common.os.Platform; -import com.jogamp.common.util.IOUtil; import com.jogamp.junit.util.JunitTracer; import org.junit.FixMethodOrder; @@ -24,7 +24,7 @@ public class TestUri03Resolving extends JunitTracer { // Bug 908, issues w/ windows file path char: $ ^ ~ # [ ] - public static final String[][] uriHttpSArray = new String[][] { + private static final String[][] uriHttpSArray = new String[][] { new String[] {"http://localhost/gluegen/build-x86_64/gluegen-rt.jar"}, new String[] {"http://localhost/gluegen/"+'\u0394'+"/gluegen-rt.jar"}, @@ -43,10 +43,14 @@ public class TestUri03Resolving extends JunitTracer { new String[] {"jar:http://localhost/gluegen/R%23/gluegen-rt.jar!/"}, + new String[] {"jar:http://localhost/gluegen/A%24/B%5E/C~/D%23/E%5B/F%5D/gluegen-rt.jar!/"}, + + new String[] {"jar:http://localhost/gluegen/%24/%5E/~/%23/%5B/%5D/gluegen-rt.jar!/"}, + new String[] {"jar:http://localhost/gluegen/"+'\u0394'+"/gluegen-rt.jar!/"}, }; - public static final String[][] uriFileSArrayUnix = new String[][] { + private static final String[][] uriFileSArrayUnix = new String[][] { new String[] {"file:/gluegen/build-x86_64/gluegen-rt.jar"}, new String[] {"file:/gluegen/"+'\u0394'+"/gluegen-rt.jar"}, @@ -67,10 +71,14 @@ public class TestUri03Resolving extends JunitTracer { new String[] {"jar:file:/gluegen/R%23/gluegen-rt.jar!/"}, + new String[] {"jar:file:/gluegen/A%24/B%5E/C~/D%23/E%5B/F%5D/gluegen-rt.jar!/"}, + + new String[] {"jar:file:/gluegen/%24/%5E/~/%23/%5B/%5D/gluegen-rt.jar!/"}, + new String[] {"jar:file:/gluegen/"+'\u0394'+"/gluegen-rt.jar!/"}, }; - public static final String[][] uriFileSArrayWindows = new String[][] { + private static final String[][] uriFileSArrayWindows = new String[][] { new String[] {"file:/C%3A/gluegen/build-x86_64/gluegen-rt.jar"}, new String[] {"file:/C%3A/gluegen/"+'\u0394'+"/gluegen-rt.jar"}, @@ -86,7 +94,6 @@ public class TestUri03Resolving extends JunitTracer { new String[] {"jar:file:/C%3A/gluegen/build-x86_64/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"}, new String[] {"jar:file:/C%3A/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"}, - new String[] {"jar:file:/C%3A/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"}, new String[] {"jar:file:///C%3A/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"}, @@ -94,9 +101,43 @@ public class TestUri03Resolving extends JunitTracer { new String[] {"jar:file:/C%3A/gluegen/R%23/gluegen-rt.jar!/"}, + new String[] {"jar:file:/C%3A/gluegen/A%24/B%5E/C~/D%23/E%5B/F%5D/gluegen-rt.jar!/"}, + + new String[] {"jar:file:/C%3A/gluegen/%24/%5E/~/%23/%5B/%5D/gluegen-rt.jar!/"}, + new String[] {"jar:file:/C%3A/gluegen/"+'\u0394'+"/gluegen-rt.jar!/"}, }; + private static final String[][] urlFileSArrayWindows = new String[][] { + new String[] {"file:/C:/gluegen/build-x86_64/gluegen-rt.jar"}, + + new String[] {"file:/C:/gluegen/"+'\u0394'+"/gluegen-rt.jar"}, + + new String[] {"file:/C:/gluegen/build-x86_64%20lala/gluegen-rt.jar"}, + + new String[] {"file:/C:/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar"}, + + new String[] {"jar:file:/C:/gluegen/build-x86_64/gluegen-rt.jar!/"}, + + new String[] {"jar:file:/C:/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/"}, + + new String[] {"jar:file:/C:/gluegen/build-x86_64/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"}, + + new String[] {"jar:file:/C:/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"}, + + new String[] {"jar:file:///C:/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"}, + + new String[] {"jar:file://filehost/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"}, + + new String[] {"jar:file:/C:/gluegen/R%23/gluegen-rt.jar!/"}, + + new String[] {"jar:file:/C:/gluegen/A%24/B%5E/C~/D%23/E%5B/F%5D/gluegen-rt.jar!/"}, + + new String[] {"jar:file:/C:/gluegen/%24/%5E/~/%23/%5B/%5D/gluegen-rt.jar!/"}, + + new String[] {"jar:file:/C:/gluegen/"+'\u0394'+"/gluegen-rt.jar!/"}, + }; + public static final String[][] fileSArrayUnix = new String[][] { new String[] {"/gluegen/build-x86_64/gluegen-rt.jar", "file:/gluegen/build-x86_64/gluegen-rt.jar", @@ -158,122 +199,84 @@ public class TestUri03Resolving extends JunitTracer { }; @Test - public void test00BasicCoding() throws IOException, URISyntaxException { - final String string = "Hallo Welt öä"; - System.err.println("sp1 "+string); - 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 = Uri.valueOf(file); - URIDumpUtil.showUri(uri0); - URIDumpUtil.showReencodedURIOfUri(uri0); + public void test01HttpUri2URL() throws IOException, URISyntaxException { + testUri2URL(getSimpleTestName("."), uriHttpSArray); + } - boolean ok = true; - { - final String s2 = IOUtil.slashify(file.getAbsolutePath(), true /* startWithSlash */, file.isDirectory() /* endWithSlash */); - System.err.println("uri2.slashify: "+s2); - final Uri uri1 = Uri.create(IOUtil.FILE_SCHEME, null, s2, null); - final boolean equalEncoded= uri0.getEncoded().equals(uri1.getEncoded()); - final boolean equalPath = uri0.path.decode().equals(uri1.path.decode()); - final boolean equalASCII= uri0.toASCIIString().equals(uri1.toASCIIString().get()); - System.err.println("uri2.enc : "+uri1.getEncoded()+" - "+(equalEncoded?"OK":"ERROR")); - System.err.println("uri2.pathD : "+uri1.path.decode()+" - "+(equalPath?"OK":"ERROR")); - System.err.println("uri2.asciiE: "+uri1.toASCIIString()+" - "+(equalASCII?"OK":"ERROR")); - ok = equalEncoded && equalPath && equalASCII && ok; - } - { - final String s2 = "/"+string; - System.err.println("uri3.orig: "+s2); - final Uri uri1 = Uri.create(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 equalEncoded = rString.equals(uri1.toString()); - final boolean equalPath = rPath.equals(uri1.path.decode()); - final boolean equalASCII= rASCII.equals(uri1.toASCIIString().get()); - System.err.println("uri3.enc : "+uri1.toString()+" - "+(equalEncoded?"OK":"ERROR")); - System.err.println("uri3.pathD : "+uri1.path.decode()+" - "+(equalPath?"OK":"ERROR")); - System.err.println("uri3.asciiE: "+uri1.toASCIIString()+" - "+(equalASCII?"OK":"ERROR")); - ok = equalEncoded && equalPath && equalASCII && ok; - } - { - final String s2 = "//lala.org/"+string; - System.err.println("uri4.orig: "+s2); - final Uri uri1 = Uri.create(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.path.decode()); - final boolean equalASCII= rASCII.equals(uri1.toASCIIString().get()); - System.err.println("uri4.enc : "+uri1.toString()+" - "+(equalString?"OK":"ERROR")); - System.err.println("uri4.pathD : "+uri1.path.decode()+" - "+(equalPath?"OK":"ERROR")); - System.err.println("uri4.asciiE: "+uri1.toASCIIString()+" - "+(equalASCII?"OK":"ERROR")); - ok = equalString && equalPath && equalASCII && ok; - } - Assert.assertTrue("One or more errors occured see stderr above", ok); + @Test + public void test02FileUnixUri2URL() throws IOException, URISyntaxException { + testUri2URL(getSimpleTestName("."), uriFileSArrayUnix); } @Test - public void test01HttpURI2URL() throws IOException, URISyntaxException { - testURI2URL(getSimpleTestName("."), uriHttpSArray); + public void test03FileWindowsUri2URL() throws IOException, URISyntaxException { + testUri2URL(getSimpleTestName("."), uriFileSArrayWindows); } @Test - public void test02FileUnixURI2URL() throws IOException, URISyntaxException { - testURI2URL(getSimpleTestName("."), uriFileSArrayUnix); + public void test11HttpURL2Uri() throws IOException, URISyntaxException { + testURL2Uri(getSimpleTestName("."), uriHttpSArray); } @Test - public void test03FileWindowsURI2URL() throws IOException, URISyntaxException { - testURI2URL(getSimpleTestName("."), uriFileSArrayWindows); + public void test12FileUnixURL2Uri() throws IOException, URISyntaxException { + testURL2Uri(getSimpleTestName("."), uriFileSArrayUnix); } @Test - public void test04FileUnixURI2URL() throws IOException, URISyntaxException { + public void test13FileWindowsURL2Uri() throws IOException, URISyntaxException { + testURL2Uri(getSimpleTestName("."), urlFileSArrayWindows); + } + + @Test + public void test24FileUnixURI2URL() throws IOException, URISyntaxException { if( Platform.OSType.WINDOWS != PlatformPropsImpl.OS_TYPE ) { - testFile2URI(getSimpleTestName("."), fileSArrayUnix); + testFile2Uri(getSimpleTestName("."), fileSArrayUnix); } } @Test - public void test05FileWindowsURI2URL() throws IOException, URISyntaxException { + public void test25FileWindowsURI2URL() throws IOException, URISyntaxException { if( Platform.OSType.WINDOWS == PlatformPropsImpl.OS_TYPE ) { - testFile2URI(getSimpleTestName("."), fileSArrayWindows); + testFile2Uri(getSimpleTestName("."), fileSArrayWindows); } } - static void testURI2URL(final String testname, final String[][] uriSArray) throws IOException, URISyntaxException { + static void testUri2URL(final String testname, final String[][] uriSArray) throws IOException, URISyntaxException { boolean ok = true; for(int i=0; i<uriSArray.length; i++) { final String[] uriSPair = uriSArray[i]; final String uriSource = uriSPair[0]; System.err.println("SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS "+testname+": "+(i+1)+"/"+uriSArray.length); - ok = testURI2URL(Uri.Encoded.cast(uriSource)) && ok; + ok = testUri2URL(Uri.Encoded.cast(uriSource)) && ok; System.err.println("EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE "+testname+": "+(i+1)+"/"+uriSArray.length); } Assert.assertTrue("One or more errors occured see stderr above", ok); } - static boolean testURI2URL(final Uri.Encoded uriEncodedSource) throws IOException, URISyntaxException { - final Uri uri0 = new Uri(uriEncodedSource); + static boolean testUri2URL(final Uri.Encoded uriSource) throws IOException, URISyntaxException { + System.err.println("uriSource : "+uriSource); + final Uri uri0 = new Uri(uriSource); URIDumpUtil.showUri(uri0); - final String expected1 = uriEncodedSource.toString(); - System.err.println("expected__s0: "+uriEncodedSource); - System.err.println("expected__d1: "+expected1); + final URI actualURI = uri0.toURI(); + URIDumpUtil.showURI(actualURI); + final Uri.Encoded actualURIStr = Uri.Encoded.cast(actualURI.toString()); final URL actualURL = uri0.toURL(); - final String actualURLStr = actualURL.toString(); - final boolean equalsURLSrc = uriEncodedSource.equals(actualURLStr); - final boolean equalsURLDec1 = expected1.equals(actualURLStr); - final boolean equalsURL = equalsURLSrc || equalsURLDec1; - System.err.println("actual : "+actualURLStr+" - "+(equalsURL?"OK":"ERROR")+ - " - equalSrc "+equalsURLSrc+", equalDec1 "+equalsURLDec1); + URIDumpUtil.showURL(actualURL); + final Uri.Encoded actualURLStr = Uri.Encoded.cast(actualURL.toExternalForm()); - final boolean ok = equalsURL; + System.err.println("expected_URX: "+uriSource); + + final boolean equalsURI = uriSource.equals(actualURIStr); + System.err.println("actual URI: "+actualURIStr+" - "+(equalsURI?"OK":"ERROR")); + final boolean equalsURL = uriSource.equals(actualURLStr); + System.err.println("actual URL: "+actualURLStr+" - "+(equalsURL?"OK":"ERROR")); + URIDumpUtil.showReencodedURIOfUri(uri0); + URIDumpUtil.showReencodedUriOfURI(actualURI); + + boolean ok = equalsURL && equalsURI; // now test open .. Throwable t = null; @@ -290,10 +293,85 @@ public class TestUri03Resolving extends JunitTracer { System.err.println("XXX: No openConnection() failure"); System.err.println("XXX: "+con); } + + if( uri0.scheme.equals(Uri.JAR_SCHEME) ) { + // Extended tests on JAR Uri + final Uri uriSub0 = uri0.getContainedUri(); + Assert.assertNotNull(uriSub0); + System.err.println("EXT JAR contained:"); + URIDumpUtil.showUri(uriSub0); + final Uri uriSubDir0 = uriSub0.getDirectory(); + final Uri uriSubParent0 = uriSub0.getParent(); + System.err.println("EXT JAR contained Dir:"); + URIDumpUtil.showUri(uriSubDir0); + System.err.println("EXT JAR contained Parent:"); + URIDumpUtil.showUri(uriSubParent0); + ok = uriSubDir0.equals(uriSubParent0) && ok; + } + return ok; + } + + static void testURL2Uri(final String testname, final String[][] urlSArray) throws IOException, URISyntaxException { + boolean ok = true; + for(int i=0; i<urlSArray.length; i++) { + final String[] uriSPair = urlSArray[i]; + final String uriSource = uriSPair[0]; + System.err.println("SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS "+testname+": "+(i+1)+"/"+urlSArray.length); + ok = testURL2Uri(new URL(uriSource)) && ok; + System.err.println("EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE "+testname+": "+(i+1)+"/"+urlSArray.length); + } + Assert.assertTrue("One or more errors occured see stderr above", ok); + } + + static boolean testURL2Uri(final URL urlSource) throws IOException, URISyntaxException { + System.err.println("URL Source : "+urlSource); + URIDumpUtil.showURL(urlSource); + + final URI uriSource = urlSource.toURI(); + URIDumpUtil.showURI(uriSource); + + final Uri uri0 = Uri.valueOf(urlSource); + URIDumpUtil.showUri(uri0); + + final URL uriToURL = uri0.toURL(); + URIDumpUtil.showURL(uriToURL); + + // now test open .. + Throwable t = null; + URLConnection con = null; + try { + con = uriToURL.openConnection(); + } catch (final Throwable _t) { + t = _t; + } + if( null != t ) { + System.err.println("XXX: "+t.getClass().getName()+": "+t.getMessage()); + t.printStackTrace(); + } else { + System.err.println("XXX: No openConnection() failure"); + System.err.println("XXX: "+con); + } + + boolean ok = true; + + if( uri0.scheme.equals(Uri.JAR_SCHEME) ) { + // Extended tests on JAR Uri + final Uri uriSub0 = uri0.getContainedUri(); + Assert.assertNotNull(uriSub0); + System.err.println("EXT JAR contained:"); + URIDumpUtil.showUri(uriSub0); + final Uri uriSubDir0 = uriSub0.getDirectory(); + final Uri uriSubParent0 = uriSub0.getParent(); + System.err.println("EXT JAR contained Dir:"); + URIDumpUtil.showUri(uriSubDir0); + System.err.println("EXT JAR contained Parent:"); + URIDumpUtil.showUri(uriSubParent0); + ok = uriSubDir0.equals(uriSubParent0) && ok; + } return ok; } - static void testFile2URI(final String testname, final String[][] uriSArray) throws IOException, URISyntaxException { + static void testFile2Uri(final String testname, final String[][] uriSArray) throws IOException, URISyntaxException { boolean ok = true; for(int i=0; i<uriSArray.length; i++) { final String[] uriSPair = uriSArray[i]; @@ -301,13 +379,13 @@ public class TestUri03Resolving extends JunitTracer { final String uriEncExpected= uriSPair[1]; final String fileExpected= uriSPair[2]; System.err.println("SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS "+testname+": "+(i+1)+"/"+uriSArray.length); - ok = testFile2URI(uriSource, Uri.Encoded.cast(uriEncExpected), fileExpected) && ok; + ok = testFile2Uri(uriSource, Uri.Encoded.cast(uriEncExpected), fileExpected) && ok; System.err.println("EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE "+testname+": "+(i+1)+"/"+uriSArray.length); } Assert.assertTrue("One or more errors occured see stderr above", ok); } - static boolean testFile2URI(final String fileSource, final Uri.Encoded uriEncExpected, final String fileExpected) throws IOException, URISyntaxException { + static boolean testFile2Uri(final String fileSource, final Uri.Encoded uriEncExpected, final String fileExpected) throws IOException, URISyntaxException { System.err.println("fileSource: "+fileSource); final File file = new File(fileSource); System.err.println("file: "+file.getAbsolutePath()); @@ -316,10 +394,10 @@ public class TestUri03Resolving extends JunitTracer { URIDumpUtil.showReencodedURIOfUri(uri0); final URL actualUrl = uri0.toURL(); - final String actualFileS = uri0.getNativeFilePath(); - final boolean equalsFilePath = fileExpected.equals(actualFileS); + final File actualFile = uri0.toFile(); + final boolean equalsFilePath = fileExpected.equals(actualFile.getPath()); System.err.println("expected_path: "+fileExpected); - System.err.println("actual___file-path: "+actualFileS+" - "+(equalsFilePath?"OK":"ERROR")); + System.err.println("actual___file-path: "+actualFile+" - "+(equalsFilePath?"OK":"ERROR")); final boolean equalsEncUri = uriEncExpected.equals(uri0.getEncoded()); System.err.println("expected__encUri: "+uriEncExpected); System.err.println("actual_______Uri: "+uri0.getEncoded()+" - "+(equalsEncUri?"OK":"ERROR")); |