GlueGen v2.6.0-rc-20250712
GlueGen, Native Binding Generator for Java™ (public API).
TestUri03Resolving.java
Go to the documentation of this file.
1package com.jogamp.common.net;
2
3import java.io.File;
4import java.io.IOException;
5import java.net.URI;
6import java.net.URISyntaxException;
7import java.net.URL;
8import java.net.URLConnection;
9
10import jogamp.common.os.PlatformPropsImpl;
11
12import org.junit.Assert;
13import org.junit.Test;
14
15import com.jogamp.common.net.Uri;
16import com.jogamp.common.os.Platform;
17import com.jogamp.junit.util.SingletonJunitCase;
18
19import org.junit.FixMethodOrder;
20import org.junit.runners.MethodSorters;
21
22@FixMethodOrder(MethodSorters.NAME_ASCENDING)
24
25 // Bug 908, issues w/ windows file path char: $ ^ ~ # [ ]
26
27 private static final String[][] uriHttpSArray = new String[][] {
28 new String[] {"http://localhost/gluegen/build-x86_64/gluegen-rt.jar"},
29
30 new String[] {"http://localhost/gluegen/"+'\u0394'+"/gluegen-rt.jar"},
31
32 new String[] {"http://localhost/gluegen/build-x86_64%20lala/gluegen-rt.jar"},
33
34 new String[] {"http://localhost/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar"},
35
36 new String[] {"jar:http://localhost/gluegen/build-x86_64/gluegen-rt.jar!/"},
37
38 new String[] {"jar:http://localhost/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/"},
39
40 new String[] {"jar:http://localhost/gluegen/build-x86_64/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"},
41
42 new String[] {"jar:http://localhost/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"},
43
44 new String[] {"jar:http://localhost/gluegen/R%23/gluegen-rt.jar!/"},
45
46 new String[] {"jar:http://localhost/gluegen/A%24/B%5E/C~/D%23/E%5B/F%5D/gluegen-rt.jar!/"},
47
48 new String[] {"jar:http://localhost/gluegen/%24/%5E/~/%23/%5B/%5D/gluegen-rt.jar!/"},
49
50 new String[] {"jar:http://localhost/gluegen/"+'\u0394'+"/gluegen-rt.jar!/"},
51 };
52
53 private static final String[][] uriFileSArrayUnix = new String[][] {
54 new String[] {"file:/gluegen/build-x86_64/gluegen-rt.jar"},
55
56 new String[] {"file:/gluegen/"+'\u0394'+"/gluegen-rt.jar"},
57
58 new String[] {"file:/gluegen/build-x86_64%20lala/gluegen-rt.jar"},
59
60 new String[] {"file:/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar"},
61
62 new String[] {"jar:file:/gluegen/build-x86_64/gluegen-rt.jar!/"},
63
64 new String[] {"jar:file:/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/"},
65
66 new String[] {"jar:file:/gluegen/build-x86_64/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"},
67
68 new String[] {"jar:file:/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"},
69
70 new String[] {"jar:file://filehost/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"},
71
72 new String[] {"jar:file:/gluegen/R%23/gluegen-rt.jar!/"},
73
74 new String[] {"jar:file:/gluegen/A%24/B%5E/C~/D%23/E%5B/F%5D/gluegen-rt.jar!/"},
75
76 new String[] {"jar:file:/gluegen/%24/%5E/~/%23/%5B/%5D/gluegen-rt.jar!/"},
77
78 new String[] {"jar:file:/gluegen/"+'\u0394'+"/gluegen-rt.jar!/"},
79 };
80
81 private static final String[][] uriFileSArrayWindows = new String[][] {
82 new String[] {"file:/C%3A/gluegen/build-x86_64/gluegen-rt.jar"},
83
84 new String[] {"file:/C%3A/gluegen/"+'\u0394'+"/gluegen-rt.jar"},
85
86 new String[] {"file:/C%3A/gluegen/build-x86_64%20lala/gluegen-rt.jar"},
87
88 new String[] {"file:/C%3A/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar"},
89
90 new String[] {"jar:file:/C%3A/gluegen/build-x86_64/gluegen-rt.jar!/"},
91
92 new String[] {"jar:file:/C%3A/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/"},
93
94 new String[] {"jar:file:/C%3A/gluegen/build-x86_64/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"},
95
96 new String[] {"jar:file:/C%3A/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"},
97
98 new String[] {"jar:file:///C%3A/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"},
99
100 new String[] {"jar:file://filehost/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"},
101
102 new String[] {"jar:file:/C%3A/gluegen/R%23/gluegen-rt.jar!/"},
103
104 new String[] {"jar:file:/C%3A/gluegen/A%24/B%5E/C~/D%23/E%5B/F%5D/gluegen-rt.jar!/"},
105
106 new String[] {"jar:file:/C%3A/gluegen/%24/%5E/~/%23/%5B/%5D/gluegen-rt.jar!/"},
107
108 new String[] {"jar:file:/C%3A/gluegen/"+'\u0394'+"/gluegen-rt.jar!/"},
109 };
110
111 private static final String[][] urlFileSArrayWindows = new String[][] {
112 new String[] {"file:/C:/gluegen/build-x86_64/gluegen-rt.jar"},
113
114 new String[] {"file:/C:/gluegen/"+'\u0394'+"/gluegen-rt.jar"},
115
116 new String[] {"file:/C:/gluegen/build-x86_64%20lala/gluegen-rt.jar"},
117
118 new String[] {"file:/C:/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar"},
119
120 new String[] {"jar:file:/C:/gluegen/build-x86_64/gluegen-rt.jar!/"},
121
122 new String[] {"jar:file:/C:/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/"},
123
124 new String[] {"jar:file:/C:/gluegen/build-x86_64/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"},
125
126 new String[] {"jar:file:/C:/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"},
127
128 new String[] {"jar:file:///C:/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"},
129
130 new String[] {"jar:file://filehost/gluegen/build-x86_64%20öä%20lala/gluegen-rt.jar!/com/jogamp/common/os/Platform.class"},
131
132 new String[] {"jar:file:/C:/gluegen/R%23/gluegen-rt.jar!/"},
133
134 new String[] {"jar:file:/C:/gluegen/A%24/B%5E/C~/D%23/E%5B/F%5D/gluegen-rt.jar!/"},
135
136 new String[] {"jar:file:/C:/gluegen/%24/%5E/~/%23/%5B/%5D/gluegen-rt.jar!/"},
137
138 new String[] {"jar:file:/C:/gluegen/"+'\u0394'+"/gluegen-rt.jar!/"},
139 };
140
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"},
145
146 new String[] {"/gluegen/"+'\u0394'+"/gluegen-rt.jar",
147 "file:/gluegen/"+'\u0394'+"/gluegen-rt.jar",
148 "/gluegen/"+'\u0394'+"/gluegen-rt.jar"},
149
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"},
153
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"},
157
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" },
161
162 new String[] {"/gluegen/$/^/~/#/[/]/gluegen-rt.jar",
163 "file:/gluegen/%24/%5E/~/%23/%5B/%5D/gluegen-rt.jar",
164 "/gluegen/$/^/~/#/[/]/gluegen-rt.jar" },
165 };
166
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"},
171
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"},
175
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"},
179
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"},
183
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"},
187
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"},
191
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" },
195
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" },
199 };
200
201 @Test
202 public void test01HttpUri2URL() throws IOException, URISyntaxException {
203 testUri2URL(getSimpleTestName("."), uriHttpSArray);
204 }
205
206 @Test
207 public void test02FileUnixUri2URL() throws IOException, URISyntaxException {
208 testUri2URL(getSimpleTestName("."), uriFileSArrayUnix);
209 }
210
211 @Test
212 public void test03FileWindowsUri2URL() throws IOException, URISyntaxException {
213 testUri2URL(getSimpleTestName("."), uriFileSArrayWindows);
214 }
215
216 @Test
217 public void test11HttpURL2Uri() throws IOException, URISyntaxException {
218 testURL2Uri(getSimpleTestName("."), uriHttpSArray);
219 }
220
221 @Test
222 public void test12FileUnixURL2Uri() throws IOException, URISyntaxException {
223 testURL2Uri(getSimpleTestName("."), uriFileSArrayUnix);
224 }
225
226 @Test
227 public void test13FileWindowsURL2Uri() throws IOException, URISyntaxException {
228 testURL2Uri(getSimpleTestName("."), urlFileSArrayWindows);
229 }
230
231 @Test
232 public void test24FileUnixURI2URL() throws IOException, URISyntaxException {
233 if( Platform.OSType.WINDOWS != PlatformPropsImpl.OS_TYPE ) {
234 testFile2Uri(getSimpleTestName("."), fileSArrayUnix);
235 }
236 }
237
238 @Test
239 public void test25FileWindowsURI2URL() throws IOException, URISyntaxException {
240 if( Platform.OSType.WINDOWS == PlatformPropsImpl.OS_TYPE ) {
241 testFile2Uri(getSimpleTestName("."), fileSArrayWindows);
242 }
243 }
244
245 static void testUri2URL(final String testname, final String[][] uriSArray) throws IOException, URISyntaxException {
246 boolean ok = true;
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);
251 ok = testUri2URL(Uri.Encoded.cast(uriSource)) && ok;
252 System.err.println("EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE "+testname+": "+(i+1)+"/"+uriSArray.length);
253 }
254 Assert.assertTrue("One or more errors occured see stderr above", ok);
255 }
256
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);
261
262 final URI actualURI = uri0.toURI();
263 URIDumpUtil.showURI(actualURI);
264 final Uri.Encoded actualURIStr = Uri.Encoded.cast(actualURI.toString());
265
266 final URL actualURL = uri0.toURL();
267 URIDumpUtil.showURL(actualURL);
268 final Uri.Encoded actualURLStr = Uri.Encoded.cast(actualURL.toExternalForm());
269
270 System.err.println("expected_URX: "+uriSource);
271
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);
278
279 boolean ok = equalsURL && equalsURI;
280
281 // now test open ..
282 Throwable t = null;
283 URLConnection con = null;
284 try {
285 con = actualURL.openConnection();
286 } catch (final Throwable _t) {
287 t = _t;
288 }
289 if( null != t ) {
290 System.err.println("XXX: "+t.getClass().getName()+": "+t.getMessage());
291 t.printStackTrace();
292 } else {
293 System.err.println("XXX: No openConnection() failure");
294 System.err.println("XXX: "+con);
295 }
296
297 if( uri0.scheme.equals(Uri.JAR_SCHEME) ) {
298 // Extended tests on JAR Uri
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;
310 }
311 return ok;
312 }
313
314 static void testURL2Uri(final String testname, final String[][] urlSArray) throws IOException, URISyntaxException {
315 boolean ok = true;
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);
322 }
323 Assert.assertTrue("One or more errors occured see stderr above", ok);
324 }
325
326 static boolean testURL2Uri(final URL urlSource) throws IOException, URISyntaxException {
327 System.err.println("URL Source : "+urlSource);
328 URIDumpUtil.showURL(urlSource);
329
330 final URI uriSource = urlSource.toURI();
331 URIDumpUtil.showURI(uriSource);
332
333 final Uri uri0 = Uri.valueOf(urlSource);
334 URIDumpUtil.showUri(uri0);
335
336 final URL uriToURL = uri0.toURL();
337 URIDumpUtil.showURL(uriToURL);
338
339 // now test open ..
340 Throwable t = null;
341 URLConnection con = null;
342 try {
343 con = uriToURL.openConnection();
344 } catch (final Throwable _t) {
345 t = _t;
346 }
347 if( null != t ) {
348 System.err.println("XXX: "+t.getClass().getName()+": "+t.getMessage());
349 t.printStackTrace();
350 } else {
351 System.err.println("XXX: No openConnection() failure");
352 System.err.println("XXX: "+con);
353 }
354
355 boolean ok = true;
356
357 if( uri0.scheme.equals(Uri.JAR_SCHEME) ) {
358 // Extended tests on JAR Uri
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;
370 }
371 return ok;
372 }
373
374 static void testFile2Uri(final String testname, final String[][] uriSArray) throws IOException, URISyntaxException {
375 boolean ok = true;
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);
384 }
385 Assert.assertTrue("One or more errors occured see stderr above", ok);
386 }
387
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());
392
393 final Uri uri0 = Uri.valueOf(file);
394 URIDumpUtil.showReencodedURIOfUri(uri0);
395
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;
405
406 System.err.println("actual_______URL: "+actualUrl.toExternalForm());
407
408 // now test open ..
409 Throwable t = null;
410 URLConnection con = null;
411 try {
412 con = actualUrl.openConnection();
413 } catch (final Throwable _t) {
414 t = _t;
415 }
416 if( null != t ) {
417 System.err.println("XXX: "+t.getClass().getName()+": "+t.getMessage());
418 t.printStackTrace();
419 } else {
420 System.err.println("XXX: No openConnection() failure");
421 System.err.println("XXX: "+con);
422 }
423 return ok;
424 }
425
426 public static void main(final String args[]) throws IOException {
427 final String tstname = TestUri03Resolving.class.getName();
428 org.junit.runner.JUnitCore.main(tstname);
429 }
430}
static void main(final String args[])
Immutable RFC3986 encoded string.
Definition: Uri.java:296
static Encoded cast(final String encoded)
Casts the given encoded String by creating a new Encoded instance.
Definition: Uri.java:305
This class implements an immutable Uri as defined by RFC 2396.
Definition: Uri.java:160
Utility class for querying platform specific properties.
Definition: Platform.java:58