1 // created on 7/21/2001 at 2:36 PM
4 // Martin Willemoes Hansen (mwh@sysrq.dk)
5 // Sebastien Pouliot <sebastien@ximian.com>
7 // (C) 2003 Martin Willemoes Hansen
8 // Copyright (C) 2004-2005 Novell, Inc (http://www.novell.com)
12 using System.Collections;
13 using System.Collections.Specialized;
16 using NUnit.Framework;
18 namespace MonoTests.System.Collections.Specialized {
21 public class NameValueCollectionTest : Assertion {
24 public void GetValues ()
26 NameValueCollection col = new NameValueCollection ();
27 col.Add ("foo1", "bar1");
28 AssertEquals ("#1", null, col.GetValues (null));
29 AssertEquals ("#2", null, col.GetValues (""));
30 AssertEquals ("#3", null, col.GetValues ("NotExistent"));
31 AssertEquals ("#4", 1, col.GetValues (0).Length);
35 [ExpectedException (typeof (ArgumentOutOfRangeException))]
36 public void GetValues_OutOfRange ()
38 NameValueCollection c = new NameValueCollection ();
39 c.Add ("foo1", "bar1");
40 AssertEquals ("#5", null, c.GetValues (1));
46 NameValueCollection col = new NameValueCollection (5);
47 col.Add ("foo1", "bar1");
48 AssertEquals ("#1", null, col.Get (null));
49 AssertEquals ("#2", null, col.Get (""));
50 AssertEquals ("#3", null, col.Get ("NotExistent"));
51 AssertEquals ("#4", "bar1", col.Get ("foo1"));
52 AssertEquals ("#5", "bar1", col.Get (0));
56 [ExpectedException (typeof (ArgumentOutOfRangeException))]
57 public void Get_OutOfRange ()
59 NameValueCollection c = new NameValueCollection ();
60 c.Add ("foo1", "bar1");
61 AssertEquals ("#6", null, c.Get (1));
67 NameValueCollection c = new NameValueCollection (CaseInsensitiveHashCodeProvider.DefaultInvariant, CaseInsensitiveComparer.DefaultInvariant);
68 c.Add ("foo1", "bar1");
69 AssertEquals ("#1", "foo1", c.GetKey (0));
73 [ExpectedException (typeof (ArgumentOutOfRangeException))]
74 public void GetKey_OutOfRange ()
76 NameValueCollection c = new NameValueCollection ();
77 c.Add ("foo1", "bar1");
78 AssertEquals ("#2", null, c.GetKey (1));
82 public void HasKeys ()
84 NameValueCollection c = new NameValueCollection (5, CaseInsensitiveHashCodeProvider.DefaultInvariant, CaseInsensitiveComparer.DefaultInvariant);
85 Assert ("#1", !c.HasKeys ());
86 c.Add ("foo1", "bar1");
87 Assert ("#2", c.HasKeys ());
93 NameValueCollection c = new NameValueCollection ();
94 AssertEquals ("#1", 0, c.Count);
95 c.Add ("foo1", "bar1");
96 AssertEquals ("#2", 1, c.Count);
98 AssertEquals ("#3", 0, c.Count);
104 NameValueCollection c = new NameValueCollection ();
105 c.Add ("mono", "mono");
106 c.Add ("!mono", null);
107 c.Add (null, "mono!");
108 AssertEquals ("Count", 3, c.Count);
109 AssertEquals ("mono", "mono", c ["mono"]);
110 AssertNull ("!mono", c ["!mono"]);
111 AssertEquals ("mono!", "mono!", c [null]);
115 public void Add_Multiples ()
117 NameValueCollection c = new NameValueCollection ();
118 c.Add ("mono", "mono");
119 c.Add ("mono", "mono");
120 c.Add ("mono", "mono");
121 AssertEquals ("Count", 1, c.Count);
122 AssertEquals ("mono", "mono,mono,mono", c ["mono"]);
126 public void Add_Multiples_Null ()
128 NameValueCollection c = new NameValueCollection ();
129 c.Add ("mono", "mono");
130 c.Add ("mono", null);
131 c.Add ("mono", "mono");
132 AssertEquals ("Count", 1, c.Count);
133 AssertEquals ("mono", "mono,mono", c ["mono"]);
137 public void Add_NVC ()
139 NameValueCollection c1 = new NameValueCollection ();
140 NameValueCollection c2 = new NameValueCollection (c1);
143 AssertEquals ("c1.Count", 0, c1.Count);
144 AssertEquals ("c2.Count", 0, c2.Count);
146 c1.Add ("foo", "bar");
147 c2.Add ("bar", "foo");
149 AssertEquals ("c1.Count", 1, c1.Count);
150 AssertEquals ("c2.Count", 1, c2.Count);
153 AssertEquals ("c1.Count", 1, c1.Count);
154 AssertEquals ("c2.Count", 2, c2.Count);
159 [ExpectedException (typeof (ArgumentNullException))]
161 [ExpectedException (typeof (NullReferenceException))]
163 public void Add_NVC_Null ()
165 new NameValueCollection ().Add (null);
169 public void Add_NVC_Null2 ()
171 NameValueCollection a = new NameValueCollection ();
172 NameValueCollection b = new NameValueCollection ();
174 b.Add ("Test", null);
176 AssertEquals ("Count", 1, a.Count);
180 public void Set_New ()
182 NameValueCollection c = new NameValueCollection ();
183 c.Set ("mono", "mono");
184 c.Set ("!mono", null);
185 c.Set (null, "mono!");
186 AssertEquals ("Count", 3, c.Count);
187 AssertEquals ("mono", "mono", c ["mono"]);
188 AssertNull ("!mono", c ["!mono"]);
189 AssertEquals ("mono!", "mono!", c [null]);
193 public void Set_Replace ()
195 NameValueCollection c = new NameValueCollection ();
196 c.Add ("mono", "mono");
197 c.Add ("!mono", "!mono");
198 c.Add ("mono!", "mono!");
199 AssertEquals ("Count", 3, c.Count);
200 AssertEquals ("mono", "mono", c ["mono"]);
201 AssertEquals ("!mono", "!mono", c ["!mono"]);
202 AssertEquals ("mono!", "mono!", c ["mono!"]);
204 c.Set ("mono", "nomo");
205 c.Set ("!mono", null);
206 c.Set (null, "mono!");
207 AssertEquals ("Count", 4, c.Count); // mono! isn't removed
208 AssertEquals ("mono", "nomo", c ["mono"]);
209 AssertNull ("!mono", c ["!mono"]);
210 AssertEquals ("mono!1", "mono!", c ["mono!"]);
211 AssertEquals ("mono!2", "mono!", c [null]);
215 public void CaseInsensitive ()
217 // default constructor is case insensitive
218 NameValueCollection c = new NameValueCollection ();
219 c.Add ("mono", "mono");
220 c.Add ("MoNo", "MoNo");
221 c.Add ("mOnO", "mOnO");
222 c.Add ("MONO", "MONO");
223 AssertEquals ("Count", 1, c.Count);
227 public void CopyTo ()
229 string [] array = new string [4];
230 NameValueCollection c = new NameValueCollection ();
239 [ExpectedException (typeof (ArgumentNullException))]
240 public void CopyTo_Null ()
242 NameValueCollection c = new NameValueCollection ();
247 [ExpectedException (typeof (ArgumentOutOfRangeException))]
248 public void CopyTo_NegativeIndex ()
250 string [] array = new string [4];
251 NameValueCollection c = new NameValueCollection ();
256 c.CopyTo (array, -1);
260 [ExpectedException (typeof (ArgumentException))]
261 public void CopyTo_NotEnoughSpace ()
263 string [] array = new string [4];
264 NameValueCollection c = new NameValueCollection ();
273 // Note: not a RankException
274 [ExpectedException (typeof (ArgumentException))]
275 public void CopyTo_MultipleDimensionStringArray ()
277 string [,,] matrix = new string [2,3,4];
278 NameValueCollection c = new NameValueCollection ();
283 c.CopyTo (matrix, 0);
287 // Note: not a RankException
288 [ExpectedException (typeof (ArgumentException))]
289 public void CopyTo_MultipleDimensionArray ()
291 Array a = Array.CreateInstance (typeof (string), 1, 2, 3);
292 NameValueCollection c = new NameValueCollection ();
297 public void Remove ()
299 string[] items = { "mono", "MoNo", "mOnO", "MONO" };
300 // default constructor is case insensitive
301 NameValueCollection c = new NameValueCollection ();
302 for (int i=0; i < items.Length; i++) {
303 string add = "Add-" + i.ToString () + "-Count";
305 c.Add (items [i], add);
306 AssertEquals (add, 1, c.Count);
307 c.Remove (items [0]);
308 AssertEquals ("Remove-0-Count", 0, c.Count);
310 c.Add (items [i], add);
311 AssertEquals (add, 1, c.Count);
312 c.Remove (items [1]);
313 AssertEquals ("Remove-1-Count", 0, c.Count);
315 c.Add (items [i], add);
316 AssertEquals (add, 1, c.Count);
317 c.Remove (items [2]);
318 AssertEquals ("Remove-2-Count", 0, c.Count);
320 c.Add (items [i], add);
321 AssertEquals (add , 1, c.Count);
322 c.Remove (items [3]);
323 AssertEquals ("Remove-3-Count", 0, c.Count);
328 public void Constructor_IEqualityComparer ()
330 NameValueCollection coll = new NameValueCollection (new EqualityComparer ());
332 AssertEquals ("#1", 1, coll.Count);
336 public void Constructor_Int_IEqualityComparer ()
338 NameValueCollection coll = new NameValueCollection (5, new EqualityComparer ());
340 AssertEquals ("#1", 1, coll.Count);
344 [ExpectedException (typeof (ArgumentOutOfRangeException))]
345 public void Constructor_IntNegative_IEqualityComparer ()
347 new NameValueCollection (-1, new EqualityComparer ());