In .:
[mono.git] / mcs / class / System.Web / Test / System.Web / HttpCookieTest.cs
1 //
2 // System.Web.HttpCookieTest.cs - Unit tests for System.Web.HttpCookie
3 //
4 // Author:
5 //      Chris Toshok  <toshok@novell.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 using System;
30 using System.Web;
31
32 using NUnit.Framework;
33
34 namespace MonoTests.System.Web {
35
36         [TestFixture]
37         public class HttpCookieTest {
38
39                 [Test]
40                 public void DefaultProperties ()
41                 {
42                         HttpCookie cookie = new HttpCookie ("cookie");
43
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");
52                 }
53
54                 [Test]
55                 public void DefaultValueProperties ()
56                 {
57                         HttpCookie cookie = new HttpCookie ("cookie", "value");
58
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");
63
64                         /* make sure HasKeys is still false for single valued cookies */
65                         Assert.IsFalse (cookie.HasKeys);
66                 }
67
68                 [Test]
69                 public void PropertySetters ()
70                 {
71                         /* test the setters for settle Properties */
72                         HttpCookie cookie = new HttpCookie ("name");
73
74                         cookie.Domain = "novell.com";
75                         Assert.AreEqual ("novell.com", cookie.Domain, "Domain setter");
76
77                         DateTime dt = DateTime.Now;
78                         cookie.Expires = dt;
79                         Assert.AreEqual (dt, cookie.Expires, "Expires setter");
80
81                         cookie.Path = "/example/path";
82                         Assert.AreEqual ("/example/path", cookie.Path, "Path setter");
83
84                         cookie.Secure = true;
85                         Assert.IsTrue (cookie.Secure, "Secure setter");
86                 }
87
88                 [Test]
89                 public void MultiValued1 ()
90                 {
91                         HttpCookie cookie = new HttpCookie ("name1", "value1");
92                         cookie ["name2"] = "value2";
93
94                         Assert.IsTrue (cookie.HasKeys, "multi valued HasKeys");
95
96                         Assert.AreEqual (2, cookie.Values.Count, "Values.Count");
97
98                         Assert.AreEqual ("value1&name2=value2", cookie.Value, "Value getter");
99                         Assert.AreEqual ("value1&name2=value2", cookie.Values.ToString(), "Values getter");
100                 }
101
102                 [Test]
103                 public void SubkeysOnly ()
104                 {
105                         HttpCookie cookie = new HttpCookie ("name1");
106                         cookie ["name2"] = "value2";
107                         cookie ["name3"] = "value3";
108
109                         Assert.IsTrue (cookie.HasKeys, "multi valued HasKeys");
110
111                         Assert.AreEqual (2, cookie.Values.Count, "Values.Count");
112
113                         Assert.AreEqual ("name2=value2&name3=value3", cookie.Value, "Value getter");
114                         Assert.AreEqual ("name2=value2&name3=value3", cookie.Values.ToString(), "Values getter");
115                 }
116
117                 [Test]
118                 public void ResettingValue1 ()
119                 {
120                         HttpCookie cookie = new HttpCookie ("name1", "value1");
121                         cookie.Value = "value2";
122
123                         Assert.AreEqual ("value2", cookie.Value, "Value getter");
124                         Assert.AreEqual ("value2", cookie.Values.ToString(), "Values getter");
125
126                         /* make sure HasKeys is still false for single valued cookies */
127                         Assert.IsFalse (cookie.HasKeys);
128                 }
129
130                 [Test]
131                 public void ResettingValue2 ()
132                 {
133                         HttpCookie cookie = new HttpCookie ("name1", "value1");
134
135                         cookie["name2"] = "value2";
136                         cookie["name3"] = "value3";
137
138                         cookie.Value = "value1";
139
140                         Assert.AreEqual ("value1", cookie.Value, "Value getter");
141                         Assert.AreEqual ("value1", cookie.Values.ToString(), "Values getter");
142
143                         /* make sure HasKeys is back to false */
144                         Assert.IsFalse (cookie.HasKeys);
145                 }
146
147                 [Test]
148                 public void MultiValuedSet1 ()
149                 {
150                         HttpCookie cookie = new HttpCookie ("name1", "value1&name2=value2");
151
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");
157                 }
158
159                 [Test]
160                 public void MultiValuedSet2 ()
161                 {
162                         HttpCookie cookie = new HttpCookie ("name1", "value1&name2=value2&name2=value3");
163
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");
169                 }
170
171                 [Test]
172                 public void MultiUnnamedSet ()
173                 {
174                         HttpCookie cookie = new HttpCookie ("name1", "value1&name2=value2&value3");
175
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");
181                 }
182
183                 [Test]
184                 public void NullSetter ()
185                 {
186                         HttpCookie cookie = new HttpCookie ("name1");
187
188                         cookie.Values[null] = "value1";
189                         Assert.AreEqual ("value1", cookie.Values.ToString(), "Values getter");
190                         Assert.AreEqual ("value1", cookie.Value, "Value getter");
191         
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");
204                         
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");
211                 }
212
213                 [Test]
214                 public void Encode ()
215                 {
216                         // make sure there's no encoding done on values
217                         HttpCookie cookie = new HttpCookie ("cookie");
218                         cookie["name"] = "val&ue";
219
220                         Assert.AreEqual ("val&ue", cookie["name"], "name getter");
221                         Assert.AreEqual ("name=val&ue", cookie.Value, "Value getter");
222                 }
223
224                 [Test]
225                 public void SetSecure ()
226                 {
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");
232                 }
233         }
234 }
235