From 5205e47e8a2e84e793b26305391b1c4f8648597c Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Sun, 7 Sep 2014 10:20:12 +0200 Subject: Bug 1063 - Utilize own Uri and Uri.Encoded class w/ proper encoding and differentiating encoded/decoded variants by type [Part 1] - Add immutable com.jogamp.common.net.Uri class impl. RFC 2396 w/ encoding of RFC 3986 - Class Uri.Encoded is used to represent encoded parts - IOUtil: Remove unused methods (residing in Uri) and mark others deprecated (will move to Uri) - Adopt usage of Uri: This must be completet in follow-up commits! --- .../jogamp/common/net/AssetURLConnectionBase.java | 6 +- .../net/AssetURLConnectionRegisteredTest.java | 9 +- .../net/AssetURLConnectionUnregisteredTest.java | 7 +- .../net/TestNetIOURIReservedCharsBug908.java | 170 --------- src/junit/com/jogamp/common/net/TestUri01.java | 363 +++++++++++++++++++ .../com/jogamp/common/net/TestUri02Composing.java | 96 +++++ .../com/jogamp/common/net/TestUri03Resolving.java | 374 ++++++++++++++++++++ .../TestUri99LaunchOnReservedCharPathBug908.java | 170 +++++++++ src/junit/com/jogamp/common/net/URIDumpUtil.java | 53 +++ .../jogamp/common/util/TestIOUtilURICompose.java | 92 ----- .../jogamp/common/util/TestIOUtilURIHandling.java | 393 --------------------- .../com/jogamp/common/util/TestTempJarCache.java | 2 - .../jogamp/common/util/TestVersionSemantics.java | 4 +- 13 files changed, 1068 insertions(+), 671 deletions(-) delete mode 100644 src/junit/com/jogamp/common/net/TestNetIOURIReservedCharsBug908.java create mode 100644 src/junit/com/jogamp/common/net/TestUri01.java create mode 100644 src/junit/com/jogamp/common/net/TestUri02Composing.java create mode 100644 src/junit/com/jogamp/common/net/TestUri03Resolving.java create mode 100644 src/junit/com/jogamp/common/net/TestUri99LaunchOnReservedCharPathBug908.java delete mode 100644 src/junit/com/jogamp/common/util/TestIOUtilURICompose.java delete mode 100644 src/junit/com/jogamp/common/util/TestIOUtilURIHandling.java (limited to 'src/junit') diff --git a/src/junit/com/jogamp/common/net/AssetURLConnectionBase.java b/src/junit/com/jogamp/common/net/AssetURLConnectionBase.java index e16003f..40acec9 100644 --- a/src/junit/com/jogamp/common/net/AssetURLConnectionBase.java +++ b/src/junit/com/jogamp/common/net/AssetURLConnectionBase.java @@ -23,15 +23,15 @@ public abstract class AssetURLConnectionBase extends JunitTracer { /** In gluegen.test.jar */ protected static final String test_asset_test1_url = "asset:gluegen-test/info.txt"; protected static final String test_asset_test1_entry = "gluegen-test/info.txt"; - protected static final String test_asset_test2_rel = "data/AssetURLConnectionTest.txt"; + protected static final Uri.Encoded test_asset_test2_rel = Uri.Encoded.cast("data/AssetURLConnectionTest.txt"); protected static final String test_asset_test2a_url = "asset:com/jogamp/common/net/data/AssetURLConnectionTest.txt"; protected static final String test_asset_test2b_url = "asset:/com/jogamp/common/net/data/AssetURLConnectionTest.txt"; protected static final String test_asset_test2_entry = "com/jogamp/common/net/data/AssetURLConnectionTest.txt"; - protected static final String test_asset_test3_rel = "RelativeData.txt"; + protected static final Uri.Encoded test_asset_test3_rel = Uri.Encoded.cast("RelativeData.txt"); protected static final String test_asset_test3a_url = "asset:com/jogamp/common/net/data/RelativeData.txt"; protected static final String test_asset_test3b_url = "asset:/com/jogamp/common/net/data/RelativeData.txt"; protected static final String test_asset_test3_entry = "com/jogamp/common/net/data/RelativeData.txt"; - protected static final String test_asset_test4_rel = "../data2/RelativeData2.txt"; + protected static final Uri.Encoded test_asset_test4_rel = Uri.Encoded.cast("../data2/RelativeData2.txt"); protected static final String test_asset_test4a_url = "asset:com/jogamp/common/net/data2/RelativeData2.txt"; protected static final String test_asset_test4b_url = "asset:/com/jogamp/common/net/data2/RelativeData2.txt"; protected static final String test_asset_test4_entry = "com/jogamp/common/net/data2/RelativeData2.txt"; diff --git a/src/junit/com/jogamp/common/net/AssetURLConnectionRegisteredTest.java b/src/junit/com/jogamp/common/net/AssetURLConnectionRegisteredTest.java index 7648990..cb6200d 100644 --- a/src/junit/com/jogamp/common/net/AssetURLConnectionRegisteredTest.java +++ b/src/junit/com/jogamp/common/net/AssetURLConnectionRegisteredTest.java @@ -1,7 +1,6 @@ package com.jogamp.common.net; import java.io.IOException; -import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.net.URLConnection; @@ -48,12 +47,12 @@ public class AssetURLConnectionRegisteredTest extends AssetURLConnectionBase { Assert.assertEquals(test_asset_test2a_url, urlConn0.getURL().toExternalForm()); testAssetConnection(urlConn0, test_asset_test2_entry); - final URI uri1 = IOUtil.getRelativeOf(urlConn0.getURL().toURI(), test_asset_test3_rel); + final Uri uri1 = Uri.valueOf(urlConn0.getURL()).getRelativeOf(test_asset_test3_rel); Assert.assertNotNull(uri1); Assert.assertEquals(test_asset_test3a_url, uri1.toString()); testAssetConnection(uri1.toURL().openConnection(), test_asset_test3_entry); - final URI uri2 = IOUtil.getRelativeOf(urlConn0.getURL().toURI(), test_asset_test4_rel); + final Uri uri2 = Uri.valueOf(urlConn0.getURL()).getRelativeOf(test_asset_test4_rel); Assert.assertNotNull(uri2); Assert.assertEquals(test_asset_test4a_url, uri2.toString()); testAssetConnection(uri2.toURL().openConnection(), test_asset_test4_entry); @@ -66,12 +65,12 @@ public class AssetURLConnectionRegisteredTest extends AssetURLConnectionBase { Assert.assertEquals(test_asset_test2b_url, urlConn0.getURL().toExternalForm()); testAssetConnection(urlConn0, test_asset_test2_entry); - final URI uri1 = IOUtil.getRelativeOf(urlConn0.getURL().toURI(), test_asset_test3_rel); + final Uri uri1 = Uri.valueOf(urlConn0.getURL()).getRelativeOf(test_asset_test3_rel); Assert.assertNotNull(uri1); Assert.assertEquals(test_asset_test3b_url, uri1.toString()); testAssetConnection(uri1.toURL().openConnection(), test_asset_test3_entry); - final URI uri2 = IOUtil.getRelativeOf(urlConn0.getURL().toURI(), test_asset_test4_rel); + final Uri uri2 = Uri.valueOf(urlConn0.getURL()).getRelativeOf(test_asset_test4_rel); Assert.assertNotNull(uri2); Assert.assertEquals(test_asset_test4b_url, uri2.toString()); testAssetConnection(uri2.toURL().openConnection(), test_asset_test4_entry); diff --git a/src/junit/com/jogamp/common/net/AssetURLConnectionUnregisteredTest.java b/src/junit/com/jogamp/common/net/AssetURLConnectionUnregisteredTest.java index 5fbde49..5167abb 100644 --- a/src/junit/com/jogamp/common/net/AssetURLConnectionUnregisteredTest.java +++ b/src/junit/com/jogamp/common/net/AssetURLConnectionUnregisteredTest.java @@ -1,7 +1,6 @@ package com.jogamp.common.net; import java.io.IOException; -import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.net.URLConnection; @@ -39,14 +38,14 @@ public class AssetURLConnectionUnregisteredTest extends AssetURLConnectionBase { @Test public void assetUnregisteredIOUtilGetResourceRel0_RT() throws IOException, URISyntaxException { - final URLConnection urlConn0 = IOUtil.getResource(this.getClass(), test_asset_test2_rel); + final URLConnection urlConn0 = IOUtil.getResource(this.getClass(), test_asset_test2_rel.get()); testAssetConnection(urlConn0, test_asset_test2_entry); - final URI uri1 = IOUtil.getRelativeOf(urlConn0.getURL().toURI(), test_asset_test3_rel); + final Uri uri1 = Uri.valueOf(urlConn0.getURL()).getRelativeOf(test_asset_test3_rel); Assert.assertNotNull(uri1); // JARFile URL .. testAssetConnection(uri1.toURL().openConnection(), test_asset_test3_entry); - final URI uri2 = IOUtil.getRelativeOf(urlConn0.getURL().toURI(), test_asset_test4_rel); + final Uri uri2 = Uri.valueOf(urlConn0.getURL()).getRelativeOf(test_asset_test4_rel); Assert.assertNotNull(uri2); testAssetConnection(uri2.toURL().openConnection(), test_asset_test4_entry); } diff --git a/src/junit/com/jogamp/common/net/TestNetIOURIReservedCharsBug908.java b/src/junit/com/jogamp/common/net/TestNetIOURIReservedCharsBug908.java deleted file mode 100644 index 904fca5..0000000 --- a/src/junit/com/jogamp/common/net/TestNetIOURIReservedCharsBug908.java +++ /dev/null @@ -1,170 +0,0 @@ -/** - * Copyright 2014 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ - -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.URLClassLoader; - -import org.junit.Assert; -import org.junit.FixMethodOrder; -import org.junit.Test; -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; -import com.jogamp.junit.util.MiscUtils; - -/** - * Bug 908: Automated test, launching GlueGen jar file from an odd pathname. - *

- * The currently used jar folder is copied into [1] - *

- *    [1] build/test/build/TestNetIOURIReservedCharsBug908/test01TempJarCacheOddPath/A\$-B\^-C~-D#-E\]-F\[-öä
- *    [2] build/test/build/TestNetIOURIReservedCharsBug908/test01TempJarCacheOddPath/A\$-B\^-C~-D#-E\]-F\[-öä/gluegen-rt.jar
- * 
- * A ClassLoader w/ the URL [2] is used to issue Platform.initSingleton(), - * i.e. issues a whole initialization sequence w/ native jar loading in the new ClassPath. - *

- *

- * The manual test below on the created odd folder [1] has also succeeded: - *

- * java \
- *     -Djogamp.debug.IOUtil -Djogamp.debug.JNILibLoader -Djogamp.debug.TempFileCache \
- *     -Djogamp.debug.JarUtil -Djogamp.debug.TempJarCache \
- *     -cp ../build-x86_64/test/build/TestNetIOURIReservedCharsBug908/test01TempJarCacheOddPath/A\$-B\^-C~-D#-E\]-F\[-öä/gluegen-rt.jar \
- *     com.jogamp.common.GlueGenVersion
- * 
- *

- */ -@FixMethodOrder(MethodSorters.NAME_ASCENDING) -public class TestNetIOURIReservedCharsBug908 extends JunitTracer { - static class TestClassLoader extends URLClassLoader { - public TestClassLoader(final URL[] urls) { - super(urls); - } - public TestClassLoader(final URL[] urls, final ClassLoader parent) { - super(urls, parent); - } - } - - - @Test - public void test00TempJarCacheSimplePath() throws IOException, IllegalArgumentException, URISyntaxException { - testTempJarCacheOddJarPathImpl("simpletons/", "simpletons/"); - } - - @Test - public void test01TempJarCacheOddPath() throws IOException, IllegalArgumentException, URISyntaxException { - // Bug 908, issues w/ windows file path char: $ ^ ~ # [ ] - 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/"); - /** - * [1] '#' - java.lang.IllegalArgumentException: URI has a fragment component - at java.io.File.(Unknown Source) - at com.jogamp.common.net.TestNetIOURIReservedCharsBug908.testTempJarCacheOddJarPathImpl(TestNetIOURIReservedCharsBug908.java:101) - [2] '[' ']' - java.net.URISyntaxException: Illegal character in path at index 137: file:/usr/local/projects/JOGL/gluegen/build-x86_64/test/build/TestNetIOURIReservedCharsBug908/test01TempJarCacheOddPath/A$-B%5E-C~-D%23-E]-F[-%C3%B6%C3%A4/ - at java.net.URI$Parser.fail(Unknown Source) - at java.net.URI$Parser.checkChars(Unknown Source) - at java.net.URI$Parser.parseHierarchical(Unknown Source) - at java.net.URI$Parser.parse(Unknown Source) - at java.net.URI.(Unknown Source) - at com.jogamp.common.net.TestNetIOURIReservedCharsBug908.testTempJarCacheOddJarPathImpl(TestNetIOURIReservedCharsBug908.java:106) - - */ - - } - private void testTempJarCacheOddJarPathImpl(final String subPathUTF, final String subPathEncoded) throws IOException, IllegalArgumentException, URISyntaxException { - if(AndroidVersion.isAvailable) { System.err.println("n/a on Android"); return; } - - final String reservedCharPathUnencoded = "test/build/"+getClass().getSimpleName()+"/"+getTestMethodName()+"/"+subPathUTF; - final String reservedCharPathEncoded = "test/build/"+getClass().getSimpleName()+"/"+getTestMethodName()+"/"+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()); - System.err.println("1 jarFileURI: "+jarFileURI.toString()); - // gluegen-rt.jar - final String jarBasename = JarUtil.getJarBasename(jarFileURI); - System.err.println("2 jarBasename: "+jarBasename); - - // file:/dir1/build/gluegen-rt.jar - final URI fileURI = JarUtil.getJarSubURI(jarFileURI); - System.err.println("3 fileURI: "+fileURI.toString()); - // file:/dir1/build/ - final URI fileFolderURI = new URI(IOUtil.getParentOf(fileURI.toString())); - 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); - System.err.println("5 fileNewFolderURI: "+fileNewFolderURI.toString()); - - final File srcFolder = new File(fileFolderURI); - final File dstFolder = new File(fileNewFolderURI); - System.err.println("6 srcFolder: "+srcFolder.toString()); - System.err.println("7 dstFolder: "+dstFolder.toString()); - try { - final MiscUtils.CopyStats copyStats = MiscUtils.copy(srcFolder, dstFolder, 1, true); - copyStats.dump("Copy ", true); - Assert.assertEquals(1, copyStats.totalFolders); - Assert.assertTrue(copyStats.totalBytes > 0); - Assert.assertEquals(0, copyStats.currentDepth); - - final URI jarFileNewFolderURI = new URI(fileNewFolderURI.toString()+jarBasename); - System.err.println("8 jarFileNewFolderURI: "+jarFileNewFolderURI.toString()); - - final URL[] urls = new URL[] { jarFileNewFolderURI.toURL() }; - System.err.println("url: "+urls[0]); - - final ClassLoader cl = new TestClassLoader(urls, null); - ReflectionUtil.callStaticMethod(Platform.class.getName(), "initSingleton", null, null, cl); - } finally { - // cleanup ? Skip this for now .. - // dstFolder.delete(); - } - } - - public static void main(final String args[]) throws IOException { - final String tstname = TestNetIOURIReservedCharsBug908.class.getName(); - org.junit.runner.JUnitCore.main(tstname); - } - -} diff --git a/src/junit/com/jogamp/common/net/TestUri01.java b/src/junit/com/jogamp/common/net/TestUri01.java new file mode 100644 index 0000000..361304c --- /dev/null +++ b/src/junit/com/jogamp/common/net/TestUri01.java @@ -0,0 +1,363 @@ +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; + +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.junit.util.JunitTracer; + +import org.junit.FixMethodOrder; +import org.junit.runners.MethodSorters; + +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +public class TestUri01 extends JunitTracer { + + @Test + public void test00URIEscapeSpecialChars() 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"); + System.err.println("vanilla "+vanilla); + final Uri.Encoded esc1 = new Uri.Encoded(vanilla, Uri.PATH_MIN_LEGAL); + System.err.println("esc1 "+esc1); + Assert.assertEquals(escaped, esc1); + + final String invEsc1 = esc1.decode(); + System.err.println("inv(esc1) "+invEsc1); + Assert.assertEquals(vanilla, invEsc1); + } + { + final String vanilla = "/XXX R!# R$&'()*+,/:;=?z@y[x]"; + final Uri.Encoded escaped = Uri.Encoded.cast("/XXX%20R!%23%20R%24%26%27%28%29%2A%2B%2C/%3A%3B%3D%3Fz%40y%5Bx%5D"); + System.err.println("vanilla "+vanilla); + final Uri.Encoded esc1 = new Uri.Encoded(vanilla, Uri.PATH_MIN_LEGAL); + System.err.println("esc1 "+esc1); + Assert.assertEquals(escaped, esc1); + + final String invEsc1 = esc1.decode(); + System.err.println("inv(esc1) "+invEsc1); + Assert.assertEquals(vanilla, invEsc1); + } + { + // Bug 908: $ ^ ~ # [ ] + final String vanilla = "/XXX $ ^ ~ # [ ]"; + showDump0x(vanilla); + } + { + // Windows invalid File characters: * ? " < > | + final String vanilla = "/XXX ! & ' ( ) + , / ; = @ [ ]"; + showDump0x(vanilla); + } + } + @Test + public void test01URIEscapeCommonChars() 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%7E"); + System.err.println("vanilla "+vanilla); + final Uri.Encoded esc1 = new Uri.Encoded(vanilla, Uri.PATH_MIN_LEGAL); + System.err.println("esc1 "+esc1); + Assert.assertEquals(escaped, esc1); + + final String invEsc1 = esc1.decode(); + System.err.println("inv(esc1) "+invEsc1); + Assert.assertEquals(vanilla, invEsc1); + showDump0x(vanilla); + } + } + private static void showDump0x(final String string) throws IOException, URISyntaxException { + 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()); + + System.err.println("File-path -> Uri:"); + final Uri uri0 = Uri.valueOfFilepath(string); + URIDumpUtil.showUri(uri0); + + System.err.println("Uri -> File:"); + final Uri uri2 = Uri.valueOf(file); + URIDumpUtil.showUri(uri2); + + System.err.println("Uri -> URI:"); + final URI uri3 = uri2.toURI(); + URIDumpUtil.showURI(uri3); + + System.err.println("URI -> Uri (keep encoding):"); + final Uri uri4 = Uri.valueOf(uri3, false); + URIDumpUtil.showUri(uri4); + + System.err.println("URI -> Uri (re-encode):"); + final Uri uri5 = Uri.valueOf(uri3, true); + URIDumpUtil.showUri(uri5); + } + + @Test + public void test03EqualsAndHashCode() 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"); + final Uri uri2 = Uri.create("http", "localhost", "/test01.html", "tag01"); + + Assert.assertEquals(uri0, uri1); + Assert.assertEquals(uri0.hashCode(), uri1.hashCode()); + + Assert.assertEquals(uri0, uri2); + Assert.assertEquals(uri0.hashCode(), uri2.hashCode()); + + Assert.assertEquals(uri1, uri2); + Assert.assertEquals(uri1.hashCode(), uri2.hashCode()); + + final Uri uriA = Uri.create("http", null, "localhost", -1, "/test02.html", null, "tag01"); + final Uri uriB = Uri.create("http", null, "localhost", -1, "/test01.html", null, "tag02"); + final Uri uriC = Uri.create("http", null, "lalalhost", -1, "/test01.html", null, "tag01"); + final Uri uriD = Uri.create("sftp", null, "localhost", -1, "/test01.html", null, "tag01"); + + Assert.assertNotEquals(uri1, uriA); + Assert.assertNotEquals(uri1, uriB); + Assert.assertNotEquals(uri1, uriC); + Assert.assertNotEquals(uri1, uriD); + } + { // 3 [scheme:][//[user-info@]host[:port]]path[?query][#fragment] + final Uri uri0 = Uri.cast("http://user@localhost:80/test01.html?test=01&test=02#tag01"); + final Uri uri1 = Uri.create("http", "user", "localhost", 80, "/test01.html", "test=01&test=02", "tag01"); + + Assert.assertEquals(uri0, uri1); + Assert.assertEquals(uri0.hashCode(), uri1.hashCode()); + + final Uri uriA = Uri.cast("http://user@localhost:80/test01.html?test=01&test=02#tag02"); + final Uri uriB = Uri.cast("http://user@localhost:80/test01.html?test=01&test=03#tag01"); + final Uri uriC = Uri.cast("http://user@localhost:80/test04.html?test=01&test=02#tag01"); + final Uri uriD = Uri.cast("http://user@localhost:88/test01.html?test=01&test=02#tag01"); + final Uri uriE = Uri.cast("http://user@lalalhost:80/test01.html?test=01&test=02#tag01"); + final Uri uriF = Uri.cast("http://test@localhost:80/test01.html?test=01&test=02#tag01"); + final Uri uriG = Uri.cast("sftp://user@localhost:80/test01.html?test=01&test=02#tag01"); + + Assert.assertNotEquals(uri1, uriA); + Assert.assertNotEquals(uri1, uriB); + Assert.assertNotEquals(uri1, uriC); + Assert.assertNotEquals(uri1, uriD); + Assert.assertNotEquals(uri1, uriE); + Assert.assertNotEquals(uri1, uriF); + Assert.assertNotEquals(uri1, uriG); + } + } + + @Test + public void test04ContainedUri() throws IOException, URISyntaxException { + { + final Uri input = Uri.cast("http://localhost/test01.html#tag01"); + final Uri contained = input.getContainedUri(); + Assert.assertNull(contained); + } + { + final Uri input = Uri.cast("jar:http://localhost/test01.jar!/com/jogamp/Lala.class#tag01"); + final Uri expected = Uri.cast("http://localhost/test01.jar#tag01"); + final Uri contained = input.getContainedUri(); + Assert.assertEquals(expected, contained); + Assert.assertEquals(expected.hashCode(), contained.hashCode()); + } + { + final Uri input = Uri.cast("jar:file://localhost/test01.jar!/"); + final Uri expected = Uri.cast("file://localhost/test01.jar"); + final Uri contained = input.getContainedUri(); + Assert.assertEquals(expected, contained); + Assert.assertEquals(expected.hashCode(), contained.hashCode()); + } + { + final Uri input = Uri.cast("sftp:http://localhost/test01.jar?lala=01#tag01"); + final Uri expected = Uri.cast("http://localhost/test01.jar?lala=01#tag01"); + final Uri contained = input.getContainedUri(); + Assert.assertEquals(expected, contained); + Assert.assertEquals(expected.hashCode(), contained.hashCode()); + } + } + + @Test + public void test05ParentUri() throws IOException, URISyntaxException { + { + final Uri input = Uri.cast("http://localhost/"); + final Uri parent = input.getParent(); + Assert.assertNull(parent); + } + { + 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 parent1 = input.getParent(); + final Uri parent2 = parent1.getParent(); + 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()); + } + } + + @Test + public void test10HttpUri2URL() throws IOException, URISyntaxException { + testUri2URL(getSimpleTestName("."), TestUri03Resolving.uriHttpSArray); + } + + @Test + public void test20FileUnixUri2URL() throws IOException, URISyntaxException { + testUri2URL(getSimpleTestName("."), TestUri03Resolving.uriFileSArrayUnix); + } + + @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); + } + } + + static void testUri2URL(final String testname, final String[][] uriSArray) throws IOException, URISyntaxException { + boolean ok = true; + for(int i=0; i, ssp <"+uri1.schemeSpecificPart+">, fragment <"+uri1.fragment+">"); + final Uri uri2 = Uri.compose(uri1.scheme, uri1.schemeSpecificPart, null, uri1.fragment); + + System.err.println("URL-equals: "+refURI.equals(uri2)); + System.err.println("URL-ref : <"+refURI+">"); + System.err.println("URL-orig : <"+uri1+">"); + System.err.println("URL-comp : <"+uri2+">"); + Assert.assertEquals(refURI, uri2); + } + + static void testURLCompositioning(final URL url) throws MalformedURLException, URISyntaxException { + testURLCompositioning(url, url); + } + static void testURLCompositioning(final URL refURL, final URL url1) throws MalformedURLException, URISyntaxException { + final Uri uri1 = Uri.valueOf(url1); + System.err.println("scheme <"+uri1.scheme+">, ssp <"+uri1.schemeSpecificPart+">, fragment <"+uri1.fragment+">"); + final Uri uri2 = Uri.compose(uri1.scheme, uri1.schemeSpecificPart, null, uri1.fragment); + + System.err.println("URL-equals(1): "+refURL.toURI().equals(uri2)); + System.err.println("URL-equals(2): "+refURL.equals(uri2.toURL())); + System.err.println("URL-same : "+refURL.sameFile(uri2.toURL())); + System.err.println("URL-ref : <"+refURL+">"); + System.err.println("URL-orig : <"+url1+">"); + System.err.println("URL-comp : <"+uri2+">"); + Assert.assertEquals(Uri.valueOf(refURL), uri2); + Assert.assertEquals(refURL, uri2.toURL()); + Assert.assertTrue(refURL.sameFile(uri2.toURL())); + } + + public static void main(final String args[]) throws IOException { + final String tstname = TestUri02Composing.class.getName(); + org.junit.runner.JUnitCore.main(tstname); + } +} diff --git a/src/junit/com/jogamp/common/net/TestUri03Resolving.java b/src/junit/com/jogamp/common/net/TestUri03Resolving.java new file mode 100644 index 0000000..0d65363 --- /dev/null +++ b/src/junit/com/jogamp/common/net/TestUri03Resolving.java @@ -0,0 +1,374 @@ +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; + +import jogamp.common.os.PlatformPropsImpl; + +import org.junit.Assert; +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; +import org.junit.runners.MethodSorters; + +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +public class TestUri03Resolving extends JunitTracer { + + // Bug 908, issues w/ windows file path char: $ ^ ~ # [ ] + + public 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"}, + + new String[] {"http://localhost/gluegen/build-x86_64%20lala/gluegen-rt.jar"}, + + new String[] {"http://localhost/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar"}, + + new String[] {"jar:http://localhost/gluegen/build-x86_64/gluegen-rt.jar!/"}, + + new String[] {"jar:http://localhost/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/"}, + + new String[] {"jar:http://localhost/gluegen/build-x86_64/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"}, + + new String[] {"jar:http://localhost/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"}, + + new String[] {"jar:http://localhost/gluegen/R%23/gluegen-rt.jar!/"}, + + new String[] {"jar:http://localhost/gluegen/"+'\u0394'+"/gluegen-rt.jar!/"}, + }; + + public static final String[][] uriFileSArrayUnix = new String[][] { + new String[] {"file:/gluegen/build-x86_64/gluegen-rt.jar"}, + + new String[] {"file:/gluegen/"+'\u0394'+"/gluegen-rt.jar"}, + + new String[] {"file:/gluegen/build-x86_64%20lala/gluegen-rt.jar"}, + + new String[] {"file:/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar"}, + + new String[] {"jar:file:/gluegen/build-x86_64/gluegen-rt.jar!/"}, + + new String[] {"jar:file:/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/"}, + + new String[] {"jar:file:/gluegen/build-x86_64/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"}, + + new String[] {"jar:file:/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:/gluegen/R%23/gluegen-rt.jar!/"}, + + new String[] {"jar:file:/gluegen/"+'\u0394'+"/gluegen-rt.jar!/"}, + }; + + public static final String[][] uriFileSArrayWindows = new String[][] { + new String[] {"file:/C:/gluegen/build-x86_64/gluegen-rt.jar"}, + new String[] {"file:/C%3A/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%3A/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/"+'\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", + "/gluegen/build-x86_64/gluegen-rt.jar"}, + + new String[] {"/gluegen/"+'\u0394'+"/gluegen-rt.jar", + "file:/gluegen/"+'\u0394'+"/gluegen-rt.jar", + "/gluegen/"+'\u0394'+"/gluegen-rt.jar"}, + + new String[] {"/gluegen/build-x86_64 lala/gluegen-rt.jar", + "file:/gluegen/build-x86_64%20lala/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öä%20lala/gluegen-rt.jar", + "/gluegen/build-x86_64 öä lala/gluegen-rt.jar"}, + + new String[] {"/gluegen/A$/B^/C~/D#/E[/F]/gluegen-rt.jar", + "file:/gluegen/A%24/B%5E/C%7E/D%23/E%5B/F%5D/gluegen-rt.jar", + "/gluegen/A$/B^/C~/D#/E[/F]/gluegen-rt.jar" }, + + new String[] {"/gluegen/$/^/~/#/[/]/gluegen-rt.jar", + "file:/gluegen/%24/%5E/%7E/%23/%5B/%5D/gluegen-rt.jar", + "/gluegen/$/^/~/#/[/]/gluegen-rt.jar" }, + }; + + public static final String[][] fileSArrayWindows = new String[][] { + new String[] {"C:/gluegen/build-x86_64/gluegen-rt.jar", + "file:/C%3A/gluegen/build-x86_64/gluegen-rt.jar", + "C:\\gluegen\\build-x86_64\\gluegen-rt.jar"}, + + new String[] {"C:/gluegen/"+'\u0394'+"/gluegen-rt.jar", + "file:/C%3A/gluegen/"+'\u0394'+"/gluegen-rt.jar", + "C:\\gluegen\\"+'\u0394'+"\\gluegen-rt.jar"}, + + new String[] {"C:/gluegen/build-x86_64 lala/gluegen-rt.jar", + "file:/C%3A/gluegen/build-x86_64%20lala/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%3A/gluegen/build-x86_64%20öä%20lala/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%3A/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar", + "C:\\gluegen\\build-x86_64 öä lala\\gluegen-rt.jar"}, + + new String[] {"\\\\filehost\\gluegen\\build-x86_64 öä lala\\gluegen-rt.jar", + "file:////filehost/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar", + "\\\\filehost\\gluegen\\build-x86_64 öä lala\\gluegen-rt.jar"}, + + new String[] {"C:/gluegen/A$/B^/C~/D#/E[/F]/gluegen-rt.jar", + "file:/C%3A/gluegen/A%24/B%5E/C%7E/D%23/E%5B/F%5D/gluegen-rt.jar", + "C:\\gluegen\\A$\\B^\\C~\\D#\\E[\\F]\\gluegen-rt.jar" }, + + new String[] {"C:/gluegen/$/^/~/#/[/]/gluegen-rt.jar", + "file:/C%3A/gluegen/%24/%5E/%7E/%23/%5B/%5D/gluegen-rt.jar", + "C:\\gluegen\\$\\^\\~\\#\\[\\]\\gluegen-rt.jar" }, + }; + + @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 = 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 = Uri.valueOf(file).toURI(); + 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); + { + 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 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; + } + Assert.assertTrue("One or more errors occured see stderr above", ok); + } + + @Test + public void test01HttpURI2URL() throws IOException, URISyntaxException { + testURI2URL(getSimpleTestName("."), uriHttpSArray); + } + + @Test + public void test02FileUnixURI2URL() throws IOException, URISyntaxException { + testURI2URL(getSimpleTestName("."), uriFileSArrayUnix); + } + + @Test + public void test03FileWindowsURI2URL() throws IOException, URISyntaxException { + testURI2URL(getSimpleTestName("."), uriFileSArrayWindows); + } + + @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(final String testname, final String[][] uriSArray) throws IOException, URISyntaxException { + boolean ok = true; + for(int i=0; iodd pathname. + *

+ * The currently used jar folder is copied into [1] + *

+ *    [1] build/test/build/TestNetIOURIReservedCharsBug908/test01TempJarCacheOddPath/A\$-B\^-C~-D#-E\]-F\[-öä
+ *    [2] build/test/build/TestNetIOURIReservedCharsBug908/test01TempJarCacheOddPath/A\$-B\^-C~-D#-E\]-F\[-öä/gluegen-rt.jar
+ * 
+ * A ClassLoader w/ the URL [2] is used to issue Platform.initSingleton(), + * i.e. issues a whole initialization sequence w/ native jar loading in the new ClassPath. + *

+ *

+ * The manual test below on the created odd folder [1] has also succeeded: + *

+ * java \
+ *     -Djogamp.debug.IOUtil -Djogamp.debug.JNILibLoader -Djogamp.debug.TempFileCache \
+ *     -Djogamp.debug.JarUtil -Djogamp.debug.TempJarCache \
+ *     -cp ../build-x86_64/test/build/TestNetIOURIReservedCharsBug908/test01TempJarCacheOddPath/A\$-B\^-C~-D#-E\]-F\[-öä/gluegen-rt.jar \
+ *     com.jogamp.common.GlueGenVersion
+ * 
+ *

+ */ +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +public class TestUri99LaunchOnReservedCharPathBug908 extends JunitTracer { + static class TestClassLoader extends URLClassLoader { + public TestClassLoader(final URL[] urls) { + super(urls); + } + public TestClassLoader(final URL[] urls, final ClassLoader parent) { + super(urls, parent); + } + } + + + @Test + public void test00TempJarCacheSimplePath() throws IOException, IllegalArgumentException, URISyntaxException { + testTempJarCacheOddJarPathImpl("simpletons/", "simpletons/"); + } + + @Test + public void test01TempJarCacheOddPath() throws IOException, IllegalArgumentException, URISyntaxException { + // Bug 908, issues w/ windows file path char: $ ^ ~ # [ ] + 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/"); + /** + * [1] '#' + java.lang.IllegalArgumentException: URI has a fragment component + at java.io.File.(Unknown Source) + at com.jogamp.common.net.TestNetIOURIReservedCharsBug908.testTempJarCacheOddJarPathImpl(TestNetIOURIReservedCharsBug908.java:101) + [2] '[' ']' + java.net.URISyntaxException: Illegal character in path at index 137: file:/usr/local/projects/JOGL/gluegen/build-x86_64/test/build/TestNetIOURIReservedCharsBug908/test01TempJarCacheOddPath/A$-B%5E-C~-D%23-E]-F[-%C3%B6%C3%A4/ + at java.net.URI$Parser.fail(Unknown Source) + at java.net.URI$Parser.checkChars(Unknown Source) + at java.net.URI$Parser.parseHierarchical(Unknown Source) + at java.net.URI$Parser.parse(Unknown Source) + at java.net.URI.(Unknown Source) + at com.jogamp.common.net.TestNetIOURIReservedCharsBug908.testTempJarCacheOddJarPathImpl(TestNetIOURIReservedCharsBug908.java:106) + + */ + + } + private void testTempJarCacheOddJarPathImpl(final String subPathUTF, final String subPathEncoded) throws IOException, IllegalArgumentException, URISyntaxException { + if(AndroidVersion.isAvailable) { System.err.println("n/a on Android"); return; } + + final String reservedCharPathUnencoded = "test/build/"+getClass().getSimpleName()+"/"+getTestMethodName()+"/"+subPathUTF; + final String reservedCharPathEncoded = "test/build/"+getClass().getSimpleName()+"/"+getTestMethodName()+"/"+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()); + System.err.println("1 jarFileURI: "+jarFileURI.toString()); + // gluegen-rt.jar + final String jarBasename = JarUtil.getJarBasename(jarFileURI); + System.err.println("2 jarBasename: "+jarBasename); + + // file:/dir1/build/gluegen-rt.jar + final URI fileURI = JarUtil.getJarSubURI(jarFileURI); + System.err.println("3 fileURI: "+fileURI.toString()); + // file:/dir1/build/ + final URI fileFolderURI = new URI(IOUtil.getParentOf(fileURI.toString())); + 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); + System.err.println("5 fileNewFolderURI: "+fileNewFolderURI.toString()); + + final File srcFolder = new File(fileFolderURI); + final File dstFolder = new File(fileNewFolderURI); + System.err.println("6 srcFolder: "+srcFolder.toString()); + System.err.println("7 dstFolder: "+dstFolder.toString()); + try { + final MiscUtils.CopyStats copyStats = MiscUtils.copy(srcFolder, dstFolder, 1, true); + copyStats.dump("Copy ", true); + Assert.assertEquals(1, copyStats.totalFolders); + Assert.assertTrue(copyStats.totalBytes > 0); + Assert.assertEquals(0, copyStats.currentDepth); + + final URI jarFileNewFolderURI = new URI(fileNewFolderURI.toString()+jarBasename); + System.err.println("8 jarFileNewFolderURI: "+jarFileNewFolderURI.toString()); + + final URL[] urls = new URL[] { jarFileNewFolderURI.toURL() }; + System.err.println("url: "+urls[0]); + + final ClassLoader cl = new TestClassLoader(urls, null); + ReflectionUtil.callStaticMethod(Platform.class.getName(), "initSingleton", null, null, cl); + } finally { + // cleanup ? Skip this for now .. + // dstFolder.delete(); + } + } + + public static void main(final String args[]) throws IOException { + final String tstname = TestUri99LaunchOnReservedCharPathBug908.class.getName(); + org.junit.runner.JUnitCore.main(tstname); + } + +} diff --git a/src/junit/com/jogamp/common/net/URIDumpUtil.java b/src/junit/com/jogamp/common/net/URIDumpUtil.java index 1a74742..a7d050a 100644 --- a/src/junit/com/jogamp/common/net/URIDumpUtil.java +++ b/src/junit/com/jogamp/common/net/URIDumpUtil.java @@ -42,4 +42,57 @@ public class URIDumpUtil { System.err.println("2.3.0 query: "+uri.getRawQuery()+" (raw), "+uri.getQuery()+" (dec)"); System.err.println("3.0.0 fragment: "+uri.getRawFragment()+" (raw), "+uri.getFragment()+" (dec)"); } + + public static void showUri(final Uri uri) throws URISyntaxException { + showUri("ZZZZZZ Uri "+uri+", isOpaque "+uri.opaque+", isAbs "+uri.absolute+", hasAuth "+uri.hasAuthority, uri); + } + + public static void showUri(final String message, final Uri uri) throws URISyntaxException { + System.err.println(message); + + 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 contained: "+uri.getContainedUri()); + + System.err.println("1.0.0 scheme: "+uri.scheme); + System.err.println("2.0.0 scheme-part: "+uri.schemeSpecificPart+" (raw), "+Uri.decode(uri.schemeSpecificPart)+" (dec)"); + System.err.println("2.1.0 auth: "+uri.authority+" (raw), "+Uri.decode(uri.authority)+" (dec)"); + System.err.println("2.1.1 user-info: "+uri.userInfo+" (raw), "+Uri.decode(uri.userInfo)+" (dec)"); + System.err.println("2.1.1 host: "+uri.host); + System.err.println("2.1.1 port: "+uri.port); + System.err.println("2.2.0 path: "+uri.path+" (raw), "+Uri.decode(uri.path)+" (dec)"); + System.err.println("2.3.0 query: "+uri.query+" (raw), "+Uri.decode(uri.query)+" (dec)"); + System.err.println("3.0.0 fragment: "+uri.fragment+" (raw), "+Uri.decode(uri.fragment)+" (dec)"); + } + + /** + * Just showing different encoding of Uri -> URI + * + * @param uri + * @throws URISyntaxException + */ + public static void showReencodedURIOfUri(final Uri uri) throws URISyntaxException { + final URI recomposedURI = uri.toURI(true); + showURI("YYYYYY Recomposed URI "+recomposedURI+", isOpaque "+recomposedURI.isOpaque()+", isAbs "+recomposedURI.isAbsolute(), recomposedURI); + final String recomposedURIStr = recomposedURI.toString(); + final boolean equalsRecompURI = uri.input.equals(recomposedURIStr); + System.err.println("source Uri: "+uri.input); + System.err.println("recomp URI: "+recomposedURIStr+" - "+(equalsRecompURI?"EQUAL":"UNEQUAL")); + } + + /** + * Just showing different encoding of URI -> Uri + * + * @param uri + * @throws URISyntaxException + */ + public static void showReencodedUriOfURI(final URI uri) throws URISyntaxException { + final Uri recomposedUri = Uri.valueOf(uri, true); + 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); + System.err.println("source URI: "+uri.toString()); + System.err.println("recomp Uri: "+recomposedUriStr+" - "+(equalsRecompUri?"EQUAL":"UNEQUAL")); + } } diff --git a/src/junit/com/jogamp/common/util/TestIOUtilURICompose.java b/src/junit/com/jogamp/common/util/TestIOUtilURICompose.java deleted file mode 100644 index 3369afd..0000000 --- a/src/junit/com/jogamp/common/util/TestIOUtilURICompose.java +++ /dev/null @@ -1,92 +0,0 @@ -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 org.junit.Assert; -import org.junit.Test; - -import com.jogamp.common.util.IOUtil; -import com.jogamp.junit.util.JunitTracer; - -import org.junit.FixMethodOrder; -import org.junit.runners.MethodSorters; - -@FixMethodOrder(MethodSorters.NAME_ASCENDING) -public class TestIOUtilURICompose extends JunitTracer { - - @Test - public void test01URLCompositioning() throws IOException, URISyntaxException { - testURNCompositioning("file:///rootDir/file1.txt"); - testURNCompositioning("file://host/rootDir/file1.txt"); - testURNCompositioning("jar:file:/web1/file1.jar!/rootDir/file1.txt"); - testURNCompositioning("asset:gluegen-test/info.txt"); - testURNCompositioning("asset:/gluegen-test/info.txt"); - testURNCompositioning("http://domain.com/web1/index.html?lala=23&lili=24#anchor"); - testURNCompositioning("http://domain.com:1234/web1/index.html?lala=23&lili=24#anchor"); - - final URI file1URI = new URI("asset:jar:file:/web1/file1.jar!/rootDir/file1.txt"); - testURICompositioning(file1URI); - testURICompositioning(file1URI, new URI("asset:jar:file:/web1/file1.jar!/rootDir/./file1.txt")); - testURICompositioning(file1URI, new URI("asset:jar:file:/web1/file1.jar!/rootDir/dummyParent/../file1.txt")); - - final URL file1URL = new URL("asset:jar:file:/web1/file1.jar!/rootDir/file1.txt"); - testURLCompositioning(file1URL); - testURLCompositioning(file1URL, new URL("asset:jar:file:/web1/file1.jar!/rootDir/./file1.txt")); - testURLCompositioning(file1URL, new URL("asset:jar:file:/web1/file1.jar!/rootDir/dummyParent/../file1.txt")); - } - - static void testURNCompositioning(final String urn) throws MalformedURLException, URISyntaxException { - testURICompositioning( new URI(urn) ); - testURLCompositioning( new URL(urn) ); - } - - static void testURICompositioning(final URI uri) throws MalformedURLException, URISyntaxException { - testURICompositioning(uri, uri); - } - static void testURICompositioning(final URI refURI, final URI uri1) throws MalformedURLException, URISyntaxException { - final String scheme = uri1.getScheme(); - final String ssp = uri1.getRawSchemeSpecificPart(); - final String fragment = uri1.getRawFragment(); - - System.err.println("scheme <"+scheme+">, ssp <"+ssp+">, fragment <"+fragment+">"); - final URI uri2 = IOUtil.compose(scheme, ssp, null, fragment); - - System.err.println("URL-equals: "+refURI.equals(uri2)); - System.err.println("URL-ref : <"+refURI+">"); - System.err.println("URL-orig : <"+uri1+">"); - System.err.println("URL-comp : <"+uri2+">"); - Assert.assertEquals(refURI, uri2); - } - - static void testURLCompositioning(final URL url) throws MalformedURLException, URISyntaxException { - testURLCompositioning(url, url); - } - static void testURLCompositioning(final URL refURL, final URL url1) throws MalformedURLException, URISyntaxException { - final URI uri1 = url1.toURI(); - final String scheme = uri1.getScheme(); - final String ssp = uri1.getRawSchemeSpecificPart(); - final String fragment = uri1.getRawFragment(); - - System.err.println("scheme <"+scheme+">, ssp <"+ssp+">, fragment <"+fragment+">"); - final URI uri2 = IOUtil.compose(scheme, ssp, null, fragment); - - System.err.println("URL-equals(1): "+refURL.toURI().equals(uri2)); - System.err.println("URL-equals(2): "+refURL.equals(uri2.toURL())); - System.err.println("URL-same : "+refURL.sameFile(uri2.toURL())); - System.err.println("URL-ref : <"+refURL+">"); - System.err.println("URL-orig : <"+url1+">"); - System.err.println("URL-comp : <"+uri2+">"); - Assert.assertEquals(refURL.toURI(), uri2); - Assert.assertEquals(refURL, uri2.toURL()); - Assert.assertTrue(refURL.sameFile(uri2.toURL())); - } - - public static void main(final String args[]) throws IOException { - final String tstname = TestIOUtilURICompose.class.getName(); - org.junit.runner.JUnitCore.main(tstname); - } -} diff --git a/src/junit/com/jogamp/common/util/TestIOUtilURIHandling.java b/src/junit/com/jogamp/common/util/TestIOUtilURIHandling.java deleted file mode 100644 index 66dbacf..0000000 --- a/src/junit/com/jogamp/common/util/TestIOUtilURIHandling.java +++ /dev/null @@ -1,393 +0,0 @@ -package com.jogamp.common.util; - -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; -import org.junit.runners.MethodSorters; - -@FixMethodOrder(MethodSorters.NAME_ASCENDING) -public class TestIOUtilURIHandling extends JunitTracer { - - // Bug 908, issues w/ windows file path char: $ ^ ~ # [ ] - - public 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"}, - - new String[] {"http://localhost/gluegen/build-x86_64%20lala/gluegen-rt.jar"}, - - new String[] {"http://localhost/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar"}, - - new String[] {"jar:http://localhost/gluegen/build-x86_64/gluegen-rt.jar!/"}, - - new String[] {"jar:http://localhost/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/"}, - - new String[] {"jar:http://localhost/gluegen/build-x86_64/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"}, - - new String[] {"jar:http://localhost/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"}, - - new String[] {"jar:http://localhost/gluegen/R%23/gluegen-rt.jar!/"}, - - new String[] {"jar:http://localhost/gluegen/"+'\u0394'+"/gluegen-rt.jar!/"}, - }; - - public static final String[][] uriFileSArrayUnix = new String[][] { - new String[] {"file:/gluegen/build-x86_64/gluegen-rt.jar"}, - - new String[] {"file:/gluegen/"+'\u0394'+"/gluegen-rt.jar"}, - - new String[] {"file:/gluegen/build-x86_64%20lala/gluegen-rt.jar"}, - - new String[] {"file:/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar"}, - - new String[] {"jar:file:/gluegen/build-x86_64/gluegen-rt.jar!/"}, - - new String[] {"jar:file:/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/"}, - - new String[] {"jar:file:/gluegen/build-x86_64/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"}, - - new String[] {"jar:file:/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:/gluegen/R%23/gluegen-rt.jar!/"}, - - new String[] {"jar:file:/gluegen/"+'\u0394'+"/gluegen-rt.jar!/"}, - }; - - public static final String[][] uriFileSArrayWindows = new String[][] { - new String[] {"file:/C:/gluegen/build-x86_64/gluegen-rt.jar"}, - new String[] {"file:/C%3A/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%3A/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/"+'\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", - "/gluegen/build-x86_64/gluegen-rt.jar"}, - - new String[] {"/gluegen/"+'\u0394'+"/gluegen-rt.jar", - "file:/gluegen/"+'\u0394'+"/gluegen-rt.jar", - "/gluegen/"+'\u0394'+"/gluegen-rt.jar"}, - - new String[] {"/gluegen/build-x86_64 lala/gluegen-rt.jar", - "file:/gluegen/build-x86_64%20lala/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öä%20lala/gluegen-rt.jar", - "/gluegen/build-x86_64 öä lala/gluegen-rt.jar"}, - - new String[] {"/gluegen/A$/B^/C~/D#/E[/F]/gluegen-rt.jar", - // "file:/gluegen/A%24/B%5E/C%7E/D%23/E%5B/F%5D/gluegen-rt.jar", // goal w/ new Uri class - "file:/gluegen/A$/B%5E/C~/D%23/E%5B/F%5D/gluegen-rt.jar", // current Java URI/URL decoding - "/gluegen/A$/B^/C~/D#/E[/F]/gluegen-rt.jar" }, // goal w/ new Uri class - - new String[] {"/gluegen/$/^/~/#/[/]/gluegen-rt.jar", - // "file:/gluegen/%24/%5E/%7E/%23/%5B/%5D/gluegen-rt.jar", - "file:/gluegen/$/%5E/~/%23/%5B/%5D/gluegen-rt.jar", // current Java URI/URL decoding - "/gluegen/$/^/~/#/[/]/gluegen-rt.jar" }, - }; - - public static final String[][] fileSArrayWindows = new String[][] { - new String[] {"C:/gluegen/build-x86_64/gluegen-rt.jar", - // "file:/C%3A/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/"+'\u0394'+"/gluegen-rt.jar", - // "file:/C%3A/gluegen/"+'\u0394'+"/gluegen-rt.jar", - "file:/C:/gluegen/"+'\u0394'+"/gluegen-rt.jar", - "C:\\gluegen\\"+'\u0394'+"\\gluegen-rt.jar"}, - - new String[] {"C:/gluegen/build-x86_64 lala/gluegen-rt.jar", - // "file:/C%3A/gluegen/build-x86_64%20lala/gluegen-rt.jar", - "file:/C:/gluegen/build-x86_64%20lala/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%3A/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar", - "file:/C:/gluegen/build-x86_64%20öä%20lala/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%3A/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar", - "file:/C:/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar", - "C:\\gluegen\\build-x86_64 öä lala\\gluegen-rt.jar"}, - - new String[] {"\\\\filehost\\gluegen\\build-x86_64 öä lala\\gluegen-rt.jar", - "file:////filehost/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar", - "\\\\filehost\\gluegen\\build-x86_64 öä lala\\gluegen-rt.jar"}, - - new String[] {"C:/gluegen/A$/B^/C~/D#/E[/F]/gluegen-rt.jar", - // "file:/C%3A/gluegen/A%24/B%5E/C%7E/D%23/E%5B/F%5D/gluegen-rt.jar", - "file:/C:/gluegen/A$/B%5E/C~/D%23/E%5B/F%5D/gluegen-rt.jar", - "C:\\gluegen\\A$\\B^\\C~\\D#\\E[\\F]\\gluegen-rt.jar" }, - - new String[] {"C:/gluegen/$/^/~/#/[/]/gluegen-rt.jar", - // "file:/C%3A/gluegen/%24/%5E/%7E/%23/%5B/%5D/gluegen-rt.jar", - "file:/C:/gluegen/$/%5E/~/%23/%5B/%5D/gluegen-rt.jar", // current Java URI/URL decoding - "C:\\gluegen\\$\\^\\~\\#\\[\\]\\gluegen-rt.jar" }, - }; - - @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 = 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). - @SuppressWarnings("deprecation") - 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?"ERROR EQUAL":"OK NOT_EQUAL")); - System.err.println("uri2.path : "+uri1.getPath()+" - "+(equalPath?"ERROR EQUAL":"OK NOT_EQUAL")); - System.err.println("uri2.ascii : "+uri1.toASCIIString()+" - "+(equalASCII?"ERROR EQUAL":"OK NOT_EQUAL")); - ok = !equalString && !equalPath && !equalASCII && ok; - } - 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; - } - Assert.assertTrue("One or more errors occured see stderr above", ok); - } - - @Test - public void test01HttpURI2URL() throws IOException, URISyntaxException { - testURI2URL(getSimpleTestName("."), uriHttpSArray); - } - - @Test - public void test02FileUnixURI2URL() throws IOException, URISyntaxException { - testURI2URL(getSimpleTestName("."), uriFileSArrayUnix); - } - - @Test - public void test03FileWindowsURI2URL() throws IOException, URISyntaxException { - testURI2URL(getSimpleTestName("."), uriFileSArrayWindows); - } - - @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(final String testname, final String[][] uriSArray) throws IOException, URISyntaxException { - boolean ok = true; - for(int i=0; i