New test.
[mono.git] / mcs / class / System / Test / System.Collections.Specialized / NameValueCollectionTest.cs
index 44f8fb2fed620403f5e7ebdcc328875b76058c97..fc38042cf486163f1dfd813cd1d92d6ae6ce8633 100644 (file)
-// created on 7/21/2001 at 2:36 PM\r
-//\r
-// Authors:\r
-//     Martin Willemoes Hansen (mwh@sysrq.dk)\r
-//     Sebastien Pouliot  <sebastien@ximian.com>\r
-//\r
-// (C) 2003 Martin Willemoes Hansen\r
-// Copyright (C) 2004 Novell (http://www.novell.com)\r
-//\r
-\r
-using System;\r
-using System.Collections;\r
-using System.Collections.Specialized;\r
-using System.Text;\r
-\r
-using NUnit.Framework;\r
-\r
-namespace MonoTests.System.Collections.Specialized {\r
-\r
-       [TestFixture]\r
-        public class NameValueCollectionTest : Assertion {\r
-\r
-               [Test]\r
-               public void GetValues ()\r
-               {\r
-                       NameValueCollection col = new NameValueCollection ();\r
-                       col.Add ("foo1", "bar1");\r
-                       Assertion.AssertEquals ("#1", null, col.GetValues (null));\r
-                       Assertion.AssertEquals ("#2", null, col.GetValues (""));\r
-                       Assertion.AssertEquals ("#3", null, col.GetValues ("NotExistent"));\r
-               }\r
-\r
-               [Test]\r
-               public void Add ()\r
-               {\r
-                       NameValueCollection c = new NameValueCollection ();\r
-                       c.Add ("mono", "mono");\r
-                       c.Add ("!mono", null);\r
-                       c.Add (null, "mono!");\r
-                       AssertEquals ("Count", 3, c.Count);\r
-                       AssertEquals ("mono", "mono", c ["mono"]);\r
-                       AssertNull ("!mono", c ["!mono"]);\r
-                       AssertEquals ("mono!", "mono!", c [null]);\r
-               }\r
-\r
-               [Test]\r
-               public void Add_Multiples ()\r
-               {\r
-                       NameValueCollection c = new NameValueCollection ();\r
-                       c.Add ("mono", "mono");\r
-                       c.Add ("mono", "mono");\r
-                       c.Add ("mono", "mono");\r
-                       AssertEquals ("Count", 1, c.Count);\r
-                       AssertEquals ("mono", "mono,mono,mono", c ["mono"]);\r
-               }\r
-\r
-               [Test]\r
-               public void Add_Multiples_Null ()\r
-               {\r
-                       NameValueCollection c = new NameValueCollection ();\r
-                       c.Add ("mono", "mono");\r
-                       c.Add ("mono", null);\r
-                       c.Add ("mono", "mono");\r
-                       AssertEquals ("Count", 1, c.Count);\r
-                       AssertEquals ("mono", "mono,mono", c ["mono"]);\r
-               }\r
-\r
-               [Test]\r
-               public void Add_NVC ()\r
-               {\r
-                       NameValueCollection c1 = new NameValueCollection ();\r
-                       NameValueCollection c2 = new NameValueCollection ();\r
-\r
-                       c2.Add (c1);\r
-                       AssertEquals ("c1.Count", 0, c1.Count);\r
-                       AssertEquals ("c2.Count", 0, c2.Count);\r
-\r
-                       c1.Add ("foo", "bar");\r
-                       c2.Add ("bar", "foo");\r
-\r
-                       AssertEquals ("c1.Count", 1, c1.Count);\r
-                       AssertEquals ("c2.Count", 1, c2.Count);\r
-\r
-                       c2.Add (c1);\r
-                       AssertEquals ("c1.Count", 1, c1.Count);\r
-                       AssertEquals ("c2.Count", 2, c2.Count);\r
-               }\r
-\r
-               [Test]\r
-//             [ExpectedException (typeof (ArgumentNullException))]\r
-               [ExpectedException (typeof (NullReferenceException))]\r
-               public void Add_NVC_Null ()\r
-               {\r
-                       new NameValueCollection ().Add (null);\r
-               }\r
-\r
-               [Test]\r
-               public void Add_NVC_Null2 ()\r
-               {\r
-                       NameValueCollection a = new NameValueCollection ();\r
-                       NameValueCollection b = new NameValueCollection ();\r
-\r
-                       b.Add ("Test", null);\r
-                       a.Add (b);\r
-                       AssertEquals ("Count", 1, a.Count);\r
-               }\r
-\r
-               [Test]\r
-               public void Set_New ()\r
-               {\r
-                       NameValueCollection c = new NameValueCollection ();\r
-                       c.Set ("mono", "mono");\r
-                       c.Set ("!mono", null);\r
-                       c.Set (null, "mono!");\r
-                       AssertEquals ("Count", 3, c.Count);\r
-                       AssertEquals ("mono", "mono", c ["mono"]);\r
-                       AssertNull ("!mono", c ["!mono"]);\r
-                       AssertEquals ("mono!", "mono!", c [null]);\r
-               }\r
-\r
-               [Test]\r
-               public void Set_Replace ()\r
-               {\r
-                       NameValueCollection c = new NameValueCollection ();\r
-                       c.Add ("mono", "mono");\r
-                       c.Add ("!mono", "!mono");\r
-                       c.Add ("mono!", "mono!");\r
-                       AssertEquals ("Count", 3, c.Count);\r
-                       AssertEquals ("mono", "mono", c ["mono"]);\r
-                       AssertEquals ("!mono", "!mono", c ["!mono"]);\r
-                       AssertEquals ("mono!", "mono!", c ["mono!"]);\r
-\r
-                       c.Set ("mono", "nomo");\r
-                       c.Set ("!mono", null);\r
-                       c.Set (null, "mono!");\r
-                       AssertEquals ("Count", 4, c.Count); // mono! isn't removed\r
-                       AssertEquals ("mono", "nomo", c ["mono"]);\r
-                       AssertNull ("!mono", c ["!mono"]);\r
-                       AssertEquals ("mono!1", "mono!", c ["mono!"]);\r
-                       AssertEquals ("mono!2", "mono!", c [null]);\r
-               }\r
-\r
-               [Test]\r
-               public void CaseInsensitive () \r
-               {\r
-                       // default constructor is case insensitive\r
-                       NameValueCollection c = new NameValueCollection ();\r
-                       c.Add ("mono", "mono");\r
-                       c.Add ("MoNo", "MoNo");\r
-                       c.Add ("mOnO", "mOnO");\r
-                       c.Add ("MONO", "MONO");\r
-                       AssertEquals ("Count", 1, c.Count);\r
-               }\r
-\r
-               [Test]\r
-               public void CopyTo () \r
-               {\r
-                       string [] array = new string [4];\r
-                       NameValueCollection c = new NameValueCollection ();\r
-                       c.Add ("1", "mono");\r
-                       c.Add ("2", "MoNo");\r
-                       c.Add ("3", "mOnO");\r
-                       c.Add ("4", "MONO");\r
-                       c.CopyTo (array, 0);\r
-               }\r
-\r
-               [Test]\r
-               [ExpectedException (typeof (ArgumentNullException))]\r
-               public void CopyTo_Null () \r
-               {\r
-                       NameValueCollection c = new NameValueCollection ();\r
-                       c.CopyTo (null, 0);\r
-               }\r
-\r
-               [Test]\r
-               [ExpectedException (typeof (ArgumentOutOfRangeException))]\r
-               public void CopyTo_NegativeIndex () \r
-               {\r
-                       string [] array = new string [4];\r
-                       NameValueCollection c = new NameValueCollection ();\r
-                       c.Add ("1", "mono");\r
-                       c.Add ("2", "MoNo");\r
-                       c.Add ("3", "mOnO");\r
-                       c.Add ("4", "MONO");\r
-                       c.CopyTo (array, -1);\r
-               }\r
-\r
-               [Test]\r
-               [ExpectedException (typeof (ArgumentException))]\r
-               public void CopyTo_NotEnoughSpace () \r
-               {\r
-                       string [] array = new string [4];\r
-                       NameValueCollection c = new NameValueCollection ();\r
-                       c.Add ("1", "mono");\r
-                       c.Add ("2", "MoNo");\r
-                       c.Add ("3", "mOnO");\r
-                       c.Add ("4", "MONO");\r
-                       c.CopyTo (array, 2);\r
-               }\r
-\r
-               [Test]\r
-               // Note: not a RankException\r
-               [ExpectedException (typeof (ArgumentException))]\r
-               public void CopyTo_MultipleDimensionStringArray () \r
-               {\r
-                       string [,,] matrix = new string [2,3,4];\r
-                       NameValueCollection c = new NameValueCollection ();\r
-                       c.Add ("1", "mono");\r
-                       c.Add ("2", "MoNo");\r
-                       c.Add ("3", "mOnO");\r
-                       c.Add ("4", "MONO");\r
-                       c.CopyTo (matrix, 0);\r
-               }\r
-\r
-               [Test]\r
-               // Note: not a RankException\r
-               [ExpectedException (typeof (ArgumentException))]\r
-               public void CopyTo_MultipleDimensionArray () \r
-               {\r
-                       Array a = Array.CreateInstance (typeof (string), 1, 2, 3);\r
-                       NameValueCollection c = new NameValueCollection ();\r
-                       c.CopyTo (a, 0);\r
-               }\r
-\r
-               [Test]\r
-               public void Remove () \r
-               {\r
-                       string[] items = { "mono", "MoNo", "mOnO", "MONO" };\r
-                       // default constructor is case insensitive\r
-                       NameValueCollection c = new NameValueCollection ();\r
-                       for (int i=0; i < items.Length; i++) {\r
-                               string add = "Add-" + i.ToString () + "-Count";\r
-\r
-                               c.Add (items [i], add);\r
-                               AssertEquals (add, 1, c.Count);\r
-                               c.Remove (items [0]);\r
-                               AssertEquals ("Remove-0-Count", 0, c.Count);\r
-\r
-                               c.Add (items [i], add);\r
-                               AssertEquals (add, 1, c.Count);\r
-                               c.Remove (items [1]);\r
-                               AssertEquals ("Remove-1-Count", 0, c.Count);\r
-\r
-                               c.Add (items [i], add);\r
-                               AssertEquals (add, 1, c.Count);\r
-                               c.Remove (items [2]);\r
-                               AssertEquals ("Remove-2-Count", 0, c.Count);\r
-\r
-                               c.Add (items [i], add);\r
-                               AssertEquals (add , 1, c.Count);\r
-                               c.Remove (items [3]);\r
-                               AssertEquals ("Remove-3-Count", 0, c.Count);\r
-                       }\r
-               }\r
-       }\r
-}\r
+// created on 7/21/2001 at 2:36 PM
+//
+// Authors:
+//     Martin Willemoes Hansen (mwh@sysrq.dk)
+//     Sebastien Pouliot  <sebastien@ximian.com>
+//
+// (C) 2003 Martin Willemoes Hansen
+// Copyright (C) 2004-2005 Novell, Inc (http://www.novell.com)
+//
+
+using System;
+using System.Collections;
+using System.Collections.Specialized;
+using System.Text;
+
+using NUnit.Framework;
+
+namespace MonoTests.System.Collections.Specialized {
+
+       [TestFixture]
+        public class NameValueCollectionTest : Assertion {
+
+               [Test]
+               public void GetValues ()
+               {
+                       NameValueCollection col = new NameValueCollection ();
+                       col.Add ("foo1", "bar1");
+                       AssertEquals ("#1", null, col.GetValues (null));
+                       AssertEquals ("#2", null, col.GetValues (""));
+                       AssertEquals ("#3", null, col.GetValues ("NotExistent"));
+                       AssertEquals ("#4", 1, col.GetValues (0).Length);
+               }
+
+               [Test]
+               [ExpectedException (typeof (ArgumentOutOfRangeException))]
+               public void GetValues_OutOfRange ()
+               {
+                       NameValueCollection c = new NameValueCollection ();
+                       c.Add ("foo1", "bar1");
+                       AssertEquals ("#5", null, c.GetValues (1));
+               }
+
+               [Test]
+               public void Get ()
+               {
+                       NameValueCollection col = new NameValueCollection (5);
+                       col.Add ("foo1", "bar1");
+                       AssertEquals ("#1", null, col.Get (null));
+                       AssertEquals ("#2", null, col.Get (""));
+                       AssertEquals ("#3", null, col.Get ("NotExistent"));
+                       AssertEquals ("#4", "bar1", col.Get ("foo1"));
+                       AssertEquals ("#5", "bar1", col.Get (0));
+               }
+
+               [Test]
+               [ExpectedException (typeof (ArgumentOutOfRangeException))]
+               public void Get_OutOfRange ()
+               {
+                       NameValueCollection c = new NameValueCollection ();
+                       c.Add ("foo1", "bar1");
+                       AssertEquals ("#6", null, c.Get (1));
+               }
+
+               [Test]
+               public void GetKey ()
+               {
+                       NameValueCollection c = new NameValueCollection (CaseInsensitiveHashCodeProvider.DefaultInvariant, CaseInsensitiveComparer.DefaultInvariant);
+                       c.Add ("foo1", "bar1");
+                       AssertEquals ("#1", "foo1", c.GetKey (0));
+               }
+
+               [Test]
+               [ExpectedException (typeof (ArgumentOutOfRangeException))]
+               public void GetKey_OutOfRange ()
+               {
+                       NameValueCollection c = new NameValueCollection ();
+                       c.Add ("foo1", "bar1");
+                       AssertEquals ("#2", null, c.GetKey (1));
+               }
+
+               [Test]
+               public void HasKeys ()
+               {
+                       NameValueCollection c = new NameValueCollection (5, CaseInsensitiveHashCodeProvider.DefaultInvariant, CaseInsensitiveComparer.DefaultInvariant);
+                       Assert ("#1", !c.HasKeys ());
+                       c.Add ("foo1", "bar1");
+                       Assert ("#2", c.HasKeys ());
+               }
+
+               [Test]
+               public void Clear ()
+               {
+                       NameValueCollection c = new NameValueCollection ();
+                       AssertEquals ("#1", 0, c.Count);
+                       c.Add ("foo1", "bar1");
+                       AssertEquals ("#2", 1, c.Count);
+                       c.Clear ();
+                       AssertEquals ("#3", 0, c.Count);
+               }
+
+               [Test]
+               public void Add ()
+               {
+                       NameValueCollection c = new NameValueCollection ();
+                       c.Add ("mono", "mono");
+                       c.Add ("!mono", null);
+                       c.Add (null, "mono!");
+                       AssertEquals ("Count", 3, c.Count);
+                       AssertEquals ("mono", "mono", c ["mono"]);
+                       AssertNull ("!mono", c ["!mono"]);
+                       AssertEquals ("mono!", "mono!", c [null]);
+               }
+
+               [Test]
+               public void Add_Multiples ()
+               {
+                       NameValueCollection c = new NameValueCollection ();
+                       c.Add ("mono", "mono");
+                       c.Add ("mono", "mono");
+                       c.Add ("mono", "mono");
+                       AssertEquals ("Count", 1, c.Count);
+                       AssertEquals ("mono", "mono,mono,mono", c ["mono"]);
+               }
+
+               [Test]
+               public void Add_Multiples_Null ()
+               {
+                       NameValueCollection c = new NameValueCollection ();
+                       c.Add ("mono", "mono");
+                       c.Add ("mono", null);
+                       c.Add ("mono", "mono");
+                       AssertEquals ("Count", 1, c.Count);
+                       AssertEquals ("mono", "mono,mono", c ["mono"]);
+               }
+
+               [Test]
+               public void Add_NVC ()
+               {
+                       NameValueCollection c1 = new NameValueCollection ();
+                       NameValueCollection c2 = new NameValueCollection (c1);
+
+                       c2.Add (c1);
+                       AssertEquals ("c1.Count", 0, c1.Count);
+                       AssertEquals ("c2.Count", 0, c2.Count);
+
+                       c1.Add ("foo", "bar");
+                       c2.Add ("bar", "foo");
+
+                       AssertEquals ("c1.Count", 1, c1.Count);
+                       AssertEquals ("c2.Count", 1, c2.Count);
+
+                       c2.Add (c1);
+                       AssertEquals ("c1.Count", 1, c1.Count);
+                       AssertEquals ("c2.Count", 2, c2.Count);
+               }
+
+               [Test]
+#if NET_2_0
+               [ExpectedException (typeof (ArgumentNullException))]
+#else
+               [ExpectedException (typeof (NullReferenceException))]
+#endif
+               public void Add_NVC_Null ()
+               {
+                       new NameValueCollection ().Add (null);
+               }
+
+               [Test]
+               public void Add_NVC_Null2 ()
+               {
+                       NameValueCollection a = new NameValueCollection ();
+                       NameValueCollection b = new NameValueCollection ();
+
+                       b.Add ("Test", null);
+                       a.Add (b);
+                       AssertEquals ("Count", 1, a.Count);
+               }
+
+               [Test]
+               public void Set_New ()
+               {
+                       NameValueCollection c = new NameValueCollection ();
+                       c.Set ("mono", "mono");
+                       c.Set ("!mono", null);
+                       c.Set (null, "mono!");
+                       AssertEquals ("Count", 3, c.Count);
+                       AssertEquals ("mono", "mono", c ["mono"]);
+                       AssertNull ("!mono", c ["!mono"]);
+                       AssertEquals ("mono!", "mono!", c [null]);
+               }
+
+               [Test]
+               public void Set_Replace ()
+               {
+                       NameValueCollection c = new NameValueCollection ();
+                       c.Add ("mono", "mono");
+                       c.Add ("!mono", "!mono");
+                       c.Add ("mono!", "mono!");
+                       AssertEquals ("Count", 3, c.Count);
+                       AssertEquals ("mono", "mono", c ["mono"]);
+                       AssertEquals ("!mono", "!mono", c ["!mono"]);
+                       AssertEquals ("mono!", "mono!", c ["mono!"]);
+
+                       c.Set ("mono", "nomo");
+                       c.Set ("!mono", null);
+                       c.Set (null, "mono!");
+                       AssertEquals ("Count", 4, c.Count); // mono! isn't removed
+                       AssertEquals ("mono", "nomo", c ["mono"]);
+                       AssertNull ("!mono", c ["!mono"]);
+                       AssertEquals ("mono!1", "mono!", c ["mono!"]);
+                       AssertEquals ("mono!2", "mono!", c [null]);
+               }
+
+               [Test]
+               public void CaseInsensitive () 
+               {
+                       // default constructor is case insensitive
+                       NameValueCollection c = new NameValueCollection ();
+                       c.Add ("mono", "mono");
+                       c.Add ("MoNo", "MoNo");
+                       c.Add ("mOnO", "mOnO");
+                       c.Add ("MONO", "MONO");
+                       AssertEquals ("Count", 1, c.Count);
+               }
+
+               [Test]
+               public void CopyTo () 
+               {
+                       string [] array = new string [4];
+                       NameValueCollection c = new NameValueCollection ();
+                       c.Add ("1", "mono");
+                       c.Add ("2", "MoNo");
+                       c.Add ("3", "mOnO");
+                       c.Add ("4", "MONO");
+                       c.CopyTo (array, 0);
+               }
+
+               [Test]
+               [ExpectedException (typeof (ArgumentNullException))]
+               public void CopyTo_Null () 
+               {
+                       NameValueCollection c = new NameValueCollection ();
+                       c.CopyTo (null, 0);
+               }
+
+               [Test]
+               [ExpectedException (typeof (ArgumentOutOfRangeException))]
+               public void CopyTo_NegativeIndex () 
+               {
+                       string [] array = new string [4];
+                       NameValueCollection c = new NameValueCollection ();
+                       c.Add ("1", "mono");
+                       c.Add ("2", "MoNo");
+                       c.Add ("3", "mOnO");
+                       c.Add ("4", "MONO");
+                       c.CopyTo (array, -1);
+               }
+
+               [Test]
+               [ExpectedException (typeof (ArgumentException))]
+               public void CopyTo_NotEnoughSpace () 
+               {
+                       string [] array = new string [4];
+                       NameValueCollection c = new NameValueCollection ();
+                       c.Add ("1", "mono");
+                       c.Add ("2", "MoNo");
+                       c.Add ("3", "mOnO");
+                       c.Add ("4", "MONO");
+                       c.CopyTo (array, 2);
+               }
+
+               [Test]
+               // Note: not a RankException
+               [ExpectedException (typeof (ArgumentException))]
+               public void CopyTo_MultipleDimensionStringArray () 
+               {
+                       string [,,] matrix = new string [2,3,4];
+                       NameValueCollection c = new NameValueCollection ();
+                       c.Add ("1", "mono");
+                       c.Add ("2", "MoNo");
+                       c.Add ("3", "mOnO");
+                       c.Add ("4", "MONO");
+                       c.CopyTo (matrix, 0);
+               }
+
+               [Test]
+               // Note: not a RankException
+               [ExpectedException (typeof (ArgumentException))]
+               public void CopyTo_MultipleDimensionArray () 
+               {
+                       Array a = Array.CreateInstance (typeof (string), 1, 2, 3);
+                       NameValueCollection c = new NameValueCollection ();
+                       c.CopyTo (a, 0);
+               }
+
+               [Test]
+               public void Remove () 
+               {
+                       string[] items = { "mono", "MoNo", "mOnO", "MONO" };
+                       // default constructor is case insensitive
+                       NameValueCollection c = new NameValueCollection ();
+                       for (int i=0; i < items.Length; i++) {
+                               string add = "Add-" + i.ToString () + "-Count";
+
+                               c.Add (items [i], add);
+                               AssertEquals (add, 1, c.Count);
+                               c.Remove (items [0]);
+                               AssertEquals ("Remove-0-Count", 0, c.Count);
+
+                               c.Add (items [i], add);
+                               AssertEquals (add, 1, c.Count);
+                               c.Remove (items [1]);
+                               AssertEquals ("Remove-1-Count", 0, c.Count);
+
+                               c.Add (items [i], add);
+                               AssertEquals (add, 1, c.Count);
+                               c.Remove (items [2]);
+                               AssertEquals ("Remove-2-Count", 0, c.Count);
+
+                               c.Add (items [i], add);
+                               AssertEquals (add , 1, c.Count);
+                               c.Remove (items [3]);
+                               AssertEquals ("Remove-3-Count", 0, c.Count);
+                       }
+               }
+#if NET_2_0
+               [Test]
+               public void Constructor_IEqualityComparer ()
+               {
+                       NameValueCollection coll = new NameValueCollection (new EqualityComparer ());
+                       coll.Add ("a", "1");
+                       AssertEquals ("#1", 1, coll.Count);
+               }
+
+               [Test]
+               public void Constructor_Int_IEqualityComparer ()
+               {
+                       NameValueCollection coll = new NameValueCollection (5, new EqualityComparer ());
+                       coll.Add ("a", "1");
+                       AssertEquals ("#1", 1, coll.Count);
+               }
+
+               [Test]
+               [ExpectedException (typeof (ArgumentOutOfRangeException))]
+               public void Constructor_IntNegative_IEqualityComparer ()
+               {
+                       new NameValueCollection (-1, new EqualityComparer ());
+               }
+#endif
+       }
+}