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 [ExpectedException (typeof (DataException))]
132 public void TestSortWithoutTable ()
134 DataView dv = new DataView ();
135 dv.Table = new DataTable ();
140 public void TestSort ()
142 DataView dv = new DataView ();
143 dv.Table = new DataTable ("dummy");
144 dv.Table.Columns.Add ("abc");
146 dv.Sort = string.Empty;
148 AssertEquals ("test#01", "abc", dv.Sort);
152 public void DataView ()
154 DataView dv1,dv2,dv3;
155 dv1 = new DataView ();
156 // AssertEquals ("test#01",null,dv1.Table);
157 AssertEquals ("test#02",true,dv1.AllowNew);
158 AssertEquals ("test#03",true,dv1.AllowEdit);
159 AssertEquals ("test#04",true,dv1.AllowDelete);
160 AssertEquals ("test#05",false,dv1.ApplyDefaultSort);
161 AssertEquals ("test#06",string.Empty,dv1.RowFilter);
162 AssertEquals ("test#07",DataViewRowState.CurrentRows,dv1.RowStateFilter);
163 AssertEquals ("test#08",string.Empty,dv1.Sort);
165 dv2 = new DataView (dataTable);
166 AssertEquals ("test#09","itemTable",dv2.Table.TableName);
167 AssertEquals ("test#10",string.Empty,dv2.Sort);
168 AssertEquals ("test#11",false,dv2.ApplyDefaultSort);
169 AssertEquals ("test#12",dataTable.Rows[0],dv2[0].Row);
171 dv3 = new DataView (dataTable,"","itemId DESC",DataViewRowState.CurrentRows);
172 AssertEquals ("test#13","",dv3.RowFilter);
173 AssertEquals ("test#14","itemId DESC",dv3.Sort);
174 AssertEquals ("test#15",DataViewRowState.CurrentRows,dv3.RowStateFilter);
175 //AssertEquals ("test#16",dataTable.Rows.[(dataTable.Rows.Count-1)],dv3[0]);
179 public void TestValue ()
181 DataView TestView = new DataView (dataTable);
182 Assertion.AssertEquals ("Dv #1", "item 1", TestView [0]["itemId"]);
186 public void TestCount ()
188 DataView TestView = new DataView (dataTable);
189 Assertion.AssertEquals ("Dv #3", 5, TestView.Count);
193 public void AllowNew ()
195 AssertEquals ("test#01",true,dataView.AllowNew);
199 public void ApplyDefaultSort ()
201 UniqueConstraint uc = new UniqueConstraint (dataTable.Columns["itemId"]);
202 dataTable.Constraints.Add (uc);
203 dataView.ApplyDefaultSort = true;
204 // dataView.Sort = "itemName";
205 // AssertEquals ("test#01","item 1",dataView[0]["itemId"]);
206 AssertEquals ("test#02",ListChangedType.Reset,listChangedArgs.ListChangedType);
207 // UnComment the line below to see if dataView is sorted
208 // PrintTableOrView (dataView,"* OnApplyDefaultSort");
212 public void RowStateFilter ()
214 dataView.RowStateFilter = DataViewRowState.Deleted;
215 AssertEquals ("test#01",ListChangedType.Reset,listChangedArgs.ListChangedType);
219 public void RowStateFilter_2 ()
221 DataSet dataset = new DataSet ("new");
222 DataTable dt = new DataTable ("table1");
223 dataset.Tables.Add (dt);
224 dt.Columns.Add ("col1");
225 dt.Columns.Add ("col2");
226 dt.Rows.Add (new object [] {1,1});
227 dt.Rows.Add (new object [] {1,2});
228 dt.Rows.Add (new object [] {1,3});
229 dataset.AcceptChanges ();
231 DataView dataView = new DataView (dataset.Tables [0]);
233 // 'new' table in this sample contains 6 records
234 dataView.AllowEdit = true;
235 dataView.AllowDelete = true;
239 dataView [0] ["col1"] = -1;
240 dataView.RowStateFilter = DataViewRowState.ModifiedOriginal;
241 v = dataView [0] [0].ToString ();
242 AssertEquals ("ModifiedOriginal.Count", 1, dataView.Count);
243 AssertEquals ("ModifiedOriginal.Value", "1", v);
247 dataView.RowStateFilter = DataViewRowState.Deleted;
249 v = dataView [0] [0].ToString ();
250 AssertEquals ("Deleted.Count", 1, dataView.Count);
251 AssertEquals ("Deleted.Value", "1", v);
254 //xamarin bug #18898 # / novell bug #595899
256 public void Bug18898 ()
258 var table = new DataTable();
259 table.Columns.Add("col1");
260 table.Columns.Add("col2");
262 table.Rows.Add("1", "2");
263 table.Rows.Add("4", "3");
265 table.AcceptChanges();
267 table.Rows.Add("5", "6");
269 DataView dv = new DataView(table, string.Empty, string.Empty, DataViewRowState.Added);
271 var new_row = dv.AddNew();
275 var another_new_row = dv.AddNew();
276 another_new_row[0] = "9";
277 another_new_row[1] = "10";
279 AssertEquals ("#1", dv[2][0], "9");
281 //This should not throw a System.Data.VersionNotFoundException: "There is no Proposed data to accces"
282 AssertEquals ("#1", dv[1][0], "7");
287 public void NullTableGetItemPropertiesTest ()
289 DataView dataview = new DataView ();
290 PropertyDescriptorCollection col = ((ITypedList)dataview).GetItemProperties (null);
291 AssertEquals ("1", 0, col.Count);
296 public void SortListChangedTest ()
298 dataView.Sort = "itemName DESC";
299 AssertEquals ("test#01",ListChangedType.Reset,listChangedArgs.ListChangedType);
300 // UnComment the line below to see if dataView is sorted
301 // PrintTableOrView (dataView);
306 public void SortTestWeirdColumnName ()
308 DataTable dt = new DataTable ();
309 dt.Columns.Add ("id]", typeof (int));
310 dt.Columns.Add ("[id", typeof (int));
312 DataView dv = dt.DefaultView;
314 //dv.Sort = "[id"; // this is not allowed
318 dv.Sort = "[id]] DESC";
319 dv.Sort = "[[id] ASC";
324 public void SortTests ()
326 DataTable dataTable = new DataTable ("itemTable");
327 DataColumn dc1 = new DataColumn ("itemId", typeof(int));
328 DataColumn dc2 = new DataColumn ("itemName", typeof(string));
330 dataTable.Columns.Add (dc1);
331 dataTable.Columns.Add (dc2);
333 dataTable.Rows.Add (new object[2] { 1, "First entry" });
334 dataTable.Rows.Add (new object[2] { 0, "Second entry" });
335 dataTable.Rows.Add (new object[2] { 3, "Third entry" });
336 dataTable.Rows.Add (new object[2] { 2, "Fourth entry" });
338 DataView dataView = dataTable.DefaultView;
340 string s = "Default sorting: ";
341 AssertEquals (s + "First entry has wrong item", 1, dataView[0][0]);
342 AssertEquals (s + "Second entry has wrong item", 0, dataView[1][0]);
343 AssertEquals (s + "Third entry has wrong item", 3, dataView[2][0]);
344 AssertEquals (s + "Fourth entry has wrong item", 2, dataView[3][0]);
346 s = "Ascending sorting 1: ";
347 dataView.Sort = "itemId ASC";
348 AssertEquals (s + "First entry has wrong item", 0, dataView[0][0]);
349 AssertEquals (s + "Second entry has wrong item", 1, dataView[1][0]);
350 AssertEquals (s + "Third entry has wrong item", 2, dataView[2][0]);
351 AssertEquals (s + "Fourth entry has wrong item", 3, dataView[3][0]);
354 s = "Ascending sorting 2: ";
355 dataView.Sort = "itemId ASC";
356 AssertEquals (s + "First entry has wrong item", 0, dataView[0][0]);
357 AssertEquals (s + "Second entry has wrong item", 1, dataView[1][0]);
358 AssertEquals (s + "Third entry has wrong item", 2, dataView[2][0]);
359 AssertEquals (s + "Fourth entry has wrong item", 3, dataView[3][0]);
361 s = "Ascending sorting 3: ";
362 dataView.Sort = "[itemId] ASC";
363 AssertEquals (s + "First entry has wrong item", 0, dataView[0][0]);
364 AssertEquals (s + "Second entry has wrong item", 1, dataView[1][0]);
365 AssertEquals (s + "Third entry has wrong item", 2, dataView[2][0]);
366 AssertEquals (s + "Fourth entry has wrong item", 3, dataView[3][0]);
368 s = "Ascending sorting 4: ";
369 dataView.Sort = "[itemId] ASC";
370 AssertEquals (s + "First entry has wrong item", 0, dataView[0][0]);
371 AssertEquals (s + "Second entry has wrong item", 1, dataView[1][0]);
372 AssertEquals (s + "Third entry has wrong item", 2, dataView[2][0]);
373 AssertEquals (s + "Fourth entry has wrong item", 3, dataView[3][0]);
375 s = "Ascending sorting 5: ";
377 dataView.Sort = "itemId \tASC";
378 AssertEquals (s + "Tab cannot be a separator" , true, false);
379 }catch (IndexOutOfRangeException e) {
382 s = "Descending sorting : ";
383 dataView.Sort = "itemId DESC";
384 AssertEquals (s + "First entry has wrong item", 3, dataView[0][0]);
385 AssertEquals (s + "Second entry has wrong item", 2, dataView[1][0]);
386 AssertEquals (s + "Third entry has wrong item", 1, dataView[2][0]);
387 AssertEquals (s + "Fourth entry has wrong item", 0, dataView[3][0]);
389 s = "Reverted to default sorting: ";
390 dataView.Sort = null;
391 AssertEquals (s + "First entry has wrong item", 1, dataView[0][0]);
392 AssertEquals (s + "Second entry has wrong item", 0, dataView[1][0]);
393 AssertEquals (s + "Third entry has wrong item", 3, dataView[2][0]);
394 AssertEquals (s + "Fourth entry has wrong item", 2, dataView[3][0]);
397 #endregion // Sort Tests
400 [ExpectedException(typeof(DataException))]
401 public void AddNew_1 ()
403 dataView.AllowNew = false;
404 DataRowView drv = dataView.AddNew ();
408 public void AddNew_2 ()
410 dataView.AllowNew = true;
411 DataRowView drv = dataView.AddNew ();
412 AssertEquals ("test#01",ListChangedType.ItemAdded,listChangedArgs.ListChangedType);
413 AssertEquals ("test#02",-1,listChangedArgs.OldIndex);
414 AssertEquals ("test#03",5,listChangedArgs.NewIndex);
415 AssertEquals ("test#04",drv["itemName"],dataView [dataView.Count - 1]["itemName"]);
416 listChangedArgs = null;
417 drv["itemId"] = "item " + 1001;
418 drv["itemName"] = "name " + rndm.Next();
419 drv["itemPrice"] = "Rs. " + (rndm.Next() % 1000);
420 drv["itemCategory"] = "Cat " + ((rndm.Next() % 10) + 1);
421 // Actually no events are arisen when items are set.
422 AssertNull ("test#05", listChangedArgs);
424 AssertEquals ("test#06",ListChangedType.ItemDeleted,listChangedArgs.ListChangedType);
425 AssertEquals ("test#07",-1,listChangedArgs.OldIndex);
426 AssertEquals ("test#08",5,listChangedArgs.NewIndex);
430 public void BeginInit ()
432 DataTable table = new DataTable ("table");
433 DataView dv = new DataView ();
434 DataColumn col1 = new DataColumn ("col1");
435 DataColumn col2 = new DataColumn ("col2");
439 table.Columns.AddRange (new DataColumn[] {col1,col2});
442 AssertNull ("#1", dv.Table);
445 AssertNull ("#2", dv.Table); // still.
446 AssertEquals ("#3", 0, table.Columns.Count);
449 AssertEquals ("#5", table, dv.Table);
450 AssertEquals ("#4", 2, table.Columns.Count);
453 private bool dvInitialized;
454 private void OnDataViewInitialized (object src, EventArgs args)
456 dvInitialized = true;
459 public void BeginInit2 ()
461 DataTable table = new DataTable ("table");
462 DataView dv = new DataView ();
463 DataColumn col1 = new DataColumn ("col1");
464 DataColumn col2 = new DataColumn ("col2");
466 dvInitialized = false;
468 dv.Initialized += new EventHandler (OnDataViewInitialized);
472 table.Columns.AddRange (new DataColumn[] {col1,col2});
475 AssertNull ("#1", dv.Table);
478 AssertNull ("#2", dv.Table);
479 AssertEquals ("#3", 0, table.Columns.Count);
483 dv.Initialized -= new EventHandler (OnDataViewInitialized); // this should not be unregistered before table.EndInit().
485 AssertEquals ("#4", 2, table.Columns.Count);
486 AssertEquals ("#6", table, dv.Table);
487 AssertEquals ("DataViewInitialized #5", true, dvInitialized);
491 [ExpectedException(typeof(ArgumentException))]
492 public void Find_1 ()
494 /* since the sort key is not specified. Must raise a ArgumentException */
495 int sIndex = dataView.Find ("abc");
499 public void Find_2 ()
503 randInt = rndm.Next () % rowCount;
504 dataView.Sort = "itemId";
505 drv = dataView [randInt];
506 AssertEquals ("test#01",randInt,dataView.Find (drv ["itemId"]));
508 dataView.Sort = "itemId DESC";
509 drv = dataView [randInt];
510 AssertEquals ("test#02",randInt,dataView.Find (drv ["itemId"]));
512 dataView.Sort = "itemId, itemName";
513 drv = dataView [randInt];
514 object [] keys = new object [2];
515 keys [0] = drv ["itemId"];
516 keys [1] = drv ["itemName"];
517 AssertEquals ("test#03",randInt,dataView.Find (keys));
519 dataView.Sort = "itemId";
520 AssertEquals ("test#04",-1,dataView.Find("no item"));
525 [ExpectedException (typeof (ArgumentException))]
526 public void Find_3 ()
528 dataView.Sort = "itemID, itemName";
529 /* expecting order key count mismatch */
530 dataView.Find ("itemValue");
534 [Ignore("Test code not implemented")]
535 public void GetEnumerator ()
541 public void ToStringTest ()
543 AssertEquals ("test#01","System.Data.DataView",dataView.ToString());
547 public void TestingEventHandling ()
549 dataView.Sort = "itemId";
551 dr = dataTable.NewRow ();
552 dr ["itemId"] = "item 0";
553 dr ["itemName"] = "name " + rndm.Next ();
554 dr ["itemPrice"] = "Rs. " + (rndm.Next () % 1000);
555 dr ["itemCategory"] = "Cat " + ((rndm.Next () % 10) + 1);
556 dataTable.Rows.Add(dr);
558 //PrintTableOrView(dataView, "ItemAdded");
559 AssertEquals ("test#01",ListChangedType.ItemAdded,listChangedArgs.ListChangedType);
560 listChangedArgs = null;
562 dr ["itemId"] = "aitem 0";
563 // PrintTableOrView(dataView, "ItemChanged");
564 AssertEquals ("test#02",ListChangedType.ItemChanged,listChangedArgs.ListChangedType);
565 listChangedArgs = null;
567 dr ["itemId"] = "zitem 0";
568 // PrintTableOrView(dataView, "ItemMoved");
569 AssertEquals ("test#03",ListChangedType.ItemMoved,listChangedArgs.ListChangedType);
570 listChangedArgs = null;
572 dataTable.Rows.Remove (dr);
573 // PrintTableOrView(dataView, "ItemDeleted");
574 AssertEquals ("test#04",ListChangedType.ItemDeleted,listChangedArgs.ListChangedType);
576 listChangedArgs = null;
577 DataColumn dc5 = new DataColumn ("itemDesc");
578 dataTable.Columns.Add (dc5);
579 // PrintTableOrView(dataView, "PropertyDescriptorAdded");
580 AssertEquals ("test#05",ListChangedType.PropertyDescriptorAdded,listChangedArgs.ListChangedType);
582 listChangedArgs = null;
583 dc5.ColumnName = "itemDescription";
584 // PrintTableOrView(dataView, "PropertyDescriptorChanged");
585 // AssertEquals ("test#06",ListChangedType.PropertyDescriptorChanged,listChangedArgs.ListChangedType);
587 listChangedArgs = null;
588 dataTable.Columns.Remove (dc5);
589 // PrintTableOrView(dataView, "PropertyDescriptorDeleted");
590 AssertEquals ("test#07",ListChangedType.PropertyDescriptorDeleted,listChangedArgs.ListChangedType);
594 public void TestFindRows ()
596 DataView TestView = new DataView (dataTable);
597 TestView.Sort = "itemId";
598 DataRowView[] Result = TestView.FindRows ("item 3");
599 Assertion.AssertEquals ("Dv #1", 1, Result.Length);
600 Assertion.AssertEquals ("Dv #2", "item 3", Result [0]["itemId"]);
604 [ExpectedException (typeof (ArgumentException))]
605 public void FindRowsWithoutSort ()
607 DataTable dt = new DataTable ("table");
608 dt.Columns.Add ("col1");
609 dt.Columns.Add ("col2");
610 dt.Columns.Add ("col3");
611 dt.Rows.Add (new object [] {1,2,3});
612 dt.Rows.Add (new object [] {4,5,6});
613 dt.Rows.Add (new object [] {4,7,8});
614 dt.Rows.Add (new object [] {5,7,8});
615 dt.Rows.Add (new object [] {4,8,9});
616 DataView dv = new DataView (dt);
621 [ExpectedException (typeof (ArgumentException))]
622 public void FindRowsInconsistentKeyLength ()
624 DataTable dt = new DataTable ("table");
625 dt.Columns.Add ("col1");
626 dt.Columns.Add ("col2");
627 dt.Columns.Add ("col3");
628 dt.Rows.Add (new object [] {1,2,3});
629 dt.Rows.Add (new object [] {4,5,6});
630 dt.Rows.Add (new object [] {4,7,8});
631 dt.Rows.Add (new object [] {5,7,8});
632 dt.Rows.Add (new object [] {4,8,9});
633 DataView dv = new DataView (dt, null, "col1",
634 DataViewRowState.CurrentRows);
635 dv.FindRows (new object [] {1, 2, 3});
639 [ExpectedException (typeof (DeletedRowInaccessibleException))]
640 public void TestDelete ()
642 DataView TestView = new DataView (dataTable);
644 DataRow r = TestView.Table.Rows [0];
645 Assertion.Assert ("Dv #1", !((string)r ["itemId"] == "item 1"));
649 [ExpectedException (typeof (IndexOutOfRangeException))]
650 public void TestDeleteOutOfBounds ()
652 DataView TestView = new DataView (dataTable);
653 TestView.Delete (100);
657 [ExpectedException (typeof (DataException))]
658 public void TestDeleteNotAllowed ()
660 DataView TestView = new DataView (dataTable);
661 TestView.AllowDelete = false;
666 [ExpectedException (typeof (IndexOutOfRangeException))]
667 public void TestDeleteClosed ()
669 DataView TestView = new DataView (dataTable);
670 TestView.Dispose (); // Close the table
671 TestView.Delete (0); // cannot access to item at 0.
674 [Test] // based on bug #74631
675 public void TestDeleteAndCount ()
677 DataSet dataset = new DataSet ("new");
678 DataTable dt = new DataTable ("table1");
679 dataset.Tables.Add (dt);
680 dt.Columns.Add ("col1");
681 dt.Columns.Add ("col2");
682 dt.Rows.Add (new object []{1,1});
683 dt.Rows.Add (new object []{1,2});
684 dt.Rows.Add (new object []{1,3});
686 DataView dataView = new DataView (dataset.Tables[0]);
688 AssertEquals ("before delete", 3, dataView.Count);
689 dataView.AllowDelete = true;
691 // Deleting the first row
694 AssertEquals ("before delete", 2, dataView.Count);
698 public void ListChangeOnSetItem ()
700 DataTable dt = new DataTable ("table");
701 dt.Columns.Add ("col1");
702 dt.Columns.Add ("col2");
703 dt.Columns.Add ("col3");
704 dt.Rows.Add (new object [] {1, 2, 3});
706 DataView dv = new DataView (dt);
707 dv.ListChanged += new ListChangedEventHandler (OnChange);
711 ListChangedEventArgs ListChangeArgOnSetItem;
713 void OnChange (object o, ListChangedEventArgs e)
715 if (ListChangeArgOnSetItem != null)
716 throw new Exception ("The event is already fired.");
717 ListChangeArgOnSetItem = e;
721 public void CancelEditAndEvents ()
723 string reference = " =====ItemAdded:3 ------4 =====ItemAdded:3 =====ItemAdded:4 ------5 =====ItemAdded:4 =====ItemAdded:5 ------6 =====ItemDeleted:5 ------5 =====ItemAdded:5";
725 eventWriter = new StringWriter ();
727 DataTable dt = new DataTable ();
728 dt.Columns.Add ("col1");
729 dt.Columns.Add ("col2");
730 dt.Columns.Add ("col3");
731 dt.Rows.Add (new object [] {1,2,3});
732 dt.Rows.Add (new object [] {1,2,3});
733 dt.Rows.Add (new object [] {1,2,3});
735 DataView dv = new DataView (dt);
736 dv.ListChanged += new ListChangedEventHandler (ListChanged);
737 DataRowView a1 = dv.AddNew ();
738 eventWriter.Write (" ------" + dv.Count);
739 // I wonder why but MS fires another event here.
741 eventWriter.Write (" ------" + dv.Count);
742 // I wonder why but MS fires another event here.
743 DataRowView a2 = dv.AddNew ();
744 eventWriter.Write (" ------" + dv.Count);
746 eventWriter.Write (" ------" + dv.Count);
747 DataRowView a3 = dv.AddNew ();
749 AssertEquals (reference, eventWriter.ToString ());
753 public void ColumnChangeName ()
755 string result = @"setting table...
756 ---- OnListChanged PropertyDescriptorChanged,0,0
757 ---- OnListChanged Reset,-1,-1
759 ---- OnListChanged PropertyDescriptorChanged,0,0
762 eventWriter = new StringWriter ();
764 ComplexEventSequence1View dv =
765 new ComplexEventSequence1View (dataTable, eventWriter);
767 dc2.ColumnName = "new_column_name";
769 AssertEquals (result.Replace ("\r\n", "\n"), eventWriter.ToString ().Replace ("\r\n", "\n"));
772 private void ListChanged (object o, ListChangedEventArgs e)
774 eventWriter.Write (" =====" + e.ListChangedType + ":" + e.NewIndex);
778 [NUnit.Framework.Category ("NotWorking")]
779 public void ComplexEventSequence2 ()
781 string result = @"setting table...
782 ---- OnListChanged PropertyDescriptorChanged,0,0
783 ----- UpdateIndex : True
784 ---- OnListChanged Reset,-1,-1
786 ---- OnListChanged PropertyDescriptorAdded,0,0
788 ---- OnListChanged PropertyDescriptorAdded,0,0
790 ---- OnListChanged PropertyDescriptorAdded,0,0
792 ---- OnListChanged Reset,-1,-1
793 added tables to dataset
794 ---- OnListChanged PropertyDescriptorAdded,0,0
796 ---- OnListChanged PropertyDescriptorAdded,0,0
798 ---- OnListChanged PropertyDescriptorDeleted,0,0
802 eventWriter = new StringWriter ();
804 DataSet ds = new DataSet ();
805 DataTable dt = new DataTable ("table");
806 DataTable dt2 = new DataTable ("table2");
807 ComplexEventSequence1View dv =
808 new ComplexEventSequence1View (dt, eventWriter);
809 dt.Columns.Add ("col1");
810 eventWriter.WriteLine (" col1 added.");
811 dt.Columns.Add ("col2");
812 eventWriter.WriteLine (" col2 added.");
813 dt.Columns.Add ("col3");
814 eventWriter.WriteLine (" col3 added.");
816 dt2.Columns.Add ("col1");
817 dt2.Columns.Add ("col2");
818 dt2.Columns.Add ("col3");
823 eventWriter.WriteLine ("added tables to dataset");
824 ds.Relations.Add ("Relation", dt.Columns ["col1"], dt2.Columns ["col1"]);
825 eventWriter.WriteLine ("added relation 1");
827 DataRelation dr = ds.Relations.Add ("Relation2", dt2.Columns ["col2"], dt.Columns ["col2"]);
828 eventWriter.WriteLine ("added relation 2");
830 ds.Relations.Remove (dr);
831 eventWriter.WriteLine ("removed relation 2");
833 AssertEquals (result.Replace ("\r\n", "\n"), eventWriter.ToString ().Replace ("\r\n", "\n"));
837 [NUnit.Framework.Category ("NotWorking")]
838 public void ComplexEventSequence1 ()
840 string result = @"setting table...
841 ---- OnListChanged PropertyDescriptorChanged,0,0
842 ----- UpdateIndex : True
843 ---- OnListChanged Reset,-1,-1
845 ---- OnListChanged PropertyDescriptorAdded,0,0
847 ---- OnListChanged PropertyDescriptorAdded,0,0
849 ---- OnListChanged PropertyDescriptorAdded,0,0
852 ----- UpdateIndex : True
853 ---- OnListChanged Reset,-1,-1
855 ---- OnListChanged PropertyDescriptorDeleted,0,0
857 ----- UpdateIndex : True
858 ---- OnListChanged Reset,-1,-1
860 ----- UpdateIndex : True
861 ---- OnListChanged Reset,-1,-1
862 rowstatefilter changed.
863 ----- UpdateIndex : True
864 ---- OnListChanged Reset,-1,-1
865 rowstatefilter changed.
866 ---- OnListChanged ItemAdded,0,-1
868 ---- OnListChanged ItemAdded,0,-1
870 ---- OnListChanged ItemAdded,0,-1
872 ---- OnListChanged ItemAdded,3,-1
875 ---- OnListChanged ItemDeleted,3,-1
876 ---- OnListChanged ItemMoved,-2147483648,3
879 ---- OnListChanged ItemMoved,0,-2147483648
880 value changed to appear.
882 ---- OnListChanged ItemMoved,3,0
885 ---- OnListChanged ItemMoved,1,3
888 ---- OnListChanged PropertyDescriptorChanged,0,0
889 ----- UpdateIndex : True
890 ---- OnListChanged Reset,-1,-1
894 eventWriter = new StringWriter ();
896 DataTable dt = new DataTable ("table");
897 ComplexEventSequence1View dv =
898 new ComplexEventSequence1View (dt, eventWriter);
899 dt.Columns.Add ("col1");
900 eventWriter.WriteLine (" col1 added.");
901 dt.Columns.Add ("col2");
902 eventWriter.WriteLine (" col2 added.");
903 dt.Columns.Add ("col3");
904 eventWriter.WriteLine (" col3 added.");
905 dt.Constraints.Add (new UniqueConstraint (dt.Columns [0]));
906 eventWriter.WriteLine (" uniq added.");
908 eventWriter.WriteLine (" sort changed.");
909 dt.Columns.Remove ("col3");
910 eventWriter.WriteLine (" col3 removed.");
911 dv.RowFilter = "col1 <> 0";
912 eventWriter.WriteLine (" rowfilter changed.");
913 dv.RowStateFilter = DataViewRowState.Deleted;
914 eventWriter.WriteLine (" rowstatefilter changed.");
915 // FIXME: should be also tested.
916 // dv.ApplyDefaultSort = true;
917 // eventWriter.WriteLine (" apply default sort changed.");
918 dv.RowStateFilter = DataViewRowState.CurrentRows;
919 eventWriter.WriteLine (" rowstatefilter changed.");
920 dt.Rows.Add (new object [] {1, 3});
921 eventWriter.WriteLine (" added row to Rows.");
922 dt.Rows.Add (new object [] {2, 2});
923 eventWriter.WriteLine (" added row to Rows.");
924 dt.Rows.Add (new object [] {3, 1});
925 eventWriter.WriteLine (" added row to Rows.");
926 DataRowView drv = dv.AddNew ();
927 eventWriter.WriteLine (" AddNew() invoked.");
928 eventWriter.WriteLine (dv.Count);
931 eventWriter.WriteLine (" EndEdit() invoked.");
932 eventWriter.WriteLine (dv.Count);
933 dt.Rows [dt.Rows.Count - 1] [0] = 4;
934 eventWriter.WriteLine (" value changed to appear.");
935 eventWriter.WriteLine (dv.Count);
936 dt.Rows [dt.Rows.Count - 1] [1] = 4;
937 eventWriter.WriteLine (" value moved.");
938 eventWriter.WriteLine (dv.Count);
939 dt.Rows [dt.Rows.Count - 1] [1] = 1.5;
940 eventWriter.WriteLine (" value moved again.");
941 eventWriter.WriteLine (dv.Count);
942 dv.Table = new DataTable ("table2");
943 eventWriter.WriteLine ("table changed.");
945 AssertEquals (result.Replace ("\r\n", "\n"), eventWriter.ToString ().Replace ("\r\n", "\n"));
949 public void DefaultColumnNameAddListChangedTest ()
951 string result = @"setting table...
952 ---- OnListChanged PropertyDescriptorChanged,0,0
953 ---- OnListChanged Reset,-1,-1
955 ---- OnListChanged PropertyDescriptorAdded,0,0
956 default named column added.
957 ---- OnListChanged PropertyDescriptorAdded,0,0
958 non-default named column added.
959 ---- OnListChanged PropertyDescriptorAdded,0,0
960 another default named column added (Column2).
961 ---- OnListChanged PropertyDescriptorAdded,0,0
962 add a column with the same name as the default columnnames.
963 ---- OnListChanged PropertyDescriptorAdded,0,0
964 add a column with a null name.
965 ---- OnListChanged PropertyDescriptorAdded,0,0
966 add a column with an empty name.
968 eventWriter = new StringWriter ();
969 DataTable dt = new DataTable ("table");
970 ComplexEventSequence1View dv =
971 new ComplexEventSequence1View (dt, eventWriter);
973 eventWriter.WriteLine (" default named column added.");
974 dt.Columns.Add ("non-defaultNamedColumn");
975 eventWriter.WriteLine (" non-default named column added.");
976 DataColumn c = dt.Columns.Add ();
977 eventWriter.WriteLine (" another default named column added ({0}).", c.ColumnName);
978 dt.Columns.Add ("Column3");
979 eventWriter.WriteLine (" add a column with the same name as the default columnnames.");
980 dt.Columns.Add ((string)null);
981 eventWriter.WriteLine (" add a column with a null name.");
983 eventWriter.WriteLine (" add a column with an empty name.");
985 AssertEquals (result.Replace ("\r\n", "\n"), eventWriter.ToString ().Replace ("\r\n", "\n"));
989 public class ComplexEventSequence1View : DataView
993 public ComplexEventSequence1View (DataTable dt,
994 TextWriter w) : base ()
997 w.WriteLine ("setting table...");
999 w.WriteLine ("table was set.");
1002 protected override void OnListChanged (ListChangedEventArgs e)
1005 w.WriteLine ("---- OnListChanged " + e.ListChangedType + "," + e.NewIndex + "," + e.OldIndex);
1006 base.OnListChanged (e);
1009 protected override void UpdateIndex (bool force)
1012 w.WriteLine ("----- UpdateIndex : " + force);
1013 base.UpdateIndex (force);