New test.
[mono.git] / mcs / class / System / Test / System.Net / WebHeaderCollectionTest.cs
1 //\r
2 // WebHeaderCollectionTest.cs - NUnit Test Cases for System.Net.WebHeaderCollection\r
3 //\r
4 // Authors:\r
5 //   Lawrence Pit (loz@cable.a2000.nl)\r
6 //   Martin Willemoes Hansen (mwh@sysrq.dk)\r
7 //\r
8 // (C) 2003 Martin Willemoes Hansen\r
9 //\r
10 \r
11 using NUnit.Framework;\r
12 using System;\r
13 using System.Net;\r
14 using System.Collections;\r
15 using System.Collections.Specialized;\r
16 \r
17 namespace MonoTests.System.Net\r
18 {\r
19 \r
20 [TestFixture]\r
21 public class WebHeaderCollectionTest\r
22 {\r
23         WebHeaderCollection col;\r
24         \r
25         [SetUp]\r
26         public void GetReady () \r
27         {\r
28                 col = new WebHeaderCollection ();       \r
29                 col.Add ("Name1: Value1");\r
30                 col.Add ("Name2: Value2");\r
31         }\r
32 \r
33         [Test]\r
34         public void Add ()\r
35         {\r
36                 try {\r
37                         col.Add (null);\r
38                         Assertion.Fail ("#1");\r
39                 } catch (ArgumentNullException) {}\r
40                 try {\r
41                         col.Add ("");\r
42                         Assertion.Fail ("#2");\r
43                 } catch (ArgumentException) {}\r
44                 try {\r
45                         col.Add ("  ");\r
46                         Assertion.Fail ("#3");\r
47                 } catch (ArgumentException) {}\r
48                 try {\r
49                         col.Add (":");\r
50                         Assertion.Fail ("#4");\r
51                 } catch (ArgumentException) {}\r
52                 try {\r
53                         col.Add (" : ");\r
54                         Assertion.Fail ("#5");\r
55                 } catch (ArgumentException) {}\r
56 \r
57                 try {\r
58                         col.Add ("XHost: foo");\r
59                 } catch (ArgumentException) {\r
60                         Assertion.Fail ("#7");                  \r
61                 }\r
62 \r
63                 // invalid values\r
64                 try {\r
65                         col.Add ("XHost" + ((char) 0xa9) + ": foo");\r
66                         Assertion.Fail ("#8");\r
67                 } catch (ArgumentException) {}\r
68                 try {\r
69                         col.Add ("XHost: foo" + (char) 0xa9);\r
70                 } catch (ArgumentException) {\r
71                         Assertion.Fail ("#9");                  \r
72                 }\r
73                 try {\r
74                         col.Add ("XHost: foo" + (char) 0x7f);\r
75                         Assertion.Fail ("#10");\r
76                 } catch (ArgumentException) {\r
77                         \r
78                 }\r
79 \r
80                 try {\r
81                         col.Add ("XHost", null);\r
82                 } catch (ArgumentException) {\r
83                         Assertion.Fail ("#11");\r
84                 }               \r
85                 try {\r
86                         col.Add ("XHost:");                     \r
87                 } catch (ArgumentException) {\r
88                         Assertion.Fail ("#12");                 \r
89                 }                               \r
90                 \r
91                 // restricted\r
92                 /*\r
93                 // this can only be tested in namespace System.Net\r
94                 try {\r
95                         WebHeaderCollection col2 = new WebHeaderCollection (true);\r
96                         col2.Add ("Host: foo");\r
97                         Assertion.Fail ("#13: should fail according to spec");\r
98                 } catch (ArgumentException) {}          \r
99                 */\r
100         }\r
101         \r
102         [Test]\r
103         [Category ("NotWorking")]\r
104         public void GetValues ()\r
105         {                       \r
106                 WebHeaderCollection w = new WebHeaderCollection ();\r
107                 w.Add ("Hello", "H1");\r
108                 w.Add ("Hello", "H2");\r
109                 w.Add ("Hello", "H3,H4");\r
110                 \r
111                 string [] sa = w.GetValues ("Hello");\r
112                 Assertion.AssertEquals ("#1", 3, sa.Length);\r
113                 Assertion.AssertEquals ("#2", "H1,H2,H3,H4", w.Get ("Hello"));\r
114 \r
115                 w = new WebHeaderCollection ();\r
116                 w.Add ("Accept", "H1");\r
117                 w.Add ("Accept", "H2");\r
118                 w.Add ("Accept", "H3,H4");              \r
119                 Assertion.AssertEquals ("#3a", 3, w.GetValues (0).Length);\r
120                 Assertion.AssertEquals ("#3b", 4, w.GetValues ("Accept").Length);\r
121                 Assertion.AssertEquals ("#4", "H1,H2,H3,H4", w.Get ("Accept"));\r
122 \r
123                 w = new WebHeaderCollection ();\r
124                 w.Add ("Allow", "H1");\r
125                 w.Add ("Allow", "H2");\r
126                 w.Add ("Allow", "H3,H4");               \r
127                 sa = w.GetValues ("Allow");             \r
128                 Assertion.AssertEquals ("#5", 4, sa.Length);\r
129                 Assertion.AssertEquals ("#6", "H1,H2,H3,H4", w.Get ("Allow"));\r
130 \r
131                 w = new WebHeaderCollection ();\r
132                 w.Add ("AUTHorization", "H1, H2, H3");\r
133                 sa = w.GetValues ("authorization");             \r
134                 Assertion.AssertEquals ("#9", 3, sa.Length);\r
135 \r
136                 w = new WebHeaderCollection ();\r
137                 w.Add ("proxy-authenticate", "H1, H2, H3");\r
138                 sa = w.GetValues ("Proxy-Authenticate");                \r
139                 Assertion.AssertEquals ("#9", 3, sa.Length);\r
140 \r
141                 w = new WebHeaderCollection ();\r
142                 w.Add ("expect", "H1,\tH2,   H3  ");\r
143                 sa = w.GetValues ("EXPECT");            \r
144                 Assertion.AssertEquals ("#10", 3, sa.Length);\r
145                 Assertion.AssertEquals ("#11", "H2", sa [1]);\r
146                 Assertion.AssertEquals ("#12", "H3", sa [2]);\r
147                 \r
148                 try {\r
149                         w.GetValues (null);\r
150                         Assertion.Fail ("#13");\r
151                 } catch (ArgumentNullException) {}\r
152                 Assertion.AssertEquals ("#14", null, w.GetValues (""));\r
153                 Assertion.AssertEquals ("#15", null, w.GetValues ("NotExistent"));\r
154         }\r
155 \r
156         [Test]\r
157         public void Indexers ()\r
158         {\r
159 #if NET_2_0\r
160                 Assertion.AssertEquals ("#1.1", "Value1", ((NameValueCollection)col)[0]);\r
161                 //FIXME: test also HttpRequestHeader and HttpResponseHeader\r
162 #else\r
163                 Assertion.AssertEquals ("#1", "Value1", col [0]);\r
164 #endif\r
165                 Assertion.AssertEquals ("#2", "Value1", col ["Name1"]);\r
166                 Assertion.AssertEquals ("#3", "Value1", col ["NAME1"]);\r
167         }\r
168 \r
169         [Test]\r
170         public void Remove ()\r
171         {\r
172                 col.Remove ("Name1");\r
173                 col.Remove ("NameNotExist");\r
174                 Assertion.AssertEquals ("#1", 1, col.Count);\r
175                 \r
176                 /*\r
177                 // this can only be tested in namespace System.Net\r
178                 try {\r
179                         WebHeaderCollection col2 = new WebHeaderCollection (true);\r
180                         col2.Add ("Host", "foo");\r
181                         col2.Remove ("Host");\r
182                         Assertion.Fail ("#2: should fail according to spec");\r
183                 } catch (ArgumentException) {}\r
184                 */\r
185         }\r
186 \r
187         [Test]  \r
188         public void Set ()\r
189         {\r
190                 col.Add ("Name1", "Value1b");\r
191                 col.Set ("Name1", "\t  X  \t");\r
192                 Assertion.AssertEquals ("#1", "X", col.Get ("Name1"));\r
193         }\r
194         \r
195         [Test]\r
196         public void IsRestricted ()\r
197         {\r
198                 Assertion.Assert ("#1", !WebHeaderCollection.IsRestricted ("Xhost"));\r
199                 Assertion.Assert ("#2", WebHeaderCollection.IsRestricted ("Host"));\r
200                 Assertion.Assert ("#3", WebHeaderCollection.IsRestricted ("HOST"));\r
201                 Assertion.Assert ("#4", WebHeaderCollection.IsRestricted ("Transfer-Encoding"));\r
202                 Assertion.Assert ("#5", WebHeaderCollection.IsRestricted ("user-agent"));\r
203                 Assertion.Assert ("#6", WebHeaderCollection.IsRestricted ("accept"));\r
204                 Assertion.Assert ("#7", !WebHeaderCollection.IsRestricted ("accept-charset"));\r
205         }\r
206 \r
207         [Test]\r
208         public void ToStringTest ()\r
209         {\r
210                 col.Add ("Name1", "Value1b");\r
211                 col.Add ("Name3", "Value3a\r\n Value3b");\r
212                 col.Add ("Name4", "   Value4   ");\r
213                 Assertion.AssertEquals ("#1", "Name1: Value1,Value1b\r\nName2: Value2\r\nName3: Value3a\r\n Value3b\r\nName4: Value4\r\n\r\n", col.ToString ());\r
214         }\r
215 }\r
216 \r
217 }\r
218 \r