aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2013-10-18 22:09:43 +0200
committerSven Gothel <[email protected]>2013-10-18 22:09:43 +0200
commitc9093e491d4b78b12973ec1614bf3146fce26a83 (patch)
treeaf084b8ab527a574a35ca390ac9d089595382d43
parenta2a71139e6d8dc1527cd45df5c710b1ad1f2f611 (diff)
Fix Bug 857: GlueGen produces erroneous file URI on Windows, which breaks Netbeans's JarURLStreamHandler
- 'URL IOUtil.toURL(URI)' - Needs to encode the file-path portion on Windows(*) if exists. The file-path here shall only be encoded as follows: - backslash -> slash - ensure starting with slash (*) We perform above action for all OS, if 'false == File.separator.equals("/")' - Added high verbosity in DEBUG mode to easy debugging for future cases .. - Cleanup URI/URL unit tests, i.e. split URLCompositionTest into: - TestIOUtilURICompose - TestIOUtilURIHandling (Now covers Bug 857 as well) - TestUrisWithAssetHandler - TestURIQueryProps Tested all unit tests manually on GNU/Linux and Windows w/ JRE 7u45
-rwxr-xr-xmake/scripts/java-win64.bat5
-rwxr-xr-xmake/scripts/runtest-x64.bat8
-rwxr-xr-xmake/scripts/runtest.sh9
-rw-r--r--src/java/com/jogamp/common/util/IOUtil.java130
-rw-r--r--src/java/com/jogamp/common/util/JarUtil.java5
-rw-r--r--src/junit/com/jogamp/common/net/TestURIQueryProps.java50
-rw-r--r--src/junit/com/jogamp/common/net/TestUrisWithAssetHandler.java50
-rw-r--r--src/junit/com/jogamp/common/net/URIDumpUtil.java49
-rw-r--r--src/junit/com/jogamp/common/net/URLCompositionTest.java241
-rw-r--r--src/junit/com/jogamp/common/util/TestIOUtilURICompose.java92
-rw-r--r--src/junit/com/jogamp/common/util/TestIOUtilURIHandling.java150
11 files changed, 523 insertions, 266 deletions
diff --git a/make/scripts/java-win64.bat b/make/scripts/java-win64.bat
index a5b673f..c8e6be8 100755
--- a/make/scripts/java-win64.bat
+++ b/make/scripts/java-win64.bat
@@ -13,5 +13,8 @@ set CP_ALL=.;%BLD_DIR%\gluegen-rt.jar;%BLD_DIR%\test\build\gluegen-test.jar;lib\
echo CP_ALL %CP_ALL%
-%J2RE_HOME%\bin\java -classpath %CP_ALL% "-Djava.library.path=%LIB_DIR%" "-Dsun.java2d.noddraw=true" "-Dsun.awt.noerasebackground=true" %1 %2 %3 %4 %5 %6 %7 %8 %9 > java-win64.log 2>&1
+set D_ARGS="-Djogamp.debug.IOUtil"
+REM set D_ARGS="-Djogamp.debug=all"
+
+%J2RE_HOME%\bin\java -classpath %CP_ALL% %D_ARGS% "-Djava.library.path=%LIB_DIR%" "-Dsun.java2d.noddraw=true" "-Dsun.awt.noerasebackground=true" %1 %2 %3 %4 %5 %6 %7 %8 %9 > java-win64.log 2>&1
diff --git a/make/scripts/runtest-x64.bat b/make/scripts/runtest-x64.bat
index 2e7f1d0..91cba6a 100755
--- a/make/scripts/runtest-x64.bat
+++ b/make/scripts/runtest-x64.bat
@@ -1,5 +1,11 @@
REM scripts\java-win64.bat com.jogamp.common.GlueGenVersion
REM scripts\java-win64.bat com.jogamp.common.util.TestVersionInfo
REM scripts\java-win64.bat com.jogamp.gluegen.test.junit.generation.Test1p1JavaEmitter
-scripts\java-win64.bat com.jogamp.common.os.TestElfReader01
+REM scripts\java-win64.bat com.jogamp.common.os.TestElfReader01
+
+REM scripts\java-win64.bat com.jogamp.common.util.TestIOUtil01 2>&1 | tee -a $LOG
+REM scripts\java-win64.bat com.jogamp.common.util.TestIOUtilURICompose 2>&1 | tee -a $LOG
+scripts\java-win64.bat com.jogamp.common.util.TestIOUtilURIHandling 2>&1 | tee -a $LOG
+REM scripts\java-win64.bat com.jogamp.common.net.TestUrisWithAssetHandler 2>&1 | tee -a $LOG
+REM scripts\java-win64.bat com.jogamp.common.net.TestURIQueryProps 2>&1 | tee -a $LOG
diff --git a/make/scripts/runtest.sh b/make/scripts/runtest.sh
index 2681b84..028eae2 100755
--- a/make/scripts/runtest.sh
+++ b/make/scripts/runtest.sh
@@ -52,7 +52,7 @@ rm -f $LOG
#D_ARGS="-Djogamp.debug.Lock"
#D_ARGS="-Djogamp.debug.Lock -Djogamp.debug.Lock.TraceLock"
#D_ARGS="-Djogamp.debug.Lock.TraceLock"
-#D_ARGS="-Djogamp.debug.IOUtil"
+D_ARGS="-Djogamp.debug.IOUtil"
#D_ARGS="-Djogamp.debug=all"
function onetest() {
@@ -75,7 +75,7 @@ function onetest() {
echo
}
#
-onetest com.jogamp.common.GlueGenVersion 2>&1 | tee -a $LOG
+#onetest com.jogamp.common.GlueGenVersion 2>&1 | tee -a $LOG
#onetest com.jogamp.common.util.TestSystemPropsAndEnvs 2>&1 | tee -a $LOG
#onetest com.jogamp.common.util.TestVersionInfo 2>&1 | tee -a $LOG
#onetest com.jogamp.common.util.TestVersionNumber 2>&1 | tee -a $LOG
@@ -94,14 +94,17 @@ onetest com.jogamp.common.GlueGenVersion 2>&1 | tee -a $LOG
#onetest com.jogamp.common.util.TestPlatform01 2>&1 | tee -a $LOG
#onetest com.jogamp.common.util.TestRunnableTask01 2>&1 | tee -a $LOG
#onetest com.jogamp.common.util.TestIOUtil01 2>&1 | tee -a $LOG
+#onetest com.jogamp.common.util.TestIOUtilURICompose 2>&1 | tee -a $LOG
+onetest com.jogamp.common.util.TestIOUtilURIHandling 2>&1 | tee -a $LOG
#onetest com.jogamp.common.util.TestTempJarCache 2>&1 | tee -a $LOG
#onetest com.jogamp.common.util.TestJarUtil 2>&1 | tee -a $LOG
#onetest com.jogamp.common.util.TestValueConversion 2>&1 | tee -a $LOG
#onetest com.jogamp.common.util.TestSyncRingBuffer01 $*
#onetest com.jogamp.common.util.TestLFRingBuffer01 $*
+#onetest com.jogamp.common.net.TestUrisWithAssetHandler 2>&1 | tee -a $LOG
+#onetest com.jogamp.common.net.TestURIQueryProps 2>&1 | tee -a $LOG
#onetest com.jogamp.common.net.AssetURLConnectionUnregisteredTest 2>&1 | tee -a $LOG
#onetest com.jogamp.common.net.AssetURLConnectionRegisteredTest 2>&1 | tee -a $LOG
-#onetest com.jogamp.common.net.URLCompositionTest 2>&1 | tee -a $LOG
#onetest com.jogamp.junit.sec.TestSecIOUtil01 2>&1 | tee -a $LOG
#onetest com.jogamp.common.nio.TestBuffersFloatDoubleConversion 2>&1 | tee -a $LOG
#onetest com.jogamp.common.nio.TestPointerBufferEndian 2>&1 | tee -a $LOG
diff --git a/src/java/com/jogamp/common/util/IOUtil.java b/src/java/com/jogamp/common/util/IOUtil.java
index 16f191b..ef6a633 100644
--- a/src/java/com/jogamp/common/util/IOUtil.java
+++ b/src/java/com/jogamp/common/util/IOUtil.java
@@ -497,57 +497,119 @@ public class IOUtil {
* for <i>file scheme</i>, i.e. <code>file:/</code>.
* Otherwise the default {@link URL} translation {@link URI#toURL()} is being used.
* <p>
- * The folloing cases are considered:
+ * The following cases are considered:
* <ul>
* <li><i>file schema</i> is converted via <code>new File(uri).getPath()</code>.</li>
* <li><i>jar scheme</i>
* <ul>
- * <li>subprotocol is being converted as above, if <i>file scheme</i>.</li>
+ * <li>sub-protocol is being converted as above, if <i>file scheme</i>.</li>
* <li>JAR entry is not converted but preserved.</li>
* </ul></li>
* </ul>
* </p>
+ * <p>
+ * Tested w/ unit test <code>com.jogamp.common.util.TestIOUtilURIHandling</code>
+ * </p>
* @param uri
* @return
* @throws IOException
* @throws IllegalArgumentException
* @throws URISyntaxException
*/
- public static URL toURL(URI uri) throws IOException, IllegalArgumentException, URISyntaxException {
+ public static URL toURL(final URI uri) throws IOException, IllegalArgumentException, URISyntaxException {
URL url = null;
final String uriSchema = uri.getScheme();
- final boolean isJAR = IOUtil.JAR_SCHEME.equals(uriSchema);
- final URI specificURI = isJAR ? JarUtil.getJarSubURI(uri) : uri;
+ final boolean isJar = IOUtil.JAR_SCHEME.equals(uriSchema);
+ final URI specificURI = isJar ? JarUtil.getJarSubURI(uri) : uri;
+ final boolean hasJarSubURI = specificURI != uri;
+ if( DEBUG ) {
+ System.out.println("IOUtil.toURL.0: isJAR "+isJar+", hasSubURI "+hasJarSubURI+Platform.getNewline()+
+ "\t, uri "+uri+Platform.getNewline()+
+ "\t -> "+specificURI.toString());
+ }
int mode = 0;
if( IOUtil.FILE_SCHEME.equals( specificURI.getScheme() ) ) {
File f;
try {
f = new File(specificURI);
- } catch( IllegalArgumentException iae) {
+ } catch(Exception iae) {
if( DEBUG ) {
- System.out.println("toURL: "+uri+" -> File("+specificURI+") failed: "+iae.getMessage());
+ System.out.println("Catched "+iae.getClass().getSimpleName()+": new File("+specificURI+") failed: "+iae.getMessage());
+ iae.printStackTrace();
}
f = null;
}
if( null != f ) {
- if( specificURI == uri ) {
- url = new URL(IOUtil.FILE_SCHEME+IOUtil.SCHEME_SEPARATOR+f.getPath());
- // url = f.toURI().toURL(); // Doesn't work, since it uses encoded path!
- mode = 1;
- } else {
- final String post = isJAR ? IOUtil.JAR_SCHEME_SEPARATOR + JarUtil.getJarEntry(uri) : "";
- final String urlS = uriSchema+IOUtil.SCHEME_SEPARATOR+IOUtil.FILE_SCHEME+IOUtil.SCHEME_SEPARATOR+f.getPath()+post;
- url = new URL(urlS);
- mode = 2;
+ String urlS = null;
+ try {
+ final String fPath = f.getPath();
+ final String fPathUriS = encodeFilePathToURI(fPath);
+ /**
+ * Below 'url = f.toURI().toURL()' Doesn't work, since it uses encoded path,
+ * but we need the decoded path due to subsequent file access.
+ * URI: jar:file:/C:/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar!/
+ * File: file:/C:/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar
+ * URI: fUri file:/C:/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar
+ * URL: fUrl file:/C:/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar
+ *
+ * Goal: file:/C:/gluegen/build-x86_64 öä lala/gluegen-rt.jar!/
+ */
+ if(DEBUG) {
+ try {
+ final URI fUri = f.toURI();
+ final URL fUrl = fUri.toURL();
+ System.out.println("IOUtil.toURL.1b: fUri "+fUri+Platform.getNewline()+
+ "\t, fUrl "+fUrl);
+ } catch (Exception ee) {
+ System.out.println("Catched "+ee.getClass().getSimpleName()+": f.toURI().toURL() failed: "+ee.getMessage());
+ ee.printStackTrace();
+ }
+ }
+ if( !hasJarSubURI ) {
+ urlS = IOUtil.FILE_SCHEME+IOUtil.SCHEME_SEPARATOR+fPathUriS;
+ if( DEBUG ) {
+ System.out.println("IOUtil.toURL.1: fPath "+fPath+Platform.getNewline()+
+ "\t -> "+fPathUriS+Platform.getNewline()+
+ "\t -> "+urlS);
+ }
+ url = new URL(urlS);
+ mode = 1;
+ } else {
+ final String jarEntry = JarUtil.getJarEntry(uri);
+ final String post = isJar ? IOUtil.JAR_SCHEME_SEPARATOR + jarEntry : "";
+ urlS = uriSchema+IOUtil.SCHEME_SEPARATOR+IOUtil.FILE_SCHEME+IOUtil.SCHEME_SEPARATOR+fPathUriS+post;
+ if( DEBUG ) {
+ System.out.println("IOUtil.toURL.2: fPath "+fPath+Platform.getNewline()+
+ "\t -> "+fPathUriS+Platform.getNewline()+
+ "\t, jarEntry "+jarEntry+Platform.getNewline()+
+ "\t, post "+post+Platform.getNewline()+
+ "\t -> "+urlS);
+ }
+ url = new URL(urlS);
+ mode = 2;
+ }
+ } catch (Exception mue) {
+ if( DEBUG ) {
+ System.out.println("Catched "+mue.getClass().getSimpleName()+": new URL("+urlS+") failed: "+mue.getMessage());
+ mue.printStackTrace();
+ }
}
}
}
if( null == url ) {
- url = uri.toURL();
- mode = 3;
+ try {
+ url = uri.toURL();
+ mode = 3;
+ } catch (Exception e) {
+ if( DEBUG ) {
+ System.out.println("Catched "+e.getClass().getSimpleName()+": "+uri+".toURL() failed: "+e.getMessage());
+ e.printStackTrace();
+ }
+ }
}
if( DEBUG ) {
- System.err.println("IOUtil.toURL: "+uri+", isJar "+isJAR+": "+specificURI+" -> mode "+mode+", "+url);
+ System.err.println("IOUtil.toURL.X: mode "+mode+", "+uri+Platform.getNewline()+
+ "\t -> "+url);
}
return url;
}
@@ -800,6 +862,36 @@ public class IOUtil {
return patternSpaceEnc.matcher(s).replaceAll(" ");
}
+ private static final Pattern patternSingleBS = Pattern.compile("\\\\{1,}");
+
+ /**
+ * Escapes file path characters not complying w/ RFC 2396 and the {@link URI#URI(String)} ctor.
+ * <p>
+ * Processes input filePath if {@link File#separatorChar} <code> != '/'</code>
+ * as follows:
+ * <ul>
+ * <li>backslash -> slash</li>
+ * <li>ensure starting with slash</li>
+ * </ul>
+ * </p>
+ * <p>
+ * Even though Oracle's JarURLStreamHandler can handle backslashes and
+ * erroneous URIs w/ e.g. Windows file 'syntax', other may not (Netbeans).<br>
+ * See Bug 857 - http://jogamp.org/bugzilla/show_bug.cgi?id=857
+ * </p>
+ */
+ public static String encodeFilePathToURI(String filePath) {
+ if( !File.separator.equals("/") ) {
+ final String r = patternSingleBS.matcher(filePath).replaceAll("/");
+ if( !r.startsWith("/") ) {
+ return "/" + r;
+ } else {
+ return r;
+ }
+ }
+ return filePath;
+ }
+
/**
* Returns the connected URLConnection, or null if not url is not available
*/
diff --git a/src/java/com/jogamp/common/util/JarUtil.java b/src/java/com/jogamp/common/util/JarUtil.java
index 1689d54..5411d66 100644
--- a/src/java/com/jogamp/common/util/JarUtil.java
+++ b/src/java/com/jogamp/common/util/JarUtil.java
@@ -449,9 +449,12 @@ public class JarUtil {
throw new IllegalArgumentException("null jarFileURI");
}
if(DEBUG) {
- System.out.println("getJarFile: "+jarFileURI.toString());
+ System.out.println("getJarFile.0: "+jarFileURI.toString());
}
final URL jarFileURL = IOUtil.toURL(jarFileURI);
+ if(DEBUG) {
+ System.out.println("getJarFile.1: "+jarFileURL.toString());
+ }
// final URL jarFileURL = jarFileURI.toURL(); // doesn't work due to encoded path even w/ file schema!
final URLConnection urlc = jarFileURL.openConnection();
if(urlc instanceof JarURLConnection) {
diff --git a/src/junit/com/jogamp/common/net/TestURIQueryProps.java b/src/junit/com/jogamp/common/net/TestURIQueryProps.java
new file mode 100644
index 0000000..09cef61
--- /dev/null
+++ b/src/junit/com/jogamp/common/net/TestURIQueryProps.java
@@ -0,0 +1,50 @@
+package com.jogamp.common.net;
+
+import static com.jogamp.common.net.URIDumpUtil.showURI;
+
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.jogamp.junit.util.JunitTracer;
+
+import org.junit.FixMethodOrder;
+import org.junit.runners.MethodSorters;
+
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class TestURIQueryProps extends JunitTracer {
+
+ @Test
+ public void test() throws IOException, URISyntaxException {
+ final String SCHEME = "camera";
+ final String HOST = "somewhere";
+ final String PATH = "0";
+ String[] args = new String[] {
+ SCHEME+"://"+HOST+"/"+PATH,
+ SCHEME+"://"+HOST+"/"+PATH+"?p1=1",
+ };
+ for(int i=0; i<args.length-1; i+=2) {
+ String uri_s0 = args[i];
+ String uri_s1 = args[i+1];
+ URI uri0 = new URI(uri_s0);
+ URI uri1 = new URI(uri_s1);
+ showURI(uri0);
+ showURI(uri1);
+ URIQueryProps data = URIQueryProps.create(uri1, ';');
+ if(null == data) {
+ System.err.println("Error: NULL: <"+uri_s1+"> -> "+uri1+" -> NULL");
+ } else {
+ URI uri1T = data.appendQuery(uri0);
+ showURI(uri1T);
+ Assert.assertEquals(uri1, uri1T);
+ }
+ }
+ }
+ public static void main(String args[]) throws IOException {
+ String tstname = TestURIQueryProps.class.getName();
+ org.junit.runner.JUnitCore.main(tstname);
+ }
+}
diff --git a/src/junit/com/jogamp/common/net/TestUrisWithAssetHandler.java b/src/junit/com/jogamp/common/net/TestUrisWithAssetHandler.java
new file mode 100644
index 0000000..6e244eb
--- /dev/null
+++ b/src/junit/com/jogamp/common/net/TestUrisWithAssetHandler.java
@@ -0,0 +1,50 @@
+package com.jogamp.common.net;
+
+import static com.jogamp.common.net.URIDumpUtil.showURX;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runners.MethodSorters;
+
+import com.jogamp.junit.util.JunitTracer;
+
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class TestUrisWithAssetHandler extends JunitTracer {
+
+ @BeforeClass
+ public static void assetRegistration() throws Exception {
+ try {
+ System.err.println("******* Asset URL Stream Handler Registration: PRE");
+ Assert.assertTrue("GenericURLStreamHandlerFactory.register() failed", AssetURLContext.registerHandler(TestUrisWithAssetHandler.class.getClassLoader()));
+ Assert.assertNotNull(AssetURLContext.getRegisteredHandler());
+ System.err.println("******* Asset URL Stream Handler Registration: POST");
+ } catch (Exception e) {
+ setTestSupported(false);
+ throw e;
+ }
+ }
+
+ @Test
+ public void showURLComponents0() throws IOException, URISyntaxException {
+ showURX("file:///rootDir/file1.txt");
+ showURX("file://host/rootDir/file1.txt");
+ showURX("jar:file:/web1/file1.jar!/rootDir/file1.txt");
+ showURX("asset:gluegen-test/info.txt");
+ showURX("asset:/gluegen-test/info.txt");
+ showURX("http://domain.com/web1/index.html?lala=23&lili=24#anchor");
+ showURX("http://domain.com:1234/web1/index.html?lala=23&lili=24#anchor");
+ showURX("asset:jar:file:/web1/file1.jar!/rootDir/file1.txt");
+ showURX("asset:jar:file:/web1/file1.jar!/rootDir/./file1.txt");
+ showURX("asset:jar:file:/web1/file1.jar!/rootDir/dummyParent/../file1.txt");
+ }
+
+ public static void main(String args[]) throws IOException {
+ String tstname = TestUrisWithAssetHandler.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
new file mode 100644
index 0000000..132a19c
--- /dev/null
+++ b/src/junit/com/jogamp/common/net/URIDumpUtil.java
@@ -0,0 +1,49 @@
+package com.jogamp.common.net;
+
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+
+public class URIDumpUtil {
+ public static void showURX(String urx) throws MalformedURLException, URISyntaxException {
+ System.err.println("XXXXXX "+urx);
+ showURL(new URL(urx));
+ showURI(new URI(urx));
+ System.err.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
+ }
+
+ public static void showURL(URL url) {
+ System.err.println("YYYYYY URL "+url);
+ System.err.println("protocol: "+url.getProtocol());
+ System.err.println("auth: "+url.getAuthority());
+ System.err.println("host: "+url.getHost());
+ System.err.println("port: "+url.getPort() + " ( " + url.getDefaultPort() + " ) " );
+ System.err.println("file: "+url.getFile() + " ( path " + url.getPath() + ", query " + url.getQuery() + " ) " );
+ System.err.println("ref: "+url.getRef());
+ }
+ public static void showURI(URI uri) {
+ System.err.println("ZZZZZZ URI "+uri);
+ // 1 [scheme:]scheme-specific-part[#fragment]
+ System.err.println("1 scheme: "+uri.getScheme());
+ System.err.println("1 scheme-part: "+uri.getRawSchemeSpecificPart());
+ System.err.println("1 fragment: "+uri.getRawFragment());
+
+ // 2 [scheme:][//authority][path][?query][#fragment]
+ System.err.println("2 scheme: "+uri.getScheme());
+ System.err.println("2 auth: "+uri.getRawAuthority());
+ System.err.println("2 path: "+uri.getRawPath());
+ System.err.println("2 query: "+uri.getRawQuery());
+ System.err.println("2 fragment: "+uri.getRawFragment());
+
+ // 3 [scheme:][//authority][path][?query][#fragment]
+ // authority: [user-info@]host[:port]
+ System.err.println("3 scheme: "+uri.getScheme());
+ System.err.println("3 user-info: "+uri.getRawUserInfo());
+ System.err.println("3 host: "+uri.getHost());
+ System.err.println("3 port: "+uri.getPort());
+ System.err.println("3 path: "+uri.getRawPath());
+ System.err.println("3 query: "+uri.getRawQuery());
+ System.err.println("3 fragment: "+uri.getRawFragment());
+ }
+}
diff --git a/src/junit/com/jogamp/common/net/URLCompositionTest.java b/src/junit/com/jogamp/common/net/URLCompositionTest.java
deleted file mode 100644
index 3083fbd..0000000
--- a/src/junit/com/jogamp/common/net/URLCompositionTest.java
+++ /dev/null
@@ -1,241 +0,0 @@
-package com.jogamp.common.net;
-
-import java.io.File;
-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.BeforeClass;
-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 URLCompositionTest extends JunitTracer {
-
- @BeforeClass
- public static void assetRegistration() throws Exception {
- try {
- System.err.println("******* Asset URL Stream Handler Registration: PRE");
- Assert.assertTrue("GenericURLStreamHandlerFactory.register() failed", AssetURLContext.registerHandler(URLCompositionTest.class.getClassLoader()));
- Assert.assertNotNull(AssetURLContext.getRegisteredHandler());
- System.err.println("******* Asset URL Stream Handler Registration: POST");
- } catch (Exception e) {
- setTestSupported(false);
- throw e;
- }
- }
-
- @Test
- public void showURLComponents0() throws IOException, URISyntaxException {
- showURX("file:///rootDir/file1.txt");
- showURX("file://host/rootDir/file1.txt");
- showURX("jar:file:/web1/file1.jar!/rootDir/file1.txt");
- showURX("asset:gluegen-test/info.txt");
- showURX("asset:/gluegen-test/info.txt");
- showURX("http://domain.com/web1/index.html?lala=23&lili=24#anchor");
- showURX("http://domain.com:1234/web1/index.html?lala=23&lili=24#anchor");
- showURX("asset:jar:file:/web1/file1.jar!/rootDir/file1.txt");
- showURX("asset:jar:file:/web1/file1.jar!/rootDir/./file1.txt");
- showURX("asset:jar:file:/web1/file1.jar!/rootDir/dummyParent/../file1.txt");
- }
-
- static void showURX(String urx) throws MalformedURLException, URISyntaxException {
- System.err.println("XXXXXX "+urx);
- showURL(new URL(urx));
- showURI(new URI(urx));
- System.err.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
- }
-
- static void showURL(URL url) {
- System.err.println("YYYYYY URL "+url);
- System.err.println("protocol: "+url.getProtocol());
- System.err.println("auth: "+url.getAuthority());
- System.err.println("host: "+url.getHost());
- System.err.println("port: "+url.getPort() + " ( " + url.getDefaultPort() + " ) " );
- System.err.println("file: "+url.getFile() + " ( path " + url.getPath() + ", query " + url.getQuery() + " ) " );
- System.err.println("ref: "+url.getRef());
- }
- static void showURI(URI uri) {
- System.err.println("ZZZZZZ URI "+uri);
- // 1 [scheme:]scheme-specific-part[#fragment]
- System.err.println("1 scheme: "+uri.getScheme());
- System.err.println("1 scheme-part: "+uri.getRawSchemeSpecificPart());
- System.err.println("1 fragment: "+uri.getRawFragment());
-
- // 2 [scheme:][//authority][path][?query][#fragment]
- System.err.println("2 scheme: "+uri.getScheme());
- System.err.println("2 auth: "+uri.getRawAuthority());
- System.err.println("2 path: "+uri.getRawPath());
- System.err.println("2 query: "+uri.getRawQuery());
- System.err.println("2 fragment: "+uri.getRawFragment());
-
- // 3 [scheme:][//authority][path][?query][#fragment]
- // authority: [user-info@]host[:port]
- System.err.println("3 scheme: "+uri.getScheme());
- System.err.println("3 user-info: "+uri.getRawUserInfo());
- System.err.println("3 host: "+uri.getHost());
- System.err.println("3 port: "+uri.getPort());
- System.err.println("3 path: "+uri.getRawPath());
- System.err.println("3 query: "+uri.getRawQuery());
- System.err.println("3 fragment: "+uri.getRawFragment());
- }
-
-
- @Test
- public void showURLComponents1() throws IOException, URISyntaxException {
- testURI2URL("jar:file:/usr/local/projects/JOGL/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class",
- "jar:file:/usr/local/projects/JOGL/gluegen/build-x86_64 öä lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class", true);
-
- testURI2URL("jar:file:/usr/local/projects/JOGL/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar!/",
- "jar:file:/usr/local/projects/JOGL/gluegen/build-x86_64 öä lala/gluegen-rt.jar!/", true);
-
- testURI2URL("file:/usr/local/projects/JOGL/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar",
- "file:/usr/local/projects/JOGL/gluegen/build-x86_64 öä lala/gluegen-rt.jar", true);
-
- testURI2URL("jar:http:/usr/local/projects/JOGL/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class",
- "jar:http:/usr/local/projects/JOGL/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class", false);
-
- testURI2URL("jar:http:/usr/local/projects/JOGL/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar!/",
- "jar:http:/usr/local/projects/JOGL/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar!/", false);
-
- testURI2URL("http:/usr/local/projects/JOGL/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar",
- "http:/usr/local/projects/JOGL/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar", false);
-
- testURI2URL("jar:ftp:/usr/local/projects/JOGL/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class",
- "jar:ftp:/usr/local/projects/JOGL/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class", false);
-
- testURI2URL("ftp:/usr/local/projects/JOGL/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar",
- "ftp:/usr/local/projects/JOGL/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar", false);
- }
-
- void testURI2URL(String source, String expected, boolean usesFile) throws IOException, URISyntaxException {
- System.err.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
- final URI uri0 = new URI(source);
- System.err.println("uri: "+uri0.toString());
-
- final URL url0 = IOUtil.toURL(uri0);
- final String actual = url0.toExternalForm();
- System.err.println("url: "+actual);
- final String expectedOS;
- if( usesFile ) {
- final int jarSepI = expected.lastIndexOf("!");
- final int replB = 0 <= jarSepI ? jarSepI : expected.length();
- final String partA = expected.substring(0, replB).replace('/', File.separatorChar);
- final String partB = expected.substring(replB);
- expectedOS = partA+partB;
- } else {
- expectedOS = expected;
- }
- System.err.println("expected: orig "+expected+", OS "+expectedOS);
- final boolean equalsA = expected.equals(actual);
- final boolean equalsB = expectedOS.equals(actual);
- Assert.assertTrue("No match, neither expected orig or OS w/ url", equalsA || equalsB);
- System.err.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
- }
-
- @Test
- public void showURLComponents2() 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(String urn) throws MalformedURLException, URISyntaxException {
- testURICompositioning( new URI(urn) );
- testURLCompositioning( new URL(urn) );
- }
-
- static void testURICompositioning(URI uri) throws MalformedURLException, URISyntaxException {
- testURICompositioning(uri, uri);
- }
- static void testURICompositioning(URI refURI, 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(URL url) throws MalformedURLException, URISyntaxException {
- testURLCompositioning(url, url);
- }
- static void testURLCompositioning(URL refURL, 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()));
- }
-
- @Test
- public void testURLProps() throws IOException, URISyntaxException {
- final String SCHEME = "camera";
- final String HOST = "somewhere";
- final String PATH = "0";
- String[] args = new String[] {
- SCHEME+"://"+HOST+"/"+PATH,
- SCHEME+"://"+HOST+"/"+PATH+"?p1=1",
- };
- for(int i=0; i<args.length-1; i+=2) {
- String uri_s0 = args[i];
- String uri_s1 = args[i+1];
- URI uri0 = new URI(uri_s0);
- URI uri1 = new URI(uri_s1);
- showURI(uri0);
- showURI(uri1);
- URIQueryProps data = URIQueryProps.create(uri1, ';');
- if(null == data) {
- System.err.println("Error: NULL: <"+uri_s1+"> -> "+uri1+" -> NULL");
- } else {
- URI uri1T = data.appendQuery(uri0);
- showURI(uri1T);
- Assert.assertEquals(uri1, uri1T);
- }
- }
- }
- public static void main(String args[]) throws IOException {
- String tstname = URLCompositionTest.class.getName();
- org.junit.runner.JUnitCore.main(tstname);
- }
-}
diff --git a/src/junit/com/jogamp/common/util/TestIOUtilURICompose.java b/src/junit/com/jogamp/common/util/TestIOUtilURICompose.java
new file mode 100644
index 0000000..0809599
--- /dev/null
+++ b/src/junit/com/jogamp/common/util/TestIOUtilURICompose.java
@@ -0,0 +1,92 @@
+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(String urn) throws MalformedURLException, URISyntaxException {
+ testURICompositioning( new URI(urn) );
+ testURLCompositioning( new URL(urn) );
+ }
+
+ static void testURICompositioning(URI uri) throws MalformedURLException, URISyntaxException {
+ testURICompositioning(uri, uri);
+ }
+ static void testURICompositioning(URI refURI, 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(URL url) throws MalformedURLException, URISyntaxException {
+ testURLCompositioning(url, url);
+ }
+ static void testURLCompositioning(URL refURL, 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(String args[]) throws IOException {
+ 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
new file mode 100644
index 0000000..73f6ce7
--- /dev/null
+++ b/src/junit/com/jogamp/common/util/TestIOUtilURIHandling.java
@@ -0,0 +1,150 @@
+package com.jogamp.common.util;
+
+import static com.jogamp.common.net.URIDumpUtil.showURX;
+
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.net.URLConnection;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+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 {
+
+ static final String[][] uriHttpSArray = new String[][] {
+ new String[] {"http://localhost/gluegen/build-x86_64/gluegen-rt.jar",
+ "http://localhost/gluegen/build-x86_64/gluegen-rt.jar"},
+
+ new String[] {"http://localhost/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar",
+ "http://localhost/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar"
+ // "http://localhost/gluegen/build-x86_64 öä lala/gluegen-rt.jar"
+ },
+
+ new String[] {"jar:http://localhost/gluegen/build-x86_64/gluegen-rt.jar!/",
+ "jar:http://localhost/gluegen/build-x86_64/gluegen-rt.jar!/" },
+
+ new String[] {"jar:http://localhost/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar!/",
+ "jar:http://localhost/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar!/"
+ // "jar:http://localhost/gluegen/build-x86_64 öä lala/gluegen-rt.jar!/"
+ },
+
+ new String[] {"jar:http://localhost/gluegen/build-x86_64/gluegen-rt.jar!/com/jogamp/common/os/Platform.class",
+ "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%c3%b6%c3%a4%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class",
+ "jar:http://localhost/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"
+ // "jar:http://localhost/gluegen/build-x86_64 öä lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"
+ },
+ };
+
+ static final String[][] uriFileSArrayUnix = new String[][] {
+ new String[] {"file:/gluegen/build-x86_64/gluegen-rt.jar",
+ "file:/gluegen/build-x86_64/gluegen-rt.jar"},
+
+ new String[] {"file:/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar",
+ "file:/gluegen/build-x86_64 öä lala/gluegen-rt.jar"},
+
+ new String[] {"jar:file:/gluegen/build-x86_64/gluegen-rt.jar!/",
+ "jar:file:/gluegen/build-x86_64/gluegen-rt.jar!/" },
+
+ new String[] {"jar:file:/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar!/",
+ "jar:file:/gluegen/build-x86_64 öä lala/gluegen-rt.jar!/" },
+
+ new String[] {"jar:file:/gluegen/build-x86_64/gluegen-rt.jar!/com/jogamp/common/os/Platform.class",
+ "jar:file:/gluegen/build-x86_64/gluegen-rt.jar!/com/jogamp/common/os/Platform.class" },
+
+ new String[] {"jar:file:/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class",
+ "jar:file:/gluegen/build-x86_64 öä lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class" },
+ };
+
+ static final String[][] uriFileSArrayWindows = new String[][] {
+ new String[] {"file:/C:/gluegen/build-x86_64/gluegen-rt.jar",
+ "file:/C:/gluegen/build-x86_64/gluegen-rt.jar"},
+
+ new String[] {"file:/C:/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar",
+ "file:/C:/gluegen/build-x86_64 öä lala/gluegen-rt.jar"},
+
+ new String[] {"jar:file:/C:/gluegen/build-x86_64/gluegen-rt.jar!/",
+ "jar:file:/C:/gluegen/build-x86_64/gluegen-rt.jar!/" },
+
+ new String[] {"jar:file:/C:/gluegen/build-x86_64%20%c3%b6%c3%a4%20lala/gluegen-rt.jar!/",
+ "jar:file:/C:/gluegen/build-x86_64 öä lala/gluegen-rt.jar!/" },
+
+ new String[] {"jar:file:/C:/gluegen/build-x86_64/gluegen-rt.jar!/com/jogamp/common/os/Platform.class",
+ "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%c3%b6%c3%a4%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class",
+ "jar:file:/C:/gluegen/build-x86_64 öä lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class" },
+ };
+
+ @Test
+ public void test01HttpURI2URL() throws IOException, URISyntaxException {
+ testURI2URL(uriHttpSArray, false /*usesFile*/, false /*matchOS*/);
+ }
+
+ @Test
+ public void test02FileUnixURI2URL() throws IOException, URISyntaxException {
+ testURI2URL(uriFileSArrayUnix, true /*usesFile*/, Platform.OSType.WINDOWS != Platform.getOSType() /*matchOS*/);
+ }
+
+ @Test
+ public void test02FileWindowsURI2URL() throws IOException, URISyntaxException {
+ testURI2URL(uriFileSArrayWindows, true /*usesFile*/, Platform.OSType.WINDOWS == Platform.getOSType() /*matchOS*/);
+ }
+
+ static void testURI2URL(String[][] uriSArray, boolean usesFile, boolean matchOS) throws IOException, URISyntaxException {
+ for(int i=0; i<uriSArray.length; i++) {
+ final String[] uriSPair = uriSArray[i];
+ final String uriSource = uriSPair[0];
+ final String uriExpected= uriSPair[1];
+ System.err.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
+ showURX(uriSource);
+ testURI2URL(uriSource, uriExpected, usesFile, matchOS);
+ System.err.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
+ }
+ }
+
+ static void testURI2URL(String source, String expected, boolean usesFile, boolean matchOS) throws IOException, URISyntaxException {
+ final URI uri0 = new URI(source);
+ System.err.println("uri: "+uri0.toString());
+
+ final URL actualUrl = IOUtil.toURL(uri0);
+ final String actualUrlS = actualUrl.toExternalForm();
+ System.err.println("url: "+actualUrlS);
+ final boolean equalsA = expected.equals(actualUrlS);
+ System.err.println("expected___: "+expected+" - ok "+equalsA);
+ System.err.println("actual : "+actualUrlS);
+ Assert.assertTrue("No match, expected w/ orig url", equalsA);
+
+ // now test open ..
+ Throwable t = null;
+ URLConnection con = null;
+ try {
+ con = actualUrl.openConnection();
+ } catch (Throwable _t) {
+ t = _t;
+ }
+ if( null != t ) {
+ System.err.println("XXX: "+t.getClass().getName()+": "+t.getMessage());
+ t.printStackTrace();
+ } else {
+ System.err.println("XXX: No openConnection() failure");
+ System.err.println("XXX: "+con);
+ }
+ }
+
+ public static void main(String args[]) throws IOException {
+ String tstname = TestIOUtilURIHandling.class.getName();
+ org.junit.runner.JUnitCore.main(tstname);
+ }
+}