1 // DataViewTest.cs - Nunit Test Cases for for testing the DataView
4 // Punit Kumar Todi ( punit_todi@da-iict.org )
5 // Patrick Kalkman kalkman@cistron.nl
6 // Umadevi S (sumadevi@novell.com)
7 // Atsushi Enomoto (atsushi@ximian.com)
8 // Sureshkumar T <tsureshkumar@novell.com>
10 // (C) 2003 Patrick Kalkman
12 // Copyright (C) 2004-2005 Novell, Inc (http://www.novell.com)
14 // Permission is hereby granted, free of charge, to any person obtaining
15 // a copy of this software and associated documentation files (the
16 // "Software"), to deal in the Software without restriction, including
17 // without limitation the rights to use, copy, modify, merge, publish,
18 // distribute, sublicense, and/or sell copies of the Software, and to
19 // permit persons to whom the Software is furnished to do so, subject to
20 // the following conditions:
22 // The above copyright notice and this permission notice shall be
23 // included in all copies or substantial portions of the Software.
25 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
26 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
29 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
30 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
31 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
36 using NUnit.Framework;
39 using System.ComponentModel;
42 namespace MonoTests.System.Data
45 public class DataViewTest : Assertion
51 ListChangedEventArgs listChangedArgs;
52 TextWriter eventWriter;
60 public void GetReady ()
62 dataTable = new DataTable ("itemTable");
63 dc1 = new DataColumn ("itemId");
64 dc2 = new DataColumn ("itemName");
65 dc3 = new DataColumn ("itemPrice");
66 dc4 = new DataColumn ("itemCategory");
68 dataTable.Columns.Add (dc1);
69 dataTable.Columns.Add (dc2);
70 dataTable.Columns.Add (dc3);
71 dataTable.Columns.Add (dc4);
75 rndm = new Random (seed);
76 for (int i = 1; i <= rowCount; i++) {
77 dr = dataTable.NewRow ();
78 dr["itemId"] = "item " + i;
79 dr["itemName"] = "name " + rndm.Next ();
80 dr["itemPrice"] = "Rs. " + (rndm.Next () % 1000);
81 dr["itemCategory"] = "Cat " + ((rndm.Next () % 10) + 1);
82 dataTable.Rows.Add (dr);
84 dataTable.AcceptChanges ();
85 dataView = new DataView (dataTable);
86 dataView.ListChanged += new ListChangedEventHandler (OnListChanged);
87 listChangedArgs = null;
90 protected void OnListChanged (object sender, ListChangedEventArgs args)
92 listChangedArgs = args;
94 /*Console.WriteLine("EventType :: " + listChangedArgs.ListChangedType +
95 " oldIndex :: " + listChangedArgs.OldIndex +
96 " NewIndex :: " + listChangedArgs.NewIndex);*/
100 private void PrintTableOrView (DataTable t, string label)
102 Console.WriteLine ("\n" + label);
103 for (int i = 0; i<t.Rows.Count; i++){
104 foreach (DataColumn dc in t.Columns)
105 Console.Write (t.Rows [i][dc] + "\t");
106 Console.WriteLine ("");
108 Console.WriteLine ();
111 private void PrintTableOrView (DataView dv, string label)
113 Console.WriteLine ("\n" + label);
114 Console.WriteLine ("Sort Key :: " + dv.Sort);
115 for (int i = 0; i < dv.Count; i++) {
116 foreach (DataColumn dc in dv.Table.Columns)
117 Console.Write (dv [i].Row [dc] + "\t");
118 Console.WriteLine ("");
120 Console.WriteLine ();
131 public void DataView ()
133 DataView dv1,dv2,dv3;
134 dv1 = new DataView ();
135 // AssertEquals ("test#01",null,dv1.Table);
136 AssertEquals ("test#02",true,dv1.AllowNew);
137 AssertEquals ("test#03",true,dv1.AllowEdit);
138 AssertEquals ("test#04",true,dv1.AllowDelete);
139 AssertEquals ("test#05",false,dv1.ApplyDefaultSort);
140 AssertEquals ("test#06",string.Empty,dv1.RowFilter);
141 AssertEquals ("test#07",DataViewRowState.CurrentRows,dv1.RowStateFilter);
142 AssertEquals ("test#08",string.Empty,dv1.Sort);
144 dv2 = new DataView (dataTable);
145 AssertEquals ("test#09","itemTable",dv2.Table.TableName);
146 AssertEquals ("test#10",string.Empty,dv2.Sort);
147 AssertEquals ("test#11",false,dv2.ApplyDefaultSort);
148 AssertEquals ("test#12",dataTable.Rows[0],dv2[0].Row);
150 dv3 = new DataView (dataTable,"","itemId DESC",DataViewRowState.CurrentRows);
151 AssertEquals ("test#13","",dv3.RowFilter);
152 AssertEquals ("test#14","itemId DESC",dv3.Sort);
153 AssertEquals ("test#15",DataViewRowState.CurrentRows,dv3.RowStateFilter);
154 //AssertEquals ("test#16",dataTable.Rows.[(dataTable.Rows.Count-1)],dv3[0]);
158 public void TestValue ()
160 DataView TestView = new DataView (dataTable);
161 Assertion.AssertEquals ("Dv #1", "item 1", TestView [0]["itemId"]);
165 public void TestCount ()
167 DataView TestView = new DataView (dataTable);
168 Assertion.AssertEquals ("Dv #3", 5, TestView.Count);
172 public void AllowNew ()
174 AssertEquals ("test#01",true,dataView.AllowNew);
178 public void ApplyDefaultSort ()
180 UniqueConstraint uc = new UniqueConstraint (dataTable.Columns["itemId"]);
181 dataTable.Constraints.Add (uc);
182 dataView.ApplyDefaultSort = true;
183 // dataView.Sort = "itemName";
184 // AssertEquals ("test#01","item 1",dataView[0]["itemId"]);
185 AssertEquals ("test#02",ListChangedType.Reset,listChangedArgs.ListChangedType);
186 // UnComment the line below to see if dataView is sorted
187 // PrintTableOrView (dataView,"* OnApplyDefaultSort");
191 public void RowStateFilter ()
193 dataView.RowStateFilter = DataViewRowState.Deleted;
194 AssertEquals ("test#01",ListChangedType.Reset,listChangedArgs.ListChangedType);
198 public void RowStateFilter_2 ()
200 DataSet dataset = new DataSet ("new");
201 DataTable dt = new DataTable ("table1");
202 dataset.Tables.Add (dt);
203 dt.Columns.Add ("col1");
204 dt.Columns.Add ("col2");
205 dt.Rows.Add (new object [] {1,1});
206 dt.Rows.Add (new object [] {1,2});
207 dt.Rows.Add (new object [] {1,3});
208 dataset.AcceptChanges ();
210 DataView dataView = new DataView (dataset.Tables [0]);
212 // 'new' table in this sample contains 6 records
213 dataView.AllowEdit = true;
214 dataView.AllowDelete = true;
218 dataView [0] ["col1"] = -1;
219 dataView.RowStateFilter = DataViewRowState.ModifiedOriginal;
220 v = dataView [0] [0].ToString ();
221 AssertEquals ("ModifiedOriginal.Count", 1, dataView.Count);
222 AssertEquals ("ModifiedOriginal.Value", "1", v);
226 dataView.RowStateFilter = DataViewRowState.Deleted;
228 v = dataView [0] [0].ToString ();
229 AssertEquals ("Deleted.Count", 1, dataView.Count);
230 AssertEquals ("Deleted.Value", "1", v);
234 public void NullTableGetItemPropertiesTest ()
236 DataView dataview = new DataView ();
237 PropertyDescriptorCollection col = ((ITypedList)dataview).GetItemProperties (null);
238 AssertEquals ("1", 0, col.Count);
243 public void SortListChangedTest ()
245 dataView.Sort = "itemName DESC";
246 AssertEquals ("test#01",ListChangedType.Reset,listChangedArgs.ListChangedType);
247 // UnComment the line below to see if dataView is sorted
248 // PrintTableOrView (dataView);
253 public void SortTestWeirdColumnName ()
255 DataTable dt = new DataTable ();
256 dt.Columns.Add ("id]", typeof (int));
257 dt.Columns.Add ("[id", typeof (int));
259 DataView dv = dt.DefaultView;
261 //dv.Sort = "[id"; // this is not allowed
265 dv.Sort = "[id]] DESC";
266 dv.Sort = "[[id] ASC";
271 public void SortTests ()
273 DataTable dataTable = new DataTable ("itemTable");
274 DataColumn dc1 = new DataColumn ("itemId", typeof(int));
275 DataColumn dc2 = new DataColumn ("itemName", typeof(string));
277 dataTable.Columns.Add (dc1);
278 dataTable.Columns.Add (dc2);
280 dataTable.Rows.Add (new object[2] { 1, "First entry" });
281 dataTable.Rows.Add (new object[2] { 0, "Second entry" });
282 dataTable.Rows.Add (new object[2] { 3, "Third entry" });
283 dataTable.Rows.Add (new object[2] { 2, "Fourth entry" });
285 DataView dataView = dataTable.DefaultView;
287 string s = "Default sorting: ";
288 AssertEquals (s + "First entry has wrong item", 1, dataView[0][0]);
289 AssertEquals (s + "Second entry has wrong item", 0, dataView[1][0]);
290 AssertEquals (s + "Third entry has wrong item", 3, dataView[2][0]);
291 AssertEquals (s + "Fourth entry has wrong item", 2, dataView[3][0]);
293 s = "Ascending sorting 1: ";
294 dataView.Sort = "itemId ASC";
295 AssertEquals (s + "First entry has wrong item", 0, dataView[0][0]);
296 AssertEquals (s + "Second entry has wrong item", 1, dataView[1][0]);
297 AssertEquals (s + "Third entry has wrong item", 2, dataView[2][0]);
298 AssertEquals (s + "Fourth entry has wrong item", 3, dataView[3][0]);
301 s = "Ascending sorting 2: ";
302 dataView.Sort = "itemId ASC";
303 AssertEquals (s + "First entry has wrong item", 0, dataView[0][0]);
304 AssertEquals (s + "Second entry has wrong item", 1, dataView[1][0]);
305 AssertEquals (s + "Third entry has wrong item", 2, dataView[2][0]);
306 AssertEquals (s + "Fourth entry has wrong item", 3, dataView[3][0]);
308 s = "Ascending sorting 3: ";
309 dataView.Sort = "[itemId] ASC";
310 AssertEquals (s + "First entry has wrong item", 0, dataView[0][0]);
311 AssertEquals (s + "Second entry has wrong item", 1, dataView[1][0]);
312 AssertEquals (s + "Third entry has wrong item", 2, dataView[2][0]);
313 AssertEquals (s + "Fourth entry has wrong item", 3, dataView[3][0]);
315 s = "Ascending sorting 4: ";
316 dataView.Sort = "[itemId] ASC";
317 AssertEquals (s + "First entry has wrong item", 0, dataView[0][0]);
318 AssertEquals (s + "Second entry has wrong item", 1, dataView[1][0]);
319 AssertEquals (s + "Third entry has wrong item", 2, dataView[2][0]);
320 AssertEquals (s + "Fourth entry has wrong item", 3, dataView[3][0]);
322 s = "Ascending sorting 5: ";
324 dataView.Sort = "itemId \tASC";
325 AssertEquals (s + "Tab cannot be a separator" , true, false);
326 }catch (IndexOutOfRangeException e) {
329 s = "Descending sorting : ";
330 dataView.Sort = "itemId DESC";
331 AssertEquals (s + "First entry has wrong item", 3, dataView[0][0]);
332 AssertEquals (s + "Second entry has wrong item", 2, dataView[1][0]);
333 AssertEquals (s + "Third entry has wrong item", 1, dataView[2][0]);
334 AssertEquals (s + "Fourth entry has wrong item", 0, dataView[3][0]);
336 s = "Reverted to default sorting: ";
337 dataView.Sort = null;
338 AssertEquals (s + "First entry has wrong item", 1, dataView[0][0]);
339 AssertEquals (s + "Second entry has wrong item", 0, dataView[1][0]);
340 AssertEquals (s + "Third entry has wrong item", 3, dataView[2][0]);
341 AssertEquals (s + "Fourth entry has wrong item", 2, dataView[3][0]);
344 #endregion // Sort Tests
347 [ExpectedException(typeof(DataException))]
348 public void AddNew_1 ()
350 dataView.AllowNew = false;
351 DataRowView drv = dataView.AddNew ();
355 public void AddNew_2 ()
357 dataView.AllowNew = true;
358 DataRowView drv = dataView.AddNew ();
359 AssertEquals ("test#01",ListChangedType.ItemAdded,listChangedArgs.ListChangedType);
360 AssertEquals ("test#02",-1,listChangedArgs.OldIndex);
361 AssertEquals ("test#03",5,listChangedArgs.NewIndex);
362 AssertEquals ("test#04",drv["itemName"],dataView [dataView.Count - 1]["itemName"]);
363 listChangedArgs = null;
364 drv["itemId"] = "item " + 1001;
365 drv["itemName"] = "name " + rndm.Next();
366 drv["itemPrice"] = "Rs. " + (rndm.Next() % 1000);
367 drv["itemCategory"] = "Cat " + ((rndm.Next() % 10) + 1);
368 // Actually no events are arisen when items are set.
369 AssertNull ("test#05", listChangedArgs);
371 AssertEquals ("test#06",ListChangedType.ItemDeleted,listChangedArgs.ListChangedType);
372 AssertEquals ("test#07",-1,listChangedArgs.OldIndex);
373 AssertEquals ("test#08",5,listChangedArgs.NewIndex);
377 public void BeginInit ()
379 DataTable table = new DataTable ("table");
380 DataView dv = new DataView ();
381 DataColumn col1 = new DataColumn ("col1");
382 DataColumn col2 = new DataColumn ("col2");
386 table.Columns.AddRange (new DataColumn[] {col1,col2});
389 AssertNull ("#1", dv.Table);
392 AssertEquals ("#2", table, dv.Table);
393 AssertEquals ("#3", 0, table.Columns.Count);
396 AssertEquals ("#4", 2, table.Columns.Count);
400 private bool dvInitialized;
401 private void OnDataViewInitialized (object src, EventArgs args)
403 dvInitialized = true;
406 public void BeginInit2 ()
408 DataTable table = new DataTable ("table");
409 DataView dv = new DataView ();
410 DataColumn col1 = new DataColumn ("col1");
411 DataColumn col2 = new DataColumn ("col2");
413 dvInitialized = false;
415 dv.Initialized += new EventHandler (OnDataViewInitialized);
419 table.Columns.AddRange (new DataColumn[] {col1,col2});
422 AssertNull ("#1", dv.Table);
425 dv.Initialized -= new EventHandler (OnDataViewInitialized);
427 AssertEquals ("#2", table, dv.Table);
428 AssertEquals ("#3", 0, table.Columns.Count);
431 AssertEquals ("#4", 2, table.Columns.Count);
432 AssertEquals("DataViewInitialized #5", dvInitialized, true);
437 [ExpectedException(typeof(ArgumentException))]
438 public void Find_1 ()
440 /* since the sort key is not specified. Must raise a ArgumentException */
441 int sIndex = dataView.Find ("abc");
445 public void Find_2 ()
449 randInt = rndm.Next () % rowCount;
450 dataView.Sort = "itemId";
451 drv = dataView [randInt];
452 AssertEquals ("test#01",randInt,dataView.Find (drv ["itemId"]));
454 dataView.Sort = "itemId DESC";
455 drv = dataView [randInt];
456 AssertEquals ("test#02",randInt,dataView.Find (drv ["itemId"]));
458 dataView.Sort = "itemId, itemName";
459 drv = dataView [randInt];
460 object [] keys = new object [2];
461 keys [0] = drv ["itemId"];
462 keys [1] = drv ["itemName"];
463 AssertEquals ("test#03",randInt,dataView.Find (keys));
465 dataView.Sort = "itemId";
466 AssertEquals ("test#04",-1,dataView.Find("no item"));
471 [ExpectedException (typeof (ArgumentException))]
473 [NUnit.Framework.Category ("NotWorking")] // defect 5446
475 public void Find_3 ()
477 dataView.Sort = "itemID, itemName";
478 /* expecting order key count mismatch */
479 dataView.Find ("itemValue");
483 [Ignore("Test code not implemented")]
484 public void GetEnumerator ()
490 public void ToStringTest ()
492 AssertEquals ("test#01","System.Data.DataView",dataView.ToString());
496 public void TestingEventHandling ()
498 dataView.Sort = "itemId";
500 dr = dataTable.NewRow ();
501 dr ["itemId"] = "item 0";
502 dr ["itemName"] = "name " + rndm.Next ();
503 dr ["itemPrice"] = "Rs. " + (rndm.Next () % 1000);
504 dr ["itemCategory"] = "Cat " + ((rndm.Next () % 10) + 1);
505 dataTable.Rows.Add(dr);
507 //PrintTableOrView(dataView, "ItemAdded");
508 AssertEquals ("test#01",ListChangedType.ItemAdded,listChangedArgs.ListChangedType);
509 listChangedArgs = null;
511 dr ["itemId"] = "aitem 0";
512 // PrintTableOrView(dataView, "ItemChanged");
513 AssertEquals ("test#02",ListChangedType.ItemChanged,listChangedArgs.ListChangedType);
514 listChangedArgs = null;
516 dr ["itemId"] = "zitem 0";
517 // PrintTableOrView(dataView, "ItemMoved");
518 AssertEquals ("test#03",ListChangedType.ItemMoved,listChangedArgs.ListChangedType);
519 listChangedArgs = null;
521 dataTable.Rows.Remove (dr);
522 // PrintTableOrView(dataView, "ItemDeleted");
523 AssertEquals ("test#04",ListChangedType.ItemDeleted,listChangedArgs.ListChangedType);
525 listChangedArgs = null;
526 DataColumn dc5 = new DataColumn ("itemDesc");
527 dataTable.Columns.Add (dc5);
528 // PrintTableOrView(dataView, "PropertyDescriptorAdded");
529 AssertEquals ("test#05",ListChangedType.PropertyDescriptorAdded,listChangedArgs.ListChangedType);
531 listChangedArgs = null;
532 dc5.ColumnName = "itemDescription";
533 // PrintTableOrView(dataView, "PropertyDescriptorChanged");
534 // AssertEquals ("test#06",ListChangedType.PropertyDescriptorChanged,listChangedArgs.ListChangedType);
536 listChangedArgs = null;
537 dataTable.Columns.Remove (dc5);
538 // PrintTableOrView(dataView, "PropertyDescriptorDeleted");
539 AssertEquals ("test#07",ListChangedType.PropertyDescriptorDeleted,listChangedArgs.ListChangedType);
543 public void TestFindRows ()
545 DataView TestView = new DataView (dataTable);
546 TestView.Sort = "itemId";
547 DataRowView[] Result = TestView.FindRows ("item 3");
548 Assertion.AssertEquals ("Dv #1", 1, Result.Length);
549 Assertion.AssertEquals ("Dv #2", "item 3", Result [0]["itemId"]);
553 [ExpectedException (typeof (ArgumentException))]
554 public void FindRowsWithoutSort ()
556 DataTable dt = new DataTable ("table");
557 dt.Columns.Add ("col1");
558 dt.Columns.Add ("col2");
559 dt.Columns.Add ("col3");
560 dt.Rows.Add (new object [] {1,2,3});
561 dt.Rows.Add (new object [] {4,5,6});
562 dt.Rows.Add (new object [] {4,7,8});
563 dt.Rows.Add (new object [] {5,7,8});
564 dt.Rows.Add (new object [] {4,8,9});
565 DataView dv = new DataView (dt);
570 [ExpectedException (typeof (ArgumentException))]
571 public void FindRowsInconsistentKeyLength ()
573 DataTable dt = new DataTable ("table");
574 dt.Columns.Add ("col1");
575 dt.Columns.Add ("col2");
576 dt.Columns.Add ("col3");
577 dt.Rows.Add (new object [] {1,2,3});
578 dt.Rows.Add (new object [] {4,5,6});
579 dt.Rows.Add (new object [] {4,7,8});
580 dt.Rows.Add (new object [] {5,7,8});
581 dt.Rows.Add (new object [] {4,8,9});
582 DataView dv = new DataView (dt, null, "col1",
583 DataViewRowState.CurrentRows);
584 dv.FindRows (new object [] {1, 2, 3});
588 [ExpectedException (typeof (DeletedRowInaccessibleException))]
589 public void TestDelete ()
591 DataView TestView = new DataView (dataTable);
593 DataRow r = TestView.Table.Rows [0];
594 Assertion.Assert ("Dv #1", !((string)r ["itemId"] == "item 1"));
598 [ExpectedException (typeof (IndexOutOfRangeException))]
599 public void TestDeleteOutOfBounds ()
601 DataView TestView = new DataView (dataTable);
602 TestView.Delete (100);
606 [ExpectedException (typeof (DataException))]
607 public void TestDeleteNotAllowed ()
609 DataView TestView = new DataView (dataTable);
610 TestView.AllowDelete = false;
615 [ExpectedException (typeof (DataException))]
616 public void TestDeleteClosed ()
618 DataView TestView = new DataView (dataTable);
619 TestView.Dispose (); // Close the table
623 [Test] // based on bug #74631
624 public void TestDeleteAndCount ()
626 DataSet dataset = new DataSet ("new");
627 DataTable dt = new DataTable ("table1");
628 dataset.Tables.Add (dt);
629 dt.Columns.Add ("col1");
630 dt.Columns.Add ("col2");
631 dt.Rows.Add (new object []{1,1});
632 dt.Rows.Add (new object []{1,2});
633 dt.Rows.Add (new object []{1,3});
635 DataView dataView = new DataView (dataset.Tables[0]);
637 AssertEquals ("before delete", 3, dataView.Count);
638 dataView.AllowDelete = true;
640 // Deleting the first row
643 AssertEquals ("before delete", 2, dataView.Count);
647 public void ListChangeOnSetItem ()
649 DataTable dt = new DataTable ("table");
650 dt.Columns.Add ("col1");
651 dt.Columns.Add ("col2");
652 dt.Columns.Add ("col3");
653 dt.Rows.Add (new object [] {1, 2, 3});
655 DataView dv = new DataView (dt);
656 dv.ListChanged += new ListChangedEventHandler (OnChange);
660 ListChangedEventArgs ListChangeArgOnSetItem;
662 void OnChange (object o, ListChangedEventArgs e)
664 if (ListChangeArgOnSetItem != null)
665 throw new Exception ("The event is already fired.");
666 ListChangeArgOnSetItem = e;
670 public void CancelEditAndEvents ()
672 string reference = " =====ItemAdded:3 ------4 =====ItemAdded:3 =====ItemAdded:4 ------5 =====ItemAdded:4 =====ItemAdded:5 ------6 =====ItemDeleted:5 ------5 =====ItemAdded:5";
674 eventWriter = new StringWriter ();
676 DataTable dt = new DataTable ();
677 dt.Columns.Add ("col1");
678 dt.Columns.Add ("col2");
679 dt.Columns.Add ("col3");
680 dt.Rows.Add (new object [] {1,2,3});
681 dt.Rows.Add (new object [] {1,2,3});
682 dt.Rows.Add (new object [] {1,2,3});
684 DataView dv = new DataView (dt);
685 dv.ListChanged += new ListChangedEventHandler (ListChanged);
686 DataRowView a1 = dv.AddNew ();
687 eventWriter.Write (" ------" + dv.Count);
688 // I wonder why but MS fires another event here.
690 eventWriter.Write (" ------" + dv.Count);
691 // I wonder why but MS fires another event here.
692 DataRowView a2 = dv.AddNew ();
693 eventWriter.Write (" ------" + dv.Count);
695 eventWriter.Write (" ------" + dv.Count);
696 DataRowView a3 = dv.AddNew ();
698 AssertEquals (reference, eventWriter.ToString ());
702 public void ColumnChangeName ()
704 string result = @"setting table...
705 ---- OnListChanged PropertyDescriptorChanged,0,0
706 ----- UpdateIndex : True
707 ---- OnListChanged Reset,-1,-1
709 ---- OnListChanged PropertyDescriptorChanged,0,0
712 eventWriter = new StringWriter ();
714 ComplexEventSequence1View dv =
715 new ComplexEventSequence1View (dataTable, eventWriter);
717 dc2.ColumnName = "new_column_name";
719 AssertEquals (result, eventWriter.ToString ().Replace ("\r\n", "\n"));
722 private void ListChanged (object o, ListChangedEventArgs e)
724 eventWriter.Write (" =====" + e.ListChangedType + ":" + e.NewIndex);
728 [NUnit.Framework.Category ("NotWorking")]
729 public void ComplexEventSequence2 ()
731 string result = @"setting table...
732 ---- OnListChanged PropertyDescriptorChanged,0,0
733 ----- UpdateIndex : True
734 ---- OnListChanged Reset,-1,-1
736 ---- OnListChanged PropertyDescriptorAdded,0,0
738 ---- OnListChanged PropertyDescriptorAdded,0,0
740 ---- OnListChanged PropertyDescriptorAdded,0,0
742 ---- OnListChanged Reset,-1,-1
743 added tables to dataset
744 ---- OnListChanged PropertyDescriptorAdded,0,0
746 ---- OnListChanged PropertyDescriptorAdded,0,0
748 ---- OnListChanged PropertyDescriptorDeleted,0,0
752 eventWriter = new StringWriter ();
754 DataSet ds = new DataSet ();
755 DataTable dt = new DataTable ("table");
756 DataTable dt2 = new DataTable ("table2");
757 ComplexEventSequence1View dv =
758 new ComplexEventSequence1View (dt, eventWriter);
759 dt.Columns.Add ("col1");
760 eventWriter.WriteLine (" col1 added.");
761 dt.Columns.Add ("col2");
762 eventWriter.WriteLine (" col2 added.");
763 dt.Columns.Add ("col3");
764 eventWriter.WriteLine (" col3 added.");
766 dt2.Columns.Add ("col1");
767 dt2.Columns.Add ("col2");
768 dt2.Columns.Add ("col3");
773 eventWriter.WriteLine ("added tables to dataset");
774 ds.Relations.Add ("Relation", dt.Columns ["col1"], dt2.Columns ["col1"]);
775 eventWriter.WriteLine ("added relation 1");
777 DataRelation dr = ds.Relations.Add ("Relation2", dt2.Columns ["col2"], dt.Columns ["col2"]);
778 eventWriter.WriteLine ("added relation 2");
780 ds.Relations.Remove (dr);
781 eventWriter.WriteLine ("removed relation 2");
783 AssertEquals (result, eventWriter.ToString ().Replace ("\r\n", "\n"));
787 [NUnit.Framework.Category ("NotWorking")]
788 public void ComplexEventSequence1 ()
790 string result = @"setting table...
791 ---- OnListChanged PropertyDescriptorChanged,0,0
792 ----- UpdateIndex : True
793 ---- OnListChanged Reset,-1,-1
795 ---- OnListChanged PropertyDescriptorAdded,0,0
797 ---- OnListChanged PropertyDescriptorAdded,0,0
799 ---- OnListChanged PropertyDescriptorAdded,0,0
802 ----- UpdateIndex : True
803 ---- OnListChanged Reset,-1,-1
805 ---- OnListChanged PropertyDescriptorDeleted,0,0
807 ----- UpdateIndex : True
808 ---- OnListChanged Reset,-1,-1
810 ----- UpdateIndex : True
811 ---- OnListChanged Reset,-1,-1
812 rowstatefilter changed.
813 ----- UpdateIndex : True
814 ---- OnListChanged Reset,-1,-1
815 rowstatefilter changed.
816 ---- OnListChanged ItemAdded,0,-1
818 ---- OnListChanged ItemAdded,0,-1
820 ---- OnListChanged ItemAdded,0,-1
822 ---- OnListChanged ItemAdded,3,-1
825 ---- OnListChanged ItemDeleted,3,-1
826 ---- OnListChanged ItemMoved,-2147483648,3
829 ---- OnListChanged ItemMoved,0,-2147483648
830 value changed to appear.
832 ---- OnListChanged ItemMoved,3,0
835 ---- OnListChanged ItemMoved,1,3
838 ---- OnListChanged PropertyDescriptorChanged,0,0
839 ----- UpdateIndex : True
840 ---- OnListChanged Reset,-1,-1
844 eventWriter = new StringWriter ();
846 DataTable dt = new DataTable ("table");
847 ComplexEventSequence1View dv =
848 new ComplexEventSequence1View (dt, eventWriter);
849 dt.Columns.Add ("col1");
850 eventWriter.WriteLine (" col1 added.");
851 dt.Columns.Add ("col2");
852 eventWriter.WriteLine (" col2 added.");
853 dt.Columns.Add ("col3");
854 eventWriter.WriteLine (" col3 added.");
855 dt.Constraints.Add (new UniqueConstraint (dt.Columns [0]));
856 eventWriter.WriteLine (" uniq added.");
858 eventWriter.WriteLine (" sort changed.");
859 dt.Columns.Remove ("col3");
860 eventWriter.WriteLine (" col3 removed.");
861 dv.RowFilter = "col1 <> 0";
862 eventWriter.WriteLine (" rowfilter changed.");
863 dv.RowStateFilter = DataViewRowState.Deleted;
864 eventWriter.WriteLine (" rowstatefilter changed.");
865 // FIXME: should be also tested.
866 // dv.ApplyDefaultSort = true;
867 // eventWriter.WriteLine (" apply default sort changed.");
868 dv.RowStateFilter = DataViewRowState.CurrentRows;
869 eventWriter.WriteLine (" rowstatefilter changed.");
870 dt.Rows.Add (new object [] {1, 3});
871 eventWriter.WriteLine (" added row to Rows.");
872 dt.Rows.Add (new object [] {2, 2});
873 eventWriter.WriteLine (" added row to Rows.");
874 dt.Rows.Add (new object [] {3, 1});
875 eventWriter.WriteLine (" added row to Rows.");
876 DataRowView drv = dv.AddNew ();
877 eventWriter.WriteLine (" AddNew() invoked.");
878 eventWriter.WriteLine (dv.Count);
881 eventWriter.WriteLine (" EndEdit() invoked.");
882 eventWriter.WriteLine (dv.Count);
883 dt.Rows [dt.Rows.Count - 1] [0] = 4;
884 eventWriter.WriteLine (" value changed to appear.");
885 eventWriter.WriteLine (dv.Count);
886 dt.Rows [dt.Rows.Count - 1] [1] = 4;
887 eventWriter.WriteLine (" value moved.");
888 eventWriter.WriteLine (dv.Count);
889 dt.Rows [dt.Rows.Count - 1] [1] = 1.5;
890 eventWriter.WriteLine (" value moved again.");
891 eventWriter.WriteLine (dv.Count);
892 dv.Table = new DataTable ("table2");
893 eventWriter.WriteLine ("table changed.");
895 AssertEquals (result, eventWriter.ToString ().Replace ("\r\n", "\n"));
899 public void DefaultColumnNameAddListChangedTest ()
902 string result = @"setting table...
903 ---- OnListChanged PropertyDescriptorChanged,0,0
904 ----- UpdateIndex : True
905 ---- OnListChanged Reset,-1,-1
907 ---- OnListChanged PropertyDescriptorAdded,0,0
908 default named column added.
909 ---- OnListChanged PropertyDescriptorAdded,0,0
910 non-default named column added.
911 ---- OnListChanged PropertyDescriptorAdded,0,0
912 another default named column added (Column2).
913 ---- OnListChanged PropertyDescriptorAdded,0,0
914 add a column with the same name as the default columnnames.
915 ---- OnListChanged PropertyDescriptorAdded,0,0
916 add a column with a null name.
917 ---- OnListChanged PropertyDescriptorAdded,0,0
918 add a column with an empty name.
921 string result = @"setting table...
922 ---- OnListChanged PropertyDescriptorChanged,0,0
923 ----- UpdateIndex : True
924 ---- OnListChanged Reset,-1,-1
926 ---- OnListChanged PropertyDescriptorChanged,0,0
927 ---- OnListChanged PropertyDescriptorAdded,0,0
928 default named column added.
929 ---- OnListChanged PropertyDescriptorAdded,0,0
930 non-default named column added.
931 ---- OnListChanged PropertyDescriptorChanged,0,0
932 ---- OnListChanged PropertyDescriptorAdded,0,0
933 another default named column added (Column2).
934 ---- OnListChanged PropertyDescriptorAdded,0,0
935 add a column with the same name as the default columnnames.
936 ---- OnListChanged PropertyDescriptorChanged,0,0
937 ---- OnListChanged PropertyDescriptorAdded,0,0
938 add a column with a null name.
939 ---- OnListChanged PropertyDescriptorChanged,0,0
940 ---- OnListChanged PropertyDescriptorAdded,0,0
941 add a column with an empty name.
944 eventWriter = new StringWriter ();
945 DataTable dt = new DataTable ("table");
946 ComplexEventSequence1View dv =
947 new ComplexEventSequence1View (dt, eventWriter);
949 eventWriter.WriteLine (" default named column added.");
950 dt.Columns.Add ("non-defaultNamedColumn");
951 eventWriter.WriteLine (" non-default named column added.");
952 DataColumn c = dt.Columns.Add ();
953 eventWriter.WriteLine (" another default named column added ({0}).", c.ColumnName);
954 dt.Columns.Add ("Column3");
955 eventWriter.WriteLine (" add a column with the same name as the default columnnames.");
956 dt.Columns.Add ((string)null);
957 eventWriter.WriteLine (" add a column with a null name.");
959 eventWriter.WriteLine (" add a column with an empty name.");
961 AssertEquals (result, eventWriter.ToString ().Replace ("\r\n", "\n"));
964 public class ComplexEventSequence1View : DataView
968 public ComplexEventSequence1View (DataTable dt,
969 TextWriter w) : base ()
972 w.WriteLine ("setting table...");
974 w.WriteLine ("table was set.");
977 protected override void OnListChanged (ListChangedEventArgs e)
980 w.WriteLine ("---- OnListChanged " + e.ListChangedType + "," + e.NewIndex + "," + e.OldIndex);
981 base.OnListChanged (e);
984 protected override void UpdateIndex (bool force)
987 w.WriteLine ("----- UpdateIndex : " + force);
988 base.UpdateIndex (force);