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 | |
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')
9 files changed, 435 insertions, 385 deletions
diff --git a/src/junit/com/jogamp/common/net/TestUri01.java b/src/junit/com/jogamp/common/net/TestUri01.java index 652caa6..bcc7d27 100644 --- a/src/junit/com/jogamp/common/net/TestUri01.java +++ b/src/junit/com/jogamp/common/net/TestUri01.java @@ -4,16 +4,12 @@ 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; import com.jogamp.common.net.URIDumpUtil; -import com.jogamp.common.os.Platform; +import com.jogamp.common.util.IOUtil; import com.jogamp.junit.util.JunitTracer; import org.junit.FixMethodOrder; @@ -23,7 +19,66 @@ import org.junit.runners.MethodSorters; public class TestUri01 extends JunitTracer { @Test - public void test00URIEscapeSpecialChars() throws IOException, URISyntaxException { + 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); + + 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(Uri.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(Uri.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(Uri.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 test02URIEscapeSpecialChars() throws IOException, URISyntaxException { { final String vanilla = "XXX ! # $ & ' ( ) * + , / : ; = ? @ [ ]"; final Uri.Encoded escaped = Uri.Encoded.cast("XXX%20!%20%23%20%24%20%26%20%27%20%28%20%29%20%2A%20%2B%20%2C%20/%20%3A%20%3B%20%3D%20%3F%20%40%20%5B%20%5D"); @@ -60,7 +115,7 @@ public class TestUri01 extends JunitTracer { } } @Test - public void test01URIEscapeCommonChars() throws IOException, URISyntaxException { + public void test03URIEscapeCommonChars() throws IOException, URISyntaxException { { final String vanilla = "/XXX \"%-.<>\\^_`{|}~"; final Uri.Encoded escaped = Uri.Encoded.cast("/XXX%20%22%25-.%3C%3E%5C%5E_%60%7B%7C%7D~"); @@ -95,16 +150,16 @@ public class TestUri01 extends JunitTracer { URIDumpUtil.showURI(uri3); System.err.println("URI -> Uri (keep encoding):"); - final Uri uri4 = Uri.valueOf(uri3, false); + final Uri uri4 = Uri.valueOf(uri3); URIDumpUtil.showUri(uri4); System.err.println("URI -> Uri (re-encode):"); - final Uri uri5 = Uri.valueOf(uri3, true); + final Uri uri5 = Uri.valueOf(uri3); URIDumpUtil.showUri(uri5); } @Test - public void test03EqualsAndHashCode() throws IOException, URISyntaxException { + public void test04EqualsAndHashCode() throws IOException, URISyntaxException { { final Uri uri0 = Uri.cast("http://localhost/test01.html#tag01"); final Uri uri1 = Uri.create("http", null, "localhost", -1, "/test01.html", null, "tag01"); @@ -155,7 +210,7 @@ public class TestUri01 extends JunitTracer { } @Test - public void test04ContainedUri() throws IOException, URISyntaxException { + public void test05Contained() throws IOException, URISyntaxException { { final Uri input = Uri.cast("http://localhost/test01.html#tag01"); final Uri contained = input.getContainedUri(); @@ -185,7 +240,7 @@ public class TestUri01 extends JunitTracer { } @Test - public void test05ParentUri() throws IOException, URISyntaxException { + public void test06ParentAndDir() throws IOException, URISyntaxException { { final Uri input = Uri.cast("http://localhost/"); final Uri parent = input.getParent(); @@ -193,167 +248,58 @@ public class TestUri01 extends JunitTracer { } { final Uri input = Uri.cast("jar:http://localhost/test01.jar!/com/Lala.class"); - final Uri expected1 = Uri.cast("jar:http://localhost/test01.jar!/com/"); - final Uri expected2 = Uri.cast("jar:http://localhost/test01.jar!/"); - final Uri expected3 = Uri.cast("jar:http://localhost/"); + final Uri expParen1 = Uri.cast("jar:http://localhost/test01.jar!/com/"); + final Uri expFolde1 = expParen1; + final Uri expParen2 = Uri.cast("jar:http://localhost/test01.jar!/"); + final Uri expFolde2 = expParen1; // is folder already + final Uri expParen3 = Uri.cast("jar:http://localhost/"); + final Uri expFolde3 = expParen2; // is folder already + Assert.assertNotEquals(input, expParen1); + Assert.assertNotEquals(expParen1, expParen2); + Assert.assertNotEquals(expParen1, expParen3); + final Uri parent1 = input.getParent(); + final Uri folder1 = input.getDirectory(); final Uri parent2 = parent1.getParent(); + final Uri folder2 = parent1.getDirectory(); final Uri parent3 = parent2.getParent(); - Assert.assertEquals(expected1, parent1); - Assert.assertEquals(expected1.hashCode(), parent1.hashCode()); - Assert.assertEquals(expected2, parent2); - Assert.assertEquals(expected2.hashCode(), parent2.hashCode()); - Assert.assertEquals(expected3, parent3); - Assert.assertEquals(expected3.hashCode(), parent3.hashCode()); - } - { - final Uri input = Uri.cast("http://localhost/dir/test01.jar?lala=01#frag01"); - final Uri expected1 = Uri.cast("http://localhost/dir/"); - final Uri expected2 = Uri.cast("http://localhost/"); - final Uri parent1 = input.getParent(); - final Uri parent2 = parent1.getParent(); - Assert.assertEquals(expected1, parent1); - Assert.assertEquals(expected1.hashCode(), parent1.hashCode()); - Assert.assertEquals(expected2, parent2); - Assert.assertEquals(expected2.hashCode(), parent2.hashCode()); - } - } + final Uri folder3 = parent2.getDirectory(); - @Test - public void test10HttpUri2URL() throws IOException, URISyntaxException { - testUri2URL(getSimpleTestName("."), TestUri03Resolving.uriHttpSArray); - } + Assert.assertEquals(expParen1, parent1); + Assert.assertEquals(expParen1.hashCode(), parent1.hashCode()); + Assert.assertEquals(expFolde1, folder1); - @Test - public void test20FileUnixUri2URL() throws IOException, URISyntaxException { - testUri2URL(getSimpleTestName("."), TestUri03Resolving.uriFileSArrayUnix); - } + Assert.assertEquals(expParen2, parent2); + Assert.assertEquals(expParen2.hashCode(), parent2.hashCode()); + Assert.assertEquals(expFolde2, folder2); - @Test - public void test21FileWindowsUri2URL() throws IOException, URISyntaxException { - testUri2URL(getSimpleTestName("."), TestUri03Resolving.uriFileSArrayWindows); - } - - @Test - public void test30FileUnixUri2URL() throws IOException, URISyntaxException { - if( Platform.OSType.WINDOWS != PlatformPropsImpl.OS_TYPE ) { - testFile2Uri(getSimpleTestName("."), TestUri03Resolving.fileSArrayUnix); - } - } - - @Test - public void test31FileWindowsUri2URL() throws IOException, URISyntaxException { - if( Platform.OSType.WINDOWS == PlatformPropsImpl.OS_TYPE ) { - testFile2Uri(getSimpleTestName("."), TestUri03Resolving.fileSArrayWindows); - } - } + Assert.assertEquals(expParen3, parent3); + Assert.assertEquals(expParen3.hashCode(), parent3.hashCode()); + Assert.assertEquals(expFolde3, folder3); - 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; - 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 uriSource) throws IOException, URISyntaxException { - System.err.println("uriSource : "+uriSource); - final Uri uri0 = new Uri(uriSource); - URIDumpUtil.showUri(uri0); - - final URI actualURI = uri0.toURI(); - URIDumpUtil.showURI(actualURI); - final Uri.Encoded actualURIStr = Uri.Encoded.cast(actualURI.toString()); - - final URL actualURL = uri0.toURL(); - URIDumpUtil.showURL(actualURL); - final Uri.Encoded actualURLStr = Uri.Encoded.cast(actualURL.toExternalForm()); - - 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); - - final boolean ok = equalsURL && equalsURI; + { + final Uri input = Uri.cast("http://localhost/dir/test01.jar?lala=01#frag01"); + final Uri expParen1 = Uri.cast("http://localhost/dir/"); + final Uri expFolde1 = expParen1; + final Uri expParen2 = Uri.cast("http://localhost/"); + final Uri expFolde2 = expParen1; // is folder already + Assert.assertNotEquals(input, expParen1); + Assert.assertNotEquals(expParen1, expParen2); - // now test open .. - Throwable t = null; - URLConnection con = null; - try { - con = actualURL.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); - } - return ok; - } + final Uri parent1 = input.getParent(); + final Uri folder1 = input.getDirectory(); + final Uri parent2 = parent1.getParent(); + final Uri folder2 = parent1.getDirectory(); - 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]; - final String uriSource = uriSPair[0]; - 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; - System.err.println("EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE "+testname+": "+(i+1)+"/"+uriSArray.length); - } - Assert.assertTrue("One or more errors occured see stderr above", ok); - } + Assert.assertEquals(expParen1, parent1); + Assert.assertEquals(expParen1.hashCode(), parent1.hashCode()); + Assert.assertEquals(expFolde1, folder1); - 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()); - final Uri uri1 = Uri.valueOf(file); - System.err.println("uri1.string: "+uri1.toString()); - URIDumpUtil.showUri(uri1); - URIDumpUtil.showURL(uri1.toURL()); - URIDumpUtil.showReencodedURIOfUri(uri1); - - final URL actualUrl = uri1.toURL(); - final String actualFileS = uri1.getNativeFilePath(); - final boolean equalsFilePath = fileExpected.equals(actualFileS); - System.err.println("expected_path: "+fileExpected); - System.err.println("actual___file-path: "+actualFileS+" - "+(equalsFilePath?"OK":"ERROR")); - final boolean equalsEncUri = uriEncExpected.equals(uri1.input); - System.err.println("expected__encUri: "+uriEncExpected); - System.err.println("actual_______Uri: "+uri1.input+" - "+(equalsEncUri?"OK":"ERROR")); - final boolean ok = equalsEncUri && equalsFilePath; - - System.err.println("actual_______URL: "+actualUrl.toExternalForm()); - - // now test open .. - Throwable t = null; - URLConnection con = null; - try { - con = actualUrl.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); + Assert.assertEquals(expParen2, parent2); + Assert.assertEquals(expParen2.hashCode(), parent2.hashCode()); + Assert.assertEquals(expFolde2, folder2); } - return ok; } public static void main(final String args[]) throws IOException { 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")); diff --git a/src/junit/com/jogamp/common/net/TestUri99LaunchOnReservedCharPathBug908.java b/src/junit/com/jogamp/common/net/TestUri99LaunchOnReservedCharPathBug908.java index 011b18c..09748a1 100644 --- a/src/junit/com/jogamp/common/net/TestUri99LaunchOnReservedCharPathBug908.java +++ b/src/junit/com/jogamp/common/net/TestUri99LaunchOnReservedCharPathBug908.java @@ -42,7 +42,6 @@ import org.junit.runners.MethodSorters; import com.jogamp.common.os.AndroidVersion; import com.jogamp.common.os.Platform; -import com.jogamp.common.util.IOUtil; import com.jogamp.common.util.JarUtil; import com.jogamp.common.util.ReflectionUtil; import com.jogamp.junit.util.JunitTracer; @@ -84,16 +83,16 @@ public class TestUri99LaunchOnReservedCharPathBug908 extends JunitTracer { @Test public void test00TempJarCacheSimplePath() throws IOException, IllegalArgumentException, URISyntaxException { - testTempJarCacheOddJarPathImpl("simpletons/", "simpletons/"); + testTempJarCacheOddJarPathImpl("simpletons/"); } @Test public void test01TempJarCacheOddPath() throws IOException, IllegalArgumentException, URISyntaxException { // Bug 908, issues w/ windows file path char: $ ^ ~ # [ ] - testTempJarCacheOddJarPathImpl("A$-B^-C~-D#-E]-F[-öä/", + testTempJarCacheOddJarPathImpl("A$-B^-C~-D#-E]-F[-öä/"); // "A$-B%5E-C~-D#-E]-F[-%C3%B6%C3%A4/"); <- Firefox URI encoding! '#' -> [1] // "A$-B%5E-C~-D%23-E]-F[-%C3%B6%C3%A4/"); <- '[' ']' -> [2] - "A$-B%5E-C~-D%23-E%5D-F%5B-%C3%B6%C3%A4/"); + // "A$-B%5E-C~-D%23-E%5D-F%5B-%C3%B6%C3%A4/"); /** * [1] '#' java.lang.IllegalArgumentException: URI has a fragment component @@ -111,34 +110,35 @@ public class TestUri99LaunchOnReservedCharPathBug908 extends JunitTracer { */ } - private void testTempJarCacheOddJarPathImpl(final String subPathUTF, final String subPathEncoded) throws IOException, IllegalArgumentException, URISyntaxException { + private void testTempJarCacheOddJarPathImpl(final String subPathUTF) throws IOException, IllegalArgumentException, URISyntaxException { if(AndroidVersion.isAvailable) { System.err.println("n/a on Android"); return; } + final Uri.Encoded subPathEncoded = new Uri.Encoded(subPathUTF, Uri.PATH_LEGAL); final String reservedCharPathUnencoded = "test/build/"+getClass().getSimpleName()+"/"+getTestMethodName()+"/"+subPathUTF; - final String reservedCharPathEncoded = "test/build/"+getClass().getSimpleName()+"/"+getTestMethodName()+"/"+subPathEncoded; + final Uri.Encoded reservedCharPathEncoded = Uri.Encoded.cast("test/build/"+getClass().getSimpleName()+"/"+getTestMethodName()+"/").concat(subPathEncoded); System.err.println("0 Unencoded: "+reservedCharPathUnencoded); System.err.println("0 Encoded: "+reservedCharPathEncoded); // jar:file:/dir1/dir2/gluegen-rt.jar!/ - final URI jarFileURI = JarUtil.getJarFileURI(Platform.class.getName(), getClass().getClassLoader()); + final Uri jarFileURI = JarUtil.getJarFileUri(Platform.class.getName(), getClass().getClassLoader()); System.err.println("1 jarFileURI: "+jarFileURI.toString()); // gluegen-rt.jar - final String jarBasename = JarUtil.getJarBasename(jarFileURI); + final Uri.Encoded jarBasename = JarUtil.getJarBasename(jarFileURI); System.err.println("2 jarBasename: "+jarBasename); // file:/dir1/build/gluegen-rt.jar - final URI fileURI = JarUtil.getJarSubURI(jarFileURI); + final Uri fileURI = jarFileURI.getContainedUri(); System.err.println("3 fileURI: "+fileURI.toString()); // file:/dir1/build/ - final URI fileFolderURI = new URI(IOUtil.getParentOf(fileURI.toString())); + final Uri fileFolderURI = fileURI.getParent(); System.err.println("4 fileFolderURI: "+fileFolderURI.toString()); // file:/dir1/build/test/build/A$-B^-C~-D#-E]-F[/ - final URI fileNewFolderURI = new URI(fileFolderURI.toString()+reservedCharPathEncoded); + final Uri fileNewFolderURI = fileFolderURI.concat(reservedCharPathEncoded); System.err.println("5 fileNewFolderURI: "+fileNewFolderURI.toString()); - final File srcFolder = new File(fileFolderURI); - final File dstFolder = new File(fileNewFolderURI); + final File srcFolder = fileFolderURI.toFile(); + final File dstFolder = fileNewFolderURI.toFile(); System.err.println("6 srcFolder: "+srcFolder.toString()); System.err.println("7 dstFolder: "+dstFolder.toString()); try { diff --git a/src/junit/com/jogamp/common/net/URIDumpUtil.java b/src/junit/com/jogamp/common/net/URIDumpUtil.java index a7d050a..c5ba51f 100644 --- a/src/junit/com/jogamp/common/net/URIDumpUtil.java +++ b/src/junit/com/jogamp/common/net/URIDumpUtil.java @@ -52,7 +52,7 @@ public class URIDumpUtil { System.err.println("0.0.0 string: "+uri.toString()); System.err.println("0.0.0 ascii : "+uri.toASCIIString()); - System.err.println("0.0.0 native-file: "+uri.getNativeFilePath()); + System.err.println("0.0.0 native-file: "+uri.toFile()); System.err.println("0.0.0 contained: "+uri.getContainedUri()); System.err.println("1.0.0 scheme: "+uri.scheme); @@ -73,7 +73,7 @@ public class URIDumpUtil { * @throws URISyntaxException */ public static void showReencodedURIOfUri(final Uri uri) throws URISyntaxException { - final URI recomposedURI = uri.toURI(true); + final URI recomposedURI = uri.toURIReencoded(); showURI("YYYYYY Recomposed URI "+recomposedURI+", isOpaque "+recomposedURI.isOpaque()+", isAbs "+recomposedURI.isAbsolute(), recomposedURI); final String recomposedURIStr = recomposedURI.toString(); final boolean equalsRecompURI = uri.input.equals(recomposedURIStr); @@ -88,7 +88,7 @@ public class URIDumpUtil { * @throws URISyntaxException */ public static void showReencodedUriOfURI(final URI uri) throws URISyntaxException { - final Uri recomposedUri = Uri.valueOf(uri, true); + final Uri recomposedUri = Uri.valueOf(uri); showUri("ZZZZZZ Recomposed Uri "+recomposedUri+", isOpaque "+recomposedUri.opaque+", isAbs "+recomposedUri.absolute+", hasAuth "+recomposedUri.hasAuthority, recomposedUri); final String recomposedUriStr = recomposedUri.toString(); final boolean equalsRecompUri = uri.toString().equals(recomposedUriStr); diff --git a/src/junit/com/jogamp/common/util/TestJarUtil.java b/src/junit/com/jogamp/common/util/TestJarUtil.java index db5c268..06a2e43 100644 --- a/src/junit/com/jogamp/common/util/TestJarUtil.java +++ b/src/junit/com/jogamp/common/util/TestJarUtil.java @@ -30,7 +30,6 @@ package com.jogamp.common.util; import java.io.IOException; import java.net.MalformedURLException; -import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.net.URLClassLoader; @@ -46,6 +45,8 @@ import org.junit.BeforeClass; import org.junit.Test; import com.jogamp.common.GlueGenVersion; +import com.jogamp.common.net.URIDumpUtil; +import com.jogamp.common.net.Uri; import com.jogamp.common.os.AndroidVersion; import com.jogamp.common.util.cache.TempCacheReg; import com.jogamp.common.util.cache.TempFileCache; @@ -97,7 +98,7 @@ public class TestJarUtil extends JunitTracer { } } - void validateJarFileURL(final URI jarFileURI) throws IllegalArgumentException, IOException, URISyntaxException { + void validateJarFileURL(final Uri jarFileURI) throws IllegalArgumentException, IOException, URISyntaxException { Assert.assertNotNull(jarFileURI); final URL jarFileURL = jarFileURI.toURL(); final URLConnection aURLc = jarFileURL.openConnection(); @@ -110,18 +111,27 @@ public class TestJarUtil extends JunitTracer { } void validateJarUtil(final String expJarName, final String clazzBinName, final ClassLoader cl) throws IllegalArgumentException, IOException, URISyntaxException { - final String jarName= JarUtil.getJarBasename(clazzBinName, cl); + final Uri.Encoded expJarNameE = Uri.Encoded.cast(expJarName); + final Uri.Encoded jarName= JarUtil.getJarBasename(clazzBinName, cl); Assert.assertNotNull(jarName); - Assert.assertEquals(expJarName, jarName); + Assert.assertEquals(expJarNameE, jarName); - final URI jarSubURI = JarUtil.getJarSubURI(clazzBinName, cl); - Assert.assertNotNull(jarSubURI); - final URL jarSubURL= jarSubURI.toURL(); + final Uri jarUri = JarUtil.getJarUri(clazzBinName, cl); + Assert.assertNotNull(jarUri); + System.err.println("1 - jarUri:"); + URIDumpUtil.showUri(jarUri); + + final Uri jarSubUri = jarUri.getContainedUri(); + Assert.assertNotNull(jarSubUri); + System.err.println("2 - jarSubUri:"); + URIDumpUtil.showUri(jarSubUri); + + final URL jarSubURL= jarSubUri.toURL(); final URLConnection urlConn = jarSubURL.openConnection(); Assert.assertTrue("jarSubURL has zero content: "+jarSubURL, urlConn.getContentLength()>0); System.err.println("URLConnection of jarSubURL: "+urlConn); - final URI jarFileURL = JarUtil.getJarFileURI(clazzBinName, cl); + final Uri jarFileURL = JarUtil.getJarFileUri(clazzBinName, cl); validateJarFileURL(jarFileURL); final JarFile jarFile = JarUtil.getJarFile(clazzBinName, cl); @@ -146,10 +156,10 @@ public class TestJarUtil extends JunitTracer { final ClassLoader rootCL = this.getClass().getClassLoader(); // Get containing JAR file "TestJarsInJar.jar" and add it to the TempJarCache - TempJarCache.addAll(GlueGenVersion.class, JarUtil.getJarFileURI("ClassInJar0", rootCL)); + TempJarCache.addAll(GlueGenVersion.class, JarUtil.getJarFileUri("ClassInJar0", rootCL)); // Fetch and load the contained "ClassInJar1.jar" - final URL ClassInJar1_jarFileURL = JarUtil.getJarFileURI(TempJarCache.getResource("ClassInJar1.jar")).toURL(); + final URL ClassInJar1_jarFileURL = JarUtil.getJarFileUri(TempJarCache.getResourceUri("ClassInJar1.jar")).toURL(); final ClassLoader cl = new URLClassLoader(new URL[] { ClassInJar1_jarFileURL }, rootCL); Assert.assertNotNull(cl); validateJarUtil("ClassInJar1.jar", "ClassInJar1", cl); @@ -167,10 +177,10 @@ public class TestJarUtil extends JunitTracer { final ClassLoader rootCL = this.getClass().getClassLoader(); // Get containing JAR file "TestJarsInJar.jar" and add it to the TempJarCache - TempJarCache.addAll(GlueGenVersion.class, JarUtil.getJarFileURI("ClassInJar0", rootCL)); + TempJarCache.addAll(GlueGenVersion.class, JarUtil.getJarFileUri("ClassInJar0", rootCL)); // Fetch and load the contained "ClassInJar1.jar" - final URL ClassInJar2_jarFileURL = JarUtil.getJarFileURI(TempJarCache.getResource("sub/ClassInJar2.jar")).toURL(); + final URL ClassInJar2_jarFileURL = JarUtil.getJarFileUri(TempJarCache.getResourceUri("sub/ClassInJar2.jar")).toURL(); final ClassLoader cl = new URLClassLoader(new URL[] { ClassInJar2_jarFileURL }, rootCL); Assert.assertNotNull(cl); validateJarUtil("ClassInJar2.jar", "ClassInJar2", cl); @@ -231,7 +241,7 @@ public class TestJarUtil extends JunitTracer { public URL resolve( final URL url ) { if( url.getProtocol().equals("bundleresource") ) { try { - return new URL( IOUtil.JAR_SCHEME, "", url.getFile() ); + return new URL( Uri.JAR_SCHEME, "", url.getFile() ); } catch(final MalformedURLException e) { return url; } @@ -244,10 +254,10 @@ public class TestJarUtil extends JunitTracer { final ClassLoader rootCL = new CustomClassLoader(); // Get containing JAR file "TestJarsInJar.jar" and add it to the TempJarCache - TempJarCache.addAll(GlueGenVersion.class, JarUtil.getJarFileURI("ClassInJar0", rootCL)); + TempJarCache.addAll(GlueGenVersion.class, JarUtil.getJarFileUri("ClassInJar0", rootCL)); // Fetch and load the contained "ClassInJar1.jar" - final URL ClassInJar2_jarFileURL = JarUtil.getJarFileURI(TempJarCache.getResource("sub/ClassInJar2.jar")).toURL(); + final URL ClassInJar2_jarFileURL = JarUtil.getJarFileUri(TempJarCache.getResourceUri("sub/ClassInJar2.jar")).toURL(); final ClassLoader cl = new URLClassLoader(new URL[] { ClassInJar2_jarFileURL }, rootCL); Assert.assertNotNull(cl); validateJarUtil("ClassInJar2.jar", "ClassInJar2", cl); diff --git a/src/junit/com/jogamp/common/util/TestTempJarCache.java b/src/junit/com/jogamp/common/util/TestTempJarCache.java index cd825fe..474a17a 100644 --- a/src/junit/com/jogamp/common/util/TestTempJarCache.java +++ b/src/junit/com/jogamp/common/util/TestTempJarCache.java @@ -31,7 +31,6 @@ package com.jogamp.common.util; import java.io.File; import java.io.IOException; import java.lang.reflect.Method; -import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.net.URLClassLoader; @@ -44,6 +43,8 @@ import org.junit.Test; import org.junit.runners.MethodSorters; import com.jogamp.common.GlueGenVersion; +import com.jogamp.common.net.URIDumpUtil; +import com.jogamp.common.net.Uri; import com.jogamp.common.os.AndroidVersion; import com.jogamp.common.os.NativeLibrary; import com.jogamp.common.os.Platform; @@ -175,7 +176,7 @@ public class TestTempJarCache extends JunitTracer { if(AndroidVersion.isAvailable) { System.err.println("n/a on Android"); return; } final ClassLoader cl = getClass().getClassLoader(); - TempJarCache.addAll(GlueGenVersion.class, JarUtil.getJarFileURI(GlueGenVersion.class.getName(), cl)); + TempJarCache.addAll(GlueGenVersion.class, JarUtil.getJarFileUri(GlueGenVersion.class.getName(), cl)); File f0 = new File(TempJarCache.getTempFileCache().getTempDir(), "META-INF/MANIFEST.MF"); Assert.assertTrue(f0.exists()); @@ -195,14 +196,28 @@ public class TestTempJarCache extends JunitTracer { @Test public void testTempJarCache02AddNativeLibs() throws IOException, IllegalArgumentException, URISyntaxException { if(AndroidVersion.isAvailable) { System.err.println("n/a on Android"); return; } - final String nativeJarName = "gluegen-rt-natives-"+Platform.getOSAndArch()+".jar"; + final Uri.Encoded nativeJarName = Uri.Encoded.cast("gluegen-rt-natives-"+Platform.getOSAndArch()+".jar"); final String libBaseName = "gluegen-rt"; final ClassLoader cl = getClass().getClassLoader(); - URI jarUriRoot = JarUtil.getJarSubURI(TempJarCache.class.getName(), cl); - jarUriRoot = IOUtil.getURIDirname(jarUriRoot); + final Uri jarUri = JarUtil.getJarUri(TempJarCache.class.getName(), cl); + Assert.assertNotNull(jarUri); + System.err.println("1 - jarUri:"); + URIDumpUtil.showUri(jarUri); - final URI nativeJarURI = JarUtil.getJarFileURI(jarUriRoot, nativeJarName); + final Uri jarFileUri = jarUri.getContainedUri(); + Assert.assertNotNull(jarFileUri); + System.err.println("2 - jarFileUri:"); + URIDumpUtil.showUri(jarFileUri); + + final Uri jarFileDir = jarFileUri.getParent(); + Assert.assertNotNull(jarFileDir); + System.err.println("3 - jarFileDir:"); + URIDumpUtil.showUri(jarFileDir); + + final Uri nativeJarURI = JarUtil.getJarFileUri(jarFileDir, nativeJarName); + System.err.println("4 - nativeJarURI:"); + URIDumpUtil.showUri(nativeJarURI); TempJarCache.addNativeLibs(TempJarCache.class, nativeJarURI, null /* nativeLibraryPath */); final String libFullPath = TempJarCache.findLibrary(libBaseName); @@ -225,7 +240,7 @@ public class TestTempJarCache extends JunitTracer { @Test public void testTempJarCache04bDiffClassLoader() throws IOException, IllegalArgumentException, URISyntaxException { if(AndroidVersion.isAvailable) { System.err.println("n/a on Android"); return; } - final URL[] urls = new URL[] { JarUtil.getJarFileURI(TempJarCache.class.getName(), getClass().getClassLoader()).toURL() }; + final URL[] urls = new URL[] { JarUtil.getJarFileUri(TempJarCache.class.getName(), getClass().getClassLoader()).toURL() }; System.err.println("url: "+urls[0]); final ClassLoader cl2 = new TestClassLoader(urls, null); final ClassLoader cl3 = new TestClassLoader(urls, null); diff --git a/src/junit/com/jogamp/junit/sec/Applet01.java b/src/junit/com/jogamp/junit/sec/Applet01.java index a335efe..f0188a2 100644 --- a/src/junit/com/jogamp/junit/sec/Applet01.java +++ b/src/junit/com/jogamp/junit/sec/Applet01.java @@ -34,14 +34,13 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.URISyntaxException; -import java.net.URL; import java.security.AccessControlException; +import com.jogamp.common.net.Uri; import com.jogamp.common.os.MachineDescription; import com.jogamp.common.os.NativeLibrary; import com.jogamp.common.os.Platform; import com.jogamp.common.util.IOUtil; -import com.jogamp.common.util.JarUtil; /** * Applet: Provoke AccessControlException while writing to file! @@ -156,64 +155,64 @@ public class Applet01 extends Applet { } } - private void testOpenLibrary(final boolean global) { + private void testOpenLibrary(final boolean global) throws URISyntaxException { final ClassLoader cl = getClass().getClassLoader(); System.err.println("CL "+cl); String libBaseName = null; final Class<?> clazz = this.getClass(); - URL libURL = clazz.getResource("/libtest1.so"); - if( null != libURL ) { + Uri libUri = null; + try { + libUri = Uri.valueOf(clazz.getResource("/libtest1.so")); + } catch (final URISyntaxException e2) { + // not found .. OK + } + if( null != libUri ) { libBaseName = "libtest1.so"; } else { - libURL = clazz.getResource("/test1.dll"); - if( null != libURL ) { - libBaseName = "test1.dll"; + try { + libUri = Uri.valueOf(clazz.getResource("/test1.dll")); + if( null != libUri ) { + libBaseName = "test1.dll"; + } + } catch (final URISyntaxException e) { + // not found } } - System.err.println("Untrusted Library (URL): "+libURL); + System.err.println("Untrusted Library (URL): "+libUri); - String libDir1 = null; - if( null != libURL ) { + if( null != libUri ) { + Uri libDir1 = libUri.getContainedUri(); + System.err.println("libDir1.1: "+libDir1); + libDir1= libDir1.getParent(); + System.err.println("libDir1.2: "+libDir1); + System.err.println("Untrusted Library Dir1 (abs): "+libDir1); + final Uri absLib = libDir1.concat(Uri.Encoded.cast("natives/" + libBaseName)); + Exception sec01 = null; try { - libDir1 = JarUtil.getJarSubURI(libURL.toURI()).getPath(); - } catch (final Exception e) { - e.printStackTrace(); - } - if( null != libDir1 ) { - System.err.println("libDir1.1: "+libDir1); - try { - libDir1= IOUtil.getParentOf(libDir1); - } catch (final URISyntaxException e) { - e.printStackTrace(); + final NativeLibrary nlib = NativeLibrary.open(absLib.toFile().getPath(), cl); + System.err.println("NativeLibrary: "+nlib); + } catch (final SecurityException e) { + sec01 = e; + if( usesSecurityManager ) { + System.err.println("Expected exception for loading native library"); + System.err.println("Message: "+sec01.getMessage()); + } else { + System.err.println("Unexpected exception for loading native library"); + sec01.printStackTrace(); } - System.err.println("libDir1.2: "+libDir1); } - } - System.err.println("Untrusted Library Dir1 (abs): "+libDir1); - final String absLib = libDir1 + "natives/" + libBaseName; - Exception sec01 = null; - try { - final NativeLibrary nlib = NativeLibrary.open(absLib, cl); - System.err.println("NativeLibrary: "+nlib); - } catch (final SecurityException e) { - sec01 = e; - if( usesSecurityManager ) { - System.err.println("Expected exception for loading native library"); - System.err.println("Message: "+sec01.getMessage()); + if( !usesSecurityManager ) { + if( null != sec01 ) { + throw new Error("SecurityException thrown on loading native library", sec01); + } } else { - System.err.println("Unexpected exception for loading native library"); - sec01.printStackTrace(); - } - } - if( !usesSecurityManager ) { - if( null != sec01 ) { - throw new Error("SecurityException thrown on loading native library", sec01); + if( null == sec01 ) { + throw new Error("SecurityException not thrown on loading native library"); + } } } else { - if( null == sec01 ) { - throw new Error("SecurityException not thrown on loading native library"); - } + System.err.println("No library found"); } } @@ -244,7 +243,11 @@ public class Applet01 extends Applet { testWriteFile(); System.err.println("writeFile: OK"); - testOpenLibrary(true); + try { + testOpenLibrary(true); + } catch (final URISyntaxException e) { + e.printStackTrace(); + } System.err.println("lib0: OK"); } diff --git a/src/junit/com/jogamp/junit/sec/TestSecIOUtil01.java b/src/junit/com/jogamp/junit/sec/TestSecIOUtil01.java index e4e1b34..b347680 100644 --- a/src/junit/com/jogamp/junit/sec/TestSecIOUtil01.java +++ b/src/junit/com/jogamp/junit/sec/TestSecIOUtil01.java @@ -29,7 +29,6 @@ package com.jogamp.junit.sec; import java.net.URISyntaxException; -import java.net.URL; import java.security.AccessControlException; import java.io.File; import java.io.IOException; @@ -38,10 +37,10 @@ import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; +import com.jogamp.common.net.Uri; import com.jogamp.common.os.NativeLibrary; import com.jogamp.common.os.Platform; import com.jogamp.common.util.IOUtil; -import com.jogamp.common.util.JarUtil; import com.jogamp.junit.util.JunitTracer; import org.junit.FixMethodOrder; @@ -137,73 +136,75 @@ public class TestSecIOUtil01 extends JunitTracer { testTempDirImpl(false); } - private NativeLibrary openLibraryImpl(final boolean global) { + private NativeLibrary openLibraryImpl(final boolean global) throws URISyntaxException { final ClassLoader cl = getClass().getClassLoader(); System.err.println("CL "+cl); String libBaseName = null; final Class<?> clazz = this.getClass(); - URL libURL = clazz.getResource("/libtest1.so"); - if( null != libURL ) { + Uri libUri = null; + try { + libUri = Uri.valueOf(clazz.getResource("/libtest1.so")); + } catch (final URISyntaxException e2) { + // not found .. OK + } + if( null != libUri ) { libBaseName = "libtest1.so"; } else { - libURL = clazz.getResource("/test1.dll"); - if( null != libURL ) { - libBaseName = "test1.dll"; + try { + libUri = Uri.valueOf(clazz.getResource("/test1.dll")); + if( null != libUri ) { + libBaseName = "test1.dll"; + } + } catch (final URISyntaxException e) { + // not found } } - System.err.println("Untrusted Library (URL): "+libURL); - - String libDir1 = null; - if( null != libURL ) { + System.err.println("Untrusted Library (URL): "+libUri); + + if( null != libUri ) { + Uri libDir1 = libUri.getContainedUri(); + System.err.println("libDir1.1: "+libDir1); + libDir1= libDir1.getParent(); + System.err.println("libDir1.2: "+libDir1); + System.err.println("Untrusted Library Dir1 (abs): "+libDir1); + final Uri absLib = libDir1.concat(Uri.Encoded.cast("natives/" + libBaseName)); + Exception se0 = null; + NativeLibrary nlib = null; try { - libDir1 = JarUtil.getJarSubURI(libURL.toURI()).getPath(); - } catch (final Exception e) { - e.printStackTrace(); - } - if( null != libDir1 ) { - System.err.println("libDir1.1: "+libDir1); - try { - libDir1= IOUtil.getParentOf(libDir1); - } catch (final URISyntaxException e) { - e.printStackTrace(); + nlib = NativeLibrary.open(absLib.toFile().getPath(), cl); + System.err.println("NativeLibrary: "+nlib); + } catch (final SecurityException e) { + se0 = e; + if( usesSecurityManager ) { + System.err.println("Expected exception for loading native library"); + System.err.println("Message: "+se0.getMessage()); + } else { + System.err.println("Unexpected exception for loading native library"); + se0.printStackTrace(); } - System.err.println("libDir1.2: "+libDir1); } - } - System.err.println("Untrusted Library Dir1 (abs): "+libDir1); - final String absLib = libDir1 + "natives/" + libBaseName; - Exception se0 = null; - NativeLibrary nlib = null; - try { - nlib = NativeLibrary.open(absLib, cl); - System.err.println("NativeLibrary: "+nlib); - } catch (final SecurityException e) { - se0 = e; - if( usesSecurityManager ) { - System.err.println("Expected exception for loading native library"); - System.err.println("Message: "+se0.getMessage()); + if( !usesSecurityManager ) { + Assert.assertNull("SecurityException thrown on loading native library", se0); } else { - System.err.println("Unexpected exception for loading native library"); - se0.printStackTrace(); + Assert.assertNotNull("SecurityException not thrown on loading native library", se0); } - } - if( !usesSecurityManager ) { - Assert.assertNull("SecurityException thrown on loading native library", se0); + return nlib; } else { - Assert.assertNotNull("SecurityException not thrown on loading native library", se0); + System.err.println("No library found"); + return null; } - return nlib; + } - public void testOpenLibrary() { + public void testOpenLibrary() throws URISyntaxException { final NativeLibrary nlib = openLibraryImpl(true); if( null != nlib ) { nlib.close(); } } - public static void main(final String args[]) throws IOException { + public static void main(final String args[]) throws IOException, URISyntaxException { TestSecIOUtil01.setup(); final TestSecIOUtil01 aa = new TestSecIOUtil01(); diff --git a/src/junit/com/jogamp/junit/util/VersionSemanticsUtil.java b/src/junit/com/jogamp/junit/util/VersionSemanticsUtil.java index 953c795..78f4460 100644 --- a/src/junit/com/jogamp/junit/util/VersionSemanticsUtil.java +++ b/src/junit/com/jogamp/junit/util/VersionSemanticsUtil.java @@ -29,7 +29,6 @@ package com.jogamp.junit.util; import java.io.File; import java.io.IOException; -import java.net.URI; import java.net.URISyntaxException; import java.util.HashSet; import java.util.Set; @@ -40,7 +39,7 @@ import org.semver.Comparer; import org.semver.Delta; import org.semver.Dumper; -import com.jogamp.common.util.IOUtil; +import com.jogamp.common.net.Uri; import com.jogamp.common.util.JarUtil; import com.jogamp.common.util.VersionNumberString; @@ -54,12 +53,10 @@ public class VersionSemanticsUtil { throws IllegalArgumentException, IOException, URISyntaxException { // Get containing JAR file "TestJarsInJar.jar" and add it to the TempJarCache - final URI currentJarURI = JarUtil.getJarSubURI(currentJarClazz.getName(), currentJarCL); - final String currentJarLocS = IOUtil.decodeURIIfFilePath(currentJarURI); - final File currentJar = new File(currentJarLocS); + final Uri currentJarUri = JarUtil.getJarUri(currentJarClazz.getName(), currentJarCL).getContainedUri(); testVersion(diffCriteria, expectedCompatibilityType, previousJar, preVersionNumber, - currentJar, curVersionNumber, + currentJarUri.toFile(), curVersionNumber, excludesRegExp); } |