2 // Rafael Mizrahi <rafim@mainsoft.com>
\r
3 // Erez Lotan <erezl@mainsoft.com>
\r
4 // Oren Gurfinkel <oreng@mainsoft.com>
\r
7 // Copyright (c) 2004 Mainsoft Co.
\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
17 // The above copyright notice and this permission notice shall be
\r
18 // included in all copies or substantial portions of the Software.
\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
29 using NUnit.Framework;
\r
31 using System.ComponentModel;
\r
33 using MonoTests.System.Data.Utils;
\r
34 using System.Collections;
\r
36 namespace MonoTests.System.Data
\r
38 [TestFixture] public class DataColumnCollectionTest2
\r
40 private int counter = 0;
\r
42 [Test] public void Add()
\r
44 DataColumn dc = null;
\r
45 DataTable dt = new DataTable();
\r
47 //----------------------------- check default --------------------
\r
48 dc = dt.Columns.Add();
\r
50 Assert.AreEqual("Column1", dc.ColumnName, "DCC1");
\r
53 dc = dt.Columns.Add();
\r
54 Assert.AreEqual("Column2", dc.ColumnName, "DCC2");
\r
56 dc = dt.Columns.Add();
\r
58 Assert.AreEqual("Column3", dc.ColumnName, "DCC3");
\r
60 dc = dt.Columns.Add();
\r
62 Assert.AreEqual("Column4", dc.ColumnName, "DCC4");
\r
64 dc = dt.Columns.Add();
\r
66 Assert.AreEqual("Column5", dc.ColumnName, "DCC5");
\r
67 Assert.AreEqual(5, dt.Columns.Count, "DCC6");
\r
69 //----------------------------- check Add/Remove from begining --------------------
\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
76 // check column 4 - remove - from begining
\r
77 Assert.AreEqual("Column4", dt.Columns[0].ColumnName, "DCC7");
\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
88 // check column 0 - Add new - from begining
\r
89 Assert.AreEqual("Column4", dt.Columns[0].ColumnName , "DCC10");
\r
91 // check column 1 - Add new - from begining
\r
92 Assert.AreEqual("Column5", dt.Columns[1].ColumnName , "DCC11");
\r
94 // check column 2 - Add new - from begining
\r
95 Assert.AreEqual("Column6", dt.Columns[2].ColumnName , "DCC12");
\r
97 // check column 3 - Add new - from begining
\r
98 Assert.AreEqual("Column7", dt.Columns[3].ColumnName , "DCC13");
\r
100 // check column 4 - Add new - from begining
\r
101 Assert.AreEqual("Column8", dt.Columns[4].ColumnName , "DCC14");
\r
103 // check column 5 - Add new - from begining
\r
104 Assert.AreEqual("Column9", dt.Columns[5].ColumnName , "DCC15");
\r
106 //----------------------------- check Add/Remove from middle --------------------
\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
114 // check column 0 - remove - from Middle
\r
115 Assert.AreEqual("Column1", dt.Columns[0].ColumnName, "DCC16");
\r
117 // check column 1 - remove - from Middle
\r
118 Assert.AreEqual("Column2", dt.Columns[1].ColumnName , "DCC17");
\r
125 // check column 0 - Add new - from Middle
\r
126 Assert.AreEqual("Column1", dt.Columns[0].ColumnName , "DCC18");
\r
128 // check column 1 - Add new - from Middle
\r
129 Assert.AreEqual("Column2", dt.Columns[1].ColumnName , "DCC19");
\r
131 // check column 2 - Add new - from Middle
\r
132 Assert.AreEqual("Column3", dt.Columns[2].ColumnName , "DCC20");
\r
134 // check column 3 - Add new - from Middle
\r
135 Assert.AreEqual("Column4", dt.Columns[3].ColumnName , "DCC21");
\r
137 // check column 4 - Add new - from Middle
\r
138 Assert.AreEqual("Column5", dt.Columns[4].ColumnName , "DCC22");
\r
140 // check column 5 - Add new - from Middle
\r
141 Assert.AreEqual("Column6", dt.Columns[5].ColumnName , "DCC23");
\r
143 //----------------------------- check Add/Remove from end --------------------
\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
151 // check column 0 - remove - from end
\r
152 Assert.AreEqual("Column1", dt.Columns[0].ColumnName, "DCC24");
\r
154 // check column 1 - remove - from end
\r
155 Assert.AreEqual("Column2", dt.Columns[1].ColumnName , "DCC25");
\r
162 // check column 0 - Add new - from end
\r
163 Assert.AreEqual("Column1", dt.Columns[0].ColumnName , "DCC26");
\r
165 // check column 1 - Add new - from end
\r
166 Assert.AreEqual("Column2", dt.Columns[1].ColumnName , "DCC27");
\r
168 // check column 2 - Add new - from end
\r
169 Assert.AreEqual("Column3", dt.Columns[2].ColumnName , "DCC28");
\r
171 // check column 3 - Add new - from end
\r
172 Assert.AreEqual("Column4", dt.Columns[3].ColumnName , "DCC29");
\r
174 // check column 4 - Add new - from end
\r
175 Assert.AreEqual("Column5", dt.Columns[4].ColumnName , "DCC30");
\r
177 // check column 5 - Add new - from end
\r
178 Assert.AreEqual("Column6", dt.Columns[5].ColumnName , "DCC31");
\r
181 private DataTable initTable()
\r
183 DataTable dt = new DataTable();
\r
184 for (int i=0; i<5; i++)
\r
191 [Test] public void TestAdd_ByTableName()
\r
193 //this test is from boris
\r
195 DataSet ds = new DataSet();
\r
196 DataTable dt = new DataTable();
\r
200 dt.Columns.Add("id1",typeof(int));
\r
202 // DataColumnCollection add
\r
203 Assert.AreEqual(1, dt.Columns.Count , "DCC32");
\r
206 DataRow dr = dt.NewRow();
\r
210 dt.Columns.Remove("id1");
\r
212 // DataColumnCollection remove
\r
213 Assert.AreEqual(0, dt.Columns.Count , "DCC33");
\r
215 //row is still there
\r
218 dt.Columns.Add("id2",typeof(int));
\r
220 // DataColumnCollection add again
\r
221 Assert.AreEqual(1, dt.Columns.Count , "DCC34");
\r
224 [Test] public void TestCanRemove_ByDataColumn()
\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
233 [Test] public void TestCanRemove_ForigenConstraint()
\r
235 DataSet ds = DataProvider.CreateForigenConstraint();
\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
240 [Test] public void TestCanRemove_ParentRelations()
\r
242 DataSet ds = new DataSet();
\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
249 ds.Tables[1].ParentRelations.Add("name1",ds.Tables[0].Columns["col1"],ds.Tables[1].Columns["col1"],false);
\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
255 [Test] public void TestCanRemove_Expression()
\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
261 Assert.AreEqual(false, dt.Columns.CanRemove(dt.Columns["col1"]), "DCC43"); //Col1 is a part of expression
\r
264 [Test] public void TestAdd_CollectionChanged()
\r
266 DataTable dt = DataProvider.CreateParentDataTable();
\r
268 dt.Columns.CollectionChanged+=new CollectionChangeEventHandler(Columns_CollectionChanged);
\r
270 DataColumn c = dt.Columns.Add("tempCol");
\r
272 Assert.AreEqual(1, counter, "DCC44.1");
\r
273 Assert.AreEqual (c, change_element, "DCC44.2");
\r
276 [Test] public void TestRemove_CollectionChanged()
\r
278 DataTable dt = DataProvider.CreateParentDataTable();
\r
280 dt.Columns.CollectionChanged+=new CollectionChangeEventHandler(Columns_CollectionChanged);
\r
281 DataColumn c = dt.Columns.Add("tempCol");
\r
283 dt.Columns.Remove("tempCol");
\r
285 Assert.AreEqual (1, counter, "DCC44.3");
\r
286 Assert.AreEqual (c, change_element, "DCC44.4");
\r
289 [Test] public void TestSetName_CollectionChanged()
\r
291 DataTable dt = DataProvider.CreateParentDataTable();
\r
293 dt.Columns.CollectionChanged+=new CollectionChangeEventHandler(Columns_CollectionChanged);
\r
294 dt.Columns.Add("tempCol");
\r
296 dt.Columns[0].ColumnName = "tempCol2";
\r
298 Assert.AreEqual(0, counter, "DCC44.5");
\r
301 object change_element;
\r
302 private void Columns_CollectionChanged(object sender, CollectionChangeEventArgs e)
\r
305 change_element = e.Element;
\r
308 [Test] public void TestContains_ByColumnName()
\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
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
319 dt.Columns["String1"].ColumnName = "Temp1";
\r
321 Assert.AreEqual(false, dt.Columns.Contains("String1"), "DCC50");
\r
322 Assert.AreEqual(true, dt.Columns.Contains("Temp1"), "DCC51");
\r
324 public void NotReadyTestContains_S2() // FIXME: fails in MS
\r
326 DataTable dt = DataProvider.CreateParentDataTable();
\r
327 Assert.AreEqual(false, dt.Columns.Contains(null), "DCC52");
\r
331 [Test] public void Count()
\r
333 DataTable dt = DataProvider.CreateParentDataTable();
\r
335 Assert.AreEqual(6, dt.Columns.Count, "DCC55");
\r
337 dt.Columns.Add("temp1");
\r
338 Assert.AreEqual(7, dt.Columns.Count, "DCC56");
\r
340 dt.Columns.Remove("temp1");
\r
341 Assert.AreEqual(6, dt.Columns.Count, "DCC57");
\r
343 dt.Columns.Remove("ParentId");
\r
344 Assert.AreEqual(5, dt.Columns.Count, "DCC58");
\r
347 [Test] public void TestIndexOf_ByDataColumn()
\r
349 DataTable dt = DataProvider.CreateParentDataTable();
\r
351 for (int i=0;i<dt.Columns.Count;i++)
\r
353 Assert.AreEqual(i, dt.Columns.IndexOf(dt.Columns[i]), "DCC59");
\r
356 DataColumn col = new DataColumn();
\r
358 Assert.AreEqual(-1, dt.Columns.IndexOf(col), "DCC60");
\r
360 Assert.AreEqual(-1, dt.Columns.IndexOf((DataColumn)null), "DCC61");
\r
364 public void TestIndexOf_ByColumnName()
\r
366 DataTable dt = DataProvider.CreateParentDataTable();
\r
368 for (int i=0;i<dt.Columns.Count;i++)
\r
370 Assert.AreEqual(i, dt.Columns.IndexOf(dt.Columns[i].ColumnName), "DCC62");
\r
373 DataColumn col = new DataColumn();
\r
375 Assert.AreEqual(-1, dt.Columns.IndexOf("temp1"), "DCC63");
\r
377 Assert.AreEqual(-1, dt.Columns.IndexOf((string)null), "DCC64");
\r
380 [Test] public void TestRemove_ByDataColumn()
\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
389 DataTable dt = null;
\r
391 //------Check Remove first column---------
\r
392 dt = dtSource.Clone();
\r
393 dt.ImportRow(dtSource.Rows[0]);
\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
399 // Remove first column - check column removed
\r
400 Assert.AreEqual(false, dt.Columns.Contains("Col_0"), "DCC66");
\r
402 // Remove first column - check column 0 data
\r
403 Assert.AreEqual(1, dt.Rows[0][0], "DCC67");
\r
405 // Remove first column - check column 1 data
\r
406 Assert.AreEqual(2, dt.Rows[0][1], "DCC68");
\r
408 //------Check Remove middle column---------
\r
409 dt = dtSource.Clone();
\r
410 dt.ImportRow(dtSource.Rows[0]);
\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
416 // Remove middle column - check column removed
\r
417 Assert.AreEqual(false, dt.Columns.Contains("Col_1"), "DCC70");
\r
419 // Remove middle column - check column 0 data
\r
420 Assert.AreEqual(0, dt.Rows[0][0], "DCC71");
\r
422 // Remove middle column - check column 1 data
\r
423 Assert.AreEqual(2, dt.Rows[0][1], "DCC72");
\r
425 //------Check Remove last column---------
\r
426 dt = dtSource.Clone();
\r
427 dt.ImportRow(dtSource.Rows[0]);
\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
433 // Remove last column - check column removed
\r
434 Assert.AreEqual(false, dt.Columns.Contains("Col_2"), "DCC74");
\r
436 // Remove last column - check column 0 data
\r
437 Assert.AreEqual(0, dt.Rows[0][0], "DCC75");
\r
439 // Remove last column - check column 1 data
\r
440 Assert.AreEqual(1, dt.Rows[0][1], "DCC76");
\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
447 DataColumn dc = new DataColumn();
\r
448 dt.Columns.Remove(dc);
\r
449 Assert.Fail("DCC77: Remove failed to throw ArgmentException");
\r
451 catch (ArgumentException) {}
\r
452 catch (AssertionException exc) {throw exc;}
\r
453 catch (Exception exc)
\r
455 Assert.Fail("DCC78: Remove. Wrong exception type. Got:" + exc);
\r
460 public void Add_DataColumn1()
\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
471 public void Add_DataColumn2()
\r
473 DataTable dt = new DataTable();
\r
474 DataColumn col = new DataColumn("col1",Type.GetType("System.String"));
\r
475 dt.Columns.Add(col);
\r
478 dt.Columns.Add(col);
\r
479 Assert.Fail("dccadc2#1: Add failed to throw ArgmentException");
\r
481 catch (ArgumentException) {}
\r
482 catch (AssertionException exc) {throw exc;}
\r
483 catch (Exception exc)
\r
485 Assert.Fail("dccadc2#2: Add. Wrong exception type. Got:" + exc);
\r
490 public void Add_DataColumn3()
\r
492 DataTable dt = new DataTable();
\r
493 DataColumn col = new DataColumn("col1",Type.GetType("System.String"));
\r
494 dt.Columns.Add(col);
\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
501 catch (DuplicateNameException) {}
\r
502 catch (AssertionException exc) {throw exc;}
\r
503 catch (Exception exc)
\r
505 Assert.Fail("dccadc3#2: Add. Wrong exception type. Got:" + exc);
\r
510 public void Add_String1()
\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
520 public void Add_String2()
\r
522 DataTable dt = new DataTable();
\r
523 dt.Columns.Add("col1");
\r
526 dt.Columns.Add("col1");
\r
527 Assert.Fail("dccas2#1: Add failed to throw DuplicateNameExcpeion");
\r
529 catch (DuplicateNameException) {}
\r
530 catch (AssertionException exc) {throw exc;}
\r
531 catch (Exception exc)
\r
533 Assert.Fail("dccas2#2: Add. Wrong exception type. Got:" + exc);
\r
538 public void AddRange_DataColumn1()
\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
550 public void AddRange_DataColumn2()
\r
552 DataTable dt = new DataTable();
\r
555 dt.Columns.AddRange(GetBadDataColumArray());
\r
556 Assert.Fail("dccardc2#1: AddRange failed to throw DuplicateNameExcpeion");
\r
558 catch (DuplicateNameException) {}
\r
559 catch (AssertionException exc) {throw exc;}
\r
560 catch (Exception exc)
\r
562 Assert.Fail("dccardc2#2: Add. Wrong exception type. Got:" + exc);
\r
567 public void DataColumnCollection_AddRange_DataColumn3()
\r
569 DataTable dt = new DataTable();
\r
570 dt.Columns.AddRange(null);
\r
573 private DataColumn[] GetDataColumArray()
\r
575 DataColumn[] arr = new DataColumn[2];
\r
577 arr[0] = new DataColumn("col1",typeof(int));
\r
578 arr[1] = new DataColumn("col2",typeof(string));
\r
583 private DataColumn[] GetBadDataColumArray()
\r
585 DataColumn[] arr = new DataColumn[2];
\r
587 arr[0] = new DataColumn("col1",typeof(int));
\r
588 arr[1] = new DataColumn("col1",typeof(string));
\r
594 public void Clear1()
\r
596 DataTable dt = DataProvider.CreateParentDataTable();
\r
597 dt.Columns.Clear();
\r
598 Assert.AreEqual(0,dt.Columns.Count,"dccc1#1");
\r
602 public void Clear2()
\r
604 DataSet ds = DataProvider.CreateForigenConstraint();
\r
608 ds.Tables[0].Columns.Clear();
\r
609 Assert.Fail("dccc2#1: Clear failed to throw ArgmentException");
\r
611 catch (ArgumentException) {}
\r
612 catch (AssertionException exc) {throw exc;}
\r
613 catch (Exception exc)
\r
615 Assert.Fail("dccc2#2: Clear. Wrong exception type. Got:" + exc);
\r
620 public void Clear3()
\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
632 public void GetEnumerator()
\r
634 DataTable dt = DataProvider.CreateUniqueConstraint();
\r
637 IEnumerator myEnumerator = dt.Columns.GetEnumerator();
\r
638 while (myEnumerator.MoveNext())
\r
642 Assert.AreEqual(6,counter,"dccge#1");
\r
646 DataColumn col = (DataColumn)myEnumerator.Current;
\r
647 Assert.Fail("dccc2#1: GetEnumerator failed to throw InvalidOperationException");
\r
649 catch (InvalidOperationException) {}
\r
650 catch (AssertionException exc) {throw exc;}
\r
651 catch (Exception exc)
\r
653 Assert.Fail("dccc2#2: GetEnumerator. Wrong exception type. Got:" + exc);
\r
657 [Test] // this [Int32]
\r
658 public void Indexer1 ()
\r
660 DataTable dt = DataProvider.CreateParentDataTable();
\r
663 col = dt.Columns [5];
\r
664 Assert.IsNotNull (col, "#A1");
\r
665 Assert.AreEqual ("ParentBool", col.ColumnName, "#A2");
\r
667 col = dt.Columns [0];
\r
668 Assert.IsNotNull (col, "#B1");
\r
669 Assert.AreEqual ("ParentId", col.ColumnName, "#B2");
\r
671 col = dt.Columns [3];
\r
672 Assert.IsNotNull (col, "#C1");
\r
673 Assert.AreEqual ("ParentDateTime", col.ColumnName, "#C2");
\r
676 [Test] // this [Int32]
\r
677 public void Indexer1_Index_Negative ()
\r
679 DataTable dt = DataProvider.CreateParentDataTable ();
\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
692 [Test] // this [Int32]
\r
693 public void Indexer1_Index_Overflow ()
\r
695 DataTable dt = DataProvider.CreateParentDataTable ();
\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
708 [Test] // this [String]
\r
709 public void Indexer2 ()
\r
711 DataTable dt = DataProvider.CreateParentDataTable ();
\r
712 DataColumnCollection cols = dt.Columns;
\r
715 col = cols ["ParentId"];
\r
716 Assert.IsNotNull (col, "#A1");
\r
717 Assert.AreEqual ("ParentId", col.ColumnName, "#A2");
\r
719 col = cols ["parentiD"];
\r
720 Assert.IsNotNull (col, "#B1");
\r
721 Assert.AreEqual ("ParentId", col.ColumnName, "#B2");
\r
723 col = cols ["DoesNotExist"];
\r
724 Assert.IsNull (col, "#C");
\r
727 [Test] // this [String]
\r
728 public void Indexer2_Name_Empty ()
\r
730 DataTable dt = new DataTable ();
\r
731 DataColumnCollection cols = dt.Columns;
\r
733 cols.Add (string.Empty, typeof (int));
\r
734 cols.Add ((string) null, typeof (bool));
\r
736 DataColumn column = cols [string.Empty];
\r
737 Assert.IsNull (column);
\r
740 [Test] // this [String]
\r
741 public void Indexer2_Name_Null ()
\r
743 DataTable dt = DataProvider.CreateParentDataTable ();
\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
757 public void Remove()
\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
766 DataTable dt = null;
\r
768 //------Check Remove first column---------
\r
769 dt = dtSource.Clone();
\r
770 dt.ImportRow(dtSource.Rows[0]);
\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
780 //------Check Remove middle column---------
\r
781 dt = dtSource.Clone();
\r
782 dt.ImportRow(dtSource.Rows[0]);
\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
791 //------Check Remove last column---------
\r
792 dt = dtSource.Clone();
\r
793 dt.ImportRow(dtSource.Rows[0]);
\r
795 dt.Columns.Remove(dt.Columns[2].ColumnName);
\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
803 //------Check Remove column exception---------
\r
804 dt = dtSource.Clone();
\r
805 dt.ImportRow(dtSource.Rows[0]);
\r
809 dt.Columns.Remove("NotExist");
\r
810 Assert.Fail("dccr#13: Remove failed to throw ArgmentException");
\r
812 catch (ArgumentException) {}
\r
813 catch (AssertionException exc) {throw exc;}
\r
814 catch (Exception exc)
\r
816 Assert.Fail("dccr#14: Remove. Wrong exception type. Got:" + exc);
\r
819 dt.Columns.Clear();
\r
823 dt.Columns.Remove("Col_0");
\r
824 Assert.Fail("dccr#15: Remove failed to throw ArgmentException");
\r
826 catch (ArgumentException) {}
\r
827 catch (AssertionException exc) {throw exc;}
\r
828 catch (Exception exc)
\r
830 Assert.Fail("dccr#16: Remove. Wrong exception type. Got:" + exc);
\r
834 private bool eventOccured = false;
\r
837 public void RemoveAt_Integer()
\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
848 dt.Columns.RemoveAt(-1);
\r
849 Assert.Fail("dccrai#3: RemoveAt failed to throw IndexOutOfRangeException");
\r
851 catch (IndexOutOfRangeException) {}
\r
852 catch (AssertionException exc) {throw exc;}
\r
853 catch (Exception exc)
\r
855 Assert.Fail("dccrai#4: RemoveAt. Wrong exception type. Got:" + exc);
\r
860 public void Test_Indexes ()
\r
862 DataTable dt = new DataTable ();
\r
863 DataColumn dc = new DataColumn("A");
\r
864 dt.Columns.Add (dc);
\r
866 dc = new DataColumn("B");
\r
867 dt.Columns.Add (dc);
\r
869 dc = new DataColumn("C");
\r
870 dt.Columns.Add (dc);
\r
872 for(int i=0; i < 10; i++) {
\r
873 DataRow dr = dt.NewRow ();
\r
880 DataRow[] rows = dt.Select ("A=5");
\r
881 Assert.AreEqual (1, rows.Length);
\r
883 dt.Columns.Remove ("A");
\r
885 dc = new DataColumn ("A");
\r
886 dc.DefaultValue = 5;
\r
888 dt.Columns.Add (dc);
\r
890 rows = dt.Select ("A=5");
\r
891 Assert.AreEqual (10, rows.Length);
\r
894 private void Columns_CollectionChanged1(object sender, CollectionChangeEventArgs e)
\r
896 eventOccured = true;
\r