2 // UriTest.cs - NUnit Test Cases for System.Uri
\r
5 // Lawrence Pit (loz@cable.a2000.nl)
\r
6 // Martin Willemoes Hansen (mwh@sysrq.dk)
\r
8 // (C) 2003 Martin Willemoes Hansen
\r
11 using NUnit.Framework;
\r
15 namespace MonoTests.System
\r
18 public class UriTest
\r
20 protected bool isWin32 = false;
\r
23 public void GetReady ()
\r
25 isWin32 = (Path.DirectorySeparatorChar == '\\');
\r
29 public void Constructors ()
\r
34 uri = new Uri ("http://www.ximian.com/foo" + ((char) 0xa9) + "/bar/index.cgi?a=1&b=" + ((char) 0xa9) + "left#fragm?ent2");
\r
37 uri = new Uri ("http://www.ximian.com/foo/xxx\"()-._;<=>@{|}~-,.`_^]\\[xx/" + ((char) 0xa9) + "/bar/index.cgi#fra+\">=@[gg]~gment2");
\r
40 uri = new Uri("http://11.22.33.588:9090");
\r
43 uri = new Uri("http://[11:22:33::88]:9090");
\r
46 uri = new Uri("http://[::127.11.22.33]:8080");
\r
49 uri = new Uri("http://[abcde::127.11.22.33]:8080");
\r
54 uri = new Uri ("http://www.contoso.com:1234/foo/bar/");
\r
57 uri = new Uri ("http://www.contoso.com:1234/foo/bar");
\r
60 uri = new Uri ("http://www.contoso.com:1234/");
\r
63 uri = new Uri ("http://www.contoso.com:1234");
\r
67 uri = new Uri ("http://contoso.com?subject=uri");
\r
68 Assertion.AssertEquals ("#k1", "/", uri.AbsolutePath);
\r
69 Assertion.AssertEquals ("#k2", "http://contoso.com/?subject=uri", uri.AbsoluteUri);
\r
70 Assertion.AssertEquals ("#k3", "contoso.com", uri.Authority);
\r
71 Assertion.AssertEquals ("#k4", "", uri.Fragment);
\r
72 Assertion.AssertEquals ("#k5", "contoso.com", uri.Host);
\r
73 Assertion.AssertEquals ("#k6", UriHostNameType.Dns, uri.HostNameType);
\r
74 Assertion.AssertEquals ("#k7", true, uri.IsDefaultPort);
\r
75 Assertion.AssertEquals ("#k8", false, uri.IsFile);
\r
76 Assertion.AssertEquals ("#k9", false, uri.IsLoopback);
\r
77 Assertion.AssertEquals ("#k10", false, uri.IsUnc);
\r
78 Assertion.AssertEquals ("#k11", "/", uri.LocalPath);
\r
79 Assertion.AssertEquals ("#k12", "/?subject=uri", uri.PathAndQuery);
\r
80 Assertion.AssertEquals ("#k13", 80, uri.Port);
\r
81 Assertion.AssertEquals ("#k14", "?subject=uri", uri.Query);
\r
82 Assertion.AssertEquals ("#k15", "http", uri.Scheme);
\r
83 Assertion.AssertEquals ("#k16", false, uri.UserEscaped);
\r
84 Assertion.AssertEquals ("#k17", "", uri.UserInfo);
\r
86 uri = new Uri ("mailto:user:pwd@contoso.com?subject=uri");
\r
87 Assertion.AssertEquals ("#m1", "", uri.AbsolutePath);
\r
88 Assertion.AssertEquals ("#m2", "mailto:user:pwd@contoso.com?subject=uri", uri.AbsoluteUri);
\r
89 Assertion.AssertEquals ("#m3", "contoso.com", uri.Authority);
\r
90 Assertion.AssertEquals ("#m4", "", uri.Fragment);
\r
91 Assertion.AssertEquals ("#m5", "contoso.com", uri.Host);
\r
92 Assertion.AssertEquals ("#m6", UriHostNameType.Dns, uri.HostNameType);
\r
93 Assertion.AssertEquals ("#m7", true, uri.IsDefaultPort);
\r
94 Assertion.AssertEquals ("#m8", false, uri.IsFile);
\r
95 Assertion.AssertEquals ("#m9", false, uri.IsLoopback);
\r
96 Assertion.AssertEquals ("#m10", false, uri.IsUnc);
\r
97 Assertion.AssertEquals ("#m11", "", uri.LocalPath);
\r
98 Assertion.AssertEquals ("#m12", "?subject=uri", uri.PathAndQuery);
\r
99 Assertion.AssertEquals ("#m13", 25, uri.Port);
\r
100 Assertion.AssertEquals ("#m14", "?subject=uri", uri.Query);
\r
101 Assertion.AssertEquals ("#m15", "mailto", uri.Scheme);
\r
102 Assertion.AssertEquals ("#m16", false, uri.UserEscaped);
\r
103 Assertion.AssertEquals ("#m17", "user:pwd", uri.UserInfo);
\r
105 uri = new Uri (@"\\myserver\mydir\mysubdir\myfile.ext");
\r
106 Assertion.AssertEquals ("#n1", "/mydir/mysubdir/myfile.ext", uri.AbsolutePath);
\r
107 Assertion.AssertEquals ("#n2", "file://myserver/mydir/mysubdir/myfile.ext", uri.AbsoluteUri);
\r
108 Assertion.AssertEquals ("#n3", "myserver", uri.Authority);
\r
109 Assertion.AssertEquals ("#n4", "", uri.Fragment);
\r
110 Assertion.AssertEquals ("#n5", "myserver", uri.Host);
\r
111 Assertion.AssertEquals ("#n6", UriHostNameType.Dns, uri.HostNameType);
\r
112 Assertion.AssertEquals ("#n7", true, uri.IsDefaultPort);
\r
113 Assertion.AssertEquals ("#n8", true, uri.IsFile);
\r
114 Assertion.AssertEquals ("#n9", false, uri.IsLoopback);
\r
115 Assertion.AssertEquals ("#n10", true, uri.IsUnc);
\r
118 Assertion.AssertEquals ("#n11", @"\\myserver\mydir\mysubdir\myfile.ext", uri.LocalPath);
\r
120 Assertion.AssertEquals ("#n11", "/myserver/mydir/mysubdir/myfile.ext", uri.LocalPath);
\r
122 Assertion.AssertEquals ("#n12", "/mydir/mysubdir/myfile.ext", uri.PathAndQuery);
\r
123 Assertion.AssertEquals ("#n13", -1, uri.Port);
\r
124 Assertion.AssertEquals ("#n14", "", uri.Query);
\r
125 Assertion.AssertEquals ("#n15", "file", uri.Scheme);
\r
126 Assertion.AssertEquals ("#n16", false, uri.UserEscaped);
\r
127 Assertion.AssertEquals ("#n17", "", uri.UserInfo);
\r
129 uri = new Uri (new Uri("http://www.contoso.com"), "Hello World.htm", true);
\r
130 Assertion.AssertEquals ("#rel1a", "http://www.contoso.com/Hello World.htm", uri.AbsoluteUri);
\r
131 Assertion.AssertEquals ("#rel1b", true, uri.UserEscaped);
\r
132 uri = new Uri (new Uri("http://www.contoso.com"), "Hello World.htm", false);
\r
133 Assertion.AssertEquals ("#rel2a", "http://www.contoso.com/Hello%20World.htm", uri.AbsoluteUri);
\r
134 Assertion.AssertEquals ("#rel2b", false, uri.UserEscaped);
\r
135 uri = new Uri (new Uri("http://www.contoso.com"), "http://www.xxx.com/Hello World.htm", false);
\r
136 Assertion.AssertEquals ("#rel3", "http://www.xxx.com/Hello%20World.htm", uri.AbsoluteUri);
\r
137 //uri = new Uri (new Uri("http://www.contoso.com"), "foo:8080/bar/Hello World.htm", false);
\r
138 //Assertion.AssertEquals ("#rel4", "foo:8080/bar/Hello%20World.htm", uri.AbsoluteUri);
\r
139 uri = new Uri (new Uri("http://www.contoso.com"), "foo/bar/Hello World.htm?x=0:8", false);
\r
140 Assertion.AssertEquals ("#rel5", "http://www.contoso.com/foo/bar/Hello%20World.htm?x=0:8", uri.AbsoluteUri);
\r
141 uri = new Uri (new Uri("http://www.contoso.com/xxx/yyy/index.htm"), "foo/bar/Hello World.htm?x=0:8", false);
\r
142 Assertion.AssertEquals ("#rel6", "http://www.contoso.com/xxx/yyy/foo/bar/Hello%20World.htm?x=0:8", uri.AbsoluteUri);
\r
143 uri = new Uri (new Uri("http://www.contoso.com/xxx/yyy/index.htm"), "/foo/bar/Hello World.htm?x=0:8", false);
\r
144 Assertion.AssertEquals ("#rel7", "http://www.contoso.com/foo/bar/Hello%20World.htm?x=0:8", uri.AbsoluteUri);
\r
145 uri = new Uri (new Uri("http://www.contoso.com/xxx/yyy/index.htm"), "../foo/bar/Hello World.htm?x=0:8", false);
\r
146 Assertion.AssertEquals ("#rel8", "http://www.contoso.com/xxx/foo/bar/Hello%20World.htm?x=0:8", uri.AbsoluteUri);
\r
147 uri = new Uri (new Uri("http://www.contoso.com/xxx/yyy/index.htm"), "../../../foo/bar/Hello World.htm?x=0:8", false);
\r
148 Assertion.AssertEquals ("#rel9", "http://www.contoso.com/../foo/bar/Hello%20World.htm?x=0:8", uri.AbsoluteUri);
\r
149 uri = new Uri (new Uri("http://www.contoso.com/xxx/yyy/index.htm"), "./foo/bar/Hello World.htm?x=0:8", false);
\r
150 Assertion.AssertEquals ("#rel10", "http://www.contoso.com/xxx/yyy/foo/bar/Hello%20World.htm?x=0:8", uri.AbsoluteUri);
\r
153 uri = new Uri (null, "http://www.contoso.com/index.htm", false);
\r
154 Assertion.Fail ("#rel20");
\r
155 } catch (NullReferenceException) {
\r
158 uri = new Uri (new Uri("http://www.contoso.com"), null, false);
\r
159 Assertion.Fail ("#rel21");
\r
160 } catch (NullReferenceException) {
\r
163 uri = new Uri (new Uri("http://www.contoso.com/foo/bar/index.html?x=0"), String.Empty, false);
\r
164 Assertion.AssertEquals("#22", "http://www.contoso.com/foo/bar/index.html?x=0", uri.ToString ());
\r
165 } catch (NullReferenceException) {
\r
168 uri = new Uri ("http://www.contoso.com:12345678/foo/bar/");
\r
169 Assertion.Fail ("#30: known to fail with ms.net, should have failed because of invalid port");
\r
170 } catch (UriFormatException) { }
\r
174 public void LocalPath ()
\r
176 Uri uri = new Uri ("c:\\tmp\\hello.txt");
\r
177 Assertion.AssertEquals ("#1a", "file:///c:/tmp/hello.txt", uri.ToString ());
\r
178 Assertion.AssertEquals ("#1b", "c:\\tmp\\hello.txt", uri.LocalPath);
\r
179 Assertion.AssertEquals ("#1c", "file", uri.Scheme);
\r
180 Assertion.AssertEquals ("#1d", "", uri.Host);
\r
181 Assertion.AssertEquals ("#1e", "c:/tmp/hello.txt", uri.AbsolutePath);
\r
183 uri = new Uri ("file:////////cygwin/tmp/hello.txt");
\r
184 Assertion.AssertEquals ("#3a", "file://cygwin/tmp/hello.txt", uri.ToString ());
\r
186 Assertion.AssertEquals ("#3b win32", "\\\\cygwin\\tmp\\hello.txt", uri.LocalPath);
\r
188 Assertion.AssertEquals ("#3b *nix", "/cygwin/tmp/hello.txt", uri.LocalPath);
\r
189 Assertion.AssertEquals ("#3c", "file", uri.Scheme);
\r
190 Assertion.AssertEquals ("#3d", "cygwin", uri.Host);
\r
191 Assertion.AssertEquals ("#3e", "/tmp/hello.txt", uri.AbsolutePath);
\r
193 uri = new Uri ("file://mymachine/cygwin/tmp/hello.txt");
\r
194 Assertion.AssertEquals ("#4a", "file://mymachine/cygwin/tmp/hello.txt", uri.ToString ());
\r
196 Assertion.AssertEquals ("#4b win32", "\\\\mymachine\\cygwin\\tmp\\hello.txt", uri.LocalPath);
\r
198 Assertion.AssertEquals ("#4b *nix", "/mymachine/cygwin/tmp/hello.txt", uri.LocalPath);
\r
199 Assertion.AssertEquals ("#4c", "file", uri.Scheme);
\r
200 Assertion.AssertEquals ("#4d", "mymachine", uri.Host);
\r
201 Assertion.AssertEquals ("#4e", "/cygwin/tmp/hello.txt", uri.AbsolutePath);
\r
203 uri = new Uri ("file://///c:/cygwin/tmp/hello.txt");
\r
204 Assertion.AssertEquals ("#5a", "file:///c:/cygwin/tmp/hello.txt", uri.ToString ());
\r
205 Assertion.AssertEquals ("#5b", "c:\\cygwin\\tmp\\hello.txt", uri.LocalPath);
\r
206 Assertion.AssertEquals ("#5c", "file", uri.Scheme);
\r
207 Assertion.AssertEquals ("#5d", "", uri.Host);
\r
208 Assertion.AssertEquals ("#5e", "c:/cygwin/tmp/hello.txt", uri.AbsolutePath);
\r
214 Uri uri = new Uri ("http://www.contoso.com");
\r
215 Assertion.Assert ("#1", !uri.IsUnc);
\r
217 uri = new Uri ("news:123456@contoso.com");
\r
218 Assertion.Assert ("#2", !uri.IsUnc);
\r
220 uri = new Uri ("file://server/filename.ext");
\r
221 Assertion.Assert ("#3", uri.IsUnc);
\r
223 uri = new Uri (@"\\server\share\filename.ext");
\r
224 Assertion.Assert ("#6", uri.IsUnc);
\r
228 [Ignore ("Known to fail under MS runtime")]
\r
229 public void Unc2 ()
\r
232 Uri uri = new Uri ("file:/filename.ext");
\r
233 Assertion.Assert ("#4", uri.IsUnc);
\r
234 } catch (UriFormatException) {
\r
235 Assertion.Fail ("#5: known to fail with ms.net");
\r
240 public void FromHex ()
\r
242 Assertion.AssertEquals ("#1", 0, Uri.FromHex ('0'));
\r
243 Assertion.AssertEquals ("#2", 9, Uri.FromHex ('9'));
\r
244 Assertion.AssertEquals ("#3", 10, Uri.FromHex ('a'));
\r
245 Assertion.AssertEquals ("#4", 15, Uri.FromHex ('f'));
\r
246 Assertion.AssertEquals ("#5", 10, Uri.FromHex ('A'));
\r
247 Assertion.AssertEquals ("#6", 15, Uri.FromHex ('F'));
\r
250 Assertion.Fail ("#7");
\r
251 } catch (ArgumentException) {}
\r
254 Assertion.Fail ("#8");
\r
255 } catch (ArgumentException) {}
\r
258 Assertion.Fail ("#8");
\r
259 } catch (ArgumentException) {}
\r
263 public void HexEscape ()
\r
265 Assertion.AssertEquals ("#1","%20", Uri.HexEscape (' '));
\r
266 Assertion.AssertEquals ("#2","%A9", Uri.HexEscape ((char) 0xa9));
\r
267 Assertion.AssertEquals ("#3","%41", Uri.HexEscape ('A'));
\r
269 Uri.HexEscape ((char) 0x0369);
\r
270 Assertion.Fail ("#4");
\r
271 } catch (ArgumentOutOfRangeException) {}
\r
275 public void HexUnescape ()
\r
278 Assertion.AssertEquals ("#1", ' ', Uri.HexUnescape ("%20", ref i));
\r
279 Assertion.AssertEquals ("#2", 3, i);
\r
281 Assertion.AssertEquals ("#3", (char) 0xa9, Uri.HexUnescape ("test%a9test", ref i));
\r
282 Assertion.AssertEquals ("#4", 7, i);
\r
283 Assertion.AssertEquals ("#5", 't', Uri.HexUnescape ("test%a9test", ref i));
\r
284 Assertion.AssertEquals ("#6", 8, i);
\r
286 Assertion.AssertEquals ("#5", '%', Uri.HexUnescape ("test%a", ref i));
\r
287 Assertion.AssertEquals ("#6", 5, i);
\r
288 Assertion.AssertEquals ("#7", '%', Uri.HexUnescape ("testx%xx", ref i));
\r
289 Assertion.AssertEquals ("#8", 6, i);
\r
293 public void IsHexDigit ()
\r
295 Assertion.Assert ("#1", Uri.IsHexDigit ('a'));
\r
296 Assertion.Assert ("#2", Uri.IsHexDigit ('f'));
\r
297 Assertion.Assert ("#3", !Uri.IsHexDigit ('g'));
\r
298 Assertion.Assert ("#4", Uri.IsHexDigit ('0'));
\r
299 Assertion.Assert ("#5", Uri.IsHexDigit ('9'));
\r
300 Assertion.Assert ("#6", Uri.IsHexDigit ('A'));
\r
301 Assertion.Assert ("#7", Uri.IsHexDigit ('F'));
\r
302 Assertion.Assert ("#8", !Uri.IsHexDigit ('G'));
\r
306 public void IsHexEncoding ()
\r
308 Assertion.Assert ("#1", Uri.IsHexEncoding ("test%a9test", 4));
\r
309 Assertion.Assert ("#2", !Uri.IsHexEncoding ("test%a9test", 3));
\r
310 Assertion.Assert ("#3", Uri.IsHexEncoding ("test%a9", 4));
\r
311 Assertion.Assert ("#4", !Uri.IsHexEncoding ("test%a", 4));
\r
315 public void GetLeftPart ()
\r
317 Uri uri = new Uri ("http://www.contoso.com/index.htm#main");
\r
318 Assertion.AssertEquals ("#1", "http://", uri.GetLeftPart (UriPartial.Scheme));
\r
319 Assertion.AssertEquals ("#2", "http://www.contoso.com", uri.GetLeftPart (UriPartial.Authority));
\r
320 Assertion.AssertEquals ("#3", "http://www.contoso.com/index.htm", uri.GetLeftPart (UriPartial.Path));
\r
322 uri = new Uri ("mailto:user@contoso.com?subject=uri");
\r
323 Assertion.AssertEquals ("#4", "mailto:", uri.GetLeftPart (UriPartial.Scheme));
\r
324 Assertion.AssertEquals ("#5", "", uri.GetLeftPart (UriPartial.Authority));
\r
325 Assertion.AssertEquals ("#6", "mailto:user@contoso.com", uri.GetLeftPart (UriPartial.Path));
\r
327 uri = new Uri ("nntp://news.contoso.com/123456@contoso.com");
\r
328 Assertion.AssertEquals ("#7", "nntp://", uri.GetLeftPart (UriPartial.Scheme));
\r
329 Assertion.AssertEquals ("#8", "nntp://news.contoso.com", uri.GetLeftPart (UriPartial.Authority));
\r
330 Assertion.AssertEquals ("#9", "nntp://news.contoso.com/123456@contoso.com", uri.GetLeftPart (UriPartial.Path));
\r
332 uri = new Uri ("news:123456@contoso.com");
\r
333 Assertion.AssertEquals ("#10", "news:", uri.GetLeftPart (UriPartial.Scheme));
\r
334 Assertion.AssertEquals ("#11", "", uri.GetLeftPart (UriPartial.Authority));
\r
335 Assertion.AssertEquals ("#12", "news:123456@contoso.com", uri.GetLeftPart (UriPartial.Path));
\r
337 uri = new Uri ("file://server/filename.ext");
\r
338 Assertion.AssertEquals ("#13", "file://", uri.GetLeftPart (UriPartial.Scheme));
\r
339 Assertion.AssertEquals ("#14", "file://server", uri.GetLeftPart (UriPartial.Authority));
\r
340 Assertion.AssertEquals ("#15", "file://server/filename.ext", uri.GetLeftPart (UriPartial.Path));
\r
342 uri = new Uri (@"\\server\share\filename.ext");
\r
343 Assertion.AssertEquals ("#20", "file://", uri.GetLeftPart (UriPartial.Scheme));
\r
344 Assertion.AssertEquals ("#21", "file://server", uri.GetLeftPart (UriPartial.Authority));
\r
345 Assertion.AssertEquals ("#22", "file://server/share/filename.ext", uri.GetLeftPart (UriPartial.Path));
\r
347 uri = new Uri ("http://www.contoso.com:8080/index.htm#main");
\r
348 Assertion.AssertEquals ("#23", "http://", uri.GetLeftPart (UriPartial.Scheme));
\r
349 Assertion.AssertEquals ("#24", "http://www.contoso.com:8080", uri.GetLeftPart (UriPartial.Authority));
\r
350 Assertion.AssertEquals ("#25", "http://www.contoso.com:8080/index.htm", uri.GetLeftPart (UriPartial.Path));
\r
354 [Ignore("Known to fail under MS runtime")]
\r
355 public void GetLeftPart2 ()
\r
358 Uri uri = new Uri ("file:/filename.ext");
\r
359 Assertion.AssertEquals ("#16", "file://", uri.GetLeftPart (UriPartial.Scheme));
\r
360 Assertion.AssertEquals ("#17", "", uri.GetLeftPart (UriPartial.Authority));
\r
361 Assertion.AssertEquals ("#18", "file:///filename.ext", uri.GetLeftPart (UriPartial.Path));
\r
362 } catch (UriFormatException) {
\r
363 Assertion.Fail ("#19: known to fail with ms.net (it's their own example!)");
\r
368 public void CheckHostName ()
\r
370 Assertion.AssertEquals ("#1", UriHostNameType.Unknown, Uri.CheckHostName (null));
\r
371 Assertion.AssertEquals ("#2", UriHostNameType.Unknown, Uri.CheckHostName (""));
\r
372 Assertion.AssertEquals ("#3", UriHostNameType.Unknown, Uri.CheckHostName ("^&()~`!@"));
\r
373 Assertion.AssertEquals ("#4", UriHostNameType.Dns, Uri.CheckHostName ("x"));
\r
374 Assertion.AssertEquals ("#5", UriHostNameType.IPv4, Uri.CheckHostName ("1.2.3.4"));
\r
375 Assertion.AssertEquals ("#6", UriHostNameType.IPv4, Uri.CheckHostName ("0001.002.03.4"));
\r
376 Assertion.AssertEquals ("#7", UriHostNameType.Dns, Uri.CheckHostName ("0001.002.03.256"));
\r
377 Assertion.AssertEquals ("#8", UriHostNameType.Dns, Uri.CheckHostName ("9001.002.03.4"));
\r
378 Assertion.AssertEquals ("#9", UriHostNameType.Dns, Uri.CheckHostName ("www.contoso.com"));
\r
379 Assertion.AssertEquals ("#10", UriHostNameType.Unknown, Uri.CheckHostName (".www.contoso.com"));
\r
380 Assertion.AssertEquals ("#11: known to fail with ms.net: this is not a valid domain address", UriHostNameType.Unknown, Uri.CheckHostName ("www.contoso.com."));
\r
381 Assertion.AssertEquals ("#12", UriHostNameType.Dns, Uri.CheckHostName ("www.con-toso.com"));
\r
382 Assertion.AssertEquals ("#13", UriHostNameType.Dns, Uri.CheckHostName ("www.con_toso.com"));
\r
383 Assertion.AssertEquals ("#14", UriHostNameType.Unknown, Uri.CheckHostName ("www.con,toso.com"));
\r
386 Assertion.AssertEquals ("#15", UriHostNameType.IPv6, Uri.CheckHostName ("11:22:33:44:55:66:77:88"));
\r
387 Assertion.AssertEquals ("#16", UriHostNameType.IPv6, Uri.CheckHostName ("11::33:44:55:66:77:88"));
\r
388 Assertion.AssertEquals ("#17", UriHostNameType.IPv6, Uri.CheckHostName ("::22:33:44:55:66:77:88"));
\r
389 Assertion.AssertEquals ("#18", UriHostNameType.IPv6, Uri.CheckHostName ("11:22:33:44:55:66:77::"));
\r
390 Assertion.AssertEquals ("#19", UriHostNameType.IPv6, Uri.CheckHostName ("11::88"));
\r
391 Assertion.AssertEquals ("#20", UriHostNameType.IPv6, Uri.CheckHostName ("11::77:88"));
\r
392 Assertion.AssertEquals ("#21", UriHostNameType.IPv6, Uri.CheckHostName ("11:22::88"));
\r
393 Assertion.AssertEquals ("#22", UriHostNameType.IPv6, Uri.CheckHostName ("11::"));
\r
394 Assertion.AssertEquals ("#23", UriHostNameType.IPv6, Uri.CheckHostName ("::88"));
\r
395 Assertion.AssertEquals ("#24", UriHostNameType.IPv6, Uri.CheckHostName ("::1"));
\r
396 Assertion.AssertEquals ("#25", UriHostNameType.IPv6, Uri.CheckHostName ("::"));
\r
397 Assertion.AssertEquals ("#26", UriHostNameType.IPv6, Uri.CheckHostName ("0:0:0:0:0:0:127.0.0.1"));
\r
398 Assertion.AssertEquals ("#27", UriHostNameType.IPv6, Uri.CheckHostName ("::127.0.0.1"));
\r
399 Assertion.AssertEquals ("#28", UriHostNameType.IPv6, Uri.CheckHostName ("::ffFF:169.32.14.5"));
\r
400 Assertion.AssertEquals ("#29", UriHostNameType.IPv6, Uri.CheckHostName ("2001:03A0::/35"));
\r
401 Assertion.AssertEquals ("#30", UriHostNameType.IPv6, Uri.CheckHostName ("[2001:03A0::/35]"));
\r
403 Assertion.AssertEquals ("#31", UriHostNameType.Unknown, Uri.CheckHostName ("2001::03A0::/35"));
\r
404 Assertion.AssertEquals ("#32", UriHostNameType.Unknown, Uri.CheckHostName ("2001:03A0::/35a"));
\r
405 Assertion.AssertEquals ("#33 known to fail with ms.net: this is not a valid IPv6 address.", UriHostNameType.Unknown, Uri.CheckHostName ("2001::03A0:1.2.3.4"));
\r
406 Assertion.AssertEquals ("#34", UriHostNameType.Unknown, Uri.CheckHostName ("::ffff:123.256.155.43"));
\r
407 Assertion.AssertEquals ("#35", UriHostNameType.Unknown, Uri.CheckHostName (":127.0.0.1"));
\r
408 Assertion.AssertEquals ("#36 known to fail with ms.net: this is not a valid IPv6 address.", UriHostNameType.Unknown, Uri.CheckHostName (":11:22:33:44:55:66:77:88"));
\r
409 Assertion.AssertEquals ("#37", UriHostNameType.Unknown, Uri.CheckHostName ("::11:22:33:44:55:66:77:88"));
\r
410 Assertion.AssertEquals ("#38", UriHostNameType.Unknown, Uri.CheckHostName ("11:22:33:44:55:66:77:88::"));
\r
411 Assertion.AssertEquals ("#39", UriHostNameType.Unknown, Uri.CheckHostName ("11:22:33:44:55:66:77:88:"));
\r
412 Assertion.AssertEquals ("#40", UriHostNameType.Unknown, Uri.CheckHostName ("::acbde"));
\r
413 Assertion.AssertEquals ("#41", UriHostNameType.Unknown, Uri.CheckHostName ("::abce:"));
\r
414 Assertion.AssertEquals ("#42", UriHostNameType.Unknown, Uri.CheckHostName ("::abcg"));
\r
415 Assertion.AssertEquals ("#43", UriHostNameType.Unknown, Uri.CheckHostName (":::"));
\r
416 Assertion.AssertEquals ("#44", UriHostNameType.Unknown, Uri.CheckHostName (":"));
\r
420 public void IsLoopback ()
\r
422 Uri uri = new Uri("http://loopback:8080");
\r
423 Assertion.AssertEquals ("#1", true, uri.IsLoopback);
\r
424 uri = new Uri("http://localhost:8080");
\r
425 Assertion.AssertEquals ("#2", true, uri.IsLoopback);
\r
426 uri = new Uri("http://127.0.0.1:8080");
\r
427 Assertion.AssertEquals ("#3", true, uri.IsLoopback);
\r
428 uri = new Uri("http://127.0.0.001:8080");
\r
429 Assertion.AssertEquals ("#4", true, uri.IsLoopback);
\r
430 uri = new Uri("http://[::1]");
\r
431 Assertion.AssertEquals ("#5", true, uri.IsLoopback);
\r
432 uri = new Uri("http://[::1]:8080");
\r
433 Assertion.AssertEquals ("#6", true, uri.IsLoopback);
\r
434 uri = new Uri("http://[::0001]:8080");
\r
435 Assertion.AssertEquals ("#7", true, uri.IsLoopback);
\r
436 uri = new Uri("http://[0:0:0:0::1]:8080");
\r
437 Assertion.AssertEquals ("#8", true, uri.IsLoopback);
\r
438 uri = new Uri("http://[0:0:0:0::127.0.0.1]:8080");
\r
439 Assertion.AssertEquals ("#9", true, uri.IsLoopback);
\r
440 uri = new Uri("http://[0:0:0:0::127.11.22.33]:8080");
\r
441 Assertion.AssertEquals ("#10: known to fail with ms.net", true, uri.IsLoopback);
\r
442 uri = new Uri("http://[::ffff:127.11.22.33]:8080");
\r
443 Assertion.AssertEquals ("#11: known to fail with ms.net", true, uri.IsLoopback);
\r
444 uri = new Uri("http://[::ff00:7f11:2233]:8080");
\r
445 Assertion.AssertEquals ("#12", false, uri.IsLoopback);
\r
446 uri = new Uri("http://[1:0:0:0::1]:8080");
\r
447 Assertion.AssertEquals ("#13", false, uri.IsLoopback);
\r
451 public void Equals ()
\r
453 Uri uri1 = new Uri ("http://www.contoso.com/index.htm#main");
\r
454 Uri uri2 = new Uri ("http://www.contoso.com/index.htm#fragment");
\r
455 Assertion.Assert ("#1", uri1.Equals (uri2));
\r
456 uri2 = new Uri ("http://www.contoso.com/index.htm?x=1");
\r
457 Assertion.Assert ("#2 known to fail with ms.net", !uri1.Equals (uri2));
\r
458 Assertion.Assert ("#3", !uri2.Equals ("http://www.contoso.com/index.html?x=1"));
\r
459 Assertion.Assert ("#4: known to fail with ms.net", !uri1.Equals ("http://www.contoso.com:8080/index.htm?x=1"));
\r
463 public void GetHashCodeTest ()
\r
465 Uri uri1 = new Uri ("http://www.contoso.com/index.htm#main");
\r
466 Uri uri2 = new Uri ("http://www.contoso.com/index.htm#fragment");
\r
467 Assertion.AssertEquals ("#1", uri1.GetHashCode (), uri2.GetHashCode ());
\r
468 uri2 = new Uri ("http://www.contoso.com/index.htm?x=1");
\r
469 Assertion.Assert ("#2", uri1.GetHashCode () != uri2.GetHashCode ());
\r
470 uri2 = new Uri ("http://www.contoso.com:80/index.htm");
\r
471 Assertion.AssertEquals ("#3", uri1.GetHashCode (), uri2.GetHashCode ());
\r
472 uri2 = new Uri ("http://www.contoso.com:8080/index.htm");
\r
473 Assertion.Assert ("#4", uri1.GetHashCode () != uri2.GetHashCode ());
\r
477 public void MakeRelative ()
\r
479 Uri uri1 = new Uri ("http://www.contoso.com/index.htm?x=2");
\r
480 Uri uri2 = new Uri ("http://www.contoso.com/foo/bar/index.htm#fragment");
\r
481 Uri uri3 = new Uri ("http://www.contoso.com/bar/foo/index.htm?y=1");
\r
482 Uri uri4 = new Uri ("http://www.contoso.com/bar/foo2/index.htm?x=0");
\r
483 Uri uri5 = new Uri ("https://www.contoso.com/bar/foo/index.htm?y=1");
\r
484 Uri uri6 = new Uri ("http://www.contoso2.com/bar/foo/index.htm?x=0");
\r
485 Uri uri7 = new Uri ("http://www.contoso2.com/bar/foo/foobar.htm?z=0&y=5");
\r
486 Uri uri8 = new Uri ("http://www.xxx.com/bar/foo/foobar.htm?z=0&y=5" + (char) 0xa9);
\r
488 Assertion.AssertEquals ("#1", "foo/bar/index.htm", uri1.MakeRelative (uri2));
\r
489 Assertion.AssertEquals ("#2", "../../index.htm", uri2.MakeRelative (uri1));
\r
491 Assertion.AssertEquals ("#3", "../../bar/foo/index.htm", uri2.MakeRelative (uri3));
\r
492 Assertion.AssertEquals ("#4", "../../foo/bar/index.htm", uri3.MakeRelative (uri2));
\r
494 Assertion.AssertEquals ("#5", "../foo2/index.htm", uri3.MakeRelative (uri4));
\r
495 Assertion.AssertEquals ("#6", "../foo/index.htm", uri4.MakeRelative (uri3));
\r
497 Assertion.AssertEquals ("#7", "https://www.contoso.com/bar/foo/index.htm?y=1",
\r
498 uri4.MakeRelative (uri5));
\r
500 Assertion.AssertEquals ("#8", "http://www.contoso2.com/bar/foo/index.htm?x=0",
\r
501 uri4.MakeRelative (uri6));
\r
503 Assertion.AssertEquals ("#9", "", uri6.MakeRelative (uri6));
\r
504 Assertion.AssertEquals ("#10", "foobar.htm", uri6.MakeRelative (uri7));
\r
506 Uri uri10 = new Uri ("mailto:xxx@xxx.com");
\r
507 Uri uri11 = new Uri ("mailto:xxx@xxx.com?subject=hola");
\r
508 Assertion.AssertEquals ("#11", "", uri10.MakeRelative (uri11));
\r
510 Uri uri12 = new Uri ("mailto:xxx@mail.xxx.com?subject=hola");
\r
511 Assertion.AssertEquals ("#12", "mailto:xxx@mail.xxx.com?subject=hola", uri10.MakeRelative (uri12));
\r
513 Uri uri13 = new Uri ("mailto:xxx@xxx.com/foo/bar");
\r
514 Assertion.AssertEquals ("#13", "/foo/bar", uri10.MakeRelative (uri13));
\r
516 Assertion.AssertEquals ("#14", "http://www.xxx.com/bar/foo/foobar.htm?z=0&y=5" + (char) 0xa9, uri1.MakeRelative (uri8));
\r
520 public void ToStringTest()
\r
522 Uri uri = new Uri ("dummy://xxx");
\r
523 Assertion.AssertEquals ("#1", "dummy://xxx/", uri.ToString ());
\r
527 public void CheckSchemeName ()
\r
529 Assertion.AssertEquals ("#01", false, Uri.CheckSchemeName (null));
\r
530 Assertion.AssertEquals ("#02", false, Uri.CheckSchemeName (""));
\r
531 Assertion.AssertEquals ("#03", true, Uri.CheckSchemeName ("http"));
\r
532 Assertion.AssertEquals ("#04", true, Uri.CheckSchemeName ("http-"));
\r
533 Assertion.AssertEquals ("#05", false, Uri.CheckSchemeName ("6http-"));
\r
534 Assertion.AssertEquals ("#06", true, Uri.CheckSchemeName ("http6-"));
\r
535 Assertion.AssertEquals ("#07", false, Uri.CheckSchemeName ("http6,"));
\r
536 Assertion.AssertEquals ("#08", true, Uri.CheckSchemeName ("http6."));
\r
537 Assertion.AssertEquals ("#09", false, Uri.CheckSchemeName ("+http"));
\r
538 Assertion.AssertEquals ("#10", true, Uri.CheckSchemeName ("htt+p6"));
\r
539 // 0x00E1 -> ã
\r
540 Assertion.AssertEquals ("#11", true, Uri.CheckSchemeName ("htt\u00E1+p6"));
\r
544 [ExpectedException (typeof (UriFormatException))]
\r
545 public void NoHostname ()
\r
547 Uri uri = new Uri ("http://");
\r
551 [ExpectedException (typeof (UriFormatException))]
\r
552 [Ignore ("MS throws an IndexOutOfRangeException. Bug?")]
\r
553 public void NoHostname2 ()
\r
555 Uri uri = new Uri ("file://");
\r
559 public void Segments1 ()
\r
561 Uri uri = new Uri ("http://localhost/");
\r
562 string [] segments = uri.Segments;
\r
563 Assertion.AssertEquals ("#01", 1, segments.Length);
\r
564 Assertion.AssertEquals ("#02", "/", segments [0]);
\r
569 public void Segments2 ()
\r
571 Uri uri = new Uri ("http://localhost/dir/dummypage.html");
\r
572 string [] segments = uri.Segments;
\r
573 Assertion.AssertEquals ("#01", 3, segments.Length);
\r
574 Assertion.AssertEquals ("#02", "/", segments [0]);
\r
575 Assertion.AssertEquals ("#03", "dir/", segments [1]);
\r
576 Assertion.AssertEquals ("#04", "dummypage.html", segments [2]);
\r
581 public void Segments3 ()
\r
583 Uri uri = new Uri ("http://localhost/dir/dummypage/");
\r
584 string [] segments = uri.Segments;
\r
585 Assertion.AssertEquals ("#01", 3, segments.Length);
\r
586 Assertion.AssertEquals ("#02", "/", segments [0]);
\r
587 Assertion.AssertEquals ("#03", "dir/", segments [1]);
\r
588 Assertion.AssertEquals ("#04", "dummypage/", segments [2]);
\r
593 public void Segments4 ()
\r
595 Uri uri = new Uri ("file:///c:/hello");
\r
596 string [] segments = uri.Segments;
\r
597 Assertion.AssertEquals ("#01", 3, segments.Length);
\r
598 Assertion.AssertEquals ("#02", "c:", segments [0]);
\r
599 Assertion.AssertEquals ("#03", "/", segments [1]);
\r
600 Assertion.AssertEquals ("#04", "hello", segments [2]);
\r
604 public static void Print (Uri uri)
\r
606 Console.WriteLine ("ToString: " + uri.ToString ());
\r
608 Console.WriteLine ("AbsolutePath: " + uri.AbsolutePath);
\r
609 Console.WriteLine ("AbsoluteUri: " + uri.AbsoluteUri);
\r
610 Console.WriteLine ("Authority: " + uri.Authority);
\r
611 Console.WriteLine ("Fragment: " + uri.Fragment);
\r
612 Console.WriteLine ("Host: " + uri.Host);
\r
613 Console.WriteLine ("HostNameType: " + uri.HostNameType);
\r
614 Console.WriteLine ("IsDefaultPort: " + uri.IsDefaultPort);
\r
615 Console.WriteLine ("IsFile: " + uri.IsFile);
\r
616 Console.WriteLine ("IsLoopback: " + uri.IsLoopback);
\r
617 Console.WriteLine ("IsUnc: " + uri.IsUnc);
\r
618 Console.WriteLine ("LocalPath: " + uri.LocalPath);
\r
619 Console.WriteLine ("PathAndQuery: " + uri.PathAndQuery);
\r
620 Console.WriteLine ("Port: " + uri.Port);
\r
621 Console.WriteLine ("Query: " + uri.Query);
\r
622 Console.WriteLine ("Scheme: " + uri.Scheme);
\r
623 Console.WriteLine ("UserEscaped: " + uri.UserEscaped);
\r
624 Console.WriteLine ("UserInfo: " + uri.UserInfo);
\r
626 Console.WriteLine ("Segments:");
\r
627 string [] segments = uri.Segments;
\r
628 if (segments == null)
\r
629 Console.WriteLine ("\tNo Segments");
\r
631 for (int i = 0; i < segments.Length; i++)
\r
632 Console.WriteLine ("\t" + segments[i]);
\r
633 Console.WriteLine ("");
\r