1package com.jogamp.common.net;
4import java.io.IOException;
6import java.net.URISyntaxException;
8import java.net.URLConnection;
10import jogamp.common.os.PlatformPropsImpl;
12import org.junit.Assert;
15import com.jogamp.common.net.Uri;
16import com.jogamp.common.os.Platform;
17import com.jogamp.junit.util.SingletonJunitCase;
19import org.junit.FixMethodOrder;
20import org.junit.runners.MethodSorters;
22@FixMethodOrder(MethodSorters.NAME_ASCENDING)
27 private static final String[][] uriHttpSArray =
new String[][] {
28 new String[] {
"http://localhost/gluegen/build-x86_64/gluegen-rt.jar"},
30 new String[] {
"http://localhost/gluegen/"+
'\u0394'+
"/gluegen-rt.jar"},
32 new String[] {
"http://localhost/gluegen/build-x86_64%20lala/gluegen-rt.jar"},
34 new String[] {
"http://localhost/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar"},
36 new String[] {
"jar:http://localhost/gluegen/build-x86_64/gluegen-rt.jar!/"},
38 new String[] {
"jar:http://localhost/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/"},
40 new String[] {
"jar:http://localhost/gluegen/build-x86_64/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"},
42 new String[] {
"jar:http://localhost/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"},
44 new String[] {
"jar:http://localhost/gluegen/R%23/gluegen-rt.jar!/"},
46 new String[] {
"jar:http://localhost/gluegen/A%24/B%5E/C~/D%23/E%5B/F%5D/gluegen-rt.jar!/"},
48 new String[] {
"jar:http://localhost/gluegen/%24/%5E/~/%23/%5B/%5D/gluegen-rt.jar!/"},
50 new String[] {
"jar:http://localhost/gluegen/"+
'\u0394'+
"/gluegen-rt.jar!/"},
53 private static final String[][] uriFileSArrayUnix =
new String[][] {
54 new String[] {
"file:/gluegen/build-x86_64/gluegen-rt.jar"},
56 new String[] {
"file:/gluegen/"+
'\u0394'+
"/gluegen-rt.jar"},
58 new String[] {
"file:/gluegen/build-x86_64%20lala/gluegen-rt.jar"},
60 new String[] {
"file:/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar"},
62 new String[] {
"jar:file:/gluegen/build-x86_64/gluegen-rt.jar!/"},
64 new String[] {
"jar:file:/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/"},
66 new String[] {
"jar:file:/gluegen/build-x86_64/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"},
68 new String[] {
"jar:file:/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"},
70 new String[] {
"jar:file://filehost/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"},
72 new String[] {
"jar:file:/gluegen/R%23/gluegen-rt.jar!/"},
74 new String[] {
"jar:file:/gluegen/A%24/B%5E/C~/D%23/E%5B/F%5D/gluegen-rt.jar!/"},
76 new String[] {
"jar:file:/gluegen/%24/%5E/~/%23/%5B/%5D/gluegen-rt.jar!/"},
78 new String[] {
"jar:file:/gluegen/"+
'\u0394'+
"/gluegen-rt.jar!/"},
81 private static final String[][] uriFileSArrayWindows =
new String[][] {
82 new String[] {
"file:/C%3A/gluegen/build-x86_64/gluegen-rt.jar"},
84 new String[] {
"file:/C%3A/gluegen/"+
'\u0394'+
"/gluegen-rt.jar"},
86 new String[] {
"file:/C%3A/gluegen/build-x86_64%20lala/gluegen-rt.jar"},
88 new String[] {
"file:/C%3A/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar"},
90 new String[] {
"jar:file:/C%3A/gluegen/build-x86_64/gluegen-rt.jar!/"},
92 new String[] {
"jar:file:/C%3A/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/"},
94 new String[] {
"jar:file:/C%3A/gluegen/build-x86_64/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"},
96 new String[] {
"jar:file:/C%3A/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"},
98 new String[] {
"jar:file:///C%3A/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"},
100 new String[] {
"jar:file://filehost/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"},
102 new String[] {
"jar:file:/C%3A/gluegen/R%23/gluegen-rt.jar!/"},
104 new String[] {
"jar:file:/C%3A/gluegen/A%24/B%5E/C~/D%23/E%5B/F%5D/gluegen-rt.jar!/"},
106 new String[] {
"jar:file:/C%3A/gluegen/%24/%5E/~/%23/%5B/%5D/gluegen-rt.jar!/"},
108 new String[] {
"jar:file:/C%3A/gluegen/"+
'\u0394'+
"/gluegen-rt.jar!/"},
111 private static final String[][] urlFileSArrayWindows =
new String[][] {
112 new String[] {
"file:/C:/gluegen/build-x86_64/gluegen-rt.jar"},
114 new String[] {
"file:/C:/gluegen/"+
'\u0394'+
"/gluegen-rt.jar"},
116 new String[] {
"file:/C:/gluegen/build-x86_64%20lala/gluegen-rt.jar"},
118 new String[] {
"file:/C:/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar"},
120 new String[] {
"jar:file:/C:/gluegen/build-x86_64/gluegen-rt.jar!/"},
122 new String[] {
"jar:file:/C:/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/"},
124 new String[] {
"jar:file:/C:/gluegen/build-x86_64/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"},
126 new String[] {
"jar:file:/C:/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"},
128 new String[] {
"jar:file:///C:/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"},
130 new String[] {
"jar:file://filehost/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"},
132 new String[] {
"jar:file:/C:/gluegen/R%23/gluegen-rt.jar!/"},
134 new String[] {
"jar:file:/C:/gluegen/A%24/B%5E/C~/D%23/E%5B/F%5D/gluegen-rt.jar!/"},
136 new String[] {
"jar:file:/C:/gluegen/%24/%5E/~/%23/%5B/%5D/gluegen-rt.jar!/"},
138 new String[] {
"jar:file:/C:/gluegen/"+
'\u0394'+
"/gluegen-rt.jar!/"},
141 public static final String[][] fileSArrayUnix =
new String[][] {
142 new String[] {
"/gluegen/build-x86_64/gluegen-rt.jar",
143 "file:/gluegen/build-x86_64/gluegen-rt.jar",
144 "/gluegen/build-x86_64/gluegen-rt.jar"},
146 new String[] {
"/gluegen/"+
'\u0394'+
"/gluegen-rt.jar",
147 "file:/gluegen/"+
'\u0394'+
"/gluegen-rt.jar",
148 "/gluegen/"+
'\u0394'+
"/gluegen-rt.jar"},
150 new String[] {
"/gluegen/build-x86_64 lala/gluegen-rt.jar",
151 "file:/gluegen/build-x86_64%20lala/gluegen-rt.jar",
152 "/gluegen/build-x86_64 lala/gluegen-rt.jar"},
154 new String[] {
"/gluegen/build-x86_64 öä lala/gluegen-rt.jar",
155 "file:/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar",
156 "/gluegen/build-x86_64 öä lala/gluegen-rt.jar"},
158 new String[] {
"/gluegen/A$/B^/C~/D#/E[/F]/gluegen-rt.jar",
159 "file:/gluegen/A%24/B%5E/C~/D%23/E%5B/F%5D/gluegen-rt.jar",
160 "/gluegen/A$/B^/C~/D#/E[/F]/gluegen-rt.jar" },
162 new String[] {
"/gluegen/$/^/~/#/[/]/gluegen-rt.jar",
163 "file:/gluegen/%24/%5E/~/%23/%5B/%5D/gluegen-rt.jar",
164 "/gluegen/$/^/~/#/[/]/gluegen-rt.jar" },
167 public static final String[][] fileSArrayWindows =
new String[][] {
168 new String[] {
"C:/gluegen/build-x86_64/gluegen-rt.jar",
169 "file:/C%3A/gluegen/build-x86_64/gluegen-rt.jar",
170 "C:\\gluegen\\build-x86_64\\gluegen-rt.jar"},
172 new String[] {
"C:/gluegen/"+
'\u0394'+
"/gluegen-rt.jar",
173 "file:/C%3A/gluegen/"+
'\u0394'+
"/gluegen-rt.jar",
174 "C:\\gluegen\\"+
'\u0394'+
"\\gluegen-rt.jar"},
176 new String[] {
"C:/gluegen/build-x86_64 lala/gluegen-rt.jar",
177 "file:/C%3A/gluegen/build-x86_64%20lala/gluegen-rt.jar",
178 "C:\\gluegen\\build-x86_64 lala\\gluegen-rt.jar"},
180 new String[] {
"C:/gluegen/build-x86_64 öä lala/gluegen-rt.jar",
181 "file:/C%3A/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar",
182 "C:\\gluegen\\build-x86_64 öä lala\\gluegen-rt.jar"},
184 new String[] {
"C:\\gluegen\\build-x86_64 öä lala\\gluegen-rt.jar",
185 "file:/C%3A/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar",
186 "C:\\gluegen\\build-x86_64 öä lala\\gluegen-rt.jar"},
188 new String[] {
"\\\\filehost\\gluegen\\build-x86_64 öä lala\\gluegen-rt.jar",
189 "file://filehost/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar",
190 "\\\\filehost\\gluegen\\build-x86_64 öä lala\\gluegen-rt.jar"},
192 new String[] {
"C:/gluegen/A$/B^/C~/D#/E[/F]/gluegen-rt.jar",
193 "file:/C%3A/gluegen/A%24/B%5E/C~/D%23/E%5B/F%5D/gluegen-rt.jar",
194 "C:\\gluegen\\A$\\B^\\C~\\D#\\E[\\F]\\gluegen-rt.jar" },
196 new String[] {
"C:/gluegen/$/^/~/#/[/]/gluegen-rt.jar",
197 "file:/C%3A/gluegen/%24/%5E/~/%23/%5B/%5D/gluegen-rt.jar",
198 "C:\\gluegen\\$\\^\\~\\#\\[\\]\\gluegen-rt.jar" },
203 testUri2URL(getSimpleTestName(
"."), uriHttpSArray);
208 testUri2URL(getSimpleTestName(
"."), uriFileSArrayUnix);
213 testUri2URL(getSimpleTestName(
"."), uriFileSArrayWindows);
218 testURL2Uri(getSimpleTestName(
"."), uriHttpSArray);
223 testURL2Uri(getSimpleTestName(
"."), uriFileSArrayUnix);
228 testURL2Uri(getSimpleTestName(
"."), urlFileSArrayWindows);
234 testFile2Uri(getSimpleTestName(
"."), fileSArrayUnix);
241 testFile2Uri(getSimpleTestName(
"."), fileSArrayWindows);
245 static void testUri2URL(
final String testname,
final String[][] uriSArray)
throws IOException, URISyntaxException {
247 for(
int i=0; i<uriSArray.length; i++) {
248 final String[] uriSPair = uriSArray[i];
249 final String uriSource = uriSPair[0];
250 System.err.println(
"SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS "+testname+
": "+(i+1)+
"/"+uriSArray.length);
252 System.err.println(
"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE "+testname+
": "+(i+1)+
"/"+uriSArray.length);
254 Assert.assertTrue(
"One or more errors occured see stderr above", ok);
257 static boolean testUri2URL(
final Uri.Encoded uriSource)
throws IOException, URISyntaxException {
258 System.err.println(
"uriSource : "+uriSource);
259 final Uri uri0 =
new Uri(uriSource);
260 URIDumpUtil.showUri(uri0);
262 final URI actualURI = uri0.toURI();
263 URIDumpUtil.showURI(actualURI);
264 final Uri.Encoded actualURIStr = Uri.Encoded.cast(actualURI.toString());
266 final URL actualURL = uri0.toURL();
267 URIDumpUtil.showURL(actualURL);
268 final Uri.Encoded actualURLStr = Uri.Encoded.cast(actualURL.toExternalForm());
270 System.err.println(
"expected_URX: "+uriSource);
272 final boolean equalsURI = uriSource.equals(actualURIStr);
273 System.err.println(
"actual URI: "+actualURIStr+
" - "+(equalsURI?
"OK":
"ERROR"));
274 final boolean equalsURL = uriSource.equals(actualURLStr);
275 System.err.println(
"actual URL: "+actualURLStr+
" - "+(equalsURL?
"OK":
"ERROR"));
276 URIDumpUtil.showReencodedURIOfUri(uri0);
277 URIDumpUtil.showReencodedUriOfURI(actualURI);
279 boolean ok = equalsURL && equalsURI;
283 URLConnection con =
null;
285 con = actualURL.openConnection();
286 }
catch (
final Throwable _t) {
290 System.err.println(
"XXX: "+t.getClass().getName()+
": "+t.getMessage());
293 System.err.println(
"XXX: No openConnection() failure");
294 System.err.println(
"XXX: "+con);
297 if( uri0.scheme.equals(Uri.JAR_SCHEME) ) {
299 final Uri uriSub0 = uri0.getContainedUri();
300 Assert.assertNotNull(uriSub0);
301 System.err.println(
"EXT JAR contained:");
302 URIDumpUtil.showUri(uriSub0);
303 final Uri uriSubDir0 = uriSub0.getDirectory();
304 final Uri uriSubParent0 = uriSub0.getParent();
305 System.err.println(
"EXT JAR contained Dir:");
306 URIDumpUtil.showUri(uriSubDir0);
307 System.err.println(
"EXT JAR contained Parent:");
308 URIDumpUtil.showUri(uriSubParent0);
309 ok = uriSubDir0.equals(uriSubParent0) && ok;
314 static void testURL2Uri(
final String testname,
final String[][] urlSArray)
throws IOException, URISyntaxException {
316 for(
int i=0; i<urlSArray.length; i++) {
317 final String[] uriSPair = urlSArray[i];
318 final String uriSource = uriSPair[0];
319 System.err.println(
"SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS "+testname+
": "+(i+1)+
"/"+urlSArray.length);
320 ok = testURL2Uri(
new URL(uriSource)) && ok;
321 System.err.println(
"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE "+testname+
": "+(i+1)+
"/"+urlSArray.length);
323 Assert.assertTrue(
"One or more errors occured see stderr above", ok);
326 static boolean testURL2Uri(
final URL urlSource)
throws IOException, URISyntaxException {
327 System.err.println(
"URL Source : "+urlSource);
328 URIDumpUtil.showURL(urlSource);
330 final URI uriSource = urlSource.toURI();
331 URIDumpUtil.showURI(uriSource);
333 final Uri uri0 = Uri.valueOf(urlSource);
334 URIDumpUtil.showUri(uri0);
336 final URL uriToURL = uri0.toURL();
337 URIDumpUtil.showURL(uriToURL);
341 URLConnection con =
null;
343 con = uriToURL.openConnection();
344 }
catch (
final Throwable _t) {
348 System.err.println(
"XXX: "+t.getClass().getName()+
": "+t.getMessage());
351 System.err.println(
"XXX: No openConnection() failure");
352 System.err.println(
"XXX: "+con);
357 if( uri0.scheme.equals(Uri.JAR_SCHEME) ) {
359 final Uri uriSub0 = uri0.getContainedUri();
360 Assert.assertNotNull(uriSub0);
361 System.err.println(
"EXT JAR contained:");
362 URIDumpUtil.showUri(uriSub0);
363 final Uri uriSubDir0 = uriSub0.getDirectory();
364 final Uri uriSubParent0 = uriSub0.getParent();
365 System.err.println(
"EXT JAR contained Dir:");
366 URIDumpUtil.showUri(uriSubDir0);
367 System.err.println(
"EXT JAR contained Parent:");
368 URIDumpUtil.showUri(uriSubParent0);
369 ok = uriSubDir0.equals(uriSubParent0) && ok;
374 static void testFile2Uri(
final String testname,
final String[][] uriSArray)
throws IOException, URISyntaxException {
376 for(
int i=0; i<uriSArray.length; i++) {
377 final String[] uriSPair = uriSArray[i];
378 final String uriSource = uriSPair[0];
379 final String uriEncExpected= uriSPair[1];
380 final String fileExpected= uriSPair[2];
381 System.err.println(
"SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS "+testname+
": "+(i+1)+
"/"+uriSArray.length);
382 ok = testFile2Uri(uriSource, Uri.Encoded.cast(uriEncExpected), fileExpected) && ok;
383 System.err.println(
"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE "+testname+
": "+(i+1)+
"/"+uriSArray.length);
385 Assert.assertTrue(
"One or more errors occured see stderr above", ok);
388 static boolean testFile2Uri(
final String fileSource,
final Uri.Encoded uriEncExpected,
final String fileExpected)
throws IOException, URISyntaxException {
389 System.err.println(
"fileSource: "+fileSource);
390 final File file =
new File(fileSource);
391 System.err.println(
"file: "+file.getAbsolutePath());
393 final Uri uri0 = Uri.valueOf(file);
394 URIDumpUtil.showReencodedURIOfUri(uri0);
396 final URL actualUrl = uri0.toURL();
397 final File actualFile = uri0.toFile();
398 final boolean equalsFilePath = fileExpected.equals(actualFile.getPath());
399 System.err.println(
"expected_path: "+fileExpected);
400 System.err.println(
"actual___file-path: "+actualFile+
" - "+(equalsFilePath?
"OK":
"ERROR"));
401 final boolean equalsEncUri = uriEncExpected.equals(uri0.getEncoded());
402 System.err.println(
"expected__encUri: "+uriEncExpected);
403 System.err.println(
"actual_______Uri: "+uri0.getEncoded()+
" - "+(equalsEncUri?
"OK":
"ERROR"));
404 final boolean ok = equalsEncUri && equalsFilePath;
406 System.err.println(
"actual_______URL: "+actualUrl.toExternalForm());
410 URLConnection con =
null;
412 con = actualUrl.openConnection();
413 }
catch (
final Throwable _t) {
417 System.err.println(
"XXX: "+t.getClass().getName()+
": "+t.getMessage());
420 System.err.println(
"XXX: No openConnection() failure");
421 System.err.println(
"XXX: "+con);
426 public static void main(
final String args[])
throws IOException {
428 org.junit.runner.JUnitCore.
main(tstname);
static void main(final String args[])
void test25FileWindowsURI2URL()
void test24FileUnixURI2URL()
void test13FileWindowsURL2Uri()
void test12FileUnixURL2Uri()
void test02FileUnixUri2URL()
void test03FileWindowsUri2URL()
Immutable RFC3986 encoded string.
static Encoded cast(final String encoded)
Casts the given encoded String by creating a new Encoded instance.
This class implements an immutable Uri as defined by RFC 2396.