2 // UriBuilderTest.cs - NUnit Test Cases for System.UriBuilder
5 // Lawrence Pit (loz@cable.a2000.nl)
6 // Martin Willemoes Hansen (mwh@sysrq.dk)
8 // (C) 2003 Martin Willemoes Hansen
11 using NUnit.Framework;
14 namespace MonoTests.System
17 public class UriBuilderTest
19 private UriBuilder b, b2, b3;
22 public void GetReady()
24 b = new UriBuilder ("http", "www.ximian.com", 80, "foo/bar/index.html");
28 public void Constructor_Empty ()
30 b = new UriBuilder ();
31 Assert.AreEqual ("http", b.Scheme, "#1");
33 Assert.AreEqual ("localhost", b.Host, "#2");
35 Assert.AreEqual ("loopback", b.Host, "#3");
37 Assert.AreEqual (-1, b.Port, "#4");
38 Assert.AreEqual (string.Empty, b.Query, "#5");
39 Assert.AreEqual (string.Empty, b.Fragment, "#6");
42 [Test] // ctor (string)
43 public void Constructor1 ()
45 b = new UriBuilder ("http://www.ximian.com:8001#test?name=50");
46 Assert.AreEqual ("#test?name=50", b.Fragment, "#A1");
47 Assert.AreEqual ("www.ximian.com", b.Host, "#A2");
48 Assert.AreEqual (string.Empty, b.Password, "#A3");
49 Assert.AreEqual ("/", b.Path, "#A4");
50 Assert.AreEqual (8001, b.Port, "#A5");
51 Assert.AreEqual (string.Empty, b.Query, "#A5");
52 Assert.AreEqual ("http", b.Scheme, "#A6");
53 Assert.AreEqual ("http://www.ximian.com:8001/#test?name=50", b.Uri.ToString (), "#A7");
54 Assert.AreEqual (string.Empty, b.UserName, "#A8");
56 b = new UriBuilder ("http://www.ximian.com?name=50#test");
57 Assert.AreEqual ("#test", b.Fragment, "#B1");
58 Assert.AreEqual ("www.ximian.com", b.Host, "#B2");
59 Assert.AreEqual (string.Empty, b.Password, "#B3");
60 Assert.AreEqual ("/", b.Path, "#B4");
61 Assert.AreEqual (80, b.Port, "#B5");
62 Assert.AreEqual ("?name=50", b.Query, "#B5");
63 Assert.AreEqual ("http", b.Scheme, "#B6");
65 // our 1.0 behavior matches that of .NET 2.0
66 Assert.AreEqual ("http://www.ximian.com/?name=50#test", b.Uri.ToString (), "#B7");
68 Assert.AreEqual (string.Empty, b.UserName, "#B8");
71 [Test] // ctor (string)
73 [Category ("NotWorking")] // we always throw an ArgumentNullException
75 public void Constructor1_Uri_Null ()
78 new UriBuilder ((string) null);
81 } catch (ArgumentNullException ex) {
82 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
83 Assert.IsNull (ex.InnerException, "#3");
84 Assert.IsNotNull (ex.Message, "#4");
85 Assert.IsNotNull (ex.ParamName, "#5");
86 Assert.AreEqual ("uriString", ex.ParamName, "#6");
89 } catch (NullReferenceException) {
95 [ExpectedException (typeof (NullReferenceException))]
96 public void Constructor2_Uri_Null ()
98 new UriBuilder ((Uri) null);
102 public void Constructor_5 ()
104 b = new UriBuilder ("http", "www.ximian.com", 80, "foo/bar/index.html", "#extras");
108 [ExpectedException (typeof (ArgumentException))]
109 public void Constructor_5_BadExtraValue ()
111 b = new UriBuilder ("http", "www.ximian.com", 80, "foo/bar/index.html", "extras");
112 // should have thrown an ArgumentException because extraValue must start with '?' or '#' character.
116 // This test does not make sense, will fix soon
117 [Category ("NotWorking")] // bug #75144
118 public void UserInfo ()
120 b = new UriBuilder ("mailto://myname:mypwd@contoso.com?subject=hello");
122 Assert.AreEqual (string.Empty, b.UserName, "#1");
123 Assert.AreEqual (string.Empty, b.Password, "#2");
125 // NotWorking here for 1.x (bad behaviour in 1.x - may not be worth fixing)
126 Assert.AreEqual ("myname", b.UserName, "#1");
127 Assert.AreEqual ("mypwd", b.Password, "#2");
129 b = new UriBuilder ("mailto", "contoso.com");
130 b.UserName = "myname";
131 b.Password = "mypwd";
132 // NotWorking here for 2.0 - worth fixing
133 Assert.AreEqual ("myname:mypwd", b.Uri.UserInfo, "#3");
139 b.Path = ((char) 0xa9) + " 2002";
140 Assert.AreEqual ("%C2%A9%202002", b.Path);
144 [ExpectedException (typeof (ArgumentOutOfRangeException))]
145 public void BadPort1 ()
151 public void DefaultPort ()
154 Assert.AreEqual (-1, b.Port, "#1");
155 Assert.AreEqual ("http://www.ximian.com/foo/bar/index.html", b.ToString (), "#2");
159 [ExpectedException (typeof (ArgumentOutOfRangeException))]
160 public void BadPort3 ()
168 b.Query = ((char) 0xa9) + " 2002";
169 Assert.AreEqual ("?\xA9 2002", b.Query, "#1");
170 Assert.AreEqual (string.Empty, b.Fragment, "#2");
172 Assert.AreEqual ("??test", b.Query, "#3");
174 Assert.AreEqual (string.Empty, b.Query, "#4");
176 Assert.AreEqual ("#test", b.Fragment, "#5");
179 Assert.AreEqual ("#test", b.Fragment, "#6");
181 Assert.AreEqual (string.Empty, b.Fragment, "#6");
183 Assert.AreEqual ("?name", b.Query, "#7");
185 Assert.AreEqual ("#run", b.Fragment, "#8");
188 Assert.AreEqual ("#run", b.Fragment, "#9");
190 Assert.AreEqual (string.Empty, b.Fragment, "#9");
192 Assert.AreEqual (string.Empty, b.Query, "#10");
196 public void Fragment ()
198 b.Fragment = ((char) 0xa9) + " 2002";
199 Assert.AreEqual ("#\xA9 2002", b.Fragment, "#1");
200 Assert.AreEqual (string.Empty, b.Query, "#2");
201 b.Fragment = "#test";
202 Assert.AreEqual ("##test", b.Fragment, "#3");
204 Assert.AreEqual (String.Empty, b.Fragment, "#4");
206 Assert.AreEqual ("?name", b.Query, "#5");
209 Assert.AreEqual ("?name", b.Query, "#6");
211 Assert.AreEqual (string.Empty, b.Query, "#6");
213 Assert.AreEqual (string.Empty, b.Fragment, "#7");
217 public void Scheme ()
220 Assert.AreEqual ("http", b.Scheme, "#1");
222 Assert.AreEqual ("http", b.Scheme, "#2");
223 b.Scheme = "http://";
224 Assert.AreEqual ("http", b.Scheme, "#3");
225 b.Scheme = "http://foo/bar";
226 Assert.AreEqual ("http", b.Scheme, "#4");
227 b.Scheme = "mailto:";
228 Assert.AreEqual ("mailto", b.Scheme, "#5");
229 b.Scheme = "unknown";
230 Assert.AreEqual ("unknown", b.Scheme, "#6");
231 b.Scheme = "unknown://";
232 Assert.AreEqual ("unknown", b.Scheme, "#7");
237 [Category ("NotWorking")] // equals changed in 2.0
239 public void Equals ()
241 b = new UriBuilder ("http://", "www.ximian.com", 80, "foo/bar/index.html?item=1");
242 b2 = new UriBuilder ("http", "www.ximian.com", 80, "/foo/bar/index.html", "?item=1");
243 b3 = new UriBuilder (new Uri ("http://www.ximian.com/foo/bar/index.html?item=1"));
245 Assert.IsFalse (b.Equals (b2), "#1");
246 Assert.IsFalse (b.Uri.Equals (b2.Uri), "#2");
247 Assert.IsFalse (b.Equals (b3), "#3");
248 Assert.IsFalse (b3.Equals (b), "#4");
250 Assert.IsTrue (b.Equals (b2), "#1");
251 Assert.IsTrue (b.Uri.Equals (b2.Uri), "#2");
252 Assert.IsTrue (b.Equals (b3), "#3");
253 Assert.IsTrue (b3.Equals (b), "#4");
255 Assert.IsTrue (b2.Equals (b3), "#5");
259 public void ToStringTest ()
261 Assert.AreEqual ("http://www.ximian.com:80/foo/bar/index.html", b.ToString (), "#1");
262 Assert.AreEqual ("http://www.ximian.com/foo/bar/index.html", b.Uri.ToString (), "#2");
266 public void EmptyQuery () // bug 57082
268 b = new UriBuilder ("http", "www.ximian.com", 80, "/lalala/lelele.aspx", null);
269 string noquery = "http://www.ximian.com/lalala/lelele.aspx";
270 Assert.AreEqual (noquery, b.Uri.ToString (), "#1");
271 b = new UriBuilder ("http", "www.ximian.com", 80, "/lalala/lelele.aspx", "?");
272 Assert.AreEqual (noquery, b.Uri.ToString (), "#2");
273 b = new UriBuilder ("http", "www.ximian.com", 80, "/lalala/lelele.aspx", "??");
274 Assert.AreEqual (noquery + "??", b.Uri.ToString (), "#3");
275 b = new UriBuilder ("http", "www.ximian.com", 80, "/lalala/lelele.aspx", "?something");
276 Assert.AreEqual (noquery + "?something", b.Uri.ToString (), "#4");
280 public void TestToString76501 ()
282 UriBuilder ub = new UriBuilder (
283 "http://mondomaine/trucmuche/login.aspx");
284 ub.Query = ub.Query.TrimStart (new char [] {'?'}) + "&ticket=bla";
285 Assert.IsTrue (ub.ToString ().IndexOf ("80//") < 0);
289 public void TestAppendFragment ()
291 UriBuilder uri = new UriBuilder ("http://www.mono-project.com/Main_Page");
292 uri.Fragment = "Features";
293 Assert.AreEqual ("#Features", uri.Fragment, "#1");
294 Assert.AreEqual ("http://www.mono-project.com/Main_Page#Features", uri.Uri.ToString (), "#2");