2 // Rafael Mizrahi <rafim@mainsoft.com>
3 // Erez Lotan <erezl@mainsoft.com>
4 // Oren Gurfinkel <oreng@mainsoft.com>
7 // Copyright (c) 2004 Mainsoft Co.
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30 using System.Collections;
31 using System.ComponentModel;
33 using System.Globalization;
36 using MonoTests.System.Data.Utils;
38 using NUnit.Framework;
40 namespace MonoTests.System.Data
42 [TestFixture] public class DataRowTest2
45 ArrayList _eventsFired;
51 _eventsFired = new ArrayList ();
54 [Test] public void AcceptChanges()
56 DataTable myTable = new DataTable("myTable");
58 myRow = myTable.NewRow();
59 myTable.Rows.Add(myRow);
61 // DataRow AcceptChanges
62 // DataRowState.Added -> DataRowState.Unchanged
63 myTable.AcceptChanges();
64 Assert.AreEqual(DataRowState.Unchanged , myRow.RowState , "DRW1");
67 [Test] public void CancelEdit()
69 DataTable myTable = new DataTable("myTable");
70 DataColumn dc = new DataColumn("Id",typeof(int));
72 myTable.Columns.Add(dc);
73 myTable.Rows.Add(new object[] {1});
74 myTable.Rows.Add(new object[] {2});
75 myTable.Rows.Add(new object[] {3});
77 DataRow myRow = myTable.Rows[0];
83 Assert.AreEqual(true , (int)myRow[0] == 1, "DRW2");
86 [Test] public void ClearErrors()
88 DataTable dt = new DataTable("myTable");
89 DataRow dr = dt.NewRow();
92 // DataRow ClearErrors
93 Assert.AreEqual(true , dr.HasErrors , "DRW3");
95 // DataRow ClearErrors
97 Assert.AreEqual(false , dr.HasErrors , "DRW4");
100 [Test] public void Delete()
102 DataTable myTable = new DataTable("myTable");
103 DataColumn dc = new DataColumn("Id",typeof(int));
105 myTable.Columns.Add(dc);
106 myTable.Rows.Add(new object[] {1});
107 myTable.Rows.Add(new object[] {2});
108 myTable.Rows.Add(new object[] {3});
109 myTable.AcceptChanges();
111 DataRow myRow = myTable.Rows[0];
115 Assert.AreEqual(DataRowState.Deleted , myRow.RowState , "DRW5");
118 myTable.AcceptChanges();
119 Assert.AreEqual(DataRowState.Detached , myRow.RowState , "DRW6");
122 [Test] public void EndEdit()
124 DataTable myTable = new DataTable("myTable");
125 DataColumn dc = new DataColumn("Id",typeof(int));
127 myTable.Columns.Add(dc);
128 myTable.Rows.Add(new object[] {1});
129 myTable.Rows.Add(new object[] {2});
130 myTable.Rows.Add(new object[] {3});
132 DataRow myRow = myTable.Rows[0];
135 //After calling the DataRow object's BeginEdit method, if you change the value, the Current and Proposed values become available
138 iProposed = (int)myRow[0,DataRowVersion.Proposed];
142 Assert.AreEqual(iProposed , (int)myRow[0,DataRowVersion.Current] , "DRW7");
145 [Test] public void Equals()
147 DataTable myTable = new DataTable("myTable");
149 dr1 = myTable.NewRow();
150 dr2 = myTable.NewRow();
153 Assert.AreEqual(false , dr1.Equals(dr2), "DRW8");
157 Assert.AreEqual(true , dr1.Equals(dr2), "DRW9");
160 [Test] public void GetChildRows_ByDataRealtion()
163 DataRow[] drArrExcepted,drArrResult;
164 DataTable dtChild,dtParent;
165 DataSet ds = new DataSet();
168 dtChild = DataProvider.CreateChildDataTable();
169 dtParent= DataProvider.CreateParentDataTable();
171 //Add tables to dataset
172 ds.Tables.Add(dtChild);
173 ds.Tables.Add(dtParent);
174 dr = dtParent.Rows[0];
177 DataRelation dRel = new DataRelation("Parent-Child",dtParent.Columns["ParentId"],dtChild.Columns["ParentId"]);
178 ds.Relations.Add(dRel);
179 //Get Excepted result
180 drArrExcepted = dtChild.Select("ParentId=" + dr["ParentId"]);
182 drArrResult = dr.GetChildRows(dRel);
185 Assert.AreEqual(drArrExcepted, drArrResult, "DRW10");
188 [Test] public void GetChildRows_ByDataRealtionDataRowVersion()
191 DataRow[] drArrExcepted,drArrResult;
192 DataTable dtChild,dtParent;
193 DataSet ds = new DataSet();
195 dtChild = DataProvider.CreateChildDataTable();
196 dtParent= DataProvider.CreateParentDataTable();
197 //Add tables to dataset
198 ds.Tables.Add(dtChild);
199 ds.Tables.Add(dtParent);
201 DataRelation dRel = new DataRelation("Parent-Child",dtParent.Columns["ParentId"],dtChild.Columns["ParentId"]);
202 ds.Relations.Add(dRel);
204 drParent = dtParent.Rows[0];
206 // Teting: DateTime.Now.ToShortTimeString()
207 //Get Excepted result
208 drArrExcepted = dtChild.Select("ParentId=" + drParent["ParentId"],"",DataViewRowState.CurrentRows );
209 //Get Result DataRowVersion.Current
210 drArrResult = drParent.GetChildRows(dRel,DataRowVersion.Current);
211 Assert.AreEqual(drArrExcepted, drArrResult, "DRW11");
213 // Teting: DataRow.GetParentRows_D_D
214 //Get Excepted result
215 drArrExcepted = dtChild.Select("ParentId=" + drParent["ParentId"],"",DataViewRowState.OriginalRows );
216 //Get Result DataRowVersion.Current
217 drArrResult = drParent.GetChildRows(dRel,DataRowVersion.Original );
218 Assert.AreEqual(drArrExcepted, drArrResult, "DRW12");
220 // Teting: DataRow.GetParentRows_D_D
221 //Get Excepted result, in this case Current = Default
222 drArrExcepted = dtChild.Select("ParentId=" + drParent["ParentId"],"",DataViewRowState.CurrentRows);
223 //Get Result DataRowVersion.Current
224 drArrResult = drParent.GetChildRows(dRel,DataRowVersion.Default );
225 Assert.AreEqual(drArrExcepted, drArrResult, "DRW13");
227 // Teting: DataRow.GetParentRows_D_D
228 drParent.BeginEdit();
229 drParent["String1"] = "Value";
230 //Get Excepted result
231 drArrExcepted = dtChild.Select("ParentId=" + drParent["ParentId"],"",DataViewRowState.CurrentRows );
232 //Get Result DataRowVersion.Current
233 drArrResult = drParent.GetChildRows(dRel,DataRowVersion.Proposed );
234 Assert.AreEqual(drArrExcepted, drArrResult, "DRW14");
237 [Test] public void GetChildRows_ByName()
240 DataRow[] drArrExcepted,drArrResult;
241 DataTable dtChild,dtParent;
242 DataSet ds = new DataSet();
245 dtChild = DataProvider.CreateChildDataTable();
246 dtParent= DataProvider.CreateParentDataTable();
248 //Add tables to dataset
249 ds.Tables.Add(dtChild);
250 ds.Tables.Add(dtParent);
251 dr = dtParent.Rows[0];
254 DataRelation dRel = new DataRelation("Parent-Child",dtParent.Columns["ParentId"],dtChild.Columns["ParentId"]);
255 ds.Relations.Add(dRel);
256 //Get Excepted result
257 drArrExcepted = dtChild.Select("ParentId=" + dr["ParentId"]);
259 drArrResult = dr.GetChildRows("Parent-Child");
262 Assert.AreEqual(drArrExcepted, drArrResult, "DRW15");
265 [Test] public void GetChildRows_ByNameDataRowVersion()
268 DataRow[] drArrExcepted,drArrResult;
269 DataTable dtChild,dtParent;
270 DataSet ds = new DataSet();
272 dtChild = DataProvider.CreateChildDataTable();
273 dtParent= DataProvider.CreateParentDataTable();
274 //Add tables to dataset
275 ds.Tables.Add(dtChild);
276 ds.Tables.Add(dtParent);
278 DataRelation dRel = new DataRelation("Parent-Child",dtParent.Columns["ParentId"],dtChild.Columns["ParentId"]);
279 ds.Relations.Add(dRel);
281 drParent = dtParent.Rows[0];
284 //Get Excepted result
285 drArrExcepted = dtChild.Select("ParentId=" + drParent["ParentId"],"",DataViewRowState.CurrentRows );
286 //Get Result DataRowVersion.Current
287 drArrResult = drParent.GetChildRows("Parent-Child",DataRowVersion.Current);
288 Assert.AreEqual(drArrExcepted, drArrResult, "DRW16");
291 //Get Excepted result
292 drArrExcepted = dtChild.Select("ParentId=" + drParent["ParentId"],"",DataViewRowState.OriginalRows );
293 //Get Result DataRowVersion.Current
294 drArrResult = drParent.GetChildRows("Parent-Child",DataRowVersion.Original );
295 Assert.AreEqual(drArrExcepted, drArrResult, "DRW17");
297 // GetParentRows_SD 3
298 //Get Excepted result, in this case Current = Default
299 drArrExcepted = dtChild.Select("ParentId=" + drParent["ParentId"],"",DataViewRowState.CurrentRows);
300 //Get Result DataRowVersion.Current
301 drArrResult = drParent.GetChildRows("Parent-Child",DataRowVersion.Default );
302 Assert.AreEqual(drArrExcepted, drArrResult, "DRW18");
304 // GetParentRows_SD 4
305 drParent.BeginEdit();
306 drParent["String1"] = "Value";
307 //Get Excepted result
308 drArrExcepted = dtChild.Select("ParentId=" + drParent["ParentId"],"",DataViewRowState.CurrentRows );
309 //Get Result DataRowVersion.Current
310 drArrResult = drParent.GetChildRows("Parent-Child",DataRowVersion.Proposed );
311 Assert.AreEqual(drArrExcepted, drArrResult, "DRW19");
314 [Test] public void GetColumnError_ByIndex()
316 string sColErr = "Error!";
317 DataTable dt = new DataTable("myTable");
318 DataColumn dc = new DataColumn("Column1");
320 DataRow dr = dt.NewRow();
323 Assert.AreEqual(String.Empty , dr.GetColumnError(0) , "DRW20");
325 dr.SetColumnError(0,sColErr );
328 Assert.AreEqual(sColErr , dr.GetColumnError(0) , "DRW21");
331 [Test] public void GetColumnError_ByName()
333 string sColErr = "Error!";
334 DataTable dt = new DataTable("myTable");
335 DataColumn dc = new DataColumn("Column1");
337 DataRow dr = dt.NewRow();
340 Assert.AreEqual(String.Empty , dr.GetColumnError("Column1") , "DRW22");
342 dr.SetColumnError("Column1",sColErr );
345 Assert.AreEqual(sColErr , dr.GetColumnError("Column1") , "DRW23");
348 [Test] public void GetColumnsInError()
350 string sColErr = "Error!";
352 DataTable dt = new DataTable("myTable");
354 dt.Columns.Add(new DataColumn());
355 dt.Columns.Add(new DataColumn());
356 dt.Columns.Add(new DataColumn());
357 dt.Columns.Add(new DataColumn());
358 dt.Columns.Add(new DataColumn());
361 dt.Rows.Add(new object[] {});
362 dt.Rows.Add(new object[] {});
363 dt.Rows.Add(new object[] {});
365 DataRow dr = dt.Rows[1];
367 dcArr = dr.GetColumnsInError();
369 // GetColumnsInError 1
370 Assert.AreEqual(0, dcArr.Length , "DRW24");
372 dr.SetColumnError(0,sColErr);
373 dr.SetColumnError(2,sColErr);
374 dr.SetColumnError(4,sColErr);
376 dcArr = dr.GetColumnsInError();
378 // GetColumnsInError 2
379 Assert.AreEqual(3, dcArr.Length , "DRW25");
381 //check that the right columns taken
382 // GetColumnsInError 3
383 Assert.AreEqual(dt.Columns[0], dcArr[0], "DRW26");
385 // GetColumnsInError 4
386 Assert.AreEqual(dt.Columns[2], dcArr[1], "DRW27");
388 // GetColumnsInError 5
389 Assert.AreEqual(dt.Columns[4], dcArr[2], "DRW28");
392 [Test] public new void GetHashCode()
396 DataTable dt = new DataTable();
399 iHashCode = dr.GetHashCode();
400 for (int i=0; i<10; i++)
401 { //must return the same value each time
402 // GetHashCode #" + i
403 Assert.AreEqual(dr.GetHashCode() , iHashCode , "DRW29");
407 [Test] public void GetParentRow_ByDataRelation()
409 DataRow drExcepted,drResult,drChild;
410 DataTable dtChild,dtParent;
411 DataSet ds = new DataSet();
414 dtChild = DataProvider.CreateChildDataTable();
415 dtParent = DataProvider.CreateParentDataTable();
417 //Add tables to dataset
418 ds.Tables.Add(dtChild);
419 ds.Tables.Add(dtParent);
422 DataRelation dRel = new DataRelation("Parent-Child",dtParent.Columns["ParentId"],dtChild.Columns["ParentId"]);
423 ds.Relations.Add(dRel);
426 drExcepted = dtParent.Rows[0];
429 drChild = dtChild.Select("ParentId=" + drExcepted["ParentId"])[0];
430 drResult = drChild.GetParentRow(dRel);
433 Assert.AreEqual(drExcepted.ItemArray, drResult.ItemArray , "DRW30");
436 [Test] public void GetParentRow_ByDataRelationDataRowVersion()
438 DataRow drParent,drChild;
439 DataRow drArrExcepted,drArrResult;
440 DataTable dtChild,dtParent;
441 DataSet ds = new DataSet();
443 dtChild = DataProvider.CreateChildDataTable();
444 dtParent= DataProvider.CreateParentDataTable();
445 //Add tables to dataset
446 ds.Tables.Add(dtChild);
447 ds.Tables.Add(dtParent);
449 DataRelation dRel = new DataRelation("Parent-Child",dtParent.Columns["ParentId"],dtChild.Columns["ParentId"]);
450 ds.Relations.Add(dRel);
452 drParent = dtParent.Rows[0];
453 drChild = dtChild.Select("ParentId=" + drParent["ParentId"])[0];
456 //Get Excepted result
457 drArrExcepted = drParent;
458 //Get Result DataRowVersion.Current
459 drArrResult = drChild.GetParentRow(dRel,DataRowVersion.Current);
460 Assert.AreEqual(drArrExcepted.ItemArray, drArrResult.ItemArray , "DRW31");
463 //Get Excepted result
464 drArrExcepted = drParent;
465 //Get Result DataRowVersion.Current
466 drArrResult = drChild.GetParentRow(dRel,DataRowVersion.Original );
467 Assert.AreEqual(drArrExcepted.ItemArray, drArrResult.ItemArray , "DRW32");
470 //Get Excepted result, in this case Current = Default
471 drArrExcepted = drParent;
472 //Get Result DataRowVersion.Current
473 drArrResult = drChild.GetParentRow(dRel,DataRowVersion.Default );
474 Assert.AreEqual(drArrExcepted.ItemArray, drArrResult.ItemArray , "DRW33");
478 drChild["String1"] = "Value";
479 //Get Excepted result
480 drArrExcepted = drParent;
481 //Get Result DataRowVersion.Current
482 drArrResult = drChild.GetParentRow(dRel,DataRowVersion.Proposed );
483 Assert.AreEqual(drArrExcepted.ItemArray, drArrResult.ItemArray , "DRW34");
486 [Test] public void GetParentRow_ByName()
488 DataRow drExcepted,drResult,drChild;
489 DataTable dtChild,dtParent;
490 DataSet ds = new DataSet();
493 dtChild = DataProvider.CreateChildDataTable();
494 dtParent = DataProvider.CreateParentDataTable();
496 //Add tables to dataset
497 ds.Tables.Add(dtChild);
498 ds.Tables.Add(dtParent);
501 DataRelation dRel = new DataRelation("Parent-Child",dtParent.Columns["ParentId"],dtChild.Columns["ParentId"]);
502 ds.Relations.Add(dRel);
505 drExcepted = dtParent.Rows[0];
508 drChild = dtChild.Select("ParentId=" + drExcepted["ParentId"])[0];
509 drResult = drChild.GetParentRow("Parent-Child");
512 Assert.AreEqual(drExcepted.ItemArray, drResult.ItemArray , "DRW35");
515 [Test] public void GetParentRow_ByNameDataRowVersion()
517 DataRow drParent,drChild;
518 DataRow drArrExcepted,drArrResult;
519 DataTable dtChild,dtParent;
520 DataSet ds = new DataSet();
522 dtChild = DataProvider.CreateChildDataTable();
523 dtParent= DataProvider.CreateParentDataTable();
524 //Add tables to dataset
525 ds.Tables.Add(dtChild);
526 ds.Tables.Add(dtParent);
528 DataRelation dRel = new DataRelation("Parent-Child",dtParent.Columns["ParentId"],dtChild.Columns["ParentId"]);
529 ds.Relations.Add(dRel);
531 drParent = dtParent.Rows[0];
532 drChild = dtChild.Select("ParentId=" + drParent["ParentId"])[0];
535 //Get Excepted result
536 drArrExcepted = drParent;
537 //Get Result DataRowVersion.Current
538 drArrResult = drChild.GetParentRow("Parent-Child",DataRowVersion.Current);
539 Assert.AreEqual(drArrExcepted.ItemArray, drArrResult.ItemArray , "DRW36");
542 //Get Excepted result
543 drArrExcepted = drParent;
544 //Get Result DataRowVersion.Current
545 drArrResult = drChild.GetParentRow("Parent-Child",DataRowVersion.Original );
546 Assert.AreEqual(drArrExcepted.ItemArray, drArrResult.ItemArray , "DRW37");
549 //Get Excepted result, in this case Current = Default
550 drArrExcepted = drParent;
551 //Get Result DataRowVersion.Current
552 drArrResult = drChild.GetParentRow("Parent-Child",DataRowVersion.Default );
553 Assert.AreEqual(drArrExcepted.ItemArray, drArrResult.ItemArray , "DRW38");
557 drChild["String1"] = "Value";
558 //Get Excepted result
559 drArrExcepted = drParent;
560 //Get Result DataRowVersion.Current
561 drArrResult = drChild.GetParentRow("Parent-Child",DataRowVersion.Proposed );
562 Assert.AreEqual(drArrExcepted.ItemArray, drArrResult.ItemArray , "DRW39");
565 [Test] public void GetParentRows_ByDataRelation()
568 DataRow[] drArrExcepted,drArrResult;
569 DataTable dtChild,dtParent;
570 DataSet ds = new DataSet();
573 dtChild = DataProvider.CreateChildDataTable();
574 dtParent = DataProvider.CreateParentDataTable();
576 //Add tables to dataset
577 ds.Tables.Add(dtChild);
578 ds.Tables.Add(dtParent);
579 dr = dtParent.Rows[0];
581 //Duplicate several rows in order to create Many to Many relation
582 dtParent.ImportRow(dr);
583 dtParent.ImportRow(dr);
584 dtParent.ImportRow(dr);
587 DataRelation dRel = new DataRelation("Parent-Child",dtParent.Columns["ParentId"],dtChild.Columns["ParentId"],false);
588 ds.Relations.Add(dRel);
589 //Get Excepted result
590 drArrExcepted = dtParent.Select("ParentId=" + dr["ParentId"]);
591 dr = dtChild.Select("ParentId=" + dr["ParentId"])[0];
593 drArrResult = dr.GetParentRows(dRel);
596 Assert.AreEqual(drArrExcepted, drArrResult, "DRW40");
599 [Test] public void GetParentRows_ByName()
602 DataRow[] drArrExcepted,drArrResult;
603 DataTable dtChild,dtParent;
604 DataSet ds = new DataSet();
607 dtChild = DataProvider.CreateChildDataTable();
608 dtParent = DataProvider.CreateParentDataTable();
610 //Add tables to dataset
611 ds.Tables.Add(dtChild);
612 ds.Tables.Add(dtParent);
613 dr = dtParent.Rows[0];
615 //Duplicate several rows in order to create Many to Many relation
616 dtParent.ImportRow(dr);
617 dtParent.ImportRow(dr);
618 dtParent.ImportRow(dr);
621 DataRelation dRel = new DataRelation("Parent-Child",dtParent.Columns["ParentId"],dtChild.Columns["ParentId"],false);
622 ds.Relations.Add(dRel);
623 //Get Excepted result
624 drArrExcepted = dtParent.Select("ParentId=" + dr["ParentId"]);
625 dr = dtChild.Select("ParentId=" + dr["ParentId"])[0];
627 drArrResult = dr.GetParentRows("Parent-Child");
630 Assert.AreEqual(drArrExcepted, drArrResult, "DRW41");
633 [Test] public void GetParentRows_ByNameDataRowVersion()
635 DataRow drParent,drChild;
636 DataRow[] drArrExcepted,drArrResult;
637 DataTable dtChild,dtParent;
638 DataSet ds = new DataSet();
640 dtChild = DataProvider.CreateChildDataTable();
641 dtParent= DataProvider.CreateParentDataTable();
642 //Add tables to dataset
643 ds.Tables.Add(dtChild);
644 ds.Tables.Add(dtParent);
646 DataRelation dRel = new DataRelation("Parent-Child",dtParent.Columns["ParentId"],dtChild.Columns["ParentId"],false);
647 ds.Relations.Add(dRel);
649 //Create several copies of the first row
650 drParent = dtParent.Rows[0]; //row[0] has versions: Default,Current,Original
651 dtParent.ImportRow(drParent); //row[1] has versions: Default,Current,Original
652 dtParent.ImportRow(drParent); //row[2] has versions: Default,Current,Original
653 dtParent.ImportRow(drParent); //row[3] has versions: Default,Current,Original
654 dtParent.ImportRow(drParent); //row[4] has versions: Default,Current,Original
655 dtParent.ImportRow(drParent); //row[5] has versions: Default,Current,Original
656 dtParent.AcceptChanges();
658 //Get the first child row for drParent
659 drChild = dtChild.Select("ParentId=" + drParent["ParentId"])[0];
661 DataRow[] drTemp = dtParent.Select("ParentId=" + drParent["ParentId"]);
662 // Console.WriteLine("********");
663 // foreach (DataRow d in drTemp)
665 // CheckRowVersion(d);
667 drTemp[0].BeginEdit();
668 drTemp[0]["String1"] = "NewValue"; //row now has versions: Proposed,Current,Original,Default
669 drTemp[1].BeginEdit();
670 drTemp[1]["String1"] = "NewValue"; //row now has versions: Proposed,Current,Original,Default
672 // Console.WriteLine("********");
673 // foreach (DataRow d in drTemp)
675 // CheckRowVersion(d);
677 // Console.WriteLine("********");
679 // Check DataRowVersion.Current
680 //Check DataRowVersion.Current
681 drArrExcepted = dtParent.Select("ParentId=" + drParent["ParentId"],"",DataViewRowState.CurrentRows );
682 drArrResult = drChild.GetParentRows("Parent-Child",DataRowVersion.Current);
683 Assert.AreEqual(drArrExcepted, drArrResult, "DRW42");
685 //Check DataRowVersion.Current
686 // Teting: DataRow.GetParentRows_D_D ,DataRowVersion.Original
687 drArrExcepted = dtParent.Select("ParentId=" + drParent["ParentId"],"",DataViewRowState.OriginalRows );
688 drArrResult = drChild.GetParentRows("Parent-Child",DataRowVersion.Original );
689 Assert.AreEqual(drArrExcepted, drArrResult, "DRW43");
691 //Check DataRowVersion.Default
692 // Teting: DataRow.GetParentRows_D_D ,DataRowVersion.Default
693 drArrExcepted = dtParent.Select("ParentId=" + drParent["ParentId"],"",DataViewRowState.CurrentRows);
694 drArrResult = drChild.GetParentRows("Parent-Child",DataRowVersion.Default );
695 Assert.AreEqual(drArrExcepted, drArrResult, "DRW44");
697 /* .Net don't work as expected
698 //Check DataRowVersion.Proposed
699 // Teting: DataRow.GetParentRows_D_D ,DataRowVersion.Proposed
700 drArrExcepted = dtParent.Select("ParentId=" + drParent["ParentId"],"",DataViewRowState.ModifiedCurrent);
701 //drArrExcepted = dtParent.Select("ParentId=" + drParent["ParentId"],"",DataViewRowState.ModifiedOriginal );
703 drArrResult = drChild.GetParentRows("Parent-Child",DataRowVersion.Proposed );
704 Assert.AreEqual(drArrExcepted, drArrResult, "DRW45");
708 private void CheckRowVersion(DataRow dr)
710 Console.WriteLine("");
711 if (dr.HasVersion(DataRowVersion.Current)) Console.WriteLine("Has " + DataRowVersion.Current.ToString());
712 if (dr.HasVersion(DataRowVersion.Default)) Console.WriteLine("Has " + DataRowVersion.Default.ToString());
713 if (dr.HasVersion(DataRowVersion.Original)) Console.WriteLine("Has " + DataRowVersion.Original.ToString());
714 if (dr.HasVersion(DataRowVersion.Proposed)) Console.WriteLine("Has " + DataRowVersion.Proposed.ToString());
717 [Test] public new void GetType()
720 DataTable dt = new DataTable();
721 DataRow dr = dt.NewRow();
722 myType = typeof(DataRow);
725 Assert.AreEqual(typeof(DataRow), myType , "DRW46");
728 [Test] public void HasErrors()
730 DataTable dt = new DataTable("myTable");
731 DataRow dr = dt.NewRow();
733 // HasErrors (default)
734 Assert.AreEqual(false, dr.HasErrors, "DRW47");
738 // HasErrors (set/get)
739 Assert.AreEqual(true , dr.HasErrors , "DRW48");
742 [Test] public void HasErrorsWithNullError()
744 DataTable dt = new DataTable("myTable");
745 DataRow dr = dt.NewRow();
747 // HasErrors (default)
748 Assert.AreEqual(false, dr.HasErrors, "DRW47.2");
752 // HasErrors (set/get)
753 Assert.AreEqual(string.Empty , dr.RowError , "DRW48.2");
754 Assert.AreEqual(false , dr.HasErrors , "DRW49.2");
757 [Test] public void HasVersion_ByDataRowVersion()
759 DataTable t = new DataTable("atable");
760 t.Columns.Add("id", typeof(int));
761 t.Columns.Add("name", typeof(string));
762 t.Columns[0].DefaultValue = 1;
763 t.Columns[1].DefaultValue = "something";
766 DataRow r = t.NewRow();
768 // HasVersion Test #10
769 Assert.AreEqual(false , r.HasVersion(DataRowVersion.Current) , "DRW49");
771 // HasVersion Test #11
772 Assert.AreEqual(false , r.HasVersion(DataRowVersion.Original) , "DRW50");
774 // HasVersion Test #12
775 Assert.AreEqual(true , r.HasVersion(DataRowVersion.Default) , "DRW51");
777 // HasVersion Test #13
778 Assert.AreEqual(true , r.HasVersion(DataRowVersion.Proposed) , "DRW52");
783 // HasVersion Test #20
784 Assert.AreEqual(false , r.HasVersion(DataRowVersion.Current) , "DRW53");
786 // HasVersion Test #21
787 Assert.AreEqual(false , r.HasVersion(DataRowVersion.Original) , "DRW54");
789 // HasVersion Test #22
790 Assert.AreEqual(true , r.HasVersion(DataRowVersion.Default) , "DRW55");
792 // HasVersion Test #23
793 Assert.AreEqual(true , r.HasVersion(DataRowVersion.Proposed) , "DRW56");
798 // HasVersion Test #30
799 Assert.AreEqual(true , r.HasVersion(DataRowVersion.Current) , "DRW57");
801 // HasVersion Test #31
802 Assert.AreEqual(false , r.HasVersion(DataRowVersion.Original) , "DRW58");
804 // HasVersion Test #32
805 Assert.AreEqual(true , r.HasVersion(DataRowVersion.Default) , "DRW59");
807 // HasVersion Test #33
808 Assert.AreEqual(false , r.HasVersion(DataRowVersion.Proposed) , "DRW60");
811 // now it is "unchanged"
813 // HasVersion Test #40
814 Assert.AreEqual(true , r.HasVersion(DataRowVersion.Current) , "DRW61");
816 // HasVersion Test #41
817 Assert.AreEqual(true , r.HasVersion(DataRowVersion.Original) , "DRW62");
819 // HasVersion Test #42
820 Assert.AreEqual(true , r.HasVersion(DataRowVersion.Default) , "DRW63");
822 // HasVersion Test #43
823 Assert.AreEqual(false , r.HasVersion(DataRowVersion.Proposed) , "DRW64");
828 // HasVersion Test #50
829 Assert.AreEqual(true , r.HasVersion(DataRowVersion.Current) , "DRW65");
831 // HasVersion Test #51
832 Assert.AreEqual(true , r.HasVersion(DataRowVersion.Original) , "DRW66");
834 // HasVersion Test #52
835 Assert.AreEqual(true , r.HasVersion(DataRowVersion.Default) , "DRW67");
837 // HasVersion Test #53
838 Assert.AreEqual(true , r.HasVersion(DataRowVersion.Proposed) , "DRW68");
841 // now it is "modified"
842 // HasVersion Test #60
843 Assert.AreEqual(true , r.HasVersion(DataRowVersion.Current) , "DRW69");
845 // HasVersion Test #61
846 Assert.AreEqual(true , r.HasVersion(DataRowVersion.Original) , "DRW70");
848 // HasVersion Test #62
849 Assert.AreEqual(true , r.HasVersion(DataRowVersion.Default) , "DRW71");
851 // HasVersion Test #63
852 Assert.AreEqual(false , r.HasVersion(DataRowVersion.Proposed) , "DRW72");
854 // this or t.AcceptChanges
856 // now it is "unchanged" again
857 // HasVersion Test #70
858 Assert.AreEqual(true , r.HasVersion(DataRowVersion.Current) , "DRW73");
860 // HasVersion Test #71
861 Assert.AreEqual(true , r.HasVersion(DataRowVersion.Original) , "DRW74");
863 // HasVersion Test #72
864 Assert.AreEqual(true , r.HasVersion(DataRowVersion.Default) , "DRW75");
866 // HasVersion Test #73
867 Assert.AreEqual(false , r.HasVersion(DataRowVersion.Proposed) , "DRW76");
870 // now it is "deleted"
872 // HasVersion Test #80
873 Assert.AreEqual(false , r.HasVersion(DataRowVersion.Current) , "DRW77");
875 // HasVersion Test #81
876 Assert.AreEqual(true , r.HasVersion(DataRowVersion.Original) , "DRW78");
878 // HasVersion Test #82
879 Assert.AreEqual(false , r.HasVersion(DataRowVersion.Default) , "DRW79");
881 // HasVersion Test #83
882 Assert.AreEqual(false , r.HasVersion(DataRowVersion.Proposed) , "DRW80");
886 // HasVersion Test #90
887 Assert.AreEqual(false , r.HasVersion(DataRowVersion.Current) , "DRW81");
889 // HasVersion Test #91
890 Assert.AreEqual(false , r.HasVersion(DataRowVersion.Original) , "DRW82");
892 // HasVersion Test #92
893 Assert.AreEqual(false , r.HasVersion(DataRowVersion.Default) , "DRW83");
895 // HasVersion Test #93
896 Assert.AreEqual(false , r.HasVersion(DataRowVersion.Proposed) , "DRW84");
899 [Test] // Object this [DataColumn]
900 public void Indexer1 ()
903 DataColumnChangeEventArgs colChangeArgs;
905 DataTable dt = new DataTable ();
906 dt.ColumnChanged += new DataColumnChangeEventHandler (ColumnChanged);
907 dt.ColumnChanging += new DataColumnChangeEventHandler (ColumnChanging);
909 DataColumn dc0 = new DataColumn ("Col0", typeof (Address));
910 dt.Columns.Add (dc0);
911 DataColumn dc1 = new DataColumn ("Col1", typeof (Person));
912 dt.Columns.Add (dc1);
914 Person personA = new Person ("Miguel");
915 Address addressA = new Address ("X", 5);
916 Person personB = new Person ("Chris");
917 Address addressB = new Address ("Y", 4);
918 Person personC = new Person ("Jackson");
919 Address addressC = new Address ("Z", 3);
921 dt.Rows.Add (new object [] { addressA, personA });
922 dt.Rows.Add (new object [] { addressB, personB });
926 Assert.AreEqual (addressA, dr [dc0], "#A1");
927 Assert.AreSame (personA, dr [dc1], "#A2");
930 Assert.AreEqual (addressB, dr [dc0], "#B1");
931 Assert.AreSame (personB, dr [dc1], "#B2");
934 Assert.AreEqual (0, _eventsFired.Count, "#C1");
936 Assert.AreEqual (2, _eventsFired.Count, "#C2");
937 Assert.AreEqual (addressC, dr [dc0], "#C3");
938 Assert.AreSame (personA, dr [dc1], "#C4");
942 Assert.AreEqual (2, _eventsFired.Count, "#D1");
944 Assert.AreEqual (4, _eventsFired.Count, "#D2");
945 Assert.AreEqual (addressB, dr [dc0], "#D3");
946 Assert.AreSame (personC, dr [dc1], "#D4");
948 Assert.AreEqual (4, _eventsFired.Count, "#D5");
949 Assert.AreEqual (addressB, dr [dc0], "#D6");
950 Assert.AreSame (personC, dr [dc1], "#D7");
954 Assert.AreEqual (4, _eventsFired.Count, "#E1");
956 Assert.AreEqual (6, _eventsFired.Count, "#E2");
957 Assert.AreEqual (addressB, dr [dc0], "#E3");
958 Assert.AreSame (personA, dr [dc1], "#E4");
960 Assert.AreEqual (6, _eventsFired.Count, "#E5");
961 Assert.AreEqual (addressC, dr [dc0], "#E6");
962 Assert.AreSame (personA, dr [dc1], "#E7");
964 evt = (EventInfo) _eventsFired [0];
965 Assert.AreEqual ("ColumnChanging", evt.Name, "#F1");
966 colChangeArgs = (DataColumnChangeEventArgs) evt.Args;
967 Assert.AreSame (dc0, colChangeArgs.Column, "#F2");
968 Assert.AreEqual (addressC, colChangeArgs.ProposedValue, "#F3");
969 Assert.AreSame (dt.Rows [0], colChangeArgs.Row, "#F4");
971 evt = (EventInfo) _eventsFired [1];
972 Assert.AreEqual ("ColumnChanged", evt.Name, "#G1");
973 colChangeArgs = (DataColumnChangeEventArgs) evt.Args;
974 Assert.AreSame (dc0, colChangeArgs.Column, "#G2");
975 Assert.AreEqual (addressC, colChangeArgs.ProposedValue, "#G3");
976 Assert.AreSame (dt.Rows [0], colChangeArgs.Row, "#G4");
978 evt = (EventInfo) _eventsFired [2];
979 Assert.AreEqual ("ColumnChanging", evt.Name, "#H1");
980 colChangeArgs = (DataColumnChangeEventArgs) evt.Args;
981 Assert.AreSame (dc1, colChangeArgs.Column, "#H2");
982 Assert.AreEqual (personC, colChangeArgs.ProposedValue, "#H3");
983 Assert.AreSame (dt.Rows [1], colChangeArgs.Row, "#H4");
985 evt = (EventInfo) _eventsFired [3];
986 Assert.AreEqual ("ColumnChanged", evt.Name, "#I1");
987 colChangeArgs = (DataColumnChangeEventArgs) evt.Args;
988 Assert.AreSame (dc1, colChangeArgs.Column, "#I2");
989 Assert.AreEqual (personC, colChangeArgs.ProposedValue, "#I3");
990 Assert.AreSame (dt.Rows [1], colChangeArgs.Row, "#I4");
992 evt = (EventInfo) _eventsFired [4];
993 Assert.AreEqual ("ColumnChanging", evt.Name, "#J1");
994 colChangeArgs = (DataColumnChangeEventArgs) evt.Args;
995 Assert.AreSame (dc0, colChangeArgs.Column, "#J2");
996 Assert.AreEqual (addressB, colChangeArgs.ProposedValue, "#J3");
997 Assert.AreSame (dt.Rows [0], colChangeArgs.Row, "#J4");
999 evt = (EventInfo) _eventsFired [5];
1000 Assert.AreEqual ("ColumnChanged", evt.Name, "#K1");
1001 colChangeArgs = (DataColumnChangeEventArgs) evt.Args;
1002 Assert.AreSame (dc0, colChangeArgs.Column, "#K2");
1003 Assert.AreEqual (addressB, colChangeArgs.ProposedValue, "#K3");
1004 Assert.AreSame (dt.Rows [0], colChangeArgs.Row, "#K4");
1007 [Test] // Object this [DataColumn]
1008 public void Indexer1_Column_NotInTable ()
1011 DataColumnChangeEventArgs colChangeArgs;
1013 DataTable dtA = new DataTable ("TableA");
1014 dtA.ColumnChanged += new DataColumnChangeEventHandler (ColumnChanged);
1015 dtA.ColumnChanging += new DataColumnChangeEventHandler (ColumnChanging);
1016 DataColumn dcA1 = new DataColumn ("Col0", typeof (Address));
1017 dtA.Columns.Add (dcA1);
1018 DataColumn dcA2 = new DataColumn ("Col1", typeof (Person));
1019 dtA.Columns.Add (dcA2);
1021 DataTable dtB = new DataTable ("TableB");
1022 dtB.ColumnChanged += new DataColumnChangeEventHandler (ColumnChanged);
1023 dtB.ColumnChanging += new DataColumnChangeEventHandler (ColumnChanging);
1024 DataColumn dcB1 = new DataColumn ("Col0", typeof (Address));
1025 dtB.Columns.Add (dcB1);
1026 DataColumn dcB2 = new DataColumn ("Col1", typeof (Person));
1027 dtB.Columns.Add (dcB2);
1029 Person personA = new Person ("Miguel");
1030 Address addressA = new Address ("X", 5);
1032 dtA.Rows.Add (new object [] { addressA, personA });
1033 DataRow dr = dtA.Rows [0];
1036 object value = dr [dcB1];
1037 Assert.Fail ("#A1:" + value);
1038 } catch (ArgumentException ex) {
1039 // Column 'Col0' does not belong to table TableA
1040 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
1041 Assert.IsNull (ex.InnerException, "#A3");
1042 Assert.IsNotNull (ex.Message, "#A4");
1043 Assert.IsTrue (ex.Message.IndexOf ("'Col0'") != -1, "#A5");
1044 Assert.IsTrue (ex.Message.IndexOf ("TableA") != -1, "#A6");
1048 object value = dr [new DataColumn ("ZZZ")];
1049 Assert.Fail ("#B1:" + value);
1050 } catch (ArgumentException ex) {
1051 // Column 'Col0' does not belong to table TableA
1052 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
1053 Assert.IsNull (ex.InnerException, "#B3");
1054 Assert.IsNotNull (ex.Message, "#B4");
1055 Assert.IsTrue (ex.Message.IndexOf ("'ZZZ'") != -1, "#B5");
1056 Assert.IsTrue (ex.Message.IndexOf ("TableA") != -1, "#B6");
1059 dtA.Columns.Remove (dcA2);
1062 object value = dr [dcA2];
1063 Assert.Fail ("#C1:" + value);
1064 } catch (ArgumentException ex) {
1065 // Column 'Col0' does not belong to table TableA
1066 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#C2");
1067 Assert.IsNull (ex.InnerException, "#C3");
1068 Assert.IsNotNull (ex.Message, "#C4");
1069 Assert.IsTrue (ex.Message.IndexOf ("'Col1'") != -1, "#C5");
1070 Assert.IsTrue (ex.Message.IndexOf ("TableA") != -1, "#C6");
1074 [Test] // Object this [DataColumn]
1075 public void Indexer1_Column_Null ()
1078 DataColumnChangeEventArgs colChangeArgs;
1080 DataTable dt = new DataTable ();
1081 dt.ColumnChanged += new DataColumnChangeEventHandler (ColumnChanged);
1082 dt.ColumnChanging += new DataColumnChangeEventHandler (ColumnChanging);
1083 DataColumn dc0 = new DataColumn ("Col0", typeof (Address));
1084 dt.Columns.Add (dc0);
1085 DataColumn dc1 = new DataColumn ("Col1", typeof (Person));
1086 dt.Columns.Add (dc1);
1088 Person personA = new Person ("Miguel");
1089 Address addressA = new Address ("X", 5);
1090 Person personB = new Person ("Chris");
1092 dt.Rows.Add (new object [] { addressA, personA });
1093 DataRow dr = dt.Rows [0];
1096 object value = dr [(DataColumn) null];
1097 Assert.Fail ("#A1:" + value);
1098 } catch (ArgumentNullException ex) {
1099 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
1100 Assert.IsNull (ex.InnerException, "#A3");
1101 Assert.IsNotNull (ex.Message, "#A4");
1102 Assert.AreEqual ("column", ex.ParamName, "#A5");
1106 dr [(DataColumn) null] = personB;
1107 Assert.Fail ("#B1");
1108 } catch (ArgumentNullException ex) {
1109 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#B2");
1110 Assert.IsNull (ex.InnerException, "#B3");
1111 Assert.IsNotNull (ex.Message, "#B4");
1112 Assert.AreEqual ("column", ex.ParamName, "#B5");
1115 Assert.AreEqual (0, _eventsFired.Count, "#C");
1118 [Test] // Object this [DataColumn]
1119 public void Indexer1_Value_Null ()
1122 DataColumnChangeEventArgs colChangeArgs;
1124 DataTable dt = new DataTable ();
1125 dt.ColumnChanged += new DataColumnChangeEventHandler (ColumnChanged);
1126 dt.ColumnChanging += new DataColumnChangeEventHandler (ColumnChanging);
1127 DataColumn dc0 = new DataColumn ("Col0", typeof (Address));
1128 dt.Columns.Add (dc0);
1129 DataColumn dc1 = new DataColumn ("Col1", typeof (Person));
1130 dt.Columns.Add (dc1);
1131 DataColumn dc2 = new DataColumn ("Col2", typeof (string));
1132 dt.Columns.Add (dc2);
1134 Person personA = new Person ("Miguel");
1135 Address addressA = new Address ("X", 5);
1136 string countryA = "U.S.";
1137 Person personB = new Person ("Chris");
1138 Address addressB = new Address ("Y", 4);
1139 string countryB = "Canada";
1140 Person personC = new Person ("Jackson");
1141 Address addressC = new Address ("Z", 3);
1143 dt.Rows.Add (new object [] { addressA, personA, countryA });
1144 dt.Rows.Add (new object [] { addressB, personB, countryB });
1146 DataRow dr = dt.Rows [0];
1150 Assert.Fail ("#A1");
1151 } catch (ArgumentException ex) {
1152 // Cannot set Column 'Col0' to be null.
1153 // Please use DBNull instead
1154 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
1155 Assert.IsNull (ex.InnerException, "#A3");
1156 Assert.IsNotNull (ex.Message, "#A4");
1157 Assert.IsTrue (ex.Message.IndexOf ("'Col0'") != -1, "#A5");
1158 Assert.IsTrue (ex.Message.IndexOf ("DBNull") != -1, "#A6");
1161 Assert.AreEqual (1, _eventsFired.Count, "#B1");
1162 Assert.AreEqual (addressA, dr [dc0], "#B2");
1163 Assert.IsFalse (dr.IsNull (dc0), "#B3");
1164 Assert.AreSame (personA, dr [dc1], "#B4");
1165 Assert.IsFalse (dr.IsNull (dc1), "#B5");
1166 Assert.AreEqual (1, _eventsFired.Count, "#B6");
1173 Assert.Fail ("#B1");
1174 } catch (ArgumentException ex) {
1175 // Cannot set Column 'Col1' to be null.
1176 // Please use DBNull instead
1177 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
1178 Assert.IsNull (ex.InnerException, "#B3");
1179 Assert.IsNotNull (ex.Message, "#B4");
1180 Assert.IsTrue (ex.Message.IndexOf ("'Col1'") != -1, "#B5");
1181 Assert.IsTrue (ex.Message.IndexOf ("DBNull") != -1, "#B6");
1182 Assert.AreEqual (2, _eventsFired.Count, "#B7");
1184 dr [dc1] = DBNull.Value;
1188 Assert.AreEqual (3, _eventsFired.Count, "#C1");
1190 Assert.AreEqual (4, _eventsFired.Count, "#C1");
1192 Assert.AreEqual (addressA, dr [dc0], "#C2");
1193 Assert.IsFalse (dr.IsNull (dc0), "#C3");
1194 Assert.AreSame (DBNull.Value, dr [dc1], "#C4");
1195 Assert.IsTrue (dr.IsNull (dc1), "#C5");
1197 Assert.AreEqual (3, _eventsFired.Count, "#C6");
1199 Assert.AreEqual (4, _eventsFired.Count, "#C6");
1202 dr [dc0] = DBNull.Value;
1204 Assert.AreEqual (5, _eventsFired.Count, "#D1");
1206 Assert.AreEqual (6, _eventsFired.Count, "#D1");
1208 Assert.AreSame (DBNull.Value, dr [dc0], "#D2");
1209 Assert.IsTrue (dr.IsNull (dc0), "#D3");
1210 Assert.AreSame (DBNull.Value, dr [dc1], "#D4");
1211 Assert.IsTrue (dr.IsNull (dc1), "#D5");
1213 Assert.AreEqual (5, _eventsFired.Count, "#D6");
1215 Assert.AreEqual (6, _eventsFired.Count, "#D6");
1221 Assert.AreEqual (7, _eventsFired.Count, "#E1");
1223 Assert.AreEqual (8, _eventsFired.Count, "#E1");
1225 Assert.AreSame (DBNull.Value, dr [dc0], "#E2");
1226 Assert.IsTrue (dr.IsNull (dc0), "#E3");
1227 Assert.AreEqual (personC, dr [dc1], "#E4");
1228 Assert.IsFalse (dr.IsNull (dc1), "#E5");
1230 Assert.AreSame (DBNull.Value, dr [dc0], "#E6");
1231 Assert.IsTrue (dr.IsNull (dc0), "#E7");
1232 Assert.AreEqual (personC, dr [dc1], "#E8");
1233 Assert.IsFalse (dr.IsNull (dc1), "#E9");
1235 Assert.AreEqual (7, _eventsFired.Count, "#E10");
1237 Assert.AreEqual (8, _eventsFired.Count, "#E10");
1240 dr [dc1] = DBNull.Value;
1242 Assert.AreEqual (9, _eventsFired.Count, "#F1");
1244 Assert.AreEqual (10, _eventsFired.Count, "#F1");
1246 Assert.AreSame (DBNull.Value, dr [dc0], "#F2");
1247 Assert.IsTrue (dr.IsNull (dc0), "#F3");
1248 Assert.AreSame (DBNull.Value, dr [dc1], "#F4");
1249 Assert.IsTrue (dr.IsNull (dc1), "#F5");
1251 Assert.AreEqual (9, _eventsFired.Count, "#F6");
1253 Assert.AreEqual (10, _eventsFired.Count, "#F6");
1258 Assert.AreEqual (11, _eventsFired.Count, "#G1");
1260 Assert.AreEqual (12, _eventsFired.Count, "#G1");
1262 Assert.AreSame (DBNull.Value, dr [dc0], "#G2");
1263 Assert.IsTrue (dr.IsNull (dc0), "#G3");
1264 Assert.AreSame (DBNull.Value, dr [dc1], "#G4");
1265 Assert.IsTrue (dr.IsNull (dc1), "#G5");
1266 Assert.AreSame (DBNull.Value, dr [dc2], "#G6");
1267 Assert.IsTrue (dr.IsNull (dc2), "#G7");
1269 Assert.AreEqual (11, _eventsFired.Count, "#G8");
1271 Assert.AreEqual (12, _eventsFired.Count, "#G8");
1274 dr [dc2] = DBNull.Value;
1276 Assert.AreEqual (13, _eventsFired.Count, "#H1");
1278 Assert.AreEqual (14, _eventsFired.Count, "#H1");
1280 Assert.AreSame (DBNull.Value, dr [dc0], "#H2");
1281 Assert.IsTrue (dr.IsNull (dc0), "#H3");
1282 Assert.AreSame (DBNull.Value, dr [dc1], "#H4");
1283 Assert.IsTrue (dr.IsNull (dc1), "#H5");
1284 Assert.AreSame (DBNull.Value, dr [dc2], "#H6");
1285 Assert.IsTrue (dr.IsNull (dc2), "#H7");
1287 Assert.AreEqual (13, _eventsFired.Count, "#H8");
1289 Assert.AreEqual (14, _eventsFired.Count, "#H8");
1294 evt = (EventInfo) _eventsFired [index++];
1295 Assert.AreEqual ("ColumnChanging", evt.Name, "#I1");
1296 colChangeArgs = (DataColumnChangeEventArgs) evt.Args;
1297 Assert.AreSame (dc0, colChangeArgs.Column, "#I2");
1298 Assert.IsNull (colChangeArgs.ProposedValue, "#I3");
1299 Assert.AreSame (dt.Rows [0], colChangeArgs.Row, "#I4");
1301 evt = (EventInfo) _eventsFired [index++];
1302 Assert.AreEqual ("ColumnChanging", evt.Name, "#J1");
1303 colChangeArgs = (DataColumnChangeEventArgs) evt.Args;
1304 Assert.AreSame (dc1, colChangeArgs.Column, "#J2");
1305 Assert.IsNull (colChangeArgs.ProposedValue, "#J3");
1306 Assert.AreSame (dt.Rows [0], colChangeArgs.Row, "#J4");
1309 evt = (EventInfo) _eventsFired [index++];
1310 Assert.AreEqual ("ColumnChanging", evt.Name, "#K1");
1311 colChangeArgs = (DataColumnChangeEventArgs) evt.Args;
1312 Assert.AreSame (dc1, colChangeArgs.Column, "#K2");
1313 Assert.AreSame (DBNull.Value, colChangeArgs.ProposedValue, "#K3");
1314 Assert.AreSame (dt.Rows [0], colChangeArgs.Row, "#K4");
1317 evt = (EventInfo) _eventsFired [index++];
1318 Assert.AreEqual ("ColumnChanged", evt.Name, "#L1");
1319 colChangeArgs = (DataColumnChangeEventArgs) evt.Args;
1320 Assert.AreSame (dc1, colChangeArgs.Column, "#L2");
1322 Assert.IsNull (colChangeArgs.ProposedValue, "#L3");
1324 Assert.AreSame (DBNull.Value, colChangeArgs.ProposedValue, "#L3");
1326 Assert.AreSame (dt.Rows [0], colChangeArgs.Row, "#L4");
1328 evt = (EventInfo) _eventsFired [index++];
1329 Assert.AreEqual ("ColumnChanging", evt.Name, "#M1");
1330 colChangeArgs = (DataColumnChangeEventArgs) evt.Args;
1331 Assert.AreSame (dc0, colChangeArgs.Column, "#M2");
1332 Assert.AreSame (DBNull.Value, colChangeArgs.ProposedValue, "#M3");
1333 Assert.AreSame (dt.Rows [0], colChangeArgs.Row, "#M4");
1335 evt = (EventInfo) _eventsFired [index++];
1336 Assert.AreEqual ("ColumnChanged", evt.Name, "#N1");
1337 colChangeArgs = (DataColumnChangeEventArgs) evt.Args;
1338 Assert.AreSame (dc0, colChangeArgs.Column, "#N2");
1339 Assert.AreSame (DBNull.Value, colChangeArgs.ProposedValue, "#N3");
1340 Assert.AreSame (dt.Rows [0], colChangeArgs.Row, "#N4");
1342 evt = (EventInfo) _eventsFired [index++];
1343 Assert.AreEqual ("ColumnChanging", evt.Name, "#O1");
1344 colChangeArgs = (DataColumnChangeEventArgs) evt.Args;
1345 Assert.AreSame (dc1, colChangeArgs.Column, "#O2");
1346 Assert.AreSame (personC, colChangeArgs.ProposedValue, "#O3");
1347 Assert.AreSame (dt.Rows [0], colChangeArgs.Row, "#O4");
1349 evt = (EventInfo) _eventsFired [index++];
1350 Assert.AreEqual ("ColumnChanged", evt.Name, "#P1");
1351 colChangeArgs = (DataColumnChangeEventArgs) evt.Args;
1352 Assert.AreSame (dc1, colChangeArgs.Column, "#P2");
1353 Assert.AreSame (personC, colChangeArgs.ProposedValue, "#P3");
1354 Assert.AreSame (dt.Rows [0], colChangeArgs.Row, "#P4");
1356 evt = (EventInfo) _eventsFired [index++];
1357 Assert.AreEqual ("ColumnChanging", evt.Name, "#Q1");
1358 colChangeArgs = (DataColumnChangeEventArgs) evt.Args;
1359 Assert.AreSame (dc1, colChangeArgs.Column, "#Q2");
1360 Assert.AreSame (DBNull.Value, colChangeArgs.ProposedValue, "#Q3");
1361 Assert.AreSame (dt.Rows [0], colChangeArgs.Row, "#Q4");
1363 evt = (EventInfo) _eventsFired [index++];
1364 Assert.AreEqual ("ColumnChanged", evt.Name, "#R1");
1365 colChangeArgs = (DataColumnChangeEventArgs) evt.Args;
1366 Assert.AreSame (dc1, colChangeArgs.Column, "#R2");
1367 Assert.AreSame (DBNull.Value, colChangeArgs.ProposedValue, "#R3");
1368 Assert.AreSame (dt.Rows [0], colChangeArgs.Row, "#R4");
1370 evt = (EventInfo) _eventsFired [index++];
1371 Assert.AreEqual ("ColumnChanging", evt.Name, "#S1");
1372 colChangeArgs = (DataColumnChangeEventArgs) evt.Args;
1373 Assert.AreSame (dc2, colChangeArgs.Column, "#S2");
1374 Assert.IsNull (colChangeArgs.ProposedValue, "#S3");
1375 Assert.AreSame (dt.Rows [0], colChangeArgs.Row, "#S4");
1377 evt = (EventInfo) _eventsFired [index++];
1378 Assert.AreEqual ("ColumnChanged", evt.Name, "#T1");
1379 colChangeArgs = (DataColumnChangeEventArgs) evt.Args;
1380 Assert.AreSame (dc2, colChangeArgs.Column, "#T2");
1381 Assert.IsNull (colChangeArgs.ProposedValue, "#T3");
1382 Assert.AreSame (dt.Rows [0], colChangeArgs.Row, "#T4");
1384 evt = (EventInfo) _eventsFired [index++];
1385 Assert.AreEqual ("ColumnChanging", evt.Name, "#U1");
1386 colChangeArgs = (DataColumnChangeEventArgs) evt.Args;
1387 Assert.AreSame (dc2, colChangeArgs.Column, "#U2");
1388 Assert.AreSame (DBNull.Value, colChangeArgs.ProposedValue, "#U3");
1389 Assert.AreSame (dt.Rows [0], colChangeArgs.Row, "#U4");
1391 evt = (EventInfo) _eventsFired [index++];
1392 Assert.AreEqual ("ColumnChanged", evt.Name, "#V1");
1393 colChangeArgs = (DataColumnChangeEventArgs) evt.Args;
1394 Assert.AreSame (dc2, colChangeArgs.Column, "#V2");
1395 Assert.AreSame (DBNull.Value, colChangeArgs.ProposedValue, "#V3");
1396 Assert.AreSame (dt.Rows [0], colChangeArgs.Row, "#V4");
1399 [Test] // Object this [Int32]
1400 public void Indexer2 ()
1402 DataTable dt = new DataTable ();
1403 DataColumn dc0 = new DataColumn ("Col0", typeof (Address));
1404 dt.Columns.Add (dc0);
1405 DataColumn dc1 = new DataColumn ("Col1", typeof (Person));
1406 dt.Columns.Add (dc1);
1408 Person personA = new Person ("Miguel");
1409 Address addressA = new Address ("X", 5);
1410 Person personB = new Person ("Chris");
1411 Address addressB = new Address ("Y", 4);
1412 Person personC = new Person ("Jackson");
1413 Address addressC = new Address ("Z", 3);
1415 dt.Rows.Add (new object [] { addressA, personA });
1416 dt.Rows.Add (new object [] { addressB, personB });
1420 Assert.AreEqual (addressA, dr [0], "#A1");
1421 Assert.AreSame (personA, dr [1], "#A2");
1424 Assert.AreEqual (addressB, dr [0], "#B1");
1425 Assert.AreSame (personB, dr [1], "#B2");
1429 Assert.AreEqual (addressC, dr [0], "#C1");
1430 Assert.AreSame (personA, dr [1], "#C2");
1435 Assert.AreEqual (addressB, dr [0], "#D1");
1436 Assert.AreSame (personC, dr [1], "#D2");
1438 Assert.AreEqual (addressB, dr [0], "#D3");
1439 Assert.AreSame (personC, dr [1], "#D4");
1444 Assert.AreEqual (addressB, dr [0], "#E1");
1445 Assert.AreSame (personA, dr [1], "#E2");
1447 Assert.AreEqual (addressC, dr [0], "#E3");
1448 Assert.AreSame (personA, dr [1], "#E4");
1451 [Test] // Object this [Int32]
1452 public void Indexer2_Value_Null ()
1454 DataTable dt = new DataTable ();
1455 DataColumn dc0 = new DataColumn ("Col0", typeof (Address));
1456 dt.Columns.Add (dc0);
1457 DataColumn dc1 = new DataColumn ("Col1", typeof (Person));
1458 dt.Columns.Add (dc1);
1460 Person personA = new Person ("Miguel");
1461 Address addressA = new Address ("X", 5);
1462 Person personB = new Person ("Chris");
1463 Address addressB = new Address ("Y", 4);
1464 Person personC = new Person ("Jackson");
1465 Address addressC = new Address ("Z", 3);
1467 dt.Rows.Add (new object [] { addressA, personA });
1468 dt.Rows.Add (new object [] { addressB, personB });
1470 DataRow dr = dt.Rows [0];
1474 Assert.Fail ("#A1");
1475 } catch (ArgumentException ex) {
1476 // Cannot set Column 'Col0' to be null.
1477 // Please use DBNull instead
1478 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
1479 Assert.IsNull (ex.InnerException, "#A3");
1480 Assert.IsNotNull (ex.Message, "#A4");
1481 Assert.IsTrue (ex.Message.IndexOf ("'Col0'") != -1, "#A5");
1482 Assert.IsTrue (ex.Message.IndexOf ("DBNull") != -1, "#A6");
1485 Assert.AreEqual (addressA, dr [0], "#B1");
1486 Assert.IsFalse (dr.IsNull (0), "#B2");
1487 Assert.AreSame (personA, dr [1], "#B3");
1488 Assert.IsFalse (dr.IsNull (1), "#B4");
1495 Assert.Fail ("#B1");
1496 } catch (ArgumentException ex) {
1497 // Cannot set Column 'Col1' to be null.
1498 // Please use DBNull instead
1499 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
1500 Assert.IsNull (ex.InnerException, "#B3");
1501 Assert.IsNotNull (ex.Message, "#B4");
1502 Assert.IsTrue (ex.Message.IndexOf ("'Col1'") != -1, "#B5");
1503 Assert.IsTrue (ex.Message.IndexOf ("DBNull") != -1, "#B6");
1505 dr [1] = DBNull.Value;
1508 Assert.AreEqual (addressA, dr [0], "#C1");
1509 Assert.IsFalse (dr.IsNull (0), "#C2");
1510 Assert.AreSame (DBNull.Value, dr [1], "#C3");
1511 Assert.IsTrue (dr.IsNull (1), "#C4");
1513 dr [0] = DBNull.Value;
1515 Assert.AreSame (DBNull.Value, dr [0], "#D1");
1516 Assert.IsTrue (dr.IsNull (0), "#D2");
1517 Assert.AreSame (DBNull.Value, dr [1], "#D3");
1518 Assert.IsTrue (dr.IsNull (1), "#D4");
1522 Assert.AreSame (DBNull.Value, dr [0], "#E1");
1523 Assert.IsTrue (dr.IsNull (0), "#E2");
1524 Assert.AreEqual (personC, dr [1], "#E3");
1525 Assert.IsFalse (dr.IsNull (1), "#E4");
1527 Assert.AreSame (DBNull.Value, dr [0], "#E5");
1528 Assert.IsTrue (dr.IsNull (0), "#E6");
1529 Assert.AreEqual (personC, dr [1], "#E7");
1530 Assert.IsFalse (dr.IsNull (1), "#E8");
1532 dr [1] = DBNull.Value;
1534 Assert.AreSame (DBNull.Value, dr [0], "#F1");
1535 Assert.IsTrue (dr.IsNull (0), "#F2");
1536 Assert.AreSame (DBNull.Value, dr [1], "#F3");
1537 Assert.IsTrue (dr.IsNull (1), "#F4");
1540 [Test] // Object this [String]
1541 public void Indexer3 ()
1543 DataTable dt = new DataTable ();
1544 DataColumn dc0 = new DataColumn ("Col0", typeof (Address));
1545 dt.Columns.Add (dc0);
1546 DataColumn dc1 = new DataColumn ("Col1", typeof (Person));
1547 dt.Columns.Add (dc1);
1549 Person personA = new Person ("Miguel");
1550 Address addressA = new Address ("X", 5);
1551 Person personB = new Person ("Chris");
1552 Address addressB = new Address ("Y", 4);
1553 Person personC = new Person ("Jackson");
1554 Address addressC = new Address ("Z", 3);
1556 dt.Rows.Add (new object [] { addressA, personA });
1557 dt.Rows.Add (new object [] { addressB, personB });
1561 Assert.AreEqual (addressA, dr ["Col0"], "#A1");
1562 Assert.AreSame (personA, dr ["Col1"], "#A2");
1565 Assert.AreEqual (addressB, dr ["Col0"], "#B1");
1566 Assert.AreSame (personB, dr ["Col1"], "#B2");
1569 dr ["Col0"] = addressC;
1570 Assert.AreEqual (addressC, dr ["Col0"], "#C1");
1571 Assert.AreSame (personA, dr ["Col1"], "#C2");
1575 dr ["Col1"] = personC;
1576 Assert.AreEqual (addressB, dr ["Col0"], "#D1");
1577 Assert.AreSame (personC, dr ["Col1"], "#D2");
1579 Assert.AreEqual (addressB, dr ["Col0"], "#D3");
1580 Assert.AreSame (personC, dr ["Col1"], "#D4");
1584 dr ["Col0"] = addressB;
1585 Assert.AreEqual (addressB, dr ["Col0"], "#E1");
1586 Assert.AreSame (personA, dr ["Col1"], "#E2");
1588 Assert.AreEqual (addressC, dr ["Col0"], "#E3");
1589 Assert.AreSame (personA, dr ["Col1"], "#E4");
1592 [Test] // Object this [String]
1593 public void Indexer3_ColumnName_Empty ()
1595 DataTable dt = new DataTable ("Persons");
1596 DataColumn dc0 = new DataColumn ("Col0", typeof (Address));
1597 dt.Columns.Add (dc0);
1598 DataColumn dc1 = new DataColumn (string.Empty, typeof (Person));
1599 dt.Columns.Add (dc1);
1601 Person personA = new Person ("Miguel");
1602 Address addressA = new Address ("X", 5);
1603 Person personB = new Person ("Chris");
1605 dt.Rows.Add (new object [] { addressA, personA });
1607 DataRow dr = dt.Rows [0];
1610 object value = dr [string.Empty];
1611 Assert.Fail ("#A1:" + value);
1612 } catch (ArgumentException ex) {
1613 // Column '' does not belong to table Persons
1614 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
1615 Assert.IsNull (ex.InnerException, "#A3");
1616 Assert.IsNotNull (ex.Message, "#A4");
1617 Assert.IsTrue (ex.Message.IndexOf ("''") != -1, "#A5");
1618 Assert.IsTrue (ex.Message.IndexOf ("Persons") != -1, "#A6");
1619 Assert.IsNull (ex.ParamName, "#A7");
1623 dr [string.Empty] = personB;
1624 Assert.Fail ("#B1");
1625 } catch (ArgumentException ex) {
1626 // Column '' does not belong to table Persons
1627 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
1628 Assert.IsNull (ex.InnerException, "#B3");
1629 Assert.IsNotNull (ex.Message, "#B4");
1630 Assert.IsTrue (ex.Message.IndexOf ("''") != -1, "#B5");
1631 Assert.IsTrue (ex.Message.IndexOf ("Persons") != -1, "#B6");
1632 Assert.IsNull (ex.ParamName, "#B7");
1636 [Test] // Object this [String]
1637 public void Indexer3_ColumnName_Null ()
1639 DataTable dt = new DataTable ();
1640 DataColumn dc0 = new DataColumn ("Col0", typeof (Address));
1641 dt.Columns.Add (dc0);
1642 DataColumn dc1 = new DataColumn ("Col1", typeof (Person));
1643 dt.Columns.Add (dc1);
1645 Person personA = new Person ("Miguel");
1646 Address addressA = new Address ("X", 5);
1647 Person personB = new Person ("Chris");
1649 dt.Rows.Add (new object [] { addressA, personA });
1651 DataRow dr = dt.Rows [0];
1654 object value = dr [(string) null];
1655 Assert.Fail ("#A1:" + value);
1656 } catch (ArgumentNullException ex) {
1657 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
1658 Assert.IsNull (ex.InnerException, "#A3");
1659 Assert.IsNotNull (ex.Message, "#A4");
1661 Assert.AreEqual ("name", ex.ParamName, "#A5");
1663 Assert.AreEqual ("key", ex.ParamName, "#A5");
1668 dr [(string) null] = personB;
1669 Assert.Fail ("#B1");
1670 } catch (ArgumentNullException ex) {
1671 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#B2");
1672 Assert.IsNull (ex.InnerException, "#B3");
1673 Assert.IsNotNull (ex.Message, "#B4");
1675 Assert.AreEqual ("name", ex.ParamName, "#B5");
1677 Assert.AreEqual ("key", ex.ParamName, "#B5");
1682 [Test] // Object this [String]
1683 public void Indexer3_Value_Null ()
1685 DataTable dt = new DataTable ();
1686 DataColumn dc0 = new DataColumn ("Col0", typeof (Address));
1687 dt.Columns.Add (dc0);
1688 DataColumn dc1 = new DataColumn ("Col1", typeof (Person));
1689 dt.Columns.Add (dc1);
1691 Person personA = new Person ("Miguel");
1692 Address addressA = new Address ("X", 5);
1693 Person personB = new Person ("Chris");
1694 Address addressB = new Address ("Y", 4);
1695 Person personC = new Person ("Jackson");
1696 Address addressC = new Address ("Z", 3);
1698 dt.Rows.Add (new object [] { addressA, personA });
1699 dt.Rows.Add (new object [] { addressB, personB });
1701 DataRow dr = dt.Rows [0];
1705 Assert.Fail ("#A1");
1706 } catch (ArgumentException ex) {
1707 // Cannot set Column 'Col0' to be null.
1708 // Please use DBNull instead
1709 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
1710 Assert.IsNull (ex.InnerException, "#A3");
1711 Assert.IsNotNull (ex.Message, "#A4");
1712 Assert.IsTrue (ex.Message.IndexOf ("'Col0'") != -1, "#A5");
1713 Assert.IsTrue (ex.Message.IndexOf ("DBNull") != -1, "#A6");
1716 Assert.AreEqual (addressA, dr ["Col0"], "#B1");
1717 Assert.IsFalse (dr.IsNull ("Col0"), "#B2");
1718 Assert.AreSame (personA, dr ["Col1"], "#B3");
1719 Assert.IsFalse (dr.IsNull ("Col1"), "#B4");
1726 Assert.Fail ("#B1");
1727 } catch (ArgumentException ex) {
1728 // Cannot set Column 'Col1' to be null.
1729 // Please use DBNull instead
1730 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
1731 Assert.IsNull (ex.InnerException, "#B3");
1732 Assert.IsNotNull (ex.Message, "#B4");
1733 Assert.IsTrue (ex.Message.IndexOf ("'Col1'") != -1, "#B5");
1734 Assert.IsTrue (ex.Message.IndexOf ("DBNull") != -1, "#B6");
1736 dr ["Col1"] = DBNull.Value;
1739 Assert.AreEqual (addressA, dr ["Col0"], "#C1");
1740 Assert.IsFalse (dr.IsNull ("Col0"), "#C2");
1741 Assert.AreSame (DBNull.Value, dr ["Col1"], "#C3");
1742 Assert.IsTrue (dr.IsNull ("Col1"), "#C4");
1744 dr ["Col0"] = DBNull.Value;
1746 Assert.AreSame (DBNull.Value, dr ["Col0"], "#D1");
1747 Assert.IsTrue (dr.IsNull ("Col0"), "#D2");
1748 Assert.AreSame (DBNull.Value, dr ["Col1"], "#D3");
1749 Assert.IsTrue (dr.IsNull ("Col1"), "#D4");
1751 dr ["Col1"] = personC;
1753 Assert.AreSame (DBNull.Value, dr ["Col0"], "#E1");
1754 Assert.IsTrue (dr.IsNull ("Col0"), "#E2");
1755 Assert.AreEqual (personC, dr ["Col1"], "#E3");
1756 Assert.IsFalse (dr.IsNull ("Col1"), "#E4");
1759 dr ["Col1"] = DBNull.Value;
1761 Assert.AreSame (DBNull.Value, dr ["Col0"], "#F1");
1762 Assert.IsTrue (dr.IsNull ("Col0"), "#F2");
1763 Assert.AreSame (DBNull.Value, dr ["Col1"], "#F3");
1764 Assert.IsTrue (dr.IsNull ("Col1"), "#F4");
1767 [Test] // Object this [DataColumn, DataRowVersion]
1768 public void Indexer4 ()
1770 DataTable dt = new DataTable ();
1771 DataColumn dc0 = new DataColumn ("Col0", typeof (Address));
1772 dt.Columns.Add (dc0);
1773 DataColumn dc1 = new DataColumn ("Col1", typeof (Person));
1774 dt.Columns.Add (dc1);
1776 Person personA = new Person ("Miguel");
1777 Address addressA = new Address ("X", 5);
1778 Person personB = new Person ("Chris");
1779 Address addressB = new Address ("Y", 4);
1780 Person personC = new Person ("Jackson");
1781 Address addressC = new Address ("Z", 3);
1783 dt.Rows.Add (new object [] { addressA, personA });
1784 dt.Rows.Add (new object [] { addressB, personB });
1788 Assert.AreEqual (addressA, dr [dc0, DataRowVersion.Current], "#A1");
1789 Assert.AreEqual (addressA, dr [dc0, DataRowVersion.Default], "#A2");
1790 Assert.IsTrue (AssertNotFound (dr, dc0, DataRowVersion.Original), "#A3");
1791 Assert.IsTrue (AssertNotFound (dr, dc0, DataRowVersion.Proposed), "#A4");
1792 Assert.AreSame (personA, dr [dc1, DataRowVersion.Current], "#A5");
1793 Assert.AreSame (personA, dr [dc1, DataRowVersion.Default], "#A6");
1794 Assert.IsTrue (AssertNotFound (dr, dc1, DataRowVersion.Original), "#A7");
1795 Assert.IsTrue (AssertNotFound (dr, dc1, DataRowVersion.Proposed), "#A8");
1798 Assert.AreEqual (addressB, dr [dc0, DataRowVersion.Current], "#B1");
1799 Assert.AreEqual (addressB, dr [dc0, DataRowVersion.Default], "#B2");
1800 Assert.IsTrue (AssertNotFound (dr, dc0, DataRowVersion.Original), "#B3");
1801 Assert.IsTrue (AssertNotFound (dr, dc0, DataRowVersion.Proposed), "#B4");
1802 Assert.AreSame (personB, dr [dc1, DataRowVersion.Current], "#B5");
1803 Assert.AreSame (personB, dr [dc1, DataRowVersion.Default], "#B6");
1804 Assert.IsTrue (AssertNotFound (dr, dc1, DataRowVersion.Original), "#B7");
1805 Assert.IsTrue (AssertNotFound (dr, dc1, DataRowVersion.Proposed), "#B8");
1808 dr [dc0] = addressC;
1809 Assert.AreEqual (addressC, dr [dc0, DataRowVersion.Current], "#C1");
1810 Assert.AreEqual (addressC, dr [dc0, DataRowVersion.Default], "#C2");
1811 Assert.IsTrue (AssertNotFound (dr, dc0, DataRowVersion.Original), "#C3");
1812 Assert.IsTrue (AssertNotFound (dr, dc0, DataRowVersion.Proposed), "#C4");
1813 Assert.AreSame (personA, dr [dc1, DataRowVersion.Current], "#C5");
1814 Assert.AreSame (personA, dr [dc1, DataRowVersion.Default], "#C6");
1815 Assert.IsTrue (AssertNotFound (dr, dc1, DataRowVersion.Original), "#C7");
1816 Assert.IsTrue (AssertNotFound (dr, dc1, DataRowVersion.Proposed), "#C8");
1821 Assert.AreEqual (addressB, dr [dc0, DataRowVersion.Current], "#D1");
1822 Assert.AreEqual (addressB, dr [dc0, DataRowVersion.Default], "#D2");
1823 Assert.IsTrue (AssertNotFound (dr, dc0, DataRowVersion.Original), "#D3");
1824 Assert.AreEqual (addressB, dr [dc0, DataRowVersion.Proposed], "#D4");
1825 Assert.AreSame (personB, dr [dc1, DataRowVersion.Current], "#D5");
1826 Assert.AreSame (personC, dr [dc1, DataRowVersion.Default], "#D6");
1827 Assert.IsTrue (AssertNotFound (dr, dc1, DataRowVersion.Original), "#D7");
1828 Assert.AreSame (personC, dr [dc1, DataRowVersion.Proposed], "#D8");
1830 Assert.AreEqual (addressB, dr [dc0, DataRowVersion.Current], "#D9");
1831 Assert.AreEqual (addressB, dr [dc0, DataRowVersion.Default], "#D10");
1832 Assert.IsTrue (AssertNotFound (dr, dc0, DataRowVersion.Original), "#D11");
1833 Assert.IsTrue (AssertNotFound (dr, dc0, DataRowVersion.Proposed), "#D12");
1834 Assert.AreSame (personC, dr [dc1, DataRowVersion.Current], "#D13");
1835 Assert.AreSame (personC, dr [dc1, DataRowVersion.Default], "#D14");
1836 Assert.IsTrue (AssertNotFound (dr, dc1, DataRowVersion.Original), "#D15");
1837 Assert.IsTrue (AssertNotFound (dr, dc1, DataRowVersion.Proposed), "#D16");
1838 dr.AcceptChanges ();
1839 Assert.AreEqual (addressB, dr [dc0, DataRowVersion.Current], "#D17");
1840 Assert.AreEqual (addressB, dr [dc0, DataRowVersion.Default], "#D18");
1841 Assert.AreEqual (addressB, dr [dc0, DataRowVersion.Original], "#D19");
1842 Assert.IsTrue (AssertNotFound (dr, dc0, DataRowVersion.Proposed), "#D20");
1843 Assert.AreSame (personC, dr [dc1, DataRowVersion.Current], "#D21");
1844 Assert.AreSame (personC, dr [dc1, DataRowVersion.Default], "#D22");
1845 Assert.AreEqual (personC, dr [dc1, DataRowVersion.Original], "#D23");
1846 Assert.IsTrue (AssertNotFound (dr, dc1, DataRowVersion.Proposed), "#D24");
1850 dr [dc0] = addressA;
1851 Assert.AreEqual (addressC, dr [dc0, DataRowVersion.Current], "#E1");
1852 Assert.AreEqual (addressA, dr [dc0, DataRowVersion.Default], "#E2");
1853 Assert.IsTrue (AssertNotFound (dr, dc0, DataRowVersion.Original), "#E3");
1854 Assert.AreEqual (addressA, dr [dc0, DataRowVersion.Proposed], "#E4");
1855 Assert.AreSame (personA, dr [dc1, DataRowVersion.Current], "#E5");
1856 Assert.AreSame (personA, dr [dc1, DataRowVersion.Default], "#E6");
1857 Assert.IsTrue (AssertNotFound (dr, dc1, DataRowVersion.Original), "#E7");
1858 Assert.AreSame (personA, dr [dc1, DataRowVersion.Proposed], "#E8");
1860 Assert.AreEqual (addressC, dr [dc0, DataRowVersion.Current], "#E9");
1861 Assert.AreEqual (addressC, dr [dc0, DataRowVersion.Default], "#E10");
1862 Assert.IsTrue (AssertNotFound (dr, dc0, DataRowVersion.Original), "#E11");
1863 Assert.IsTrue (AssertNotFound (dr, dc0, DataRowVersion.Proposed), "#E12");
1864 Assert.AreSame (personA, dr [dc1, DataRowVersion.Current], "#E13");
1865 Assert.AreSame (personA, dr [dc1, DataRowVersion.Default], "#E14");
1866 Assert.IsTrue (AssertNotFound (dr, dc1, DataRowVersion.Original), "#E15");
1867 Assert.IsTrue (AssertNotFound (dr, dc1, DataRowVersion.Proposed), "#E16");
1871 public void Indexer4_Column_NotInTable ()
1873 DataTable dtA = new DataTable ("TableA");
1874 DataColumn dcA1 = new DataColumn ("Col0", typeof (Address));
1875 dtA.Columns.Add (dcA1);
1876 DataColumn dcA2 = new DataColumn ("Col1", typeof (Person));
1877 dtA.Columns.Add (dcA2);
1879 DataTable dtB = new DataTable ("TableB");
1880 DataColumn dcB1 = new DataColumn ("Col0", typeof (Address));
1881 dtB.Columns.Add (dcB1);
1882 DataColumn dcB2 = new DataColumn ("Col1", typeof (Person));
1883 dtB.Columns.Add (dcB2);
1885 Person personA = new Person ("Miguel");
1886 Address addressA = new Address ("X", 5);
1888 dtA.Rows.Add (new object [] { addressA, personA });
1889 DataRow dr = dtA.Rows [0];
1892 object value = dr [dcB1, DataRowVersion.Default];
1893 Assert.Fail ("#A1:" + value);
1894 } catch (ArgumentException ex) {
1895 // Column 'Col0' does not belong to table TableA
1896 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
1897 Assert.IsNull (ex.InnerException, "#A3");
1898 Assert.IsNotNull (ex.Message, "#A4");
1899 Assert.IsTrue (ex.Message.IndexOf ("'Col0'") != -1, "#A5");
1900 Assert.IsTrue (ex.Message.IndexOf ("TableA") != -1, "#A6");
1904 object value = dr [new DataColumn ("ZZZ"), DataRowVersion.Default];
1905 Assert.Fail ("#B1:" + value);
1906 } catch (ArgumentException ex) {
1907 // Column 'Col0' does not belong to table TableA
1908 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
1909 Assert.IsNull (ex.InnerException, "#B3");
1910 Assert.IsNotNull (ex.Message, "#B4");
1911 Assert.IsTrue (ex.Message.IndexOf ("'ZZZ'") != -1, "#B5");
1912 Assert.IsTrue (ex.Message.IndexOf ("TableA") != -1, "#B6");
1915 dtA.Columns.Remove (dcA2);
1918 object value = dr [dcA2, DataRowVersion.Default];
1919 Assert.Fail ("#C1:" + value);
1920 } catch (ArgumentException ex) {
1921 // Column 'Col0' does not belong to table TableA
1922 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#C2");
1923 Assert.IsNull (ex.InnerException, "#C3");
1924 Assert.IsNotNull (ex.Message, "#C4");
1925 Assert.IsTrue (ex.Message.IndexOf ("'Col1'") != -1, "#C5");
1926 Assert.IsTrue (ex.Message.IndexOf ("TableA") != -1, "#C6");
1930 [Test] // Object this [DataColumn, DataRowVersion]
1931 public void Indexer4_Column_Null ()
1933 DataTable dt = new DataTable ();
1934 DataColumn dc0 = new DataColumn ("Col0", typeof (Address));
1935 dt.Columns.Add (dc0);
1936 DataColumn dc1 = new DataColumn ("Col1", typeof (Person));
1937 dt.Columns.Add (dc1);
1939 Person personA = new Person ("Miguel");
1940 Address addressA = new Address ("X", 5);
1941 Person personB = new Person ("Chris");
1943 dt.Rows.Add (new object [] { addressA, personA });
1944 DataRow dr = dt.Rows [0];
1947 object value = dr [(DataColumn) null, DataRowVersion.Default];
1948 Assert.Fail ("#1:" + value);
1949 } catch (ArgumentNullException ex) {
1950 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
1951 Assert.IsNull (ex.InnerException, "#3");
1952 Assert.IsNotNull (ex.Message, "#4");
1953 Assert.AreEqual ("column", ex.ParamName, "#5");
1957 [Test] // Object this [DataColumn, DataRowVersion]
1958 public void Indexer4_Version_Invalid ()
1960 DataTable dt = new DataTable ();
1961 DataColumn dc0 = new DataColumn ("Col0", typeof (Address));
1962 dt.Columns.Add (dc0);
1963 DataColumn dc1 = new DataColumn ("Col1", typeof (Person));
1964 dt.Columns.Add (dc1);
1966 Person personA = new Person ("Miguel");
1967 Address addressA = new Address ("X", 5);
1968 Person personB = new Person ("Chris");
1970 dt.Rows.Add (new object [] { addressA, personA });
1971 DataRow dr = dt.Rows [0];
1974 object value = dr [dc0, (DataRowVersion) 666];
1975 Assert.Fail ("#1:" + value);
1976 } catch (DataException ex) {
1977 // Version must be Original, Current, or Proposed
1978 Assert.AreEqual (typeof (DataException), ex.GetType (), "#2");
1979 Assert.IsNull (ex.InnerException, "#3");
1980 Assert.IsNotNull (ex.Message, "#4");
1981 Assert.IsTrue (ex.Message.IndexOf ("Original") != -1, "#5");
1982 Assert.IsTrue (ex.Message.IndexOf ("Current") != -1, "#6");
1983 Assert.IsTrue (ex.Message.IndexOf ("Proposed") != -1, "#7");
1984 Assert.IsFalse (ex.Message.IndexOf ("Default") != -1, "#8");
1988 [Test] // Object this [DataColumn, DataRowVersion]
1989 public void Indexer4_Version_NotFound ()
1991 DataTable dt = new DataTable ();
1992 DataColumn dc0 = new DataColumn ("Col0", typeof (Address));
1993 dt.Columns.Add (dc0);
1994 DataColumn dc1 = new DataColumn ("Col1", typeof (Person));
1995 dt.Columns.Add (dc1);
1997 Person personA = new Person ("Miguel");
1998 Address addressA = new Address ("X", 5);
1999 Person personB = new Person ("Chris");
2001 dt.Rows.Add (new object [] { addressA, personA });
2002 DataRow dr = dt.Rows [0];
2005 object value = dr [dc0, DataRowVersion.Original];
2006 Assert.Fail ("#A1:" + value);
2007 } catch (VersionNotFoundException ex) {
2008 // There is no Original data to access
2009 Assert.AreEqual (typeof (VersionNotFoundException), ex.GetType (), "#A2");
2010 Assert.IsNull (ex.InnerException, "#A3");
2011 Assert.IsNotNull (ex.Message, "#A4");
2012 Assert.IsTrue (ex.Message.IndexOf ("Original") != -1, "#A5");
2016 object value = dr [dc0, DataRowVersion.Proposed];
2017 Assert.Fail ("#B1:" + value);
2018 } catch (VersionNotFoundException ex) {
2019 // There is no Proposed data to access
2020 Assert.AreEqual (typeof (VersionNotFoundException), ex.GetType (), "#B2");
2021 Assert.IsNull (ex.InnerException, "#B3");
2022 Assert.IsNotNull (ex.Message, "#B4");
2023 Assert.IsTrue (ex.Message.IndexOf ("Proposed") != -1, "#B5");
2027 [Test] public void IsNull_ByDataColumn()
2029 DataTable dt = new DataTable();
2030 DataColumn dc0 = new DataColumn("Col0",typeof(int));
2031 DataColumn dc1 = new DataColumn("Col1",typeof(int));
2032 dt.Columns.Add(dc0);
2033 dt.Columns.Add(dc1);
2034 dt.Rows.Add(new object[] {1234});
2035 DataRow dr = dt.Rows[0];
2038 Assert.AreEqual(false , dr.IsNull(dc0) , "DRW85");
2041 Assert.AreEqual(true , dr.IsNull(dc1) , "DRW86");
2044 [Test] public void IsNull_ByDataColumnDataRowVersion()
2046 DataTable dt = new DataTable();
2047 DataColumn dc0 = new DataColumn("Col0",typeof(int));
2048 DataColumn dc1 = new DataColumn("Col1",typeof(int));
2049 dt.Columns.Add(dc0);
2050 dt.Columns.Add(dc1);
2051 dt.Rows.Add(new object[] {1234});
2052 DataRow dr = dt.Rows[0];
2054 // IsNull - col0 Current
2055 Assert.AreEqual(false, dr.IsNull(dc0,DataRowVersion.Current) , "DRW87");
2057 // IsNull - col1 Current
2058 Assert.AreEqual(true, dr.IsNull(dc1,DataRowVersion.Current) , "DRW88");
2060 // IsNull - col0 Default
2061 Assert.AreEqual(false, dr.IsNull(dc0,DataRowVersion.Default) , "DRW89");
2062 // IsNull - col1 Default
2063 Assert.AreEqual(true, dr.IsNull(dc1,DataRowVersion.Default) , "DRW90");
2066 dr[0] = 9; //Change value, Create RowVersion Proposed
2068 // IsNull - col0 Proposed
2069 Assert.AreEqual(false, dr.IsNull(dc0,DataRowVersion.Proposed) , "DRW91");
2070 // IsNull - col1 Proposed
2071 Assert.AreEqual(true, dr.IsNull(dc1,DataRowVersion.Proposed) , "DRW92");
2076 // IsNull - col0 Original
2077 Assert.AreEqual(false, dr.IsNull(dc0,DataRowVersion.Original) , "DRW93");
2080 [Test] public void IsNull_ByIndex()
2082 DataTable dt = new DataTable();
2083 DataColumn dc0 = new DataColumn("Col0",typeof(int));
2084 DataColumn dc1 = new DataColumn("Col1",typeof(int));
2085 dt.Columns.Add(dc0);
2086 dt.Columns.Add(dc1);
2087 dt.Rows.Add(new object[] {1234});
2088 DataRow dr = dt.Rows[0];
2091 Assert.AreEqual(false , dr.IsNull(0) , "DRW94");
2094 Assert.AreEqual(true , dr.IsNull(1) , "DRW95");
2098 public void IsNull_ByName()
2100 DataTable dt = new DataTable();
2101 DataColumn dc0 = new DataColumn("Col0",typeof(int));
2102 DataColumn dc1 = new DataColumn("Col1",typeof(int));
2103 dt.Columns.Add(dc0);
2104 dt.Columns.Add(dc1);
2105 dt.Rows.Add(new object[] {1234});
2106 DataRow dr = dt.Rows[0];
2108 #region --- assignment ----
2110 Assert.AreEqual(false, dr.IsNull("Col0"), "DRW96");
2113 Assert.AreEqual(true, dr.IsNull("Col1"), "DRW97");
2116 #region --- bug 3124 ---
2119 MemoryStream st = new MemoryStream();
2120 StreamWriter sw = new StreamWriter(st);
2121 sw.Write("<?xml version=\"1.0\" standalone=\"yes\"?><NewDataSet>");
2122 sw.Write("<Table><EmployeeNo>9</EmployeeNo></Table>");
2123 sw.Write("</NewDataSet>");
2126 DataSet ds = new DataSet();
2128 // Here we add the expression column
2129 ds.Tables[0].Columns.Add("ValueListValueMember", typeof(object), "EmployeeNo");
2131 foreach( DataRow row in ds.Tables[0].Rows )
2133 Console.WriteLine(row["ValueListValueMember"].ToString() + " " );
2134 if( row.IsNull("ValueListValueMember") == true )
2135 Assert.AreEqual("Failed", "SubTest", "DRW98");
2137 Assert.AreEqual("Passed", "Passed", "DRW99");
2144 public void IsNull_BeforeGetValue ()
2146 DataTable table = new DataTable ();
2148 // add the row, with the value in the column
2149 DataColumn staticColumn = table.Columns.Add ("static", typeof(string), null); // static
2150 DataRow row = table.Rows.Add ("the value");
2151 Assert.IsFalse (row.IsNull ("static"), "static null check failed");
2152 Assert.AreEqual ("the value", row ["static"], "static value check failed");
2154 // add the first derived column
2155 DataColumn firstColumn = table.Columns.Add ("first", typeof(string), "static"); // first -> static
2156 Assert.IsFalse (row.IsNull ("first"), "first level null check failed");
2157 Assert.AreEqual ("the value", row ["first"], "first level value check failed");
2159 // add the second level of related
2160 DataColumn secondColumn = table.Columns.Add ("second", typeof(string), "first"); // second -> first -> static
2161 Assert.IsFalse (row.IsNull ("second"), "second level null check failed");
2162 Assert.AreEqual ("the value", row ["second"], "second level value check failed");
2166 public void IsNull_NullValueArguments ()
2168 DataTable table = new DataTable ();
2170 // add the row, with the value in the column
2171 DataColumn staticColumn = table.Columns.Add ("static", typeof(string), null);
2172 DataRow row = table.Rows.Add ("the value");
2175 row.IsNull ((string)null);
2176 Assert.Fail ("expected an arg null exception for passing a null string");
2177 } catch (ArgumentNullException) {
2178 // do nothing as null columns aren't allowed
2183 Assert.Fail ("expected an arg exception for passing an empty string");
2184 } catch (ArgumentException) {
2185 // do nothing as we can't find a col with no name
2189 row.IsNull (null, DataRowVersion.Default);
2190 Assert.Fail ("null column with version check failed");
2191 } catch (ArgumentNullException) {
2192 // do nothing as null columns aren't allowed
2196 [Test] public void Item()
2198 // init table with columns
2199 DataTable myTable = new DataTable("myTable");
2201 myTable.Columns.Add(new DataColumn("Id",typeof(int)));
2202 myTable.Columns.Add(new DataColumn("Name",typeof(string)));
2203 DataColumn dc = myTable.Columns[0];
2205 myTable.Rows.Add(new object[] {1,"Ofer"});
2206 myTable.Rows.Add(new object[] {2,"Ofer"});
2208 myTable.AcceptChanges();
2210 DataRow myRow = myTable.Rows[0];
2215 Assert.AreEqual(1 , (int)myRow[0] , "DRW100");
2218 Assert.AreEqual(1 , (int)myRow["Id"] , "DRW101");
2221 Assert.AreEqual(1 , (int)myRow[dc] , "DRW102");
2223 // Item - index,Current
2224 Assert.AreEqual(1 , (int)myRow[0,DataRowVersion.Current ] , "DRW103");
2226 // Item - string,Current
2227 Assert.AreEqual(1 , (int)myRow["Id",DataRowVersion.Current] , "DRW104");
2229 // Item - columnn,Current
2230 Assert.AreEqual(1 , (int)myRow[dc,DataRowVersion.Current] , "DRW105");
2235 /*public void testMore()
2237 DataTable dt = DataProvider.CreateParentDataTable();
2238 dt.Rows[0].BeginEdit();
2240 dt.Rows[0].EndEdit();
2244 [Test] public void RejectChanges()
2246 DataTable dt = new DataTable();
2247 DataColumn dc0 = new DataColumn("Col0",typeof(int));
2248 DataColumn dc1 = new DataColumn("Col1",typeof(int));
2249 dt.Columns.Add(dc0);
2250 dt.Columns.Add(dc1);
2251 dt.Rows.Add(new object[] {1234});
2253 DataRow dr = dt.Rows[0];
2259 // RejectChanges - row 0
2260 Assert.AreEqual(1234 , (int)dr[0], "DRW106");
2262 // RejectChanges - row 1
2263 Assert.AreEqual(DBNull.Value , dr[1] , "DRW107");
2268 // RejectChanges - count
2269 Assert.AreEqual(1 , dt.Rows.Count , "DRW108");
2272 [Test] public void RowState()
2274 DataTable myTable = new DataTable("myTable");
2275 DataColumn dc = new DataColumn("Name",typeof(string));
2276 myTable.Columns.Add(dc);
2279 // Create a new DataRow.
2280 myRow = myTable.NewRow();
2285 Assert.AreEqual(DataRowState.Detached , myRow.RowState , "DRW109");
2287 myTable.Rows.Add(myRow);
2291 Assert.AreEqual(DataRowState.Added , myRow.RowState , "DRW110");
2293 myTable.AcceptChanges();
2297 Assert.AreEqual(DataRowState.Unchanged , myRow.RowState , "DRW111");
2299 myRow["Name"] = "Scott";
2303 Assert.AreEqual(DataRowState.Modified , myRow.RowState , "DRW112");
2309 Assert.AreEqual(DataRowState.Deleted , myRow.RowState , "DRW113");
2312 [Test] public void SetColumnError_ByDataColumnError()
2314 string sColErr = "Error!";
2315 DataTable dt = new DataTable("myTable");
2316 DataColumn dc = new DataColumn("Column1");
2318 DataRow dr = dt.NewRow();
2321 Assert.AreEqual(String.Empty, dr.GetColumnError(dc) , "DRW114");
2323 dr.SetColumnError(dc,sColErr );
2326 Assert.AreEqual(sColErr, dr.GetColumnError(dc) , "DRW115");
2329 [Test] public void SetColumnError_ByIndexError()
2331 string sColErr = "Error!";
2332 DataTable dt = new DataTable("myTable");
2333 DataColumn dc = new DataColumn("Column1");
2335 DataRow dr = dt.NewRow();
2338 Assert.AreEqual(String.Empty , dr.GetColumnError(0) , "DRW116");
2340 dr.SetColumnError(0,sColErr );
2343 Assert.AreEqual(sColErr , dr.GetColumnError(0) , "DRW117");
2344 dr.SetColumnError (0, "");
2345 Assert.AreEqual("", dr.GetColumnError (0) , "DRW118");
2348 [Test] public void SetColumnError_ByColumnNameError()
2350 string sColErr = "Error!";
2351 DataTable dt = new DataTable("myTable");
2352 DataColumn dc = new DataColumn("Column1");
2354 DataRow dr = dt.NewRow();
2357 Assert.AreEqual(String.Empty, dr.GetColumnError("Column1") , "DRW118");
2359 dr.SetColumnError("Column1",sColErr );
2362 Assert.AreEqual(sColErr, dr.GetColumnError("Column1") , "DRW119");
2365 [Test] public void SetParentRow_ByDataRow()
2367 DataRow drParent,drChild;
2368 DataRow drArrExcepted,drArrResult;
2369 DataTable dtChild,dtParent;
2370 DataSet ds = new DataSet();
2372 dtChild = DataProvider.CreateChildDataTable();
2373 dtParent= DataProvider.CreateParentDataTable();
2374 //Add tables to dataset
2375 ds.Tables.Add(dtChild);
2376 ds.Tables.Add(dtParent);
2378 DataRelation dRel = new DataRelation("Parent-Child",dtParent.Columns["ParentId"],dtChild.Columns["ParentId"]);
2379 ds.Relations.Add(dRel);
2381 drParent = dtParent.Rows[0];
2382 drChild = dtChild.Select("ParentId=" + drParent["ParentId"])[0];
2384 drChild.SetParentRow(drParent);
2386 //Get Excepted result
2387 drArrExcepted = drParent;
2388 //Get Result DataRowVersion.Current
2389 drArrResult = drChild.GetParentRow("Parent-Child",DataRowVersion.Current);
2392 Assert.AreEqual(drArrExcepted , drArrResult, "DRW120");
2396 public void testMore()
2398 DataSet ds = DataProvider.CreateForigenConstraint();
2399 DataRow drParent = ds.Tables[0].Rows[0];
2400 //DataRow[] drArray = ds.Tables[1].Rows[0].GetParentRows(ds.Tables[1].ParentRelations[0]);
2401 ds.Tables[1].Rows[0].SetParentRow(drParent);
2407 // test SetParentRow
2408 DataTable parent = DataProvider.CreateParentDataTable();
2409 DataTable child = DataProvider.CreateChildDataTable();
2410 DataRow dr = parent.Rows[0];
2412 parent.AcceptChanges();
2414 child.Rows[0].SetParentRow(dr);
2417 public void checkForLoops()
2419 DataSet ds = new DataSet();
2421 DataTable dtChild = DataProvider.CreateChildDataTable();
2422 DataTable dtParent= DataProvider.CreateParentDataTable();
2423 //Add tables to dataset
2424 ds.Tables.Add(dtChild);
2425 ds.Tables.Add(dtParent);
2427 dtChild.Rows.Clear();
2428 dtParent.Rows.Clear();
2430 dtParent.ChildRelations.Add(dtParent.Columns[0],dtChild.Columns[0]);
2431 dtChild.ChildRelations.Add(dtChild.Columns[0],dtParent.Columns[0]);
2433 dtChild.Rows[0].SetParentRow(dtParent.Rows[0]);
2434 dtParent.Rows[0].SetParentRow(dtChild.Rows[0]);
2437 public void checkForLoopsAdvenced()
2440 DataTable dtChild = new DataTable();
2441 dtChild.Columns.Add("Col1",typeof(int));
2442 dtChild.Columns.Add("Col2",typeof(int));
2444 DataRelation drl = new DataRelation("drl1",dtChild.Columns[0],dtChild.Columns[1]);
2445 dtChild.ChildRelations.Add(drl);
2446 dtChild.Rows[0].SetParentRow(dtChild.Rows[1]);
2447 dtChild.Rows[1].SetParentRow(dtChild.Rows[0]);
2450 [Test] public void SetParentRow_ByDataRowDataRelation()
2452 DataRow drParent,drChild;
2453 DataRow drArrExcepted,drArrResult;
2454 DataTable dtChild,dtParent;
2455 DataSet ds = new DataSet();
2457 dtChild = DataProvider.CreateChildDataTable();
2458 dtParent= DataProvider.CreateParentDataTable();
2459 //Add tables to dataset
2460 ds.Tables.Add(dtChild);
2461 ds.Tables.Add(dtParent);
2463 DataRelation dRel = new DataRelation("Parent-Child",dtParent.Columns["ParentId"],dtChild.Columns["ParentId"]);
2464 ds.Relations.Add(dRel);
2466 drParent = dtParent.Rows[0];
2467 drChild = dtChild.Select("ParentId=" + drParent["ParentId"])[0];
2469 drChild.SetParentRow(drParent ,dRel);
2471 //Get Excepted result
2472 drArrExcepted = drParent;
2473 //Get Result DataRowVersion.Current
2474 drArrResult = drChild.GetParentRow("Parent-Child",DataRowVersion.Current);
2477 Assert.AreEqual(drArrExcepted , drArrResult, "DRW121");
2480 [Test] public void Table()
2483 dt2 = new DataTable("myTable");
2484 DataRow dr = dt2.NewRow();
2488 Assert.AreEqual(dt2, dt1 , "DRW122");
2491 [Test] public new void ToString()
2495 dtParent= DataProvider.CreateParentDataTable();
2496 dr = dtParent.Rows[0];
2499 Assert.AreEqual(true, dr.ToString().ToLower().StartsWith("system.data.datarow") , "DRW123");
2502 [Test] public void DataRow_RowError()
2504 DataTable dt = new DataTable ("myTable");
2505 DataRow dr = dt.NewRow ();
2507 Assert.AreEqual ( dr.RowError, string.Empty );
2509 dr.RowError = "Err";
2510 Assert.AreEqual ( dr.RowError , "Err" );
2514 [ExpectedException (typeof (ConstraintException))]
2515 public void DataRow_RowError2()
2517 DataTable dt1 = DataProvider.CreateUniqueConstraint();
2519 dt1.BeginLoadData();
2521 DataRow dr = dt1.NewRow();
2528 [ExpectedException (typeof (ConstraintException))]
2529 public void DataRow_RowError3()
2531 DataSet ds= DataProvider.CreateForigenConstraint();
2532 ds.Tables[0].BeginLoadData();
2533 ds.Tables[0].Rows[0][0] = 10;
2534 ds.Tables[0].EndLoadData(); //Foreign constraint violation
2539 public void TestRowErrors ()
2541 DataTable table = new DataTable ();
2542 DataColumn col1 = table.Columns.Add ("col1", typeof (int));
2543 DataColumn col2 = table.Columns.Add ("col2", typeof (int));
2544 DataColumn col3 = table.Columns.Add ("col3", typeof (int));
2546 col1.AllowDBNull = false;
2547 table.Constraints.Add ("uc", new DataColumn[] {col2,col3}, false);
2548 table.BeginLoadData ();
2549 table.Rows.Add (new object[] {null,1,1});
2550 table.Rows.Add (new object[] {1,1,1});
2552 table.EndLoadData ();
2554 } catch (ConstraintException) {}
2555 Assert.IsTrue (table.HasErrors, "#1");
2556 DataRow[] rows = table.GetErrors ();
2558 Assert.AreEqual (2, rows.Length, "#2");
2559 Assert.AreEqual ("Column 'col1' does not allow DBNull.Value.", table.Rows [0].RowError, "#3");
2560 Assert.AreEqual ("Column 'col2, col3' is constrained to be unique. Value '1, 1' is already present."
2561 , table.Rows [1].RowError, "#4");
2563 Assert.AreEqual (table.Rows [0].RowError, table.Rows [0].GetColumnError (0), "#5");
2564 Assert.AreEqual (table.Rows [1].RowError, table.Rows [0].GetColumnError (1), "#6");
2565 Assert.AreEqual (table.Rows [1].RowError, table.Rows [0].GetColumnError (2), "#7");
2567 Assert.AreEqual ("", table.Rows [1].GetColumnError (0), "#8");
2568 Assert.AreEqual (table.Rows [1].RowError, table.Rows [1].GetColumnError (1), "#9");
2569 Assert.AreEqual (table.Rows [1].RowError, table.Rows [1].GetColumnError (2), "#10");
2573 public void BeginEdit()
2575 DataTable myTable = new DataTable("myTable");
2576 DataColumn dc = new DataColumn("Id",typeof(int));
2578 myTable.Columns.Add(dc);
2579 myTable.Rows.Add(new object[] {1});
2580 myTable.Rows.Add(new object[] {2});
2581 myTable.Rows.Add(new object[] {3});
2583 DataRow myRow = myTable.Rows[0];
2587 myRow[0] = 2; //row[0] now conflict with row[1]
2588 Assert.Fail("DRW121: failed to throw ConstraintException");
2590 catch (ConstraintException) {}
2591 catch (AssertionException exc) {throw exc;}
2592 catch (Exception exc)
2594 Assert.Fail("DRW122: Add. Wrong exception type. Got:" + exc);
2597 //Will NOT! throw exception
2599 myRow[0] = 2; //row[0] now conflict with row[1]
2601 DataTable dt = DataProvider.CreateParentDataTable();
2602 DataRow dr = dt.Rows[0];
2607 Assert.Fail("DRW123: failed to throw DeletedRowInaccessibleException");
2609 catch (DeletedRowInaccessibleException) {}
2610 catch (AssertionException exc) {throw exc;}
2611 catch (Exception exc)
2613 Assert.Fail("DRW124: Add. Wrong exception type. Got:" + exc);
2618 public void GetChildRows_DataRelation()
2621 DataRow[] drArrExcepted,drArrResult;
2622 DataTable dtChild,dtParent;
2623 DataSet ds = new DataSet();
2626 dtChild = DataProvider.CreateChildDataTable();
2627 dtParent= DataProvider.CreateParentDataTable();
2629 //Add tables to dataset
2630 ds.Tables.Add(dtChild);
2631 ds.Tables.Add(dtParent);
2632 dr = dtParent.Rows[0];
2635 DataRelation dRel = new DataRelation("Parent-Child",dtParent.Columns["ParentId"],dtChild.Columns["ParentId"]);
2636 ds.Relations.Add(dRel);
2637 //Get Excepted result
2638 drArrExcepted = dtChild.Select("ParentId=" + dr["ParentId"]);
2640 drArrResult = dr.GetChildRows(dRel);
2642 Assert.AreEqual(drArrExcepted, drArrResult, "DRW125");
2646 public void GetParentRows_DataRelation_DataRowVersion()
2648 DataRow drParent,drChild;
2649 DataRow[] drArrExcepted,drArrResult;
2650 DataTable dtChild,dtParent;
2651 DataSet ds = new DataSet();
2653 dtChild = DataProvider.CreateChildDataTable();
2654 dtParent= DataProvider.CreateParentDataTable();
2655 //Add tables to dataset
2656 ds.Tables.Add(dtChild);
2657 ds.Tables.Add(dtParent);
2659 drParent = dtParent.Rows[0];
2660 drChild = dtChild.Select("ParentId=" + drParent["ParentId"])[0];
2662 //Duplicate several rows in order to create Many to Many relation
2663 dtParent.ImportRow(drParent);
2664 dtParent.ImportRow(drParent);
2665 dtParent.ImportRow(drParent);
2668 DataRelation dRel = new DataRelation("Parent-Child",dtParent.Columns["ParentId"],dtChild.Columns["ParentId"],false);
2669 ds.Relations.Add(dRel);
2671 //Get Excepted result
2672 drArrExcepted = dtParent.Select("ParentId=" + drParent["ParentId"],"",DataViewRowState.CurrentRows );
2673 //Get Result DataRowVersion.Current
2674 drArrResult = drChild.GetParentRows(dRel,DataRowVersion.Current);
2675 Assert.AreEqual(drArrExcepted, drArrResult, "DRW126");
2677 //Get Excepted result
2678 drArrExcepted = dtParent.Select("ParentId=" + drParent["ParentId"],"",DataViewRowState.OriginalRows );
2679 //Get Result DataRowVersion.Current
2680 drArrResult = drChild.GetParentRows(dRel,DataRowVersion.Original );
2681 Assert.AreEqual(drArrExcepted, drArrResult, "DRW127");
2683 //Get Excepted result, in this case Current = Default
2684 drArrExcepted = dtParent.Select("ParentId=" + drParent["ParentId"],"",DataViewRowState.CurrentRows);
2685 //Get Result DataRowVersion.Current
2686 drArrResult = drChild.GetParentRows(dRel,DataRowVersion.Default );
2687 Assert.AreEqual(drArrExcepted, drArrResult, "DRW128");
2691 DataTable dtOtherParent = DataProvider.CreateParentDataTable();
2692 DataTable dtOtherChild = DataProvider.CreateChildDataTable();
2694 DataRelation drl = new DataRelation("newRelation",dtOtherParent.Columns[0],dtOtherChild.Columns[0]);
2695 drChild.GetParentRows(drl,DataRowVersion.Current);
2696 Assert.Fail("DRW129: failed to throw ArgumentException");
2698 catch (ArgumentException) {}
2699 catch (AssertionException exc) {throw exc;}
2700 catch (Exception exc)
2702 Assert.Fail("DRW130: Add. Wrong exception type. Got:" + exc);
2707 public void ItemArray()
2709 DataTable dt = GetDataTable();
2710 DataRow dr = dt.Rows[0];
2712 Assert.AreEqual(1, (int)dr.ItemArray[0] , "DRW131" );
2714 Assert.AreEqual("Ofer", (string)dr.ItemArray[1] , "DRW132" );
2716 dt = GetDataTable();
2720 //Changing row via itemArray
2722 dt.Rows[0].ItemArray = new object[] {2,"Oren"};
2724 Assert.AreEqual(2, (Int32)dr.ItemArray[0] , "DRW133" );
2725 Assert.AreEqual("Oren", (string)dr.ItemArray[1] , "DRW134" );
2729 dt.Rows[0].ItemArray = new object[] {2,"Oren","some1else"};
2730 Assert.Fail("DRW135: failed to throw ArgumentException");
2732 catch (ArgumentException) {}
2733 catch (AssertionException exc) {throw exc;}
2734 catch (Exception exc)
2736 Assert.Fail("DRW136: Add. Wrong exception type. Got:" + exc);
2741 public void ItemArray_NewTable ()
2743 DataTable dt = new DataTable("Customers");
2745 dt.Columns.Add("name", typeof (string));
2746 dt.Columns.Add("address", typeof (string));
2747 dt.Columns.Add("phone", typeof (string));
2749 DataRow dr = dt.NewRow();
2750 dr["name"] = "myName";
2751 dr["address"] = "myAddress";
2752 dr["phone"] = "myPhone";
2754 // Should not throw RowNotInTableException
2755 object[] obj = dr.ItemArray;
2758 private DataTable GetDataTable()
2760 DataTable dt = new DataTable("myTable");
2761 dt.Columns.Add("Id",typeof(int));
2762 dt.Columns.Add("Name",typeof(string));
2764 DataRow dr = dt.NewRow();
2765 dr.ItemArray = new object[] {1,"Ofer"};
2773 public void RowError()
2775 DataTable dt = new DataTable("myTable");
2776 DataRow dr = dt.NewRow();
2778 Assert.AreEqual(string.Empty , dr.RowError, "DRW137");
2780 dr.RowError = "Err";
2782 Assert.AreEqual("Err", dr.RowError , "DRW138" );
2784 DataTable dt1 = DataProvider.CreateUniqueConstraint();
2788 dt1.BeginLoadData();
2794 Assert.Fail("DRW139: failed to throw ConstraintException");
2796 catch (ConstraintException)
2798 Assert.AreEqual(2,dt1.GetErrors().Length,"DRW141");
2799 Assert.AreEqual(true,dt1.GetErrors()[0].RowError.Length > 10,"DRW142");
2800 Assert.AreEqual(true,dt1.GetErrors()[1].RowError.Length > 10,"DRW143");
2802 catch (AssertionException exc) {throw exc;}
2803 catch (Exception exc)
2805 Assert.Fail("DRW144: Wrong exception type. Got:" + exc);
2812 ds= DataProvider.CreateForigenConstraint();
2813 ds.Tables[0].BeginLoadData();
2814 ds.Tables[0].Rows[0][0] = 10; //Forigen constraint violation
2815 //ds.Tables[0].AcceptChanges();
2816 ds.Tables[0].EndLoadData();
2817 Assert.Fail("DRW139: failed to throw ConstraintException");
2819 catch (ConstraintException)
2821 Assert.AreEqual(3,ds.Tables[1].GetErrors().Length,"DRW145");
2822 for(int index=0;index<3;index++)
2824 Assert.AreEqual(true,ds.Tables[1].GetErrors()[index].RowError.Length > 10,"RDW146");
2827 catch (AssertionException exc) {throw exc;}
2828 catch (Exception exc)
2830 Assert.Fail("DRW147: Wrong exception type. Got:" + exc);
2835 public void bug78885 ()
2837 DataSet ds = new DataSet ();
2838 DataTable t = ds.Tables.Add ("table");
2841 id = t.Columns.Add ("userID", Type.GetType ("System.Int32"));
2842 id.AutoIncrement = true;
2843 t.Columns.Add ("name", Type.GetType ("System.String"));
2844 t.Columns.Add ("address", Type.GetType ("System.String"));
2845 t.Columns.Add ("zipcode", Type.GetType ("System.Int32"));
2846 t.PrimaryKey = new DataColumn [] { id };
2849 tempRow = t.NewRow ();
2850 tempRow ["name"] = "Joan";
2851 tempRow ["address"] = "Balmes 152";
2852 tempRow ["zipcode"] = "1";
2853 t.Rows.Add (tempRow);
2855 t.RowChanged += new DataRowChangeEventHandler (RowChangedHandler);
2857 /* neither of the calls to EndEdit below generate a RowChangedHandler on MS. the first one does on mono */
2858 t.DefaultView [0].BeginEdit ();
2859 t.DefaultView [0].EndEdit (); /* this generates a call to the row changed handler */
2860 t.DefaultView [0].EndEdit (); /* this doesn't */
2862 Assert.IsFalse (_rowChanged);
2865 private void RowChangedHandler (object sender, DataRowChangeEventArgs e)
2872 public void SetAdded_test()
2874 DataTable table = new DataTable();
2876 DataRow row = table.NewRow();
2880 } catch (InvalidOperationException e) {
2883 table.Columns.Add("col1", typeof(int));
2884 table.Columns.Add("col2", typeof(int));
2885 table.Columns.Add("col3", typeof(int));
2887 row = table.Rows.Add(new object[] { 1, 2, 3 });
2888 Assert.AreEqual(DataRowState.Added, row.RowState, "#1");
2892 } catch (InvalidOperationException e) {
2894 Assert.AreEqual(DataRowState.Added, row.RowState, "#2");
2896 row.AcceptChanges();
2898 Assert.AreEqual(DataRowState.Modified, row.RowState, "#5");
2902 } catch (InvalidOperationException e) {
2905 row.AcceptChanges();
2906 Assert.AreEqual(DataRowState.Unchanged, row.RowState, "#3");
2908 Assert.AreEqual(DataRowState.Added, row.RowState, "#4");
2912 public void setAdded_testRollback ()
2914 DataTable table = new DataTable ();
2915 table.Columns.Add ("col1", typeof (int));
2916 table.Columns.Add ("col2", typeof (int));
2918 table.Rows.Add (new object[] {1,1});
2919 table.AcceptChanges ();
2921 table.Rows [0].SetAdded ();
2922 table.RejectChanges ();
2923 Assert.AreEqual (0, table.Rows.Count, "#1");
2927 public void SetModified_test()
2929 DataTable table = new DataTable();
2931 DataRow row = table.NewRow();
2934 } catch (InvalidOperationException) {}
2936 table.Columns.Add("col1", typeof(int));
2937 table.Columns.Add("col2", typeof(int));
2938 table.Columns.Add("col3", typeof(int));
2940 row = table.Rows.Add(new object[] { 1, 2, 3 });
2941 Assert.AreEqual(DataRowState.Added, row.RowState, "#1");
2945 } catch (InvalidOperationException e) {
2946 // Never premise English.
2947 //Assert.AreEqual (SetAddedModified_ErrMsg, e.Message, "#2");
2950 row.AcceptChanges();
2952 Assert.AreEqual(DataRowState.Modified, row.RowState, "#5");
2956 } catch (InvalidOperationException e) {
2957 // Never premise English.
2958 //Assert.AreEqual (SetAddedModified_ErrMsg, e.Message, "#2");
2961 row.AcceptChanges();
2962 Assert.AreEqual(DataRowState.Unchanged, row.RowState, "#3");
2964 Assert.AreEqual(DataRowState.Modified, row.RowState, "#4");
2968 public void setModified_testRollback()
2970 DataTable table = new DataTable();
2971 table.Columns.Add("col1", typeof(int));
2972 table.Columns.Add("col2", typeof(int));
2974 DataRow row = table.Rows.Add(new object[] { 1, 1 });
2975 table.AcceptChanges();
2978 Assert.AreEqual(row.RowState, DataRowState.Modified, "#0");
2979 Assert.AreEqual(1, row [0, DataRowVersion.Current], "#1");
2980 Assert.AreEqual(1, row [0, DataRowVersion.Original], "#2");
2981 table.RejectChanges ();
2982 Assert.AreEqual(row.RowState, DataRowState.Unchanged, "#3");
2986 public void DataRowExpressionDefaultValueTest ()
2988 DataSet ds = new DataSet ();
2989 DataTable custTable = ds.Tables.Add ("CustTable");
2991 DataColumn column = new DataColumn ("units", typeof (int));
2992 column.AllowDBNull = false;
2993 column.Caption = "Units";
2994 column.DefaultValue = 1;
2995 custTable.Columns.Add (column);
2997 column = new DataColumn ("price", typeof (decimal));
2998 column.AllowDBNull = false;
2999 column.Caption = "Price";
3000 column.DefaultValue = 25;
3001 custTable.Columns.Add (column);
3003 column = new DataColumn ("total", typeof (string));
3004 column.Caption = "Total";
3005 column.Expression = "price*units";
3006 custTable.Columns.Add (column);
3008 DataRow row = custTable.NewRow ();
3010 Assert.AreEqual (DBNull.Value, row["Total"] , "#1 Should be System.DBNull");
3011 custTable.Rows.Add (row);
3013 Assert.AreEqual ("25", row["Total"] , "#2 Should not be emptry string");
3016 void ColumnChanged (object sender, DataColumnChangeEventArgs e)
3018 _eventsFired.Add (new EventInfo ("ColumnChanged", e));
3021 void ColumnChanging (object sender, DataColumnChangeEventArgs e)
3023 _eventsFired.Add (new EventInfo ("ColumnChanging", e));
3028 public EventInfo (string name, EventArgs args)
3034 public string Name {
3035 get { return name; }
3038 public EventArgs Args {
3039 get { return args; }
3042 private readonly string name;
3043 private readonly EventArgs args;
3046 static bool AssertNotFound (DataRow rc, DataColumn dc, DataRowVersion version)
3049 object value = rc [dc, version];
3051 } catch (VersionNotFoundException) {
3058 public Person (string name)
3064 public Address HomeAddress;
3069 public Address (string street, int houseNumber)
3072 HouseNumber = houseNumber;
3075 public override bool Equals (object o)
3077 if (!(o is Address))
3080 Address address = (Address) o;
3081 if (address.HouseNumber != HouseNumber)
3083 if (address.Street != Street)
3088 public override int GetHashCode ()
3091 return HouseNumber.GetHashCode ();
3092 return (Street.GetHashCode () ^ HouseNumber.GetHashCode ());
3095 public override string ToString ()
3098 return HouseNumber.ToString (CultureInfo.InvariantCulture);
3100 return string.Concat (Street, HouseNumber.ToString (CultureInfo.InvariantCulture));
3103 public string Street;
3104 public int HouseNumber;