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