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;
55 public void GetReady ()
57 dataTable = new DataTable ("itemTable");
58 DataColumn dc1 = new DataColumn ("itemId");
59 DataColumn dc2 = new DataColumn ("itemName");
60 DataColumn dc3 = new DataColumn ("itemPrice");
61 DataColumn dc4 = new DataColumn ("itemCategory");
63 dataTable.Columns.Add (dc1);
64 dataTable.Columns.Add (dc2);
65 dataTable.Columns.Add (dc3);
66 dataTable.Columns.Add (dc4);
70 rndm = new Random (seed);
71 for (int i = 1; i <= rowCount; i++) {
72 dr = dataTable.NewRow ();
73 dr["itemId"] = "item " + i;
74 dr["itemName"] = "name " + rndm.Next ();
75 dr["itemPrice"] = "Rs. " + (rndm.Next () % 1000);
76 dr["itemCategory"] = "Cat " + ((rndm.Next () % 10) + 1);
77 dataTable.Rows.Add (dr);
79 dataTable.AcceptChanges ();
80 dataView = new DataView (dataTable);
81 dataView.ListChanged += new ListChangedEventHandler (OnListChanged);
82 listChangedArgs = null;
85 protected void OnListChanged (object sender, ListChangedEventArgs args)
87 listChangedArgs = args;
89 /*Console.WriteLine("EventType :: " + listChangedArgs.ListChangedType +
90 " oldIndex :: " + listChangedArgs.OldIndex +
91 " NewIndex :: " + listChangedArgs.NewIndex);*/
95 private void PrintTableOrView (DataTable t, string label)
97 Console.WriteLine ("\n" + label);
98 for (int i = 0; i<t.Rows.Count; i++){
99 foreach (DataColumn dc in t.Columns)
100 Console.Write (t.Rows [i][dc] + "\t");
101 Console.WriteLine ("");
103 Console.WriteLine ();
106 private void PrintTableOrView (DataView dv, string label)
108 Console.WriteLine ("\n" + label);
109 Console.WriteLine ("Sort Key :: " + dv.Sort);
110 for (int i = 0; i < dv.Count; i++) {
111 foreach (DataColumn dc in dv.Table.Columns)
112 Console.Write (dv [i].Row [dc] + "\t");
113 Console.WriteLine ("");
115 Console.WriteLine ();
126 public void DataView ()
128 DataView dv1,dv2,dv3;
129 dv1 = new DataView ();
130 // AssertEquals ("test#01",null,dv1.Table);
131 AssertEquals ("test#02",true,dv1.AllowNew);
132 AssertEquals ("test#03",true,dv1.AllowEdit);
133 AssertEquals ("test#04",true,dv1.AllowDelete);
134 AssertEquals ("test#05",false,dv1.ApplyDefaultSort);
135 AssertEquals ("test#06",string.Empty,dv1.RowFilter);
136 AssertEquals ("test#07",DataViewRowState.CurrentRows,dv1.RowStateFilter);
137 AssertEquals ("test#08",string.Empty,dv1.Sort);
139 dv2 = new DataView (dataTable);
140 AssertEquals ("test#09","itemTable",dv2.Table.TableName);
141 AssertEquals ("test#10",string.Empty,dv2.Sort);
142 AssertEquals ("test#11",false,dv2.ApplyDefaultSort);
143 AssertEquals ("test#12",dataTable.Rows[0],dv2[0].Row);
145 dv3 = new DataView (dataTable,"","itemId DESC",DataViewRowState.CurrentRows);
146 AssertEquals ("test#13","",dv3.RowFilter);
147 AssertEquals ("test#14","itemId DESC",dv3.Sort);
148 AssertEquals ("test#15",DataViewRowState.CurrentRows,dv3.RowStateFilter);
149 //AssertEquals ("test#16",dataTable.Rows.[(dataTable.Rows.Count-1)],dv3[0]);
153 public void TestValue ()
155 DataView TestView = new DataView (dataTable);
156 Assertion.AssertEquals ("Dv #1", "item 1", TestView [0]["itemId"]);
160 public void TestCount ()
162 DataView TestView = new DataView (dataTable);
163 Assertion.AssertEquals ("Dv #3", 5, TestView.Count);
167 public void AllowNew ()
169 AssertEquals ("test#01",true,dataView.AllowNew);
173 public void ApplyDefaultSort ()
175 UniqueConstraint uc = new UniqueConstraint (dataTable.Columns["itemId"]);
176 dataTable.Constraints.Add (uc);
177 dataView.ApplyDefaultSort = true;
178 // dataView.Sort = "itemName";
179 // AssertEquals ("test#01","item 1",dataView[0]["itemId"]);
180 AssertEquals ("test#02",ListChangedType.Reset,listChangedArgs.ListChangedType);
181 // UnComment the line below to see if dataView is sorted
182 // PrintTableOrView (dataView,"* OnApplyDefaultSort");
186 public void RowStateFilter ()
188 dataView.RowStateFilter = DataViewRowState.Deleted;
189 AssertEquals ("test#01",ListChangedType.Reset,listChangedArgs.ListChangedType);
193 public void RowStateFilter_2 ()
195 DataSet dataset = new DataSet ("new");
196 DataTable dt = new DataTable ("table1");
197 dataset.Tables.Add (dt);
198 dt.Columns.Add ("col1");
199 dt.Columns.Add ("col2");
200 dt.Rows.Add (new object [] {1,1});
201 dt.Rows.Add (new object [] {1,2});
202 dt.Rows.Add (new object [] {1,3});
203 dataset.AcceptChanges ();
205 DataView dataView = new DataView (dataset.Tables [0]);
207 // 'new' table in this sample contains 6 records
208 dataView.AllowEdit = true;
209 dataView.AllowDelete = true;
213 dataView [0] ["col1"] = -1;
214 dataView.RowStateFilter = DataViewRowState.ModifiedOriginal;
215 v = dataView [0] [0].ToString ();
216 AssertEquals ("ModifiedOriginal.Count", 1, dataView.Count);
217 AssertEquals ("ModifiedOriginal.Value", "1", v);
221 dataView.RowStateFilter = DataViewRowState.Deleted;
223 v = dataView [0] [0].ToString ();
224 AssertEquals ("Deleted.Count", 1, dataView.Count);
225 AssertEquals ("Deleted.Value", "1", v);
231 public void SortListChangedTest ()
233 dataView.Sort = "itemName DESC";
234 AssertEquals ("test#01",ListChangedType.Reset,listChangedArgs.ListChangedType);
235 // UnComment the line below to see if dataView is sorted
236 // PrintTableOrView (dataView);
241 public void SortTestWeirdColumnName ()
243 DataTable dt = new DataTable ();
244 dt.Columns.Add ("id]", typeof (int));
245 dt.Columns.Add ("[id", typeof (int));
247 DataView dv = dt.DefaultView;
249 //dv.Sort = "[id"; // this is not allowed
253 dv.Sort = "[id]] DESC";
254 dv.Sort = "[[id] ASC";
259 public void SortTests ()
261 DataTable dataTable = new DataTable ("itemTable");
262 DataColumn dc1 = new DataColumn ("itemId", typeof(int));
263 DataColumn dc2 = new DataColumn ("itemName", typeof(string));
265 dataTable.Columns.Add (dc1);
266 dataTable.Columns.Add (dc2);
268 dataTable.Rows.Add (new object[2] { 1, "First entry" });
269 dataTable.Rows.Add (new object[2] { 0, "Second entry" });
270 dataTable.Rows.Add (new object[2] { 3, "Third entry" });
271 dataTable.Rows.Add (new object[2] { 2, "Fourth entry" });
273 DataView dataView = dataTable.DefaultView;
275 string s = "Default sorting: ";
276 AssertEquals (s + "First entry has wrong item", 1, dataView[0][0]);
277 AssertEquals (s + "Second entry has wrong item", 0, dataView[1][0]);
278 AssertEquals (s + "Third entry has wrong item", 3, dataView[2][0]);
279 AssertEquals (s + "Fourth entry has wrong item", 2, dataView[3][0]);
281 s = "Ascending sorting 1: ";
282 dataView.Sort = "itemId ASC";
283 AssertEquals (s + "First entry has wrong item", 0, dataView[0][0]);
284 AssertEquals (s + "Second entry has wrong item", 1, dataView[1][0]);
285 AssertEquals (s + "Third entry has wrong item", 2, dataView[2][0]);
286 AssertEquals (s + "Fourth entry has wrong item", 3, dataView[3][0]);
289 s = "Ascending sorting 2: ";
290 dataView.Sort = "itemId ASC";
291 AssertEquals (s + "First entry has wrong item", 0, dataView[0][0]);
292 AssertEquals (s + "Second entry has wrong item", 1, dataView[1][0]);
293 AssertEquals (s + "Third entry has wrong item", 2, dataView[2][0]);
294 AssertEquals (s + "Fourth entry has wrong item", 3, dataView[3][0]);
296 s = "Ascending sorting 3: ";
297 dataView.Sort = "[itemId] ASC";
298 AssertEquals (s + "First entry has wrong item", 0, dataView[0][0]);
299 AssertEquals (s + "Second entry has wrong item", 1, dataView[1][0]);
300 AssertEquals (s + "Third entry has wrong item", 2, dataView[2][0]);
301 AssertEquals (s + "Fourth entry has wrong item", 3, dataView[3][0]);
303 s = "Ascending sorting 4: ";
304 dataView.Sort = "[itemId] ASC";
305 AssertEquals (s + "First entry has wrong item", 0, dataView[0][0]);
306 AssertEquals (s + "Second entry has wrong item", 1, dataView[1][0]);
307 AssertEquals (s + "Third entry has wrong item", 2, dataView[2][0]);
308 AssertEquals (s + "Fourth entry has wrong item", 3, dataView[3][0]);
310 s = "Ascending sorting 5: ";
312 dataView.Sort = "itemId \tASC";
313 AssertEquals (s + "Tab cannot be a separator" , true, false);
314 }catch (IndexOutOfRangeException e) {
317 s = "Descending sorting : ";
318 dataView.Sort = "itemId DESC";
319 AssertEquals (s + "First entry has wrong item", 3, dataView[0][0]);
320 AssertEquals (s + "Second entry has wrong item", 2, dataView[1][0]);
321 AssertEquals (s + "Third entry has wrong item", 1, dataView[2][0]);
322 AssertEquals (s + "Fourth entry has wrong item", 0, dataView[3][0]);
324 s = "Reverted to default sorting: ";
325 dataView.Sort = null;
326 AssertEquals (s + "First entry has wrong item", 1, dataView[0][0]);
327 AssertEquals (s + "Second entry has wrong item", 0, dataView[1][0]);
328 AssertEquals (s + "Third entry has wrong item", 3, dataView[2][0]);
329 AssertEquals (s + "Fourth entry has wrong item", 2, dataView[3][0]);
332 #endregion // Sort Tests
335 [ExpectedException(typeof(DataException))]
336 public void AddNew_1 ()
338 dataView.AllowNew = false;
339 DataRowView drv = dataView.AddNew ();
343 public void AddNew_2 ()
345 dataView.AllowNew = true;
346 DataRowView drv = dataView.AddNew ();
347 AssertEquals ("test#01",ListChangedType.ItemAdded,listChangedArgs.ListChangedType);
348 AssertEquals ("test#02",drv["itemName"],dataView [dataView.Count - 1]["itemName"]);
349 listChangedArgs = null;
350 drv["itemId"] = "item " + 1001;
351 drv["itemName"] = "name " + rndm.Next();
352 drv["itemPrice"] = "Rs. " + (rndm.Next() % 1000);
353 drv["itemCategory"] = "Cat " + ((rndm.Next() % 10) + 1);
354 // Actually no events are arisen when items are set.
355 AssertNull ("test#03", listChangedArgs);
359 public void BeginInit ()
361 DataTable table = new DataTable ("table");
362 DataView dv = new DataView ();
363 DataColumn col1 = new DataColumn ("col1");
364 DataColumn col2 = new DataColumn ("col2");
368 table.Columns.AddRange (new DataColumn[] {col1,col2});
371 AssertNull ("#1", dv.Table);
374 AssertEquals ("#2", table, dv.Table);
375 AssertEquals ("#3", 0, table.Columns.Count);
378 AssertEquals ("#4", 2, table.Columns.Count);
382 private bool dvInitialized;
383 private void OnDataViewInitialized (object src, EventArgs args)
385 dvInitialized = true;
388 public void BeginInit2 ()
390 DataTable table = new DataTable ("table");
391 DataView dv = new DataView ();
392 DataColumn col1 = new DataColumn ("col1");
393 DataColumn col2 = new DataColumn ("col2");
395 dvInitialized = false;
397 dv.Initialized += new EventHandler (OnDataViewInitialized);
401 table.Columns.AddRange (new DataColumn[] {col1,col2});
404 AssertNull ("#1", dv.Table);
407 dv.Initialized -= new EventHandler (OnDataViewInitialized);
409 AssertEquals ("#2", table, dv.Table);
410 AssertEquals ("#3", 0, table.Columns.Count);
413 AssertEquals ("#4", 2, table.Columns.Count);
414 AssertEquals("DataViewInitialized #5", dvInitialized, true);
419 [ExpectedException(typeof(ArgumentException))]
420 public void Find_1 ()
422 /* since the sort key is not specified. Must raise a ArgumentException */
423 int sIndex = dataView.Find ("abc");
427 public void Find_2 ()
431 randInt = rndm.Next () % rowCount;
432 dataView.Sort = "itemId";
433 drv = dataView [randInt];
434 AssertEquals ("test#01",randInt,dataView.Find (drv ["itemId"]));
436 dataView.Sort = "itemId DESC";
437 drv = dataView [randInt];
438 AssertEquals ("test#02",randInt,dataView.Find (drv ["itemId"]));
440 dataView.Sort = "itemId, itemName";
441 drv = dataView [randInt];
442 object [] keys = new object [2];
443 keys [0] = drv ["itemId"];
444 keys [1] = drv ["itemName"];
445 AssertEquals ("test#03",randInt,dataView.Find (keys));
447 dataView.Sort = "itemId";
448 AssertEquals ("test#04",-1,dataView.Find("no item"));
453 [ExpectedException (typeof (ArgumentException))]
455 [NUnit.Framework.Category ("NotWorking")] // defect 5446
457 public void Find_3 ()
459 dataView.Sort = "itemID, itemName";
460 /* expecting order key count mismatch */
461 dataView.Find ("itemValue");
465 [Ignore("Test code not implemented")]
466 public void GetEnumerator ()
472 public void ToStringTest ()
474 AssertEquals ("test#01","System.Data.DataView",dataView.ToString());
478 public void TestingEventHandling ()
480 dataView.Sort = "itemId";
482 dr = dataTable.NewRow ();
483 dr ["itemId"] = "item 0";
484 dr ["itemName"] = "name " + rndm.Next ();
485 dr ["itemPrice"] = "Rs. " + (rndm.Next () % 1000);
486 dr ["itemCategory"] = "Cat " + ((rndm.Next () % 10) + 1);
487 dataTable.Rows.Add(dr);
489 //PrintTableOrView(dataView, "ItemAdded");
490 AssertEquals ("test#01",ListChangedType.ItemAdded,listChangedArgs.ListChangedType);
491 listChangedArgs = null;
493 dr ["itemId"] = "aitem 0";
494 // PrintTableOrView(dataView, "ItemChanged");
495 AssertEquals ("test#02",ListChangedType.ItemChanged,listChangedArgs.ListChangedType);
496 listChangedArgs = null;
498 dr ["itemId"] = "zitem 0";
499 // PrintTableOrView(dataView, "ItemMoved");
500 AssertEquals ("test#03",ListChangedType.ItemMoved,listChangedArgs.ListChangedType);
501 listChangedArgs = null;
503 dataTable.Rows.Remove (dr);
504 // PrintTableOrView(dataView, "ItemDeleted");
505 AssertEquals ("test#04",ListChangedType.ItemDeleted,listChangedArgs.ListChangedType);
507 listChangedArgs = null;
508 DataColumn dc5 = new DataColumn ("itemDesc");
509 dataTable.Columns.Add (dc5);
510 // PrintTableOrView(dataView, "PropertyDescriptorAdded");
511 AssertEquals ("test#05",ListChangedType.PropertyDescriptorAdded,listChangedArgs.ListChangedType);
513 listChangedArgs = null;
514 dc5.ColumnName = "itemDescription";
515 // PrintTableOrView(dataView, "PropertyDescriptorChanged");
516 // AssertEquals ("test#06",ListChangedType.PropertyDescriptorChanged,listChangedArgs.ListChangedType);
518 listChangedArgs = null;
519 dataTable.Columns.Remove (dc5);
520 // PrintTableOrView(dataView, "PropertyDescriptorDeleted");
521 AssertEquals ("test#07",ListChangedType.PropertyDescriptorDeleted,listChangedArgs.ListChangedType);
525 public void TestFindRows ()
527 DataView TestView = new DataView (dataTable);
528 TestView.Sort = "itemId";
529 DataRowView[] Result = TestView.FindRows ("item 3");
530 Assertion.AssertEquals ("Dv #1", 1, Result.Length);
531 Assertion.AssertEquals ("Dv #2", "item 3", Result [0]["itemId"]);
535 [ExpectedException (typeof (ArgumentException))]
536 public void FindRowsWithoutSort ()
538 DataTable dt = new DataTable ("table");
539 dt.Columns.Add ("col1");
540 dt.Columns.Add ("col2");
541 dt.Columns.Add ("col3");
542 dt.Rows.Add (new object [] {1,2,3});
543 dt.Rows.Add (new object [] {4,5,6});
544 dt.Rows.Add (new object [] {4,7,8});
545 dt.Rows.Add (new object [] {5,7,8});
546 dt.Rows.Add (new object [] {4,8,9});
547 DataView dv = new DataView (dt);
552 [ExpectedException (typeof (ArgumentException))]
553 public void FindRowsInconsistentKeyLength ()
555 DataTable dt = new DataTable ("table");
556 dt.Columns.Add ("col1");
557 dt.Columns.Add ("col2");
558 dt.Columns.Add ("col3");
559 dt.Rows.Add (new object [] {1,2,3});
560 dt.Rows.Add (new object [] {4,5,6});
561 dt.Rows.Add (new object [] {4,7,8});
562 dt.Rows.Add (new object [] {5,7,8});
563 dt.Rows.Add (new object [] {4,8,9});
564 DataView dv = new DataView (dt, null, "col1",
565 DataViewRowState.CurrentRows);
566 dv.FindRows (new object [] {1, 2, 3});
570 [ExpectedException (typeof (DeletedRowInaccessibleException))]
571 public void TestDelete ()
573 DataView TestView = new DataView (dataTable);
575 DataRow r = TestView.Table.Rows [0];
576 Assertion.Assert ("Dv #1", !(r ["itemId"] == "item 1"));
580 [ExpectedException (typeof (IndexOutOfRangeException))]
581 public void TestDeleteOutOfBounds ()
583 DataView TestView = new DataView (dataTable);
584 TestView.Delete (100);
588 [ExpectedException (typeof (DataException))]
589 public void TestDeleteNotAllowed ()
591 DataView TestView = new DataView (dataTable);
592 TestView.AllowDelete = false;
597 [ExpectedException (typeof (DataException))]
598 public void TestDeleteClosed ()
600 DataView TestView = new DataView (dataTable);
601 TestView.Dispose (); // Close the table
605 [Test] // based on bug #74631
606 public void TestDeleteAndCount ()
608 DataSet dataset = new DataSet ("new");
609 DataTable dt = new DataTable ("table1");
610 dataset.Tables.Add (dt);
611 dt.Columns.Add ("col1");
612 dt.Columns.Add ("col2");
613 dt.Rows.Add (new object []{1,1});
614 dt.Rows.Add (new object []{1,2});
615 dt.Rows.Add (new object []{1,3});
617 DataView dataView = new DataView (dataset.Tables[0]);
619 AssertEquals ("before delete", 3, dataView.Count);
620 dataView.AllowDelete = true;
622 // Deleting the first row
625 AssertEquals ("before delete", 2, dataView.Count);
629 public void ListChangeOnSetItem ()
631 DataTable dt = new DataTable ("table");
632 dt.Columns.Add ("col1");
633 dt.Columns.Add ("col2");
634 dt.Columns.Add ("col3");
635 dt.Rows.Add (new object [] {1, 2, 3});
637 DataView dv = new DataView (dt);
638 dv.ListChanged += new ListChangedEventHandler (OnChange);
642 ListChangedEventArgs ListChangeArgOnSetItem;
644 void OnChange (object o, ListChangedEventArgs e)
646 if (ListChangeArgOnSetItem != null)
647 throw new Exception ("The event is already fired.");
648 ListChangeArgOnSetItem = e;
652 public void CancelEditAndEvents ()
654 string reference = " =====ItemAdded:3 ------4 =====ItemAdded:3 =====ItemAdded:4 ------5 =====ItemAdded:4 =====ItemAdded:5 ------6 =====ItemDeleted:5 ------5 =====ItemAdded:5";
656 eventWriter = new StringWriter ();
658 DataTable dt = new DataTable ();
659 dt.Columns.Add ("col1");
660 dt.Columns.Add ("col2");
661 dt.Columns.Add ("col3");
662 dt.Rows.Add (new object [] {1,2,3});
663 dt.Rows.Add (new object [] {1,2,3});
664 dt.Rows.Add (new object [] {1,2,3});
666 DataView dv = new DataView (dt);
667 dv.ListChanged += new ListChangedEventHandler (ListChanged);
668 DataRowView a1 = dv.AddNew ();
669 eventWriter.Write (" ------" + dv.Count);
670 // I wonder why but MS fires another event here.
672 eventWriter.Write (" ------" + dv.Count);
673 // I wonder why but MS fires another event here.
674 DataRowView a2 = dv.AddNew ();
675 eventWriter.Write (" ------" + dv.Count);
677 eventWriter.Write (" ------" + dv.Count);
678 DataRowView a3 = dv.AddNew ();
680 AssertEquals (reference, eventWriter.ToString ());
683 private void ListChanged (object o, ListChangedEventArgs e)
685 eventWriter.Write (" =====" + e.ListChangedType + ":" + e.NewIndex);
689 [NUnit.Framework.Category ("NotWorking")]
690 public void ComplexEventSequence1 ()
692 string result = @"setting table...
693 ---- OnListChanged PropertyDescriptorChanged,0,0
694 ----- UpdateIndex : True
695 ---- OnListChanged Reset,-1,-1
697 ---- OnListChanged PropertyDescriptorAdded,0,0
699 ---- OnListChanged PropertyDescriptorAdded,0,0
701 ---- OnListChanged PropertyDescriptorAdded,0,0
704 ----- UpdateIndex : True
705 ---- OnListChanged Reset,-1,-1
707 ---- OnListChanged PropertyDescriptorDeleted,0,0
709 ----- UpdateIndex : True
710 ---- OnListChanged Reset,-1,-1
712 ----- UpdateIndex : True
713 ---- OnListChanged Reset,-1,-1
714 rowstatefilter changed.
715 ----- UpdateIndex : True
716 ---- OnListChanged Reset,-1,-1
717 rowstatefilter changed.
718 ---- OnListChanged ItemAdded,0,-1
720 ---- OnListChanged ItemAdded,0,-1
722 ---- OnListChanged ItemAdded,0,-1
724 ---- OnListChanged ItemAdded,3,-1
727 ---- OnListChanged ItemDeleted,3,-1
728 ---- OnListChanged ItemMoved,-2147483648,3
731 ---- OnListChanged ItemMoved,0,-2147483648
732 value changed to appear.
734 ---- OnListChanged ItemMoved,3,0
737 ---- OnListChanged ItemMoved,1,3
740 ---- OnListChanged PropertyDescriptorChanged,0,0
741 ----- UpdateIndex : True
742 ---- OnListChanged Reset,-1,-1
746 eventWriter = new StringWriter ();
748 DataTable dt = new DataTable ("table");
749 ComplexEventSequence1View dv =
750 new ComplexEventSequence1View (dt, eventWriter);
751 dt.Columns.Add ("col1");
752 eventWriter.WriteLine (" col1 added.");
753 dt.Columns.Add ("col2");
754 eventWriter.WriteLine (" col2 added.");
755 dt.Columns.Add ("col3");
756 eventWriter.WriteLine (" col3 added.");
757 dt.Constraints.Add (new UniqueConstraint (dt.Columns [0]));
758 eventWriter.WriteLine (" uniq added.");
760 eventWriter.WriteLine (" sort changed.");
761 dt.Columns.Remove ("col3");
762 eventWriter.WriteLine (" col3 removed.");
763 dv.RowFilter = "col1 <> 0";
764 eventWriter.WriteLine (" rowfilter changed.");
765 dv.RowStateFilter = DataViewRowState.Deleted;
766 eventWriter.WriteLine (" rowstatefilter changed.");
767 // FIXME: should be also tested.
768 // dv.ApplyDefaultSort = true;
769 // eventWriter.WriteLine (" apply default sort changed.");
770 dv.RowStateFilter = DataViewRowState.CurrentRows;
771 eventWriter.WriteLine (" rowstatefilter changed.");
772 dt.Rows.Add (new object [] {1, 3});
773 eventWriter.WriteLine (" added row to Rows.");
774 dt.Rows.Add (new object [] {2, 2});
775 eventWriter.WriteLine (" added row to Rows.");
776 dt.Rows.Add (new object [] {3, 1});
777 eventWriter.WriteLine (" added row to Rows.");
778 DataRowView drv = dv.AddNew ();
779 eventWriter.WriteLine (" AddNew() invoked.");
780 eventWriter.WriteLine (dv.Count);
783 eventWriter.WriteLine (" EndEdit() invoked.");
784 eventWriter.WriteLine (dv.Count);
785 dt.Rows [dt.Rows.Count - 1] [0] = 4;
786 eventWriter.WriteLine (" value changed to appear.");
787 eventWriter.WriteLine (dv.Count);
788 dt.Rows [dt.Rows.Count - 1] [1] = 4;
789 eventWriter.WriteLine (" value moved.");
790 eventWriter.WriteLine (dv.Count);
791 dt.Rows [dt.Rows.Count - 1] [1] = 1.5;
792 eventWriter.WriteLine (" value moved again.");
793 eventWriter.WriteLine (dv.Count);
794 dv.Table = new DataTable ("table2");
795 eventWriter.WriteLine ("table changed.");
797 AssertEquals (result, eventWriter.ToString ().Replace ("\r\n", "\n"));
800 public class ComplexEventSequence1View : DataView
804 public ComplexEventSequence1View (DataTable dt,
805 TextWriter w) : base ()
808 w.WriteLine ("setting table...");
810 w.WriteLine ("table was set.");
813 protected override void OnListChanged (ListChangedEventArgs e)
816 w.WriteLine ("---- OnListChanged " + e.ListChangedType + "," + e.NewIndex + "," + e.OldIndex);
817 base.OnListChanged (e);
820 protected override void UpdateIndex (bool force)
823 w.WriteLine ("----- UpdateIndex : " + force);
824 base.UpdateIndex (force);