* NameValueCollection.cs: Don't crash when we have empty
[mono.git] / mcs / class / System / Test / System.Collections.Specialized / NameValueCollectionTest.cs
1 // created on 7/21/2001 at 2:36 PM\r
2 //\r
3 // Authors:\r
4 //      Martin Willemoes Hansen (mwh@sysrq.dk)\r
5 //      Sebastien Pouliot  <sebastien@ximian.com>\r
6 //\r
7 // (C) 2003 Martin Willemoes Hansen\r
8 // Copyright (C) 2004 Novell (http://www.novell.com)\r
9 //\r
10 \r
11 using System;\r
12 using System.Collections;\r
13 using System.Collections.Specialized;\r
14 using System.Text;\r
15 \r
16 using NUnit.Framework;\r
17 \r
18 namespace MonoTests.System.Collections.Specialized {\r
19 \r
20         [TestFixture]\r
21         public class NameValueCollectionTest : Assertion {\r
22 \r
23                 [Test]\r
24                 public void GetValues ()\r
25                 {\r
26                         NameValueCollection col = new NameValueCollection ();\r
27                         col.Add ("foo1", "bar1");\r
28                         Assertion.AssertEquals ("#1", null, col.GetValues (null));\r
29                         Assertion.AssertEquals ("#2", null, col.GetValues (""));\r
30                         Assertion.AssertEquals ("#3", null, col.GetValues ("NotExistent"));\r
31                 }\r
32 \r
33                 [Test]\r
34                 public void Add ()\r
35                 {\r
36                         NameValueCollection c = new NameValueCollection ();\r
37                         c.Add ("mono", "mono");\r
38                         c.Add ("!mono", null);\r
39                         c.Add (null, "mono!");\r
40                         AssertEquals ("Count", 3, c.Count);\r
41                         AssertEquals ("mono", "mono", c ["mono"]);\r
42                         AssertNull ("!mono", c ["!mono"]);\r
43                         AssertEquals ("mono!", "mono!", c [null]);\r
44                 }\r
45 \r
46                 [Test]\r
47                 public void Add_Multiples ()\r
48                 {\r
49                         NameValueCollection c = new NameValueCollection ();\r
50                         c.Add ("mono", "mono");\r
51                         c.Add ("mono", "mono");\r
52                         c.Add ("mono", "mono");\r
53                         AssertEquals ("Count", 1, c.Count);\r
54                         AssertEquals ("mono", "mono,mono,mono", c ["mono"]);\r
55                 }\r
56 \r
57                 [Test]\r
58                 public void Add_Multiples_Null ()\r
59                 {\r
60                         NameValueCollection c = new NameValueCollection ();\r
61                         c.Add ("mono", "mono");\r
62                         c.Add ("mono", null);\r
63                         c.Add ("mono", "mono");\r
64                         AssertEquals ("Count", 1, c.Count);\r
65                         AssertEquals ("mono", "mono,mono", c ["mono"]);\r
66                 }\r
67 \r
68                 [Test]\r
69                 public void Add_NVC ()\r
70                 {\r
71                         NameValueCollection c1 = new NameValueCollection ();\r
72                         NameValueCollection c2 = new NameValueCollection ();\r
73 \r
74                         c2.Add (c1);\r
75                         AssertEquals ("c1.Count", 0, c1.Count);\r
76                         AssertEquals ("c2.Count", 0, c2.Count);\r
77 \r
78                         c1.Add ("foo", "bar");\r
79                         c2.Add ("bar", "foo");\r
80 \r
81                         AssertEquals ("c1.Count", 1, c1.Count);\r
82                         AssertEquals ("c2.Count", 1, c2.Count);\r
83 \r
84                         c2.Add (c1);\r
85                         AssertEquals ("c1.Count", 1, c1.Count);\r
86                         AssertEquals ("c2.Count", 2, c2.Count);\r
87                 }\r
88 \r
89                 [Test]\r
90 //              [ExpectedException (typeof (ArgumentNullException))]\r
91                 [ExpectedException (typeof (NullReferenceException))]\r
92                 public void Add_NVC_Null ()\r
93                 {\r
94                         new NameValueCollection ().Add (null);\r
95                 }\r
96 \r
97                 [Test]\r
98                 public void Add_NVC_Null2 ()\r
99                 {\r
100                         NameValueCollection a = new NameValueCollection ();\r
101                         NameValueCollection b = new NameValueCollection ();\r
102 \r
103                         b.Add ("Test", null);\r
104                         a.Add (b);\r
105                         AssertEquals ("Count", 1, a.Count);\r
106                 }\r
107 \r
108                 [Test]\r
109                 public void Set_New ()\r
110                 {\r
111                         NameValueCollection c = new NameValueCollection ();\r
112                         c.Set ("mono", "mono");\r
113                         c.Set ("!mono", null);\r
114                         c.Set (null, "mono!");\r
115                         AssertEquals ("Count", 3, c.Count);\r
116                         AssertEquals ("mono", "mono", c ["mono"]);\r
117                         AssertNull ("!mono", c ["!mono"]);\r
118                         AssertEquals ("mono!", "mono!", c [null]);\r
119                 }\r
120 \r
121                 [Test]\r
122                 public void Set_Replace ()\r
123                 {\r
124                         NameValueCollection c = new NameValueCollection ();\r
125                         c.Add ("mono", "mono");\r
126                         c.Add ("!mono", "!mono");\r
127                         c.Add ("mono!", "mono!");\r
128                         AssertEquals ("Count", 3, c.Count);\r
129                         AssertEquals ("mono", "mono", c ["mono"]);\r
130                         AssertEquals ("!mono", "!mono", c ["!mono"]);\r
131                         AssertEquals ("mono!", "mono!", c ["mono!"]);\r
132 \r
133                         c.Set ("mono", "nomo");\r
134                         c.Set ("!mono", null);\r
135                         c.Set (null, "mono!");\r
136                         AssertEquals ("Count", 4, c.Count); // mono! isn't removed\r
137                         AssertEquals ("mono", "nomo", c ["mono"]);\r
138                         AssertNull ("!mono", c ["!mono"]);\r
139                         AssertEquals ("mono!1", "mono!", c ["mono!"]);\r
140                         AssertEquals ("mono!2", "mono!", c [null]);\r
141                 }\r
142 \r
143                 [Test]\r
144                 public void CaseInsensitive () \r
145                 {\r
146                         // default constructor is case insensitive\r
147                         NameValueCollection c = new NameValueCollection ();\r
148                         c.Add ("mono", "mono");\r
149                         c.Add ("MoNo", "MoNo");\r
150                         c.Add ("mOnO", "mOnO");\r
151                         c.Add ("MONO", "MONO");\r
152                         AssertEquals ("Count", 1, c.Count);\r
153                 }\r
154 \r
155                 [Test]\r
156                 public void CopyTo () \r
157                 {\r
158                         string [] array = new string [4];\r
159                         NameValueCollection c = new NameValueCollection ();\r
160                         c.Add ("1", "mono");\r
161                         c.Add ("2", "MoNo");\r
162                         c.Add ("3", "mOnO");\r
163                         c.Add ("4", "MONO");\r
164                         c.CopyTo (array, 0);\r
165                 }\r
166 \r
167                 [Test]\r
168                 [ExpectedException (typeof (ArgumentNullException))]\r
169                 public void CopyTo_Null () \r
170                 {\r
171                         NameValueCollection c = new NameValueCollection ();\r
172                         c.CopyTo (null, 0);\r
173                 }\r
174 \r
175                 [Test]\r
176                 [ExpectedException (typeof (ArgumentOutOfRangeException))]\r
177                 public void CopyTo_NegativeIndex () \r
178                 {\r
179                         string [] array = new string [4];\r
180                         NameValueCollection c = new NameValueCollection ();\r
181                         c.Add ("1", "mono");\r
182                         c.Add ("2", "MoNo");\r
183                         c.Add ("3", "mOnO");\r
184                         c.Add ("4", "MONO");\r
185                         c.CopyTo (array, -1);\r
186                 }\r
187 \r
188                 [Test]\r
189                 [ExpectedException (typeof (ArgumentException))]\r
190                 public void CopyTo_NotEnoughSpace () \r
191                 {\r
192                         string [] array = new string [4];\r
193                         NameValueCollection c = new NameValueCollection ();\r
194                         c.Add ("1", "mono");\r
195                         c.Add ("2", "MoNo");\r
196                         c.Add ("3", "mOnO");\r
197                         c.Add ("4", "MONO");\r
198                         c.CopyTo (array, 2);\r
199                 }\r
200 \r
201                 [Test]\r
202                 // Note: not a RankException\r
203                 [ExpectedException (typeof (ArgumentException))]\r
204                 public void CopyTo_MultipleDimensionStringArray () \r
205                 {\r
206                         string [,,] matrix = new string [2,3,4];\r
207                         NameValueCollection c = new NameValueCollection ();\r
208                         c.Add ("1", "mono");\r
209                         c.Add ("2", "MoNo");\r
210                         c.Add ("3", "mOnO");\r
211                         c.Add ("4", "MONO");\r
212                         c.CopyTo (matrix, 0);\r
213                 }\r
214 \r
215                 [Test]\r
216                 // Note: not a RankException\r
217                 [ExpectedException (typeof (ArgumentException))]\r
218                 public void CopyTo_MultipleDimensionArray () \r
219                 {\r
220                         Array a = Array.CreateInstance (typeof (string), 1, 2, 3);\r
221                         NameValueCollection c = new NameValueCollection ();\r
222                         c.CopyTo (a, 0);\r
223                 }\r
224 \r
225                 [Test]\r
226                 public void Remove () \r
227                 {\r
228                         string[] items = { "mono", "MoNo", "mOnO", "MONO" };\r
229                         // default constructor is case insensitive\r
230                         NameValueCollection c = new NameValueCollection ();\r
231                         for (int i=0; i < items.Length; i++) {\r
232                                 string add = "Add-" + i.ToString () + "-Count";\r
233 \r
234                                 c.Add (items [i], add);\r
235                                 AssertEquals (add, 1, c.Count);\r
236                                 c.Remove (items [0]);\r
237                                 AssertEquals ("Remove-0-Count", 0, c.Count);\r
238 \r
239                                 c.Add (items [i], add);\r
240                                 AssertEquals (add, 1, c.Count);\r
241                                 c.Remove (items [1]);\r
242                                 AssertEquals ("Remove-1-Count", 0, c.Count);\r
243 \r
244                                 c.Add (items [i], add);\r
245                                 AssertEquals (add, 1, c.Count);\r
246                                 c.Remove (items [2]);\r
247                                 AssertEquals ("Remove-2-Count", 0, c.Count);\r
248 \r
249                                 c.Add (items [i], add);\r
250                                 AssertEquals (add , 1, c.Count);\r
251                                 c.Remove (items [3]);\r
252                                 AssertEquals ("Remove-3-Count", 0, c.Count);\r
253                         }\r
254                 }\r
255         }\r
256 }\r