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 [Ignore("Test code not implemented")]
360 public void BeginInit ()
366 [ExpectedException(typeof(ArgumentException))]
367 public void Find_1 ()
369 /* since the sort key is not specified. Must raise a ArgumentException */
370 int sIndex = dataView.Find ("abc");
374 public void Find_2 ()
378 randInt = rndm.Next () % rowCount;
379 dataView.Sort = "itemId";
380 drv = dataView [randInt];
381 AssertEquals ("test#01",randInt,dataView.Find (drv ["itemId"]));
383 dataView.Sort = "itemId DESC";
384 drv = dataView [randInt];
385 AssertEquals ("test#02",randInt,dataView.Find (drv ["itemId"]));
387 dataView.Sort = "itemId, itemName";
388 drv = dataView [randInt];
389 object [] keys = new object [2];
390 keys [0] = drv ["itemId"];
391 keys [1] = drv ["itemName"];
392 AssertEquals ("test#03",randInt,dataView.Find (keys));
394 dataView.Sort = "itemId";
395 AssertEquals ("test#04",-1,dataView.Find("no item"));
400 [ExpectedException (typeof (ArgumentException))]
401 public void Find_3 ()
403 dataView.Sort = "itemID, itemName";
404 /* expecting order key count mismatch */
405 dataView.Find ("itemValue");
409 [Ignore("Test code not implemented")]
410 public void GetEnumerator ()
416 public void ToStringTest ()
418 AssertEquals ("test#01","System.Data.DataView",dataView.ToString());
422 public void TestingEventHandling ()
424 dataView.Sort = "itemId";
426 dr = dataTable.NewRow ();
427 dr ["itemId"] = "item 0";
428 dr ["itemName"] = "name " + rndm.Next ();
429 dr ["itemPrice"] = "Rs. " + (rndm.Next () % 1000);
430 dr ["itemCategory"] = "Cat " + ((rndm.Next () % 10) + 1);
431 dataTable.Rows.Add(dr);
433 //PrintTableOrView(dataView, "ItemAdded");
434 AssertEquals ("test#01",ListChangedType.ItemAdded,listChangedArgs.ListChangedType);
435 listChangedArgs = null;
437 dr ["itemId"] = "aitem 0";
438 // PrintTableOrView(dataView, "ItemChanged");
439 AssertEquals ("test#02",ListChangedType.ItemChanged,listChangedArgs.ListChangedType);
440 listChangedArgs = null;
442 dr ["itemId"] = "zitem 0";
443 // PrintTableOrView(dataView, "ItemMoved");
444 AssertEquals ("test#03",ListChangedType.ItemMoved,listChangedArgs.ListChangedType);
445 listChangedArgs = null;
447 dataTable.Rows.Remove (dr);
448 // PrintTableOrView(dataView, "ItemDeleted");
449 AssertEquals ("test#04",ListChangedType.ItemDeleted,listChangedArgs.ListChangedType);
451 listChangedArgs = null;
452 DataColumn dc5 = new DataColumn ("itemDesc");
453 dataTable.Columns.Add (dc5);
454 // PrintTableOrView(dataView, "PropertyDescriptorAdded");
455 AssertEquals ("test#05",ListChangedType.PropertyDescriptorAdded,listChangedArgs.ListChangedType);
457 listChangedArgs = null;
458 dc5.ColumnName = "itemDescription";
459 // PrintTableOrView(dataView, "PropertyDescriptorChanged");
460 // AssertEquals ("test#06",ListChangedType.PropertyDescriptorChanged,listChangedArgs.ListChangedType);
462 listChangedArgs = null;
463 dataTable.Columns.Remove (dc5);
464 // PrintTableOrView(dataView, "PropertyDescriptorDeleted");
465 AssertEquals ("test#07",ListChangedType.PropertyDescriptorDeleted,listChangedArgs.ListChangedType);
469 public void TestFindRows ()
471 DataView TestView = new DataView (dataTable);
472 TestView.Sort = "itemId";
473 DataRowView[] Result = TestView.FindRows ("item 3");
474 Assertion.AssertEquals ("Dv #1", 1, Result.Length);
475 Assertion.AssertEquals ("Dv #2", "item 3", Result [0]["itemId"]);
479 [ExpectedException (typeof (ArgumentException))]
480 public void FindRowsWithoutSort ()
482 DataTable dt = new DataTable ("table");
483 dt.Columns.Add ("col1");
484 dt.Columns.Add ("col2");
485 dt.Columns.Add ("col3");
486 dt.Rows.Add (new object [] {1,2,3});
487 dt.Rows.Add (new object [] {4,5,6});
488 dt.Rows.Add (new object [] {4,7,8});
489 dt.Rows.Add (new object [] {5,7,8});
490 dt.Rows.Add (new object [] {4,8,9});
491 DataView dv = new DataView (dt);
496 [ExpectedException (typeof (ArgumentException))]
497 public void FindRowsInconsistentKeyLength ()
499 DataTable dt = new DataTable ("table");
500 dt.Columns.Add ("col1");
501 dt.Columns.Add ("col2");
502 dt.Columns.Add ("col3");
503 dt.Rows.Add (new object [] {1,2,3});
504 dt.Rows.Add (new object [] {4,5,6});
505 dt.Rows.Add (new object [] {4,7,8});
506 dt.Rows.Add (new object [] {5,7,8});
507 dt.Rows.Add (new object [] {4,8,9});
508 DataView dv = new DataView (dt, null, "col1",
509 DataViewRowState.CurrentRows);
510 dv.FindRows (new object [] {1, 2, 3});
514 [ExpectedException (typeof (DeletedRowInaccessibleException))]
515 public void TestDelete ()
517 DataView TestView = new DataView (dataTable);
519 DataRow r = TestView.Table.Rows [0];
520 Assertion.Assert ("Dv #1", !(r ["itemId"] == "item 1"));
524 [ExpectedException (typeof (IndexOutOfRangeException))]
525 public void TestDeleteOutOfBounds ()
527 DataView TestView = new DataView (dataTable);
528 TestView.Delete (100);
532 [ExpectedException (typeof (DataException))]
533 public void TestDeleteNotAllowed ()
535 DataView TestView = new DataView (dataTable);
536 TestView.AllowDelete = false;
541 [ExpectedException (typeof (DataException))]
542 public void TestDeleteClosed ()
544 DataView TestView = new DataView (dataTable);
545 TestView.Dispose (); // Close the table
549 [Test] // based on bug #74631
550 public void TestDeleteAndCount ()
552 DataSet dataset = new DataSet ("new");
553 DataTable dt = new DataTable ("table1");
554 dataset.Tables.Add (dt);
555 dt.Columns.Add ("col1");
556 dt.Columns.Add ("col2");
557 dt.Rows.Add (new object []{1,1});
558 dt.Rows.Add (new object []{1,2});
559 dt.Rows.Add (new object []{1,3});
561 DataView dataView = new DataView (dataset.Tables[0]);
563 AssertEquals ("before delete", 3, dataView.Count);
564 dataView.AllowDelete = true;
566 // Deleting the first row
569 AssertEquals ("before delete", 2, dataView.Count);
573 public void ListChangeOnSetItem ()
575 DataTable dt = new DataTable ("table");
576 dt.Columns.Add ("col1");
577 dt.Columns.Add ("col2");
578 dt.Columns.Add ("col3");
579 dt.Rows.Add (new object [] {1, 2, 3});
581 DataView dv = new DataView (dt);
582 dv.ListChanged += new ListChangedEventHandler (OnChange);
586 ListChangedEventArgs ListChangeArgOnSetItem;
588 void OnChange (object o, ListChangedEventArgs e)
590 if (ListChangeArgOnSetItem != null)
591 throw new Exception ("The event is already fired.");
592 ListChangeArgOnSetItem = e;
596 [NUnit.Framework.Category ("NotWorking")]
597 public void CancelEditAndEvents ()
599 string reference = " =====ItemAdded:3 ------4 =====ItemAdded:3 =====ItemAdded:4 ------5 =====ItemAdded:4 =====ItemAdded:5 ------6 =====ItemDeleted:5 ------5 =====ItemAdded:5";
601 eventWriter = new StringWriter ();
603 DataTable dt = new DataTable ();
604 dt.Columns.Add ("col1");
605 dt.Columns.Add ("col2");
606 dt.Columns.Add ("col3");
607 dt.Rows.Add (new object [] {1,2,3});
608 dt.Rows.Add (new object [] {1,2,3});
609 dt.Rows.Add (new object [] {1,2,3});
611 DataView dv = new DataView (dt);
612 dv.ListChanged += new ListChangedEventHandler (ListChanged);
613 DataRowView a1 = dv.AddNew ();
614 eventWriter.Write (" ------" + dv.Count);
615 // I wonder why but MS fires another event here.
617 eventWriter.Write (" ------" + dv.Count);
618 // I wonder why but MS fires another event here.
619 DataRowView a2 = dv.AddNew ();
620 eventWriter.Write (" ------" + dv.Count);
622 eventWriter.Write (" ------" + dv.Count);
623 DataRowView a3 = dv.AddNew ();
625 AssertEquals (reference, eventWriter.ToString ());
628 private void ListChanged (object o, ListChangedEventArgs e)
630 eventWriter.Write (" =====" + e.ListChangedType + ":" + e.NewIndex);
634 [NUnit.Framework.Category ("NotWorking")]
635 public void ComplexEventSequence1 ()
637 string result = @"setting table...
638 ---- OnListChanged PropertyDescriptorChanged,0,0
639 ----- UpdateIndex : True
640 ---- OnListChanged Reset,-1,-1
642 ---- OnListChanged PropertyDescriptorAdded,0,0
644 ---- OnListChanged PropertyDescriptorAdded,0,0
646 ---- OnListChanged PropertyDescriptorAdded,0,0
649 ----- UpdateIndex : True
650 ---- OnListChanged Reset,-1,-1
652 ---- OnListChanged PropertyDescriptorDeleted,0,0
654 ----- UpdateIndex : True
655 ---- OnListChanged Reset,-1,-1
657 ----- UpdateIndex : True
658 ---- OnListChanged Reset,-1,-1
659 rowstatefilter changed.
660 ----- UpdateIndex : True
661 ---- OnListChanged Reset,-1,-1
662 rowstatefilter changed.
663 ---- OnListChanged ItemAdded,0,-1
665 ---- OnListChanged ItemAdded,0,-1
667 ---- OnListChanged ItemAdded,0,-1
669 ---- OnListChanged ItemAdded,3,-1
672 ---- OnListChanged ItemDeleted,3,-1
673 ---- OnListChanged ItemMoved,-2147483648,3
676 ---- OnListChanged ItemMoved,0,-2147483648
677 value changed to appear.
679 ---- OnListChanged ItemMoved,3,0
682 ---- OnListChanged ItemMoved,1,3
685 ---- OnListChanged PropertyDescriptorChanged,0,0
686 ----- UpdateIndex : True
687 ---- OnListChanged Reset,-1,-1
691 eventWriter = new StringWriter ();
693 DataTable dt = new DataTable ("table");
694 ComplexEventSequence1View dv =
695 new ComplexEventSequence1View (dt, eventWriter);
696 dt.Columns.Add ("col1");
697 eventWriter.WriteLine (" col1 added.");
698 dt.Columns.Add ("col2");
699 eventWriter.WriteLine (" col2 added.");
700 dt.Columns.Add ("col3");
701 eventWriter.WriteLine (" col3 added.");
702 dt.Constraints.Add (new UniqueConstraint (dt.Columns [0]));
703 eventWriter.WriteLine (" uniq added.");
705 eventWriter.WriteLine (" sort changed.");
706 dt.Columns.Remove ("col3");
707 eventWriter.WriteLine (" col3 removed.");
708 dv.RowFilter = "col1 <> 0";
709 eventWriter.WriteLine (" rowfilter changed.");
710 dv.RowStateFilter = DataViewRowState.Deleted;
711 eventWriter.WriteLine (" rowstatefilter changed.");
712 // FIXME: should be also tested.
713 // dv.ApplyDefaultSort = true;
714 // eventWriter.WriteLine (" apply default sort changed.");
715 dv.RowStateFilter = DataViewRowState.CurrentRows;
716 eventWriter.WriteLine (" rowstatefilter changed.");
717 dt.Rows.Add (new object [] {1, 3});
718 eventWriter.WriteLine (" added row to Rows.");
719 dt.Rows.Add (new object [] {2, 2});
720 eventWriter.WriteLine (" added row to Rows.");
721 dt.Rows.Add (new object [] {3, 1});
722 eventWriter.WriteLine (" added row to Rows.");
723 DataRowView drv = dv.AddNew ();
724 eventWriter.WriteLine (" AddNew() invoked.");
725 eventWriter.WriteLine (dv.Count);
728 eventWriter.WriteLine (" EndEdit() invoked.");
729 eventWriter.WriteLine (dv.Count);
730 dt.Rows [dt.Rows.Count - 1] [0] = 4;
731 eventWriter.WriteLine (" value changed to appear.");
732 eventWriter.WriteLine (dv.Count);
733 dt.Rows [dt.Rows.Count - 1] [1] = 4;
734 eventWriter.WriteLine (" value moved.");
735 eventWriter.WriteLine (dv.Count);
736 dt.Rows [dt.Rows.Count - 1] [1] = 1.5;
737 eventWriter.WriteLine (" value moved again.");
738 eventWriter.WriteLine (dv.Count);
739 dv.Table = new DataTable ("table2");
740 eventWriter.WriteLine ("table changed.");
742 AssertEquals (result, eventWriter.ToString ().Replace ("\r\n", "\n"));
745 public class ComplexEventSequence1View : DataView
749 public ComplexEventSequence1View (DataTable dt,
750 TextWriter w) : base ()
753 w.WriteLine ("setting table...");
755 w.WriteLine ("table was set.");
758 protected override void OnListChanged (ListChangedEventArgs e)
761 w.WriteLine ("---- OnListChanged " + e.ListChangedType + "," + e.NewIndex + "," + e.OldIndex);
762 base.OnListChanged (e);
765 protected override void UpdateIndex (bool force)
768 w.WriteLine ("----- UpdateIndex : " + force);
769 base.UpdateIndex (force);