Add this for backwards compatibility
[mono.git] / mcs / class / System / Test / System / UriTest3.cs
1 //
2 // UriTest3.cs - Even more (2.0 specific) unit tests for System.Uri
3 //
4 // Author:
5 //      Sebastien Pouliot  <sebastien@ximian.com>
6 //
7 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
8 //
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:
16 // 
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 // 
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.
27 //
28
29 #if NET_2_0
30
31 using NUnit.Framework;
32
33 using System;
34
35 namespace MonoTests.System {
36
37         [TestFixture]
38         public class UriTest3 {
39
40                 private const string absolute = "http://www.mono-project.com/CAS";
41                 private const string relative = "server.com/directory/";
42
43                 [Test]
44                 public void Absolute_UriKind_Absolute ()
45                 {
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");
50                 }
51
52                 [Test]
53                 [Category ("NotWorking")]
54                 public void Relative_UriKind_Relative ()
55                 {
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
61                 }
62
63                 [Test]
64                 [ExpectedException (typeof (UriFormatException))]
65                 public void Relative_UriKind_Absolute ()
66                 {
67                         new Uri (relative, UriKind.Absolute);
68                 }
69
70                 [Test]
71                 [ExpectedException (typeof (UriFormatException))]
72                 [Category ("NotWorking")]
73                 public void Absolute_UriKind_Relative ()
74                 {
75                         new Uri (absolute, UriKind.Relative);
76                 }
77
78                 [Test]
79                 [Category ("NotWorking")]
80                 public void TryCreate_String_UriKind_Uri ()
81                 {
82                         Uri uri = null;
83                         Assert.IsTrue (Uri.TryCreate (absolute, UriKind.Absolute, out uri), "absolute-Absolute");
84                         Assert.AreEqual (absolute, uri.AbsoluteUri, "absolute-Absolute-AbsoluteUri");
85
86                         Assert.IsTrue (Uri.TryCreate (absolute, UriKind.RelativeOrAbsolute, out uri), "absolute-RelativeOrAbsolute");
87                         Assert.AreEqual (absolute, uri.AbsoluteUri, "absolute-RelativeOrAbsolute-AbsoluteUri");
88
89                         Assert.IsFalse (Uri.TryCreate (absolute, UriKind.Relative, out uri), "absolute-Relative");
90                         Assert.IsNull (uri, "absolute-Relative-uri");
91
92                         Assert.IsFalse (Uri.TryCreate (relative, UriKind.Absolute, out uri), "relative-Absolute");
93                         Assert.IsNull (uri, "relative-Relative-uri");
94
95                         Assert.IsTrue (Uri.TryCreate (relative, UriKind.RelativeOrAbsolute, out uri), "relative-RelativeOrAbsolute");
96                         Assert.AreEqual (relative, uri.OriginalString, "relative-RelativeOrAbsolute-OriginalString");
97
98                         Assert.IsTrue (Uri.TryCreate (relative, UriKind.Relative, out uri), "relative-Relative");
99                         Assert.AreEqual (relative, uri.OriginalString, "relative-RelativeOrAbsolute-OriginalString");
100                 }
101
102                 [Test]
103                 [Category ("NotWorking")]
104                 public void TryCreate_Uri_String_Uri ()
105                 {
106                         Uri baseUri = new Uri (absolute);
107                         Uri uri = null;
108
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");
112
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");
116
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");
120
121                         Assert.IsTrue (Uri.TryCreate (relativeUri, absolute, out uri), "relativeUri+absolute");
122                         Assert.AreEqual (absolute, uri.OriginalString, "relativeUri+absolute+OriginalString");
123
124                         string n = null;
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");
131
132                         Assert.IsTrue (Uri.TryCreate (null, absolute, out uri), "null+absolute");
133                         Assert.AreEqual (absolute, uri.OriginalString, "null+absolute+OriginalString");
134                 }
135
136                 [Test]
137                 [Category ("NotWorking")]
138                 public void TryCreate_Uri_Uri_Uri ()
139                 {
140                         Uri baseUri = new Uri (absolute);
141                         Uri relativeUri = new Uri (relative, UriKind.Relative);
142                         Uri uri = null;
143
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");
147
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");
151
152                         Assert.IsFalse (Uri.TryCreate (relativeUri, relativeUri, out uri), "relativeUri+relativeUri");
153                         Assert.IsNull (uri, "relativeUri+relativeUri+Uri");
154
155                         Assert.IsFalse (Uri.TryCreate (relativeUri, baseUri, out uri), "relativeUri+baseUri");
156                         Assert.IsNull (uri, "relativeUri+baseUri+Uri");
157
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");
163                 }
164
165                 [Test]
166                 [ExpectedException (typeof (NullReferenceException))]
167                 public void TryCreate_Uri_UriNull_Uri ()
168                 {
169                         Uri uri = null;
170                         Uri.TryCreate (new Uri (absolute), (Uri) null, out uri);
171                 }
172
173                 [Test]
174                 public void IsWellFormedUriString_Null ()
175                 {
176                         Assert.IsFalse (Uri.IsWellFormedUriString (null, UriKind.Absolute), "null");
177                 }
178
179                 [Test]
180                 [Category ("NotWorking")]
181                 public void IsWellFormedUriString_Http ()
182                 {
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");
185                 }
186
187                 [Test]
188                 [ExpectedException (typeof (ArgumentException))]
189                 public void IsWellFormedUriString_BadUriKind ()
190                 {
191                         Uri.IsWellFormedUriString ("http://www.go-mono.com/Main Page", (UriKind)Int32.MinValue);
192                 }
193
194                 [Test]
195                 public void Compare ()
196                 {
197                         Uri u1 = null;
198                         Uri u2 = null;
199                         Assert.AreEqual (0, Uri.Compare (u1, u2, UriComponents.AbsoluteUri, UriFormat.UriEscaped, StringComparison.CurrentCulture), "null-null");
200
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");
206                 }
207
208                 [Test]
209                 public void IsBaseOf ()
210                 {
211                         Uri http = new Uri ("http://www.mono-project.com/Main_Page#FAQ?Edit");
212                         Assert.IsTrue (http.IsBaseOf (http), "http-http");
213
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");
217
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");
221
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");
225
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");
229
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");
234
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");
239
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");
244
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");
249
250                         // different scheme
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");
254
255                         // different host
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");
259
260                         // different port
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");
264
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");
269                 }
270
271                 [Test]
272                 [ExpectedException (typeof (NullReferenceException))]
273                 public void IsBaseOf_Null ()
274                 {
275                         Uri http = new Uri ("http://www.mono-project.com/Main_Page#FAQ?Edit");
276                         http.IsBaseOf (null);
277                 }
278         }
279 }
280
281 #endif