1package com.jogamp.common.net;
4import java.io.IOException;
6import java.net.URISyntaxException;
8import org.junit.Assert;
11import com.jogamp.common.net.URIDumpUtil;
12import com.jogamp.common.util.IOUtil;
13import com.jogamp.junit.util.SingletonJunitCase;
15import org.junit.FixMethodOrder;
16import org.junit.runners.MethodSorters;
18@FixMethodOrder(MethodSorters.NAME_ASCENDING)
23 final String
string =
"Hallo Welt öä";
24 System.err.println(
"sp1 "+
string);
25 final File file =
new File(
string);
26 System.err.println(
"file "+file);
27 System.err.println(
"file.path.dec "+file.getPath());
28 System.err.println(
"file.path.abs "+file.getAbsolutePath());
29 System.err.println(
"file.path.can "+file.getCanonicalPath());
36 final String s2 =
IOUtil.
slashify(file.getAbsolutePath(),
true , file.isDirectory() );
37 System.err.println(
"uri2.slashify: "+s2);
42 System.err.println(
"uri2.enc : "+uri1.
getEncoded()+
" - "+(equalEncoded?
"OK":
"ERROR"));
43 System.err.println(
"uri2.pathD : "+uri1.
path.
decode()+
" - "+(equalPath?
"OK":
"ERROR"));
44 System.err.println(
"uri2.asciiE: "+uri1.
toASCIIString()+
" - "+(equalASCII?
"OK":
"ERROR"));
45 ok = equalEncoded && equalPath && equalASCII && ok;
48 final String s2 =
"/"+string;
49 System.err.println(
"uri3.orig: "+s2);
51 final String rString =
"file:/Hallo%20Welt%20öä";
52 final String rPath = s2;
53 final String rASCII =
"file:/Hallo%20Welt%20%C3%B6%C3%A4";
55 final boolean equalPath = rPath.equals(uri1.
path.
decode());
57 System.err.println(
"uri3.enc : "+uri1.
toString()+
" - "+(equalEncoded?
"OK":
"ERROR"));
58 System.err.println(
"uri3.pathD : "+uri1.
path.
decode()+
" - "+(equalPath?
"OK":
"ERROR"));
59 System.err.println(
"uri3.asciiE: "+uri1.
toASCIIString()+
" - "+(equalASCII?
"OK":
"ERROR"));
60 ok = equalEncoded && equalPath && equalASCII && ok;
63 final String s2 =
"//lala.org/"+string;
64 System.err.println(
"uri4.orig: "+s2);
66 final String rString =
"http://lala.org/Hallo%20Welt%20öä";
67 final String rPath =
"/"+string;
68 final String rASCII =
"http://lala.org/Hallo%20Welt%20%C3%B6%C3%A4";
70 final boolean equalPath = rPath.equals(uri1.
path.
decode());
72 System.err.println(
"uri4.enc : "+uri1.
toString()+
" - "+(equalString?
"OK":
"ERROR"));
73 System.err.println(
"uri4.pathD : "+uri1.
path.
decode()+
" - "+(equalPath?
"OK":
"ERROR"));
74 System.err.println(
"uri4.asciiE: "+uri1.
toASCIIString()+
" - "+(equalASCII?
"OK":
"ERROR"));
75 ok = equalString && equalPath && equalASCII && ok;
77 Assert.assertTrue(
"One or more errors occured see stderr above", ok);
83 final String vanilla =
"XXX ! # $ & ' ( ) * + , / : ; = ? @ [ ]";
84 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");
85 System.err.println(
"vanilla "+vanilla);
87 System.err.println(
"esc1 "+esc1);
88 Assert.assertEquals(escaped, esc1);
90 final String invEsc1 = esc1.
decode();
91 System.err.println(
"inv(esc1) "+invEsc1);
92 Assert.assertEquals(vanilla, invEsc1);
95 final String vanilla =
"/XXX R!# R$&'()*+,/:;=?z@y[x]";
96 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");
97 System.err.println(
"vanilla "+vanilla);
99 System.err.println(
"esc1 "+esc1);
100 Assert.assertEquals(escaped, esc1);
102 final String invEsc1 = esc1.
decode();
103 System.err.println(
"inv(esc1) "+invEsc1);
104 Assert.assertEquals(vanilla, invEsc1);
108 final String vanilla =
"/XXX $ ^ ~ # [ ]";
113 final String vanilla =
"/XXX ! & ' ( ) + , / ; = @ [ ]";
120 final String vanilla =
"/XXX \"%-.<>\\^_`{|}~";
121 final Uri.Encoded escaped =
Uri.
Encoded.
cast(
"/XXX%20%22%25-.%3C%3E%5C%5E_%60%7B%7C%7D~");
122 System.err.println(
"vanilla "+vanilla);
124 System.err.println(
"esc1 "+esc1);
125 Assert.assertEquals(escaped, esc1);
127 final String invEsc1 = esc1.
decode();
128 System.err.println(
"inv(esc1) "+invEsc1);
129 Assert.assertEquals(vanilla, invEsc1);
133 private static void showDump0x(
final String
string)
throws IOException, URISyntaxException {
134 final File file =
new File(
string);
135 System.err.println(
"file "+file);
136 System.err.println(
"file.path.dec "+file.getPath());
137 System.err.println(
"file.path.abs "+file.getAbsolutePath());
138 System.err.println(
"file.path.can "+file.getCanonicalPath());
140 System.err.println(
"File-path -> Uri:");
144 System.err.println(
"Uri -> File:");
148 System.err.println(
"Uri -> URI:");
149 final URI uri3 = uri2.
toURI();
152 System.err.println(
"URI -> Uri (keep encoding):");
156 System.err.println(
"URI -> Uri (re-encode):");
164 final Uri uri0 =
Uri.
cast(
"http://localhost/test01.html#tag01");
165 final Uri uri1 =
Uri.
create(
"http",
null,
"localhost", -1,
"/test01.html",
null,
"tag01");
166 final Uri uri2 =
Uri.
create(
"http",
"localhost",
"/test01.html",
"tag01");
168 Assert.assertEquals(uri0, uri1);
171 Assert.assertEquals(uri0, uri2);
174 Assert.assertEquals(uri1, uri2);
177 final Uri uriA =
Uri.
create(
"http",
null,
"localhost", -1,
"/test02.html",
null,
"tag01");
178 final Uri uriB =
Uri.
create(
"http",
null,
"localhost", -1,
"/test01.html",
null,
"tag02");
179 final Uri uriC =
Uri.
create(
"http",
null,
"lalalhost", -1,
"/test01.html",
null,
"tag01");
180 final Uri uriD =
Uri.
create(
"sftp",
null,
"localhost", -1,
"/test01.html",
null,
"tag01");
182 Assert.assertNotEquals(uri1, uriA);
183 Assert.assertNotEquals(uri1, uriB);
184 Assert.assertNotEquals(uri1, uriC);
185 Assert.assertNotEquals(uri1, uriD);
188 final Uri uri0 =
Uri.
cast(
"http://user@localhost:80/test01.html?test=01&test=02#tag01");
189 final Uri uri1 =
Uri.
create(
"http",
"user",
"localhost", 80,
"/test01.html",
"test=01&test=02",
"tag01");
191 Assert.assertEquals(uri0, uri1);
194 final Uri uriA =
Uri.
cast(
"http://user@localhost:80/test01.html?test=01&test=02#tag02");
195 final Uri uriB =
Uri.
cast(
"http://user@localhost:80/test01.html?test=01&test=03#tag01");
196 final Uri uriC =
Uri.
cast(
"http://user@localhost:80/test04.html?test=01&test=02#tag01");
197 final Uri uriD =
Uri.
cast(
"http://user@localhost:88/test01.html?test=01&test=02#tag01");
198 final Uri uriE =
Uri.
cast(
"http://user@lalalhost:80/test01.html?test=01&test=02#tag01");
199 final Uri uriF =
Uri.
cast(
"http://test@localhost:80/test01.html?test=01&test=02#tag01");
200 final Uri uriG =
Uri.
cast(
"sftp://user@localhost:80/test01.html?test=01&test=02#tag01");
202 Assert.assertNotEquals(uri1, uriA);
203 Assert.assertNotEquals(uri1, uriB);
204 Assert.assertNotEquals(uri1, uriC);
205 Assert.assertNotEquals(uri1, uriD);
206 Assert.assertNotEquals(uri1, uriE);
207 Assert.assertNotEquals(uri1, uriF);
208 Assert.assertNotEquals(uri1, uriG);
215 final Uri input =
Uri.
cast(
"http://localhost/test01.html#tag01");
217 Assert.assertNull(contained);
220 final Uri input =
Uri.
cast(
"jar:http://localhost/test01.jar!/com/jogamp/Lala.class#tag01");
221 final Uri expected =
Uri.
cast(
"http://localhost/test01.jar#tag01");
225 Assert.assertEquals(expected, contained);
229 final Uri input =
Uri.
cast(
"jar:file://localhost/test01.jar!/");
230 final Uri expected =
Uri.
cast(
"file://localhost/test01.jar");
234 Assert.assertEquals(expected, contained);
238 final Uri input =
Uri.
cast(
"sftp:http://localhost/test01.jar?lala=01#tag01");
239 final Uri expected =
Uri.
cast(
"http://localhost/test01.jar?lala=01#tag01");
243 Assert.assertEquals(expected, contained);
251 final Uri input =
Uri.
cast(
"./dummy/nop/../a.txt");
255 Assert.assertEquals(expected, normal);
258 final Uri input =
Uri.
cast(
"../dummy/nop/../a.txt");
259 final Uri expected =
Uri.
cast(
"../dummy/a.txt");
262 Assert.assertEquals(expected, normal);
265 final Uri input =
Uri.
cast(
"http://localhost/dummy/../");
266 final Uri expected =
Uri.
cast(
"http://localhost/");
269 Assert.assertEquals(expected, normal);
272 final Uri input =
Uri.
cast(
"http://localhost/dummy/./../");
273 final Uri expected =
Uri.
cast(
"http://localhost/");
276 Assert.assertEquals(expected, normal);
279 final Uri input =
Uri.
cast(
"http://localhost/dummy/../aa/././../");
280 final Uri expected =
Uri.
cast(
"http://localhost/");
283 Assert.assertEquals(expected, normal);
286 final Uri input =
Uri.
cast(
"http://localhost/test/dummy/./../text.txt");
287 final Uri expected =
Uri.
cast(
"http://localhost/test/text.txt");
290 Assert.assertEquals(expected, normal);
293 final Uri input =
Uri.
cast(
"http://localhost/test/dummy/../text.txt?lala=01&lili=02#frag01");
294 final Uri expected =
Uri.
cast(
"http://localhost/test/text.txt?lala=01&lili=02#frag01");
297 Assert.assertEquals(expected, normal);
304 final Uri input =
Uri.
cast(
"jar:http://localhost/dummy/../abc.jar!/");
305 final Uri expected =
Uri.
cast(
"jar:http://localhost/abc.jar!/");
308 Assert.assertEquals(expected, normal);
311 final Uri input =
Uri.
cast(
"jar:http://localhost/test/./dummy/../abc.jar!/");
312 final Uri expected =
Uri.
cast(
"jar:http://localhost/test/abc.jar!/");
315 Assert.assertEquals(expected, normal);
318 final Uri input =
Uri.
cast(
"jar:http://localhost/test/dummy/../abc.jar!/a/b/C.class");
319 final Uri expected =
Uri.
cast(
"jar:http://localhost/test/abc.jar!/a/b/C.class");
322 Assert.assertEquals(expected, normal);
325 final Uri input =
Uri.
cast(
"jar:http://localhost/test/dummy/../abc.jar!/a/b/C.class?lala=01&lili=02#frag01");
326 final Uri expected =
Uri.
cast(
"jar:http://localhost/test/abc.jar!/a/b/C.class?lala=01&lili=02#frag01");
329 Assert.assertEquals(expected, normal);
336 final Uri input =
Uri.
cast(
"http://localhost/");
339 Assert.assertEquals(input, directory);
341 Assert.assertNull(parent);
344 final Uri input =
Uri.
cast(
"http://localhost/dummy/../test/");
345 final Uri expectedD =
Uri.
cast(
"http://localhost/test/");
346 final Uri expectedP =
Uri.
cast(
"http://localhost/");
349 Assert.assertEquals(expectedD, directory);
351 Assert.assertEquals(expectedP, parent);
354 final Uri input =
Uri.
cast(
"http://localhost/dummy/../test/dummy/../");
355 final Uri expectedD =
Uri.
cast(
"http://localhost/test/");
356 final Uri expectedP =
Uri.
cast(
"http://localhost/");
359 Assert.assertEquals(expectedD, directory);
361 Assert.assertEquals(expectedP, parent);
364 final Uri input =
Uri.
cast(
"http://localhost/dir/test01.jar?lala=01#frag01");
365 final Uri expParen1 =
Uri.
cast(
"http://localhost/dir/?lala=01#frag01");
366 final Uri expFolde1 = expParen1;
367 final Uri expParen2 =
Uri.
cast(
"http://localhost/?lala=01#frag01");
368 final Uri expFolde2 = expParen1;
369 final Uri expParen3 =
null;
370 final Uri expFolde3 = expParen2;
371 Assert.assertNotEquals(input, expParen1);
372 Assert.assertNotEquals(expParen1, expParen2);
373 Assert.assertNotEquals(expParen1, expParen3);
377 Assert.assertEquals(expParen1, parent1);
380 Assert.assertEquals(expFolde1, folder1);
383 Assert.assertEquals(expParen2, parent2);
386 Assert.assertEquals(expFolde2, folder2);
389 Assert.assertEquals(expParen3, parent3);
391 Assert.assertEquals(expFolde3, folder3);
398 final Uri input =
Uri.
cast(
"jar:http://localhost/test.jar!/");
401 Assert.assertEquals(input, directory);
403 Assert.assertNull(parent);
406 final Uri input =
Uri.
cast(
"jar:http://localhost/dummy/../test/test.jar!/");
407 final Uri expectedD =
Uri.
cast(
"jar:http://localhost/test/test.jar!/");
408 final Uri expectedP =
null;
411 Assert.assertEquals(expectedD, directory);
413 Assert.assertEquals(expectedP, parent);
416 final Uri input =
Uri.
cast(
"jar:http://localhost/dummy/../test/dummy/../test.jar!/a/b/C.class");
417 final Uri expectedD =
Uri.
cast(
"jar:http://localhost/test/test.jar!/a/b/");
418 final Uri expectedP =
Uri.
cast(
"jar:http://localhost/test/test.jar!/a/b/");
421 Assert.assertEquals(expectedD, directory);
423 Assert.assertEquals(expectedP, parent);
426 final Uri input =
Uri.
cast(
"jar:http://localhost/test01.jar!/com/Lala.class?lala=01#frag01");
427 final Uri expParen1 =
Uri.
cast(
"jar:http://localhost/test01.jar!/com/?lala=01#frag01");
428 final Uri expFolde1 = expParen1;
429 final Uri expParen2 =
Uri.
cast(
"jar:http://localhost/test01.jar!/?lala=01#frag01");
430 final Uri expFolde2 = expParen1;
431 final Uri expParen3 =
null;
432 final Uri expFolde3 = expParen2;
433 Assert.assertNotEquals(input, expParen1);
434 Assert.assertNotEquals(expParen1, expParen2);
435 Assert.assertNotEquals(expParen1, expParen3);
439 Assert.assertEquals(expParen1, parent1);
442 Assert.assertEquals(expFolde1, folder1);
445 Assert.assertEquals(expParen2, parent2);
448 Assert.assertEquals(expFolde2, folder2);
451 Assert.assertEquals(expParen3, parent3);
453 Assert.assertEquals(expFolde3, folder3);
457 public static void main(
final String args[])
throws IOException {
458 final String tstname =
TestUri01.class.getName();
459 org.junit.runner.JUnitCore.
main(tstname);
void test04EqualsAndHashCode()
static void main(final String args[])
void test11ParentAndDirOpaque()
void test02URIEscapeSpecialChars()
void test08NormalizedHierarchy()
void test03URIEscapeCommonChars()
void test09NormalizedOpaque()
void test10ParentAndDirHierarchy()
static void showURI(final URI uri)
static void showUri(final Uri uri)
static void showReencodedURIOfUri(final Uri uri)
Just showing different encoding of Uri -> URI.
Immutable RFC3986 encoded string.
final boolean equals(final Object o)
final String get()
Returns the encoded String.
final String decode()
Decodes the string argument which is assumed to be encoded in the x-www-form-urlencoded MIME conten...
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.
static final String HTTP_SCHEME
{@value}
ASCIIEncoded toASCIIString()
Returns the encoded input encoded in US-ASCII.
static Uri valueOf(final File file)
Creates a new Uri instance using the given File instance.
final Uri getNormalized()
Normalizes this Uri's path and return the normalized form if it differs, otherwise this instance.
static final String PATH_LEGAL
Valid charset for RFC 2396 path, additional to legal alphanum characters.
static Uri valueOfFilepath(final String path)
Creates a new Uri instance using the given file-path argument.
final String toString()
Returns the encoded input as String, never null, same as getEncoded().
final java.net.URI toURI()
Returns a new URI instance using the encoded input string, new URI(uri.input), i.e.
final Uri getContainedUri()
If this instance's schemeSpecificPart contains a Uri itself, a sub-Uri, return schemeSpecificPart + #...
static final String FILE_SCHEME
{@value}
final Encoded path
Encoded path part of scheme-specific-part, never null.
final Uri getParent()
Returns this Uri's parent directory Uri.
final boolean equals(final Object o)
Uri getDirectory()
Returns this Uri's directory Uri.
static Uri cast(final String encodedUri)
Casts the given encoded String to a new Encoded instance used to create the resulting Uri instance vi...
static Uri create(final String scheme, final String ssp, final String fragment)
Creates a new Uri instance using the given unencoded arguments.
final Encoded getEncoded()
Returns the encoded input, never null.
static String slashify(final String path, final boolean startWithSlash, final boolean endWithSlash)