2004-06-14 Sebastien Pouliot <sebastien@ximian.com>
[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 Set_New ()\r
99                 {\r
100                         NameValueCollection c = new NameValueCollection ();\r
101                         c.Set ("mono", "mono");\r
102                         c.Set ("!mono", null);\r
103                         c.Set (null, "mono!");\r
104                         AssertEquals ("Count", 3, c.Count);\r
105                         AssertEquals ("mono", "mono", c ["mono"]);\r
106                         AssertNull ("!mono", c ["!mono"]);\r
107                         AssertEquals ("mono!", "mono!", c [null]);\r
108                 }\r
109 \r
110                 [Test]\r
111                 public void Set_Replace ()\r
112                 {\r
113                         NameValueCollection c = new NameValueCollection ();\r
114                         c.Add ("mono", "mono");\r
115                         c.Add ("!mono", "!mono");\r
116                         c.Add ("mono!", "mono!");\r
117                         AssertEquals ("Count", 3, c.Count);\r
118                         AssertEquals ("mono", "mono", c ["mono"]);\r
119                         AssertEquals ("!mono", "!mono", c ["!mono"]);\r
120                         AssertEquals ("mono!", "mono!", c ["mono!"]);\r
121 \r
122                         c.Set ("mono", "nomo");\r
123                         c.Set ("!mono", null);\r
124                         c.Set (null, "mono!");\r
125                         AssertEquals ("Count", 4, c.Count); // mono! isn't removed\r
126                         AssertEquals ("mono", "nomo", c ["mono"]);\r
127                         AssertNull ("!mono", c ["!mono"]);\r
128                         AssertEquals ("mono!1", "mono!", c ["mono!"]);\r
129                         AssertEquals ("mono!2", "mono!", c [null]);\r
130                 }\r
131 \r
132                 [Test]\r
133                 public void CaseInsensitive () \r
134                 {\r
135                         // default constructor is case insensitive\r
136                         NameValueCollection c = new NameValueCollection ();\r
137                         c.Add ("mono", "mono");\r
138                         c.Add ("MoNo", "MoNo");\r
139                         c.Add ("mOnO", "mOnO");\r
140                         c.Add ("MONO", "MONO");\r
141                         AssertEquals ("Count", 1, c.Count);\r
142                 }\r
143 \r
144                 [Test]\r
145                 public void CopyTo () \r
146                 {\r
147                         string [] array = new string [4];\r
148                         NameValueCollection c = new NameValueCollection ();\r
149                         c.Add ("1", "mono");\r
150                         c.Add ("2", "MoNo");\r
151                         c.Add ("3", "mOnO");\r
152                         c.Add ("4", "MONO");\r
153                         c.CopyTo (array, 0);\r
154                 }\r
155 \r
156                 [Test]\r
157                 [ExpectedException (typeof (ArgumentNullException))]\r
158                 public void CopyTo_Null () \r
159                 {\r
160                         NameValueCollection c = new NameValueCollection ();\r
161                         c.CopyTo (null, 0);\r
162                 }\r
163 \r
164                 [Test]\r
165                 [ExpectedException (typeof (ArgumentOutOfRangeException))]\r
166                 public void CopyTo_NegativeIndex () \r
167                 {\r
168                         string [] array = new string [4];\r
169                         NameValueCollection c = new NameValueCollection ();\r
170                         c.Add ("1", "mono");\r
171                         c.Add ("2", "MoNo");\r
172                         c.Add ("3", "mOnO");\r
173                         c.Add ("4", "MONO");\r
174                         c.CopyTo (array, -1);\r
175                 }\r
176 \r
177                 [Test]\r
178                 [ExpectedException (typeof (ArgumentException))]\r
179                 public void CopyTo_NotEnoughSpace () \r
180                 {\r
181                         string [] array = new string [4];\r
182                         NameValueCollection c = new NameValueCollection ();\r
183                         c.Add ("1", "mono");\r
184                         c.Add ("2", "MoNo");\r
185                         c.Add ("3", "mOnO");\r
186                         c.Add ("4", "MONO");\r
187                         c.CopyTo (array, 2);\r
188                 }\r
189 \r
190                 [Test]\r
191                 // Note: not a RankException\r
192                 [ExpectedException (typeof (ArgumentException))]\r
193                 public void CopyTo_MultipleDimensionStringArray () \r
194                 {\r
195                         string [,,] matrix = new string [2,3,4];\r
196                         NameValueCollection c = new NameValueCollection ();\r
197                         c.Add ("1", "mono");\r
198                         c.Add ("2", "MoNo");\r
199                         c.Add ("3", "mOnO");\r
200                         c.Add ("4", "MONO");\r
201                         c.CopyTo (matrix, 0);\r
202                 }\r
203 \r
204                 [Test]\r
205                 // Note: not a RankException\r
206                 [ExpectedException (typeof (ArgumentException))]\r
207                 public void CopyTo_MultipleDimensionArray () \r
208                 {\r
209                         Array a = Array.CreateInstance (typeof (string), 1, 2, 3);\r
210                         NameValueCollection c = new NameValueCollection ();\r
211                         c.CopyTo (a, 0);\r
212                 }\r
213         }\r
214 }\r