2 // UriTest3.cs - Even more (2.0 specific) unit tests for System.Uri
5 // Sebastien Pouliot <sebastien@ximian.com>
7 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 using NUnit.Framework;
35 namespace MonoTests.System {
38 public class UriTest3 {
40 private const string absolute = "http://www.mono-project.com/CAS";
41 private const string relative = "server.com/directory/";
44 public void Absolute_UriKind_Absolute ()
46 Uri uri = new Uri (absolute, UriKind.Absolute);
47 Assert.AreEqual ("www.mono-project.com", uri.DnsSafeHost, "DnsSafeHost");
48 Assert.IsTrue (uri.IsAbsoluteUri, "IsAbsoluteUri");
49 Assert.AreEqual (absolute, uri.OriginalString, "OriginalString");
53 [Category ("NotWorking")]
54 public void Relative_UriKind_Relative ()
56 Uri uri = new Uri (relative, UriKind.Relative);
57 Assert.IsFalse (uri.IsAbsoluteUri, "IsAbsoluteUri");
58 Assert.AreEqual (relative, uri.OriginalString, "OriginalString");
59 Assert.IsFalse (uri.UserEscaped, "UserEscaped");
60 // using any other property would throw an InvalidOperationException
64 [ExpectedException (typeof (UriFormatException))]
65 public void Relative_UriKind_Absolute ()
67 new Uri (relative, UriKind.Absolute);
71 [ExpectedException (typeof (UriFormatException))]
72 [Category ("NotWorking")]
73 public void Absolute_UriKind_Relative ()
75 new Uri (absolute, UriKind.Relative);
79 [Category ("NotWorking")]
80 public void TryCreate_String_UriKind_Uri ()
83 Assert.IsTrue (Uri.TryCreate (absolute, UriKind.Absolute, out uri), "absolute-Absolute");
84 Assert.AreEqual (absolute, uri.AbsoluteUri, "absolute-Absolute-AbsoluteUri");
86 Assert.IsTrue (Uri.TryCreate (absolute, UriKind.RelativeOrAbsolute, out uri), "absolute-RelativeOrAbsolute");
87 Assert.AreEqual (absolute, uri.AbsoluteUri, "absolute-RelativeOrAbsolute-AbsoluteUri");
89 Assert.IsFalse (Uri.TryCreate (absolute, UriKind.Relative, out uri), "absolute-Relative");
90 Assert.IsNull (uri, "absolute-Relative-uri");
92 Assert.IsFalse (Uri.TryCreate (relative, UriKind.Absolute, out uri), "relative-Absolute");
93 Assert.IsNull (uri, "relative-Relative-uri");
95 Assert.IsTrue (Uri.TryCreate (relative, UriKind.RelativeOrAbsolute, out uri), "relative-RelativeOrAbsolute");
96 Assert.AreEqual (relative, uri.OriginalString, "relative-RelativeOrAbsolute-OriginalString");
98 Assert.IsTrue (Uri.TryCreate (relative, UriKind.Relative, out uri), "relative-Relative");
99 Assert.AreEqual (relative, uri.OriginalString, "relative-RelativeOrAbsolute-OriginalString");
103 [Category ("NotWorking")]
104 public void TryCreate_Uri_String_Uri ()
106 Uri baseUri = new Uri (absolute);
109 Assert.IsTrue (Uri.TryCreate (baseUri, relative, out uri), "baseUri+relative");
110 Assert.AreEqual ("http://www.mono-project.com/server.com/directory/", uri.AbsoluteUri, "baseUri+relative+AbsoluteUri");
111 Assert.AreEqual ("http://www.mono-project.com/server.com/directory/", uri.OriginalString, "baseUri+relative+OriginalString");
113 Assert.IsTrue (Uri.TryCreate (baseUri, absolute, out uri), "baseUri+absolute");
114 Assert.AreEqual (absolute, uri.AbsoluteUri, "baseUri+absolute+AbsoluteUri");
115 Assert.AreEqual (absolute, uri.OriginalString, "baseUri+absolute+OriginalString");
117 Uri relativeUri = new Uri (relative, UriKind.Relative);
118 Assert.IsFalse (Uri.TryCreate (relativeUri, relative, out uri), "relativeUri+relative");
119 Assert.IsNull (uri, "relativeUri+relative+Uri");
121 Assert.IsTrue (Uri.TryCreate (relativeUri, absolute, out uri), "relativeUri+absolute");
122 Assert.AreEqual (absolute, uri.OriginalString, "relativeUri+absolute+OriginalString");
125 Assert.IsFalse (Uri.TryCreate (baseUri, n, out uri), "baseUri+null");
126 Assert.IsNull (uri, "baseUri+null+Uri");
127 Assert.IsFalse (Uri.TryCreate (relativeUri, n, out uri), "relativeUri+null");
128 Assert.IsNull (uri, "relativeUri+null+Uri");
129 Assert.IsFalse (Uri.TryCreate (null, relative, out uri), "null+relative");
130 Assert.IsNull (uri, "null+relative+Uri");
132 Assert.IsTrue (Uri.TryCreate (null, absolute, out uri), "null+absolute");
133 Assert.AreEqual (absolute, uri.OriginalString, "null+absolute+OriginalString");
137 [Category ("NotWorking")]
138 public void TryCreate_Uri_Uri_Uri ()
140 Uri baseUri = new Uri (absolute);
141 Uri relativeUri = new Uri (relative, UriKind.Relative);
144 Assert.IsTrue (Uri.TryCreate (baseUri, relativeUri, out uri), "baseUri+relativeUri");
145 Assert.AreEqual ("http://www.mono-project.com/server.com/directory/", uri.AbsoluteUri, "baseUri+relativeUri+AbsoluteUri");
146 Assert.AreEqual ("http://www.mono-project.com/server.com/directory/", uri.OriginalString, "baseUri+relativeUri+OriginalString");
148 Assert.IsTrue (Uri.TryCreate (baseUri, baseUri, out uri), "baseUri+baseUri");
149 Assert.AreEqual (absolute, uri.AbsoluteUri, "baseUri+baseUri+AbsoluteUri");
150 Assert.AreEqual (absolute, uri.OriginalString, "baseUri+baseUri+OriginalString");
152 Assert.IsFalse (Uri.TryCreate (relativeUri, relativeUri, out uri), "relativeUri+relativeUri");
153 Assert.IsNull (uri, "relativeUri+relativeUri+Uri");
155 Assert.IsFalse (Uri.TryCreate (relativeUri, baseUri, out uri), "relativeUri+baseUri");
156 Assert.IsNull (uri, "relativeUri+baseUri+Uri");
158 // a null relativeUri throws a NullReferenceException (see next test)
159 Assert.IsFalse (Uri.TryCreate (null, relativeUri, out uri), "null+relativeUri");
160 Assert.IsNull (uri, "null+relativeUri+Uri");
161 Assert.IsFalse (Uri.TryCreate (null, baseUri, out uri), "null+baseUri");
162 Assert.IsNull (uri, "null+baseUri+Uri");
166 [ExpectedException (typeof (NullReferenceException))]
167 public void TryCreate_Uri_UriNull_Uri ()
170 Uri.TryCreate (new Uri (absolute), (Uri) null, out uri);
174 public void IsWellFormedUriString_Null ()
176 Assert.IsFalse (Uri.IsWellFormedUriString (null, UriKind.Absolute), "null");
180 [Category ("NotWorking")]
181 public void IsWellFormedUriString_Http ()
183 Assert.IsFalse (Uri.IsWellFormedUriString ("http://www.go-mono.com/Main Page", UriKind.Absolute), "http/space");
184 Assert.IsTrue (Uri.IsWellFormedUriString ("http://www.go-mono.com/Main%20Page", UriKind.Absolute), "http/%20");
188 [ExpectedException (typeof (ArgumentException))]
189 public void IsWellFormedUriString_BadUriKind ()
191 Uri.IsWellFormedUriString ("http://www.go-mono.com/Main Page", (UriKind)Int32.MinValue);
195 public void Compare ()
199 Assert.AreEqual (0, Uri.Compare (u1, u2, UriComponents.AbsoluteUri, UriFormat.UriEscaped, StringComparison.CurrentCulture), "null-null");
201 u1 = new Uri ("http://www.go-mono.com/Main Page");
202 u2 = new Uri ("http://www.go-mono.com/Main%20Page");
203 Assert.AreEqual (0, Uri.Compare (u1, u2, UriComponents.AbsoluteUri, UriFormat.Unescaped, StringComparison.CurrentCulture), "http/space-http/%20-unescaped");
204 Assert.AreEqual (0, Uri.Compare (u1, u2, UriComponents.AbsoluteUri, UriFormat.UriEscaped, StringComparison.CurrentCulture), "http/space-http/%20-escaped");
205 Assert.AreEqual (0, Uri.Compare (u1, u2, UriComponents.AbsoluteUri, UriFormat.SafeUnescaped, StringComparison.CurrentCulture), "http/space-http/%20-safe");
209 public void IsBaseOf ()
211 Uri http = new Uri ("http://www.mono-project.com/Main_Page#FAQ?Edit");
212 Assert.IsTrue (http.IsBaseOf (http), "http-http");
214 Uri u = new Uri ("http://www.mono-project.com/Main_Page#FAQ");
215 Assert.IsTrue (u.IsBaseOf (http), "http-1a");
216 Assert.IsTrue (http.IsBaseOf (u), "http-1b");
218 u = new Uri ("http://www.mono-project.com/Main_Page");
219 Assert.IsTrue (u.IsBaseOf (http), "http-2a");
220 Assert.IsTrue (http.IsBaseOf (u), "http-2b");
222 u = new Uri ("http://www.mono-project.com/");
223 Assert.IsTrue (u.IsBaseOf (http), "http-3a");
224 Assert.IsTrue (http.IsBaseOf (u), "http-3b");
226 u = new Uri ("http://www.mono-project.com/Main_Page/");
227 Assert.IsFalse (u.IsBaseOf (http), "http-4a");
228 Assert.IsTrue (http.IsBaseOf (u), "http-4b");
230 // docs says the UserInfo isn't evaluated, but...
231 u = new Uri ("http://username:password@www.mono-project.com/Main_Page");
232 Assert.IsFalse (u.IsBaseOf (http), "http-5a");
233 Assert.IsFalse (http.IsBaseOf (u), "http-5b");
235 // scheme case sensitive ? no
236 u = new Uri ("HTTP://www.mono-project.com/Main_Page");
237 Assert.IsTrue (u.IsBaseOf (http), "http-6a");
238 Assert.IsTrue (http.IsBaseOf (u), "http-6b");
240 // host case sensitive ? no
241 u = new Uri ("http://www.Mono-Project.com/Main_Page");
242 Assert.IsTrue (u.IsBaseOf (http), "http-7a");
243 Assert.IsTrue (http.IsBaseOf (u), "http-7b");
245 // path case sensitive ? no
246 u = new Uri ("http://www.Mono-Project.com/MAIN_Page");
247 Assert.IsTrue (u.IsBaseOf (http), "http-8a");
248 Assert.IsTrue (http.IsBaseOf (u), "http-8b");
251 u = new Uri ("ftp://www.mono-project.com/Main_Page");
252 Assert.IsFalse (u.IsBaseOf (http), "http-9a");
253 Assert.IsFalse (http.IsBaseOf (u), "http-9b");
256 u = new Uri ("http://www.go-mono.com/Main_Page");
257 Assert.IsFalse (u.IsBaseOf (http), "http-10a");
258 Assert.IsFalse (http.IsBaseOf (u), "http-10b");
261 u = new Uri ("http://www.mono-project.com:8080/");
262 Assert.IsFalse (u.IsBaseOf (http), "http-11a");
263 Assert.IsFalse (http.IsBaseOf (u), "http-11b");
265 // specify default port
266 u = new Uri ("http://www.mono-project.com:80/");
267 Assert.IsTrue (u.IsBaseOf (http), "http-12a");
268 Assert.IsTrue (http.IsBaseOf (u), "http-12b");
272 [ExpectedException (typeof (NullReferenceException))]
273 public void IsBaseOf_Null ()
275 Uri http = new Uri ("http://www.mono-project.com/Main_Page#FAQ?Edit");
276 http.IsBaseOf (null);