2 // System.Web.HttpCookieTest.cs - Unit tests for System.Web.HttpCookie
5 // Chris Toshok <toshok@novell.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.
32 using NUnit.Framework;
34 namespace MonoTests.System.Web {
37 public class HttpCookieTest {
40 public void DefaultProperties ()
42 HttpCookie cookie = new HttpCookie ("cookie");
44 Assert.IsNull (cookie.Domain, "default cookie.Domain");
45 Assert.AreEqual (new DateTime(), cookie.Expires, "default cookie.Expires");
46 Assert.IsFalse (cookie.HasKeys, "default cookie.HasKeys");
47 Assert.AreEqual ("cookie", cookie.Name, "default cookie.Name");
48 Assert.AreEqual ("/", cookie.Path, "default cookie.Path");
49 Assert.IsFalse (cookie.Secure, "default cookie.Secure");
50 Assert.AreEqual ("", cookie.Value, "default cookie.Value");
51 Assert.AreEqual ("", cookie.Values.ToString(), "default cookie.Values");
55 public void DefaultValueProperties ()
57 HttpCookie cookie = new HttpCookie ("cookie", "value");
59 Assert.AreEqual ("value", cookie.Value, "Value getter");
60 Assert.AreEqual ("value", cookie.Values[null], "Values[null] getter");
61 Assert.AreEqual ("value", cookie[null], "cookie[null] getter");
62 Assert.AreEqual ("value", cookie.Values.ToString(), "Values getter");
64 /* make sure HasKeys is still false for single valued cookies */
65 Assert.IsFalse (cookie.HasKeys);
69 public void PropertySetters ()
71 /* test the setters for settle Properties */
72 HttpCookie cookie = new HttpCookie ("name");
74 cookie.Domain = "novell.com";
75 Assert.AreEqual ("novell.com", cookie.Domain, "Domain setter");
77 DateTime dt = DateTime.Now;
79 Assert.AreEqual (dt, cookie.Expires, "Expires setter");
81 cookie.Path = "/example/path";
82 Assert.AreEqual ("/example/path", cookie.Path, "Path setter");
85 Assert.IsTrue (cookie.Secure, "Secure setter");
89 public void MultiValued1 ()
91 HttpCookie cookie = new HttpCookie ("name1", "value1");
92 cookie ["name2"] = "value2";
94 Assert.IsTrue (cookie.HasKeys, "multi valued HasKeys");
96 Assert.AreEqual (2, cookie.Values.Count, "Values.Count");
98 Assert.AreEqual ("value1&name2=value2", cookie.Value, "Value getter");
99 Assert.AreEqual ("value1&name2=value2", cookie.Values.ToString(), "Values getter");
103 public void SubkeysOnly ()
105 HttpCookie cookie = new HttpCookie ("name1");
106 cookie ["name2"] = "value2";
107 cookie ["name3"] = "value3";
109 Assert.IsTrue (cookie.HasKeys, "multi valued HasKeys");
111 Assert.AreEqual (2, cookie.Values.Count, "Values.Count");
113 Assert.AreEqual ("name2=value2&name3=value3", cookie.Value, "Value getter");
114 Assert.AreEqual ("name2=value2&name3=value3", cookie.Values.ToString(), "Values getter");
118 public void ResettingValue1 ()
120 HttpCookie cookie = new HttpCookie ("name1", "value1");
121 cookie.Value = "value2";
123 Assert.AreEqual ("value2", cookie.Value, "Value getter");
124 Assert.AreEqual ("value2", cookie.Values.ToString(), "Values getter");
126 /* make sure HasKeys is still false for single valued cookies */
127 Assert.IsFalse (cookie.HasKeys);
131 public void ResettingValue2 ()
133 HttpCookie cookie = new HttpCookie ("name1", "value1");
135 cookie["name2"] = "value2";
136 cookie["name3"] = "value3";
138 cookie.Value = "value1";
140 Assert.AreEqual ("value1", cookie.Value, "Value getter");
141 Assert.AreEqual ("value1", cookie.Values.ToString(), "Values getter");
143 /* make sure HasKeys is back to false */
144 Assert.IsFalse (cookie.HasKeys);
148 public void MultiValuedSet1 ()
150 HttpCookie cookie = new HttpCookie ("name1", "value1&name2=value2");
152 Assert.IsTrue (cookie.HasKeys, "MultiValuedSet");
153 Assert.AreEqual ("value1&name2=value2", cookie.Value, "cookie.Value");
154 Assert.AreEqual ("value1", cookie.Values[null], "Values[null] getter");
155 Assert.AreEqual ("value1", cookie[null], "cookie[null] getter");
156 Assert.AreEqual ("value2", cookie ["name2"], "name2 getter");
160 public void MultiValuedSet2 ()
162 HttpCookie cookie = new HttpCookie ("name1", "value1&name2=value2&name2=value3");
164 Assert.IsTrue (cookie.HasKeys, "MultiValuedSet");
165 Assert.AreEqual ("value1&name2=value2&name2=value3", cookie.Value, "cookie.Value");
166 Assert.AreEqual ("value1", cookie.Values[null], "Values[null] getter");
167 Assert.AreEqual ("value1", cookie[null], "cookie[null] getter");
168 Assert.AreEqual ("value2,value3", cookie ["name2"], "name2 getter");
172 public void MultiUnnamedSet ()
174 HttpCookie cookie = new HttpCookie ("name1", "value1&name2=value2&value3");
176 Assert.IsTrue (cookie.HasKeys, "MultiUnnamedSet");
177 Assert.AreEqual ("value1&value3&name2=value2", cookie.Value, "cookie.Value");
178 Assert.AreEqual ("value1,value3", cookie.Values[null], "Values[null] getter");
179 Assert.AreEqual ("value1,value3", cookie[null], "Values[null] getter");
180 Assert.AreEqual ("value2", cookie ["name2"], "name2 getter");
184 public void NullSetter ()
186 HttpCookie cookie = new HttpCookie ("name1");
188 cookie.Values[null] = "value1";
189 Assert.AreEqual ("value1", cookie.Values.ToString(), "Values getter");
190 Assert.AreEqual ("value1", cookie.Value, "Value getter");
192 // This strikes me as odd behavior.. We fail
193 // this test presently, but I'm not sure if
194 // it's because of a bug in
195 // NameValueCollection. If NVC doesn't
196 // normally have the behavior of clearing the
197 // collection when setting this[null], we can
198 // override the behavior in our cookie
199 // specific subclass.
200 cookie.Value = "value1&name2=value2&value3";
201 cookie[null] = "value1";
202 Assert.AreEqual ("value1", cookie.Values.ToString(), "Values getter");
203 Assert.AreEqual ("value1", cookie.Value, "Value getter");
205 // try the same test above, but circumvent the
206 // HttpCookie.item property.
207 cookie.Value = "value1&name2=value2&value3";
208 cookie.Values[null] = "value1";
209 Assert.AreEqual ("value1", cookie.Values.ToString(), "Values getter");
210 Assert.AreEqual ("value1", cookie.Value, "Value getter");
214 public void Encode ()
216 // make sure there's no encoding done on values
217 HttpCookie cookie = new HttpCookie ("cookie");
218 cookie["name"] = "val&ue";
220 Assert.AreEqual ("val&ue", cookie["name"], "name getter");
221 Assert.AreEqual ("name=val&ue", cookie.Value, "Value getter");
225 public void SetSecure ()
227 HttpCookie cookie = new HttpCookie ("cookie", "hola");
228 cookie.Secure = true;
229 Assert.IsTrue (cookie.Secure, "#01");
230 cookie.Secure = false;
231 Assert.IsFalse (cookie.Secure, "#02");