[bcl] Remove more NET_2_0 checks from class libs
[mono.git] / mcs / class / System.Data / Test / System.Data / DataColumnCollectionTest2.cs
1 // Authors:\r
2 //   Rafael Mizrahi   <rafim@mainsoft.com>\r
3 //   Erez Lotan       <erezl@mainsoft.com>\r
4 //   Oren Gurfinkel   <oreng@mainsoft.com>\r
5 //   Ofer Borstein\r
6 //\r
7 // Copyright (c) 2004 Mainsoft Co.\r
8 //\r
9 // Permission is hereby granted, free of charge, to any person obtaining\r
10 // a copy of this software and associated documentation files (the\r
11 // "Software"), to deal in the Software without restriction, including\r
12 // without limitation the rights to use, copy, modify, merge, publish,\r
13 // distribute, sublicense, and/or sell copies of the Software, and to\r
14 // permit persons to whom the Software is furnished to do so, subject to\r
15 // the following conditions:\r
16 //\r
17 // The above copyright notice and this permission notice shall be\r
18 // included in all copies or substantial portions of the Software.\r
19 //\r
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
27 //\r
28 \r
29 using NUnit.Framework;\r
30 using System;\r
31 using System.ComponentModel;\r
32 using System.Data;\r
33 using MonoTests.System.Data.Utils;\r
34 using System.Collections;\r
35 \r
36 namespace MonoTests.System.Data\r
37 {\r
38         [TestFixture] public class DataColumnCollectionTest2\r
39         {\r
40                 private int counter = 0;\r
41 \r
42                 [Test] public void Add()\r
43                 {\r
44                         DataColumn dc = null;\r
45                         DataTable dt = new DataTable();\r
46 \r
47                         //----------------------------- check default --------------------\r
48                         dc = dt.Columns.Add();\r
49                         // Add column 1\r
50                         Assert.AreEqual("Column1", dc.ColumnName, "DCC1");\r
51 \r
52                         // Add column 2\r
53                         dc = dt.Columns.Add();\r
54                         Assert.AreEqual("Column2", dc.ColumnName, "DCC2");\r
55 \r
56                         dc = dt.Columns.Add();\r
57                         // Add column 3\r
58                         Assert.AreEqual("Column3", dc.ColumnName, "DCC3");\r
59 \r
60                         dc = dt.Columns.Add();\r
61                         // Add column 4\r
62                         Assert.AreEqual("Column4", dc.ColumnName, "DCC4");\r
63 \r
64                         dc = dt.Columns.Add();\r
65                         // Add column 5\r
66                         Assert.AreEqual("Column5", dc.ColumnName, "DCC5");\r
67                         Assert.AreEqual(5, dt.Columns.Count, "DCC6");\r
68 \r
69                         //----------------------------- check Add/Remove from begining --------------------\r
70                         dt = initTable();\r
71 \r
72                         dt.Columns.Remove(dt.Columns[0]);\r
73                         dt.Columns.Remove(dt.Columns[0]);\r
74                         dt.Columns.Remove(dt.Columns[0]);\r
75 \r
76                         // check column 4 - remove - from begining\r
77                         Assert.AreEqual("Column4", dt.Columns[0].ColumnName, "DCC7");\r
78 \r
79                         // check column 5 - remove - from begining\r
80                         Assert.AreEqual("Column5", dt.Columns[1].ColumnName , "DCC8");\r
81                         Assert.AreEqual(2, dt.Columns.Count, "DCC9");\r
82 \r
83                         dt.Columns.Add();\r
84                         dt.Columns.Add();\r
85                         dt.Columns.Add();\r
86                         dt.Columns.Add();\r
87 \r
88                         // check column 0 - Add new  - from begining\r
89                         Assert.AreEqual("Column4", dt.Columns[0].ColumnName , "DCC10");\r
90 \r
91                         // check column 1 - Add new - from begining\r
92                         Assert.AreEqual("Column5", dt.Columns[1].ColumnName , "DCC11");\r
93 \r
94                         // check column 2 - Add new - from begining\r
95                         Assert.AreEqual("Column6", dt.Columns[2].ColumnName , "DCC12");\r
96 \r
97                         // check column 3 - Add new - from begining\r
98                         Assert.AreEqual("Column7", dt.Columns[3].ColumnName , "DCC13");\r
99 \r
100                         // check column 4 - Add new - from begining\r
101                         Assert.AreEqual("Column8", dt.Columns[4].ColumnName , "DCC14");\r
102 \r
103                         // check column 5 - Add new - from begining\r
104                         Assert.AreEqual("Column9", dt.Columns[5].ColumnName , "DCC15");\r
105 \r
106                         //----------------------------- check Add/Remove from middle --------------------\r
107 \r
108                         dt = initTable();\r
109 \r
110                         dt.Columns.Remove(dt.Columns[2]);\r
111                         dt.Columns.Remove(dt.Columns[2]);\r
112                         dt.Columns.Remove(dt.Columns[2]);\r
113 \r
114                         // check column 0 - remove - from Middle\r
115                         Assert.AreEqual("Column1", dt.Columns[0].ColumnName, "DCC16");\r
116 \r
117                         // check column 1 - remove - from Middle\r
118                         Assert.AreEqual("Column2", dt.Columns[1].ColumnName , "DCC17");\r
119 \r
120                         dt.Columns.Add();\r
121                         dt.Columns.Add();\r
122                         dt.Columns.Add();\r
123                         dt.Columns.Add();\r
124 \r
125                         // check column 0 - Add new  - from Middle\r
126                         Assert.AreEqual("Column1", dt.Columns[0].ColumnName , "DCC18");\r
127 \r
128                         // check column 1 - Add new - from Middle\r
129                         Assert.AreEqual("Column2", dt.Columns[1].ColumnName , "DCC19");\r
130 \r
131                         // check column 2 - Add new - from Middle\r
132                         Assert.AreEqual("Column3", dt.Columns[2].ColumnName , "DCC20");\r
133 \r
134                         // check column 3 - Add new - from Middle\r
135                         Assert.AreEqual("Column4", dt.Columns[3].ColumnName , "DCC21");\r
136 \r
137                         // check column 4 - Add new - from Middle\r
138                         Assert.AreEqual("Column5", dt.Columns[4].ColumnName , "DCC22");\r
139 \r
140                         // check column 5 - Add new - from Middle\r
141                         Assert.AreEqual("Column6", dt.Columns[5].ColumnName , "DCC23");\r
142 \r
143                         //----------------------------- check Add/Remove from end --------------------\r
144 \r
145                         dt = initTable();\r
146 \r
147                         dt.Columns.Remove(dt.Columns[4]);\r
148                         dt.Columns.Remove(dt.Columns[3]);\r
149                         dt.Columns.Remove(dt.Columns[2]);\r
150 \r
151                         // check column 0 - remove - from end\r
152                         Assert.AreEqual("Column1", dt.Columns[0].ColumnName, "DCC24");\r
153 \r
154                         // check column 1 - remove - from end\r
155                         Assert.AreEqual("Column2", dt.Columns[1].ColumnName , "DCC25");\r
156 \r
157                         dt.Columns.Add();\r
158                         dt.Columns.Add();\r
159                         dt.Columns.Add();\r
160                         dt.Columns.Add();\r
161 \r
162                         // check column 0 - Add new  - from end\r
163                         Assert.AreEqual("Column1", dt.Columns[0].ColumnName , "DCC26");\r
164 \r
165                         // check column 1 - Add new - from end\r
166                         Assert.AreEqual("Column2", dt.Columns[1].ColumnName , "DCC27");\r
167 \r
168                         // check column 2 - Add new - from end\r
169                         Assert.AreEqual("Column3", dt.Columns[2].ColumnName , "DCC28");\r
170 \r
171                         // check column 3 - Add new - from end\r
172                         Assert.AreEqual("Column4", dt.Columns[3].ColumnName , "DCC29");\r
173 \r
174                         // check column 4 - Add new - from end\r
175                         Assert.AreEqual("Column5", dt.Columns[4].ColumnName , "DCC30");\r
176 \r
177                         // check column 5 - Add new - from end\r
178                         Assert.AreEqual("Column6", dt.Columns[5].ColumnName , "DCC31");\r
179                 }\r
180 \r
181                 private DataTable initTable()\r
182                 {\r
183                         DataTable dt = new DataTable();\r
184                         for (int i=0; i<5; i++)\r
185                         {\r
186                                 dt.Columns.Add();\r
187                         }\r
188                         return dt;\r
189            }\r
190 \r
191                 [Test] public void TestAdd_ByTableName()\r
192                 {\r
193                         //this test is from boris\r
194 \r
195                         DataSet ds = new DataSet();\r
196                         DataTable dt = new DataTable();\r
197                         ds.Tables.Add(dt);\r
198 \r
199                         // add one column\r
200                         dt.Columns.Add("id1",typeof(int));\r
201 \r
202                         // DataColumnCollection add\r
203                         Assert.AreEqual(1, dt.Columns.Count , "DCC32");\r
204 \r
205                         // add row\r
206                         DataRow dr = dt.NewRow();\r
207                         dt.Rows.Add(dr);\r
208 \r
209                         // remove column\r
210                         dt.Columns.Remove("id1");\r
211 \r
212                         // DataColumnCollection remove\r
213                         Assert.AreEqual(0, dt.Columns.Count , "DCC33");\r
214 \r
215                         //row is still there\r
216 \r
217                         // now add column\r
218                         dt.Columns.Add("id2",typeof(int));\r
219 \r
220                         // DataColumnCollection add again\r
221                         Assert.AreEqual(1, dt.Columns.Count , "DCC34");\r
222                 }\r
223 \r
224                 [Test] public void TestCanRemove_ByDataColumn()\r
225                 {\r
226                         DataTable dt = DataProvider.CreateUniqueConstraint();\r
227                         DataColumn dummyCol = new DataColumn();\r
228                         Assert.AreEqual(false, dt.Columns.CanRemove(null), "DCC35"); //Cannot remove null column\r
229                         Assert.AreEqual(false, dt.Columns.CanRemove(dummyCol), "DCC36"); //Don't belong to this table\r
230                         Assert.AreEqual(false, dt.Columns.CanRemove(dt.Columns[0]), "DCC37"); //It belongs to unique constraint\r
231                         Assert.AreEqual(true, dt.Columns.CanRemove(dt.Columns[1]), "DCC38");\r
232                 }\r
233                 [Test] public void TestCanRemove_ForigenConstraint()\r
234                 {\r
235                         DataSet ds = DataProvider.CreateForigenConstraint();\r
236 \r
237                         Assert.AreEqual(false, ds.Tables["child"].Columns.CanRemove(ds.Tables["child"].Columns["parentId"]), "DCC39");//Forigen\r
238                         Assert.AreEqual(false, ds.Tables["parent"].Columns.CanRemove(ds.Tables["child"].Columns["parentId"]), "DCC40");//Parent\r
239                 }\r
240                 [Test] public void TestCanRemove_ParentRelations()\r
241                 {\r
242                         DataSet ds = new DataSet();\r
243 \r
244                         ds.Tables.Add("table1");\r
245                         ds.Tables.Add("table2");\r
246                         ds.Tables["table1"].Columns.Add("col1");\r
247                         ds.Tables["table2"].Columns.Add("col1");\r
248 \r
249                         ds.Tables[1].ParentRelations.Add("name1",ds.Tables[0].Columns["col1"],ds.Tables[1].Columns["col1"],false);\r
250 \r
251                         Assert.AreEqual(false, ds.Tables[1].Columns.CanRemove(ds.Tables[1].Columns["col1"]), "DCC41"); //Part of a parent\r
252                         Assert.AreEqual(false, ds.Tables[0].Columns.CanRemove(ds.Tables[0].Columns["col1"]), "DCC42"); //Part of a child\r
253                 }\r
254 \r
255                 [Test] public void TestCanRemove_Expression()\r
256                 {\r
257                         DataTable dt = new DataTable();\r
258                         dt.Columns.Add("col1",typeof(string));\r
259                         dt.Columns.Add("col2",typeof(string),"sum(col1)");\r
260 \r
261                         Assert.AreEqual(false, dt.Columns.CanRemove(dt.Columns["col1"]), "DCC43"); //Col1 is a part of expression\r
262                 }\r
263 \r
264                 [Test] public void TestAdd_CollectionChanged()\r
265                 {\r
266                         DataTable dt = DataProvider.CreateParentDataTable();\r
267 \r
268                         dt.Columns.CollectionChanged+=new CollectionChangeEventHandler(Columns_CollectionChanged);\r
269                         counter = 0;\r
270                         DataColumn c = dt.Columns.Add("tempCol");\r
271 \r
272                         Assert.AreEqual(1, counter, "DCC44.1");\r
273                         Assert.AreEqual (c, change_element, "DCC44.2");\r
274                 }\r
275 \r
276                 [Test] public void TestRemove_CollectionChanged()\r
277                 {\r
278                         DataTable dt = DataProvider.CreateParentDataTable();\r
279 \r
280                         dt.Columns.CollectionChanged+=new CollectionChangeEventHandler(Columns_CollectionChanged);\r
281                         DataColumn c = dt.Columns.Add("tempCol");\r
282                         counter = 0;\r
283                         dt.Columns.Remove("tempCol");\r
284 \r
285                         Assert.AreEqual (1, counter, "DCC44.3");\r
286                         Assert.AreEqual (c, change_element, "DCC44.4");\r
287                 }\r
288 \r
289                 [Test] public void TestSetName_CollectionChanged()\r
290                 {\r
291                         DataTable dt = DataProvider.CreateParentDataTable();\r
292 \r
293                         dt.Columns.CollectionChanged+=new CollectionChangeEventHandler(Columns_CollectionChanged);\r
294                         dt.Columns.Add("tempCol");\r
295                         counter = 0;\r
296                         dt.Columns[0].ColumnName = "tempCol2";\r
297 \r
298                         Assert.AreEqual(0, counter, "DCC44.5");\r
299                 }\r
300 \r
301                 object change_element;\r
302                 private void Columns_CollectionChanged(object sender, CollectionChangeEventArgs e)\r
303                 {\r
304                         counter++;\r
305                         change_element = e.Element;\r
306                 }\r
307 \r
308                 [Test] public void TestContains_ByColumnName()\r
309                 {\r
310                         DataTable dt = DataProvider.CreateParentDataTable();\r
311                         Assert.AreEqual(true, dt.Columns.Contains("ParentId"), "DCC45");\r
312                         Assert.AreEqual(true, dt.Columns.Contains("String1"), "DCC46");\r
313                         Assert.AreEqual(true, dt.Columns.Contains("ParentBool"), "DCC47");\r
314 \r
315                         Assert.AreEqual(false, dt.Columns.Contains("ParentId1"), "DCC48");\r
316                         dt.Columns.Remove("ParentId");\r
317                         Assert.AreEqual(false, dt.Columns.Contains("ParentId"), "DCC49");\r
318 \r
319                         dt.Columns["String1"].ColumnName = "Temp1";\r
320 \r
321                         Assert.AreEqual(false, dt.Columns.Contains("String1"), "DCC50");\r
322                         Assert.AreEqual(true, dt.Columns.Contains("Temp1"), "DCC51");\r
323                 }\r
324                 public void NotReadyTestContains_S2() // FIXME: fails in MS\r
325                 {\r
326                         DataTable dt = DataProvider.CreateParentDataTable();\r
327                         Assert.AreEqual(false, dt.Columns.Contains(null), "DCC52");\r
328                 }\r
329 \r
330 \r
331                 [Test] public void Count()\r
332                 {\r
333                         DataTable dt = DataProvider.CreateParentDataTable();\r
334 \r
335                         Assert.AreEqual(6, dt.Columns.Count, "DCC55");\r
336 \r
337                         dt.Columns.Add("temp1");\r
338                         Assert.AreEqual(7, dt.Columns.Count, "DCC56");\r
339 \r
340                         dt.Columns.Remove("temp1");\r
341                         Assert.AreEqual(6, dt.Columns.Count, "DCC57");\r
342 \r
343                         dt.Columns.Remove("ParentId");\r
344                         Assert.AreEqual(5, dt.Columns.Count, "DCC58");\r
345                 }\r
346 \r
347                 [Test] public void TestIndexOf_ByDataColumn()\r
348                 {\r
349                         DataTable dt = DataProvider.CreateParentDataTable();\r
350 \r
351                         for (int i=0;i<dt.Columns.Count;i++)\r
352                         {\r
353                                 Assert.AreEqual(i, dt.Columns.IndexOf(dt.Columns[i]), "DCC59");\r
354                         }\r
355 \r
356                         DataColumn col = new DataColumn();\r
357 \r
358                         Assert.AreEqual(-1, dt.Columns.IndexOf(col), "DCC60");\r
359 \r
360                         Assert.AreEqual(-1, dt.Columns.IndexOf((DataColumn)null), "DCC61");\r
361                 }\r
362 \r
363                 [Test]\r
364                 public void TestIndexOf_ByColumnName()\r
365                 {\r
366                         DataTable dt = DataProvider.CreateParentDataTable();\r
367 \r
368                         for (int i=0;i<dt.Columns.Count;i++)\r
369                         {\r
370                                 Assert.AreEqual(i, dt.Columns.IndexOf(dt.Columns[i].ColumnName), "DCC62");\r
371                         }\r
372 \r
373                         DataColumn col = new DataColumn();\r
374 \r
375                         Assert.AreEqual(-1, dt.Columns.IndexOf("temp1"), "DCC63");\r
376 \r
377                         Assert.AreEqual(-1, dt.Columns.IndexOf((string)null), "DCC64");\r
378                 }\r
379 \r
380                 [Test] public void TestRemove_ByDataColumn()\r
381                 {\r
382                         //prepare a DataSet with DataTable to be checked\r
383                         DataTable dtSource = new DataTable();\r
384                         dtSource.Columns.Add("Col_0", typeof(int));\r
385                         dtSource.Columns.Add("Col_1", typeof(int));\r
386                         dtSource.Columns.Add("Col_2", typeof(int));\r
387                         dtSource.Rows.Add(new object[] {0,1,2});\r
388 \r
389                         DataTable dt = null;\r
390 \r
391                         //------Check Remove first column---------\r
392                         dt = dtSource.Clone();\r
393                         dt.ImportRow(dtSource.Rows[0]);\r
394 \r
395                         dt.Columns.Remove(dt.Columns[0]);\r
396                         // Remove first column - check column count\r
397                         Assert.AreEqual(2, dt.Columns.Count , "DCC65");\r
398 \r
399                         // Remove first column - check column removed\r
400                         Assert.AreEqual(false, dt.Columns.Contains("Col_0"), "DCC66");\r
401 \r
402                         // Remove first column - check column 0 data\r
403                         Assert.AreEqual(1, dt.Rows[0][0], "DCC67");\r
404 \r
405                         // Remove first column - check column 1 data\r
406                         Assert.AreEqual(2, dt.Rows[0][1], "DCC68");\r
407 \r
408                         //------Check Remove middle column---------\r
409                         dt = dtSource.Clone();\r
410                         dt.ImportRow(dtSource.Rows[0]);\r
411 \r
412                         dt.Columns.Remove(dt.Columns[1]);\r
413                         // Remove middle column - check column count\r
414                         Assert.AreEqual(2, dt.Columns.Count , "DCC69");\r
415 \r
416                         // Remove middle column - check column removed\r
417                         Assert.AreEqual(false, dt.Columns.Contains("Col_1"), "DCC70");\r
418 \r
419                         // Remove middle column - check column 0 data\r
420                         Assert.AreEqual(0, dt.Rows[0][0], "DCC71");\r
421 \r
422                         // Remove middle column - check column 1 data\r
423                         Assert.AreEqual(2, dt.Rows[0][1], "DCC72");\r
424 \r
425                         //------Check Remove last column---------\r
426                         dt = dtSource.Clone();\r
427                         dt.ImportRow(dtSource.Rows[0]);\r
428 \r
429                         dt.Columns.Remove(dt.Columns[2]);\r
430                         // Remove last column - check column count\r
431                         Assert.AreEqual(2, dt.Columns.Count , "DCC73");\r
432 \r
433                         // Remove last column - check column removed\r
434                         Assert.AreEqual(false, dt.Columns.Contains("Col_2"), "DCC74");\r
435 \r
436                         // Remove last column - check column 0 data\r
437                         Assert.AreEqual(0, dt.Rows[0][0], "DCC75");\r
438 \r
439                         // Remove last column - check column 1 data\r
440                         Assert.AreEqual(1, dt.Rows[0][1], "DCC76");\r
441 \r
442                         //------Check Remove column exception---------\r
443                         dt = dtSource.Clone();\r
444                         dt.ImportRow(dtSource.Rows[0]);\r
445                         // Check Remove column exception - Column name not exists\r
446                         try {\r
447                                 DataColumn dc = new DataColumn();\r
448                                 dt.Columns.Remove(dc);\r
449                                 Assert.Fail("DCC77: Remove failed to throw ArgmentException");\r
450                         }\r
451                         catch (ArgumentException) {}\r
452                         catch (AssertionException exc) {throw  exc;}\r
453                         catch (Exception exc)\r
454                         {\r
455                                 Assert.Fail("DCC78: Remove. Wrong exception type. Got:" + exc);\r
456                         }\r
457                 }\r
458 \r
459                 [Test] \r
460                 public void Add_DataColumn1()\r
461                 {\r
462                         DataTable dt = new DataTable();\r
463                         DataColumn col = new DataColumn("col1",Type.GetType("System.String"));\r
464                         dt.Columns.Add(col);\r
465                         Assert.AreEqual(1,dt.Columns.Count,"dccadc1#1");\r
466                         Assert.AreEqual("col1",dt.Columns[0].ColumnName,"dccadc1#2");\r
467                         Assert.AreEqual("System.String",dt.Columns[0].DataType.ToString(),"dccadc1#3");                 \r
468                 }\r
469 \r
470                 [Test] \r
471                 public void Add_DataColumn2()\r
472                 {\r
473                         DataTable dt = new DataTable();\r
474                         DataColumn col = new DataColumn("col1",Type.GetType("System.String"));\r
475                         dt.Columns.Add(col);\r
476                         try\r
477                         {\r
478                                 dt.Columns.Add(col); \r
479                                 Assert.Fail("dccadc2#1: Add failed to throw ArgmentException");\r
480                         }\r
481                         catch (ArgumentException) {}\r
482                         catch (AssertionException exc) {throw  exc;}\r
483                         catch (Exception exc)\r
484                         {\r
485                                 Assert.Fail("dccadc2#2: Add. Wrong exception type. Got:" + exc);\r
486                         }\r
487                 }\r
488 \r
489                 [Test] \r
490                 public void Add_DataColumn3()\r
491                 {\r
492                         DataTable dt = new DataTable();\r
493                         DataColumn col = new DataColumn("col1",Type.GetType("System.String"));\r
494                         dt.Columns.Add(col);\r
495                         try\r
496                         {\r
497                                 DataColumn col1 = new DataColumn("col1",Type.GetType("System.String"));\r
498                                 dt.Columns.Add(col1);\r
499                                 Assert.Fail("dccadc3#1: Add failed to throw DuplicateNameExcpeion");\r
500                         }\r
501                         catch (DuplicateNameException) {}\r
502                         catch (AssertionException exc) {throw  exc;}\r
503                         catch (Exception exc)\r
504                         {\r
505                                 Assert.Fail("dccadc3#2: Add. Wrong exception type. Got:" + exc);\r
506                         }\r
507                 }\r
508 \r
509                 [Test]\r
510                 public void Add_String1()\r
511                 {\r
512                         DataTable dt = new DataTable();\r
513                         dt.Columns.Add("col1");\r
514                         Assert.AreEqual(1,dt.Columns.Count,"dccas1#1");\r
515                         Assert.AreEqual("col1",dt.Columns[0].ColumnName,"dccas1#2");\r
516 \r
517                 }\r
518 \r
519                 [Test]\r
520                 public void Add_String2()\r
521                 {\r
522                         DataTable dt = new DataTable();\r
523                         dt.Columns.Add("col1");\r
524                         try\r
525                         {\r
526                                 dt.Columns.Add("col1");\r
527                                 Assert.Fail("dccas2#1: Add failed to throw DuplicateNameExcpeion");\r
528                         }\r
529                         catch (DuplicateNameException) {}\r
530                         catch (AssertionException exc) {throw  exc;}\r
531                         catch (Exception exc)\r
532                         {\r
533                                 Assert.Fail("dccas2#2: Add. Wrong exception type. Got:" + exc);\r
534                         }\r
535                 }\r
536 \r
537                 [Test]\r
538                 public void AddRange_DataColumn1()\r
539                 {\r
540                         DataTable dt = new DataTable();\r
541                         dt.Columns.AddRange(GetDataColumArray());\r
542                         Assert.AreEqual(2,dt.Columns.Count,"dccardc1#1");\r
543                         Assert.AreEqual("col1",dt.Columns[0].ColumnName,"dccardc1#2");\r
544                         Assert.AreEqual("col2",dt.Columns[1].ColumnName,"dccardc1#3");\r
545                         Assert.AreEqual(typeof(int),dt.Columns[0].DataType,"dccardc1#4");\r
546                         Assert.AreEqual(typeof(string),dt.Columns[1].DataType,"dccardc1#5");                    \r
547                 }\r
548 \r
549                 [Test]\r
550                 public void AddRange_DataColumn2()\r
551                 {\r
552                         DataTable dt = new DataTable();\r
553                         try\r
554                         {\r
555                                 dt.Columns.AddRange(GetBadDataColumArray());\r
556                                 Assert.Fail("dccardc2#1: AddRange failed to throw DuplicateNameExcpeion");\r
557                         }\r
558                         catch (DuplicateNameException) {}\r
559                         catch (AssertionException exc) {throw  exc;}\r
560                         catch (Exception exc)\r
561                         {\r
562                                 Assert.Fail("dccardc2#2: Add. Wrong exception type. Got:" + exc);\r
563                         }\r
564                 }\r
565 \r
566                 [Test]\r
567                 public void DataColumnCollection_AddRange_DataColumn3()\r
568                 {\r
569                         DataTable dt = new DataTable();\r
570                         dt.Columns.AddRange(null);\r
571                 }\r
572 \r
573                 private DataColumn[] GetDataColumArray()\r
574                 {\r
575                         DataColumn[] arr = new DataColumn[2];\r
576 \r
577                         arr[0] = new DataColumn("col1",typeof(int));\r
578                         arr[1] = new DataColumn("col2",typeof(string));\r
579                         \r
580                         return arr;\r
581                 }\r
582 \r
583                 private DataColumn[] GetBadDataColumArray()\r
584                 {\r
585                         DataColumn[] arr = new DataColumn[2];\r
586 \r
587                         arr[0] = new DataColumn("col1",typeof(int));\r
588                         arr[1] = new DataColumn("col1",typeof(string));\r
589                         \r
590                         return arr;\r
591                 }\r
592 \r
593                 [Test]\r
594                 public void Clear1()\r
595                 {\r
596                         DataTable dt = DataProvider.CreateParentDataTable();\r
597                         dt.Columns.Clear();\r
598                         Assert.AreEqual(0,dt.Columns.Count,"dccc1#1");\r
599                 }\r
600 \r
601                 [Test]\r
602                 public void Clear2()\r
603                 {\r
604                         DataSet ds = DataProvider.CreateForigenConstraint();\r
605 \r
606                         try\r
607                         {\r
608                                 ds.Tables[0].Columns.Clear();\r
609                                 Assert.Fail("dccc2#1: Clear failed to throw ArgmentException");\r
610                         }\r
611                         catch (ArgumentException) {}\r
612                         catch (AssertionException exc) {throw  exc;}\r
613                         catch (Exception exc)\r
614                         {\r
615                                 Assert.Fail("dccc2#2: Clear. Wrong exception type. Got:" + exc);\r
616                         }\r
617                 }\r
618 \r
619                 [Test]\r
620                 public void Clear3()\r
621                 {\r
622                         DataSet ds = DataProvider.CreateForigenConstraint();\r
623                         ds.Tables[1].Constraints.RemoveAt(0);\r
624                         ds.Tables[0].Constraints.RemoveAt(0);\r
625                         ds.Tables[0].Columns.Clear();\r
626                         ds.Tables[1].Columns.Clear();\r
627                         Assert.AreEqual(0,ds.Tables[0].Columns.Count,"dccc3#1");\r
628                         Assert.AreEqual(0,ds.Tables[1].Columns.Count,"dccc3#2");\r
629                 }\r
630 \r
631                 [Test]\r
632                 public void GetEnumerator()\r
633                 {\r
634                         DataTable dt = DataProvider.CreateUniqueConstraint();\r
635                         \r
636                         int counter=0;\r
637                         IEnumerator myEnumerator = dt.Columns.GetEnumerator();\r
638                         while (myEnumerator.MoveNext())\r
639                         {\r
640                                 counter++;\r
641                         }\r
642                         Assert.AreEqual(6,counter,"dccge#1");\r
643 \r
644                         try\r
645                         {\r
646                                 DataColumn col = (DataColumn)myEnumerator.Current;\r
647                                 Assert.Fail("dccc2#1: GetEnumerator failed to throw InvalidOperationException");\r
648                         }\r
649                         catch (InvalidOperationException) {}\r
650                         catch (AssertionException exc) {throw  exc;}\r
651                         catch (Exception exc)\r
652                         {\r
653                                 Assert.Fail("dccc2#2: GetEnumerator. Wrong exception type. Got:" + exc);\r
654                         }\r
655                 }\r
656 \r
657                 [Test] // this [Int32]\r
658                 public void Indexer1 ()\r
659                 {\r
660                         DataTable dt = DataProvider.CreateParentDataTable();\r
661                         DataColumn col;\r
662 \r
663                         col = dt.Columns [5];\r
664                         Assert.IsNotNull (col, "#A1");\r
665                         Assert.AreEqual ("ParentBool", col.ColumnName, "#A2");\r
666 \r
667                         col = dt.Columns [0];\r
668                         Assert.IsNotNull (col, "#B1");\r
669                         Assert.AreEqual ("ParentId", col.ColumnName, "#B2");\r
670 \r
671                         col = dt.Columns [3];\r
672                         Assert.IsNotNull (col, "#C1");\r
673                         Assert.AreEqual ("ParentDateTime", col.ColumnName, "#C2");\r
674                 }\r
675 \r
676                 [Test] // this [Int32]\r
677                 public void Indexer1_Index_Negative ()\r
678                 {\r
679                         DataTable dt = DataProvider.CreateParentDataTable ();\r
680 \r
681                         try {\r
682                                 DataColumn column = dt.Columns [-1];\r
683                                 Assert.Fail ("#1:" + column);\r
684                         } catch (IndexOutOfRangeException ex) {\r
685                                 // Cannot find column -1\r
686                                 Assert.AreEqual (typeof (IndexOutOfRangeException), ex.GetType (), "#2");\r
687                                 Assert.IsNull (ex.InnerException, "#3");\r
688                                 Assert.IsNotNull (ex.Message, "#4");\r
689                         }\r
690                 }\r
691 \r
692                 [Test] // this [Int32]\r
693                 public void Indexer1_Index_Overflow ()\r
694                 {\r
695                         DataTable dt = DataProvider.CreateParentDataTable ();\r
696 \r
697                         try {\r
698                                 DataColumn column = dt.Columns [6];\r
699                                 Assert.Fail ("#1:" + column);\r
700                         } catch (IndexOutOfRangeException ex) {\r
701                                 // Cannot find column 6\r
702                                 Assert.AreEqual (typeof (IndexOutOfRangeException), ex.GetType (), "#2");\r
703                                 Assert.IsNull (ex.InnerException, "#3");\r
704                                 Assert.IsNotNull (ex.Message, "#4");\r
705                         }\r
706                 }\r
707 \r
708                 [Test] // this [String]\r
709                 public void Indexer2 ()\r
710                 {\r
711                         DataTable dt = DataProvider.CreateParentDataTable ();\r
712                         DataColumnCollection cols = dt.Columns;\r
713                         DataColumn col;\r
714 \r
715                         col = cols ["ParentId"];\r
716                         Assert.IsNotNull (col, "#A1");\r
717                         Assert.AreEqual ("ParentId", col.ColumnName, "#A2");\r
718 \r
719                         col = cols ["parentiD"];\r
720                         Assert.IsNotNull (col, "#B1");\r
721                         Assert.AreEqual ("ParentId", col.ColumnName, "#B2");\r
722 \r
723                         col = cols ["DoesNotExist"];\r
724                         Assert.IsNull (col, "#C");\r
725                 }\r
726 \r
727                 [Test] // this [String]\r
728                 public void Indexer2_Name_Empty ()\r
729                 {\r
730                         DataTable dt = new DataTable ();\r
731                         DataColumnCollection cols = dt.Columns;\r
732 \r
733                         cols.Add (string.Empty, typeof (int));\r
734                         cols.Add ((string) null, typeof (bool));\r
735 \r
736                         DataColumn column = cols [string.Empty];\r
737                         Assert.IsNull (column);\r
738                 }\r
739 \r
740                 [Test] // this [String]\r
741                 public void Indexer2_Name_Null ()\r
742                 {\r
743                         DataTable dt = DataProvider.CreateParentDataTable ();\r
744 \r
745                         try {\r
746                                 DataColumn column = dt.Columns [(string) null];\r
747                                 Assert.Fail ("#1:" + column);\r
748                         } catch (ArgumentNullException ex) {\r
749                                 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
750                                 Assert.IsNull (ex.InnerException, "#3");\r
751                                 Assert.IsNotNull (ex.Message, "#4");\r
752                                 Assert.AreEqual ("name", ex.ParamName, "#5");\r
753                         }\r
754                 }\r
755 \r
756                 [Test]\r
757                 public void Remove()\r
758                 {\r
759                         //prepare a DataSet with DataTable to be checked\r
760                         DataTable dtSource = new DataTable();\r
761                         dtSource.Columns.Add("Col_0", typeof(int)); \r
762                         dtSource.Columns.Add("Col_1", typeof(int)); \r
763                         dtSource.Columns.Add("Col_2", typeof(int)); \r
764                         dtSource.Rows.Add(new object[] {0,1,2}); \r
765 \r
766                         DataTable dt = null;\r
767 \r
768                         //------Check Remove first column---------\r
769                         dt = dtSource.Clone();\r
770                         dt.ImportRow(dtSource.Rows[0]);\r
771 \r
772                         dt.Columns.Remove(dt.Columns[0].ColumnName); \r
773                         Assert.AreEqual(2,dt.Columns.Count , "dccr#1");\r
774                         Assert.AreEqual(false,dt.Columns.Contains("Col_0"),"dccr#2");\r
775                         Assert.AreEqual(1,dt.Rows[0][0],"dccr#3");\r
776                         Assert.AreEqual(2,dt.Rows[0][1],"dccr#4");\r
777 \r
778 \r
779 \r
780                         //------Check Remove middle column---------\r
781                         dt = dtSource.Clone();\r
782                         dt.ImportRow(dtSource.Rows[0]);\r
783 \r
784                         dt.Columns.Remove(dt.Columns[1].ColumnName); \r
785                         Assert.AreEqual(2,dt.Columns.Count , "dccr#5");\r
786                         Assert.AreEqual(false,dt.Columns.Contains("Col_1"),"dccr#6");\r
787                         Assert.AreEqual(0,dt.Rows[0][0],"dccr#7");\r
788                         Assert.AreEqual(2,dt.Rows[0][1],"dccr#8");\r
789 \r
790 \r
791                         //------Check Remove last column---------\r
792                         dt = dtSource.Clone();\r
793                         dt.ImportRow(dtSource.Rows[0]);\r
794 \r
795                         dt.Columns.Remove(dt.Columns[2].ColumnName); \r
796 \r
797                         Assert.AreEqual(2,dt.Columns.Count , "dccr#9");\r
798                         Assert.AreEqual(false,dt.Columns.Contains("Col_2"),"dccr#10");\r
799                         Assert.AreEqual(0,dt.Rows[0][0],"dccr#11");\r
800                         Assert.AreEqual(1,dt.Rows[0][1],"dccr#12");\r
801 \r
802 \r
803                         //------Check Remove column exception---------\r
804                         dt = dtSource.Clone();\r
805                         dt.ImportRow(dtSource.Rows[0]);\r
806 \r
807                         try\r
808                         {\r
809                                 dt.Columns.Remove("NotExist"); \r
810                                 Assert.Fail("dccr#13: Remove failed to throw ArgmentException");\r
811                         }\r
812                         catch (ArgumentException) {}\r
813                         catch (AssertionException exc) {throw  exc;}\r
814                         catch (Exception exc)\r
815                         {\r
816                                 Assert.Fail("dccr#14: Remove. Wrong exception type. Got:" + exc);\r
817                         }\r
818 \r
819                         dt.Columns.Clear();\r
820 \r
821                         try\r
822                         {\r
823                                 dt.Columns.Remove("Col_0"); \r
824                                 Assert.Fail("dccr#15: Remove failed to throw ArgmentException");\r
825                         }\r
826                         catch (ArgumentException) {}\r
827                         catch (AssertionException exc) {throw  exc;}\r
828                         catch (Exception exc)\r
829                         {\r
830                                 Assert.Fail("dccr#16: Remove. Wrong exception type. Got:" + exc);\r
831                         }\r
832                 }\r
833 \r
834                 private bool eventOccured = false;\r
835 \r
836                 [Test]\r
837                 public void RemoveAt_Integer()\r
838                 {\r
839                         DataTable dt = DataProvider.CreateParentDataTable();\r
840                         dt.Columns.CollectionChanged+=new CollectionChangeEventHandler(Columns_CollectionChanged1);\r
841                         int originalColumnCount = dt.Columns.Count;\r
842                         dt.Columns.RemoveAt(0);\r
843                         Assert.AreEqual(originalColumnCount-1,dt.Columns.Count,"dccrai#1"); \r
844                         Assert.AreEqual(true,eventOccured,"dccrai#2");\r
845 \r
846                         try\r
847                         {\r
848                                 dt.Columns.RemoveAt(-1);\r
849                                 Assert.Fail("dccrai#3: RemoveAt failed to throw IndexOutOfRangeException");\r
850                         }\r
851                         catch (IndexOutOfRangeException) {}\r
852                         catch (AssertionException exc) {throw  exc;}\r
853                         catch (Exception exc)\r
854                         {\r
855                                 Assert.Fail("dccrai#4: RemoveAt. Wrong exception type. Got:" + exc);\r
856                         }\r
857                 }\r
858 \r
859                 [Test]\r
860                 public void Test_Indexes ()\r
861                 {\r
862                         DataTable dt = new DataTable ();\r
863                         DataColumn dc = new DataColumn("A");\r
864                         dt.Columns.Add (dc);\r
865 \r
866                         dc = new DataColumn("B");\r
867                         dt.Columns.Add (dc);\r
868 \r
869                         dc = new DataColumn("C");\r
870                         dt.Columns.Add (dc);\r
871 \r
872                         for(int i=0; i < 10; i++) {\r
873                                 DataRow dr = dt.NewRow ();\r
874                                 dr ["A"] = i;\r
875                                 dr ["B"] = i + 1;\r
876                                 dr ["C"] = i + 2;\r
877                                 dt.Rows.Add (dr);\r
878                         }\r
879 \r
880                         DataRow[] rows = dt.Select ("A=5");\r
881                         Assert.AreEqual (1, rows.Length);\r
882 \r
883                         dt.Columns.Remove ("A");\r
884 \r
885                         dc = new DataColumn ("A");\r
886                         dc.DefaultValue = 5;\r
887 \r
888                         dt.Columns.Add (dc);\r
889 \r
890                         rows = dt.Select ("A=5");\r
891                         Assert.AreEqual (10, rows.Length);\r
892                 }\r
893 \r
894                 private void Columns_CollectionChanged1(object sender, CollectionChangeEventArgs e)\r
895                 {\r
896                         eventOccured = true;\r
897                 }\r
898         }\r
899 }\r