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 [ExpectedException(typeof(ArgumentException))]
383 public void Find_1 ()
385 /* since the sort key is not specified. Must raise a ArgumentException */
386 int sIndex = dataView.Find ("abc");
390 public void Find_2 ()
394 randInt = rndm.Next () % rowCount;
395 dataView.Sort = "itemId";
396 drv = dataView [randInt];
397 AssertEquals ("test#01",randInt,dataView.Find (drv ["itemId"]));
399 dataView.Sort = "itemId DESC";
400 drv = dataView [randInt];
401 AssertEquals ("test#02",randInt,dataView.Find (drv ["itemId"]));
403 dataView.Sort = "itemId, itemName";
404 drv = dataView [randInt];
405 object [] keys = new object [2];
406 keys [0] = drv ["itemId"];
407 keys [1] = drv ["itemName"];
408 AssertEquals ("test#03",randInt,dataView.Find (keys));
410 dataView.Sort = "itemId";
411 AssertEquals ("test#04",-1,dataView.Find("no item"));
416 [ExpectedException (typeof (ArgumentException))]
418 [Category("NotWorking")] // defect 5446
420 public void Find_3 ()
422 dataView.Sort = "itemID, itemName";
423 /* expecting order key count mismatch */
424 dataView.Find ("itemValue");
428 [Ignore("Test code not implemented")]
429 public void GetEnumerator ()
435 public void ToStringTest ()
437 AssertEquals ("test#01","System.Data.DataView",dataView.ToString());
441 public void TestingEventHandling ()
443 dataView.Sort = "itemId";
445 dr = dataTable.NewRow ();
446 dr ["itemId"] = "item 0";
447 dr ["itemName"] = "name " + rndm.Next ();
448 dr ["itemPrice"] = "Rs. " + (rndm.Next () % 1000);
449 dr ["itemCategory"] = "Cat " + ((rndm.Next () % 10) + 1);
450 dataTable.Rows.Add(dr);
452 //PrintTableOrView(dataView, "ItemAdded");
453 AssertEquals ("test#01",ListChangedType.ItemAdded,listChangedArgs.ListChangedType);
454 listChangedArgs = null;
456 dr ["itemId"] = "aitem 0";
457 // PrintTableOrView(dataView, "ItemChanged");
458 AssertEquals ("test#02",ListChangedType.ItemChanged,listChangedArgs.ListChangedType);
459 listChangedArgs = null;
461 dr ["itemId"] = "zitem 0";
462 // PrintTableOrView(dataView, "ItemMoved");
463 AssertEquals ("test#03",ListChangedType.ItemMoved,listChangedArgs.ListChangedType);
464 listChangedArgs = null;
466 dataTable.Rows.Remove (dr);
467 // PrintTableOrView(dataView, "ItemDeleted");
468 AssertEquals ("test#04",ListChangedType.ItemDeleted,listChangedArgs.ListChangedType);
470 listChangedArgs = null;
471 DataColumn dc5 = new DataColumn ("itemDesc");
472 dataTable.Columns.Add (dc5);
473 // PrintTableOrView(dataView, "PropertyDescriptorAdded");
474 AssertEquals ("test#05",ListChangedType.PropertyDescriptorAdded,listChangedArgs.ListChangedType);
476 listChangedArgs = null;
477 dc5.ColumnName = "itemDescription";
478 // PrintTableOrView(dataView, "PropertyDescriptorChanged");
479 // AssertEquals ("test#06",ListChangedType.PropertyDescriptorChanged,listChangedArgs.ListChangedType);
481 listChangedArgs = null;
482 dataTable.Columns.Remove (dc5);
483 // PrintTableOrView(dataView, "PropertyDescriptorDeleted");
484 AssertEquals ("test#07",ListChangedType.PropertyDescriptorDeleted,listChangedArgs.ListChangedType);
488 public void TestFindRows ()
490 DataView TestView = new DataView (dataTable);
491 TestView.Sort = "itemId";
492 DataRowView[] Result = TestView.FindRows ("item 3");
493 Assertion.AssertEquals ("Dv #1", 1, Result.Length);
494 Assertion.AssertEquals ("Dv #2", "item 3", Result [0]["itemId"]);
498 [ExpectedException (typeof (ArgumentException))]
499 public void FindRowsWithoutSort ()
501 DataTable dt = new DataTable ("table");
502 dt.Columns.Add ("col1");
503 dt.Columns.Add ("col2");
504 dt.Columns.Add ("col3");
505 dt.Rows.Add (new object [] {1,2,3});
506 dt.Rows.Add (new object [] {4,5,6});
507 dt.Rows.Add (new object [] {4,7,8});
508 dt.Rows.Add (new object [] {5,7,8});
509 dt.Rows.Add (new object [] {4,8,9});
510 DataView dv = new DataView (dt);
515 [ExpectedException (typeof (ArgumentException))]
516 public void FindRowsInconsistentKeyLength ()
518 DataTable dt = new DataTable ("table");
519 dt.Columns.Add ("col1");
520 dt.Columns.Add ("col2");
521 dt.Columns.Add ("col3");
522 dt.Rows.Add (new object [] {1,2,3});
523 dt.Rows.Add (new object [] {4,5,6});
524 dt.Rows.Add (new object [] {4,7,8});
525 dt.Rows.Add (new object [] {5,7,8});
526 dt.Rows.Add (new object [] {4,8,9});
527 DataView dv = new DataView (dt, null, "col1",
528 DataViewRowState.CurrentRows);
529 dv.FindRows (new object [] {1, 2, 3});
533 [ExpectedException (typeof (DeletedRowInaccessibleException))]
534 public void TestDelete ()
536 DataView TestView = new DataView (dataTable);
538 DataRow r = TestView.Table.Rows [0];
539 Assertion.Assert ("Dv #1", !(r ["itemId"] == "item 1"));
543 [ExpectedException (typeof (IndexOutOfRangeException))]
544 public void TestDeleteOutOfBounds ()
546 DataView TestView = new DataView (dataTable);
547 TestView.Delete (100);
551 [ExpectedException (typeof (DataException))]
552 public void TestDeleteNotAllowed ()
554 DataView TestView = new DataView (dataTable);
555 TestView.AllowDelete = false;
560 [ExpectedException (typeof (DataException))]
561 public void TestDeleteClosed ()
563 DataView TestView = new DataView (dataTable);
564 TestView.Dispose (); // Close the table
568 [Test] // based on bug #74631
569 public void TestDeleteAndCount ()
571 DataSet dataset = new DataSet ("new");
572 DataTable dt = new DataTable ("table1");
573 dataset.Tables.Add (dt);
574 dt.Columns.Add ("col1");
575 dt.Columns.Add ("col2");
576 dt.Rows.Add (new object []{1,1});
577 dt.Rows.Add (new object []{1,2});
578 dt.Rows.Add (new object []{1,3});
580 DataView dataView = new DataView (dataset.Tables[0]);
582 AssertEquals ("before delete", 3, dataView.Count);
583 dataView.AllowDelete = true;
585 // Deleting the first row
588 AssertEquals ("before delete", 2, dataView.Count);
592 public void ListChangeOnSetItem ()
594 DataTable dt = new DataTable ("table");
595 dt.Columns.Add ("col1");
596 dt.Columns.Add ("col2");
597 dt.Columns.Add ("col3");
598 dt.Rows.Add (new object [] {1, 2, 3});
600 DataView dv = new DataView (dt);
601 dv.ListChanged += new ListChangedEventHandler (OnChange);
605 ListChangedEventArgs ListChangeArgOnSetItem;
607 void OnChange (object o, ListChangedEventArgs e)
609 if (ListChangeArgOnSetItem != null)
610 throw new Exception ("The event is already fired.");
611 ListChangeArgOnSetItem = e;
615 public void CancelEditAndEvents ()
617 string reference = " =====ItemAdded:3 ------4 =====ItemAdded:3 =====ItemAdded:4 ------5 =====ItemAdded:4 =====ItemAdded:5 ------6 =====ItemDeleted:5 ------5 =====ItemAdded:5";
619 eventWriter = new StringWriter ();
621 DataTable dt = new DataTable ();
622 dt.Columns.Add ("col1");
623 dt.Columns.Add ("col2");
624 dt.Columns.Add ("col3");
625 dt.Rows.Add (new object [] {1,2,3});
626 dt.Rows.Add (new object [] {1,2,3});
627 dt.Rows.Add (new object [] {1,2,3});
629 DataView dv = new DataView (dt);
630 dv.ListChanged += new ListChangedEventHandler (ListChanged);
631 DataRowView a1 = dv.AddNew ();
632 eventWriter.Write (" ------" + dv.Count);
633 // I wonder why but MS fires another event here.
635 eventWriter.Write (" ------" + dv.Count);
636 // I wonder why but MS fires another event here.
637 DataRowView a2 = dv.AddNew ();
638 eventWriter.Write (" ------" + dv.Count);
640 eventWriter.Write (" ------" + dv.Count);
641 DataRowView a3 = dv.AddNew ();
643 AssertEquals (reference, eventWriter.ToString ());
646 private void ListChanged (object o, ListChangedEventArgs e)
648 eventWriter.Write (" =====" + e.ListChangedType + ":" + e.NewIndex);
652 [NUnit.Framework.Category ("NotWorking")]
653 public void ComplexEventSequence1 ()
655 string result = @"setting table...
656 ---- OnListChanged PropertyDescriptorChanged,0,0
657 ----- UpdateIndex : True
658 ---- OnListChanged Reset,-1,-1
660 ---- OnListChanged PropertyDescriptorAdded,0,0
662 ---- OnListChanged PropertyDescriptorAdded,0,0
664 ---- OnListChanged PropertyDescriptorAdded,0,0
667 ----- UpdateIndex : True
668 ---- OnListChanged Reset,-1,-1
670 ---- OnListChanged PropertyDescriptorDeleted,0,0
672 ----- UpdateIndex : True
673 ---- OnListChanged Reset,-1,-1
675 ----- UpdateIndex : True
676 ---- OnListChanged Reset,-1,-1
677 rowstatefilter changed.
678 ----- UpdateIndex : True
679 ---- OnListChanged Reset,-1,-1
680 rowstatefilter changed.
681 ---- OnListChanged ItemAdded,0,-1
683 ---- OnListChanged ItemAdded,0,-1
685 ---- OnListChanged ItemAdded,0,-1
687 ---- OnListChanged ItemAdded,3,-1
690 ---- OnListChanged ItemDeleted,3,-1
691 ---- OnListChanged ItemMoved,-2147483648,3
694 ---- OnListChanged ItemMoved,0,-2147483648
695 value changed to appear.
697 ---- OnListChanged ItemMoved,3,0
700 ---- OnListChanged ItemMoved,1,3
703 ---- OnListChanged PropertyDescriptorChanged,0,0
704 ----- UpdateIndex : True
705 ---- OnListChanged Reset,-1,-1
709 eventWriter = new StringWriter ();
711 DataTable dt = new DataTable ("table");
712 ComplexEventSequence1View dv =
713 new ComplexEventSequence1View (dt, eventWriter);
714 dt.Columns.Add ("col1");
715 eventWriter.WriteLine (" col1 added.");
716 dt.Columns.Add ("col2");
717 eventWriter.WriteLine (" col2 added.");
718 dt.Columns.Add ("col3");
719 eventWriter.WriteLine (" col3 added.");
720 dt.Constraints.Add (new UniqueConstraint (dt.Columns [0]));
721 eventWriter.WriteLine (" uniq added.");
723 eventWriter.WriteLine (" sort changed.");
724 dt.Columns.Remove ("col3");
725 eventWriter.WriteLine (" col3 removed.");
726 dv.RowFilter = "col1 <> 0";
727 eventWriter.WriteLine (" rowfilter changed.");
728 dv.RowStateFilter = DataViewRowState.Deleted;
729 eventWriter.WriteLine (" rowstatefilter changed.");
730 // FIXME: should be also tested.
731 // dv.ApplyDefaultSort = true;
732 // eventWriter.WriteLine (" apply default sort changed.");
733 dv.RowStateFilter = DataViewRowState.CurrentRows;
734 eventWriter.WriteLine (" rowstatefilter changed.");
735 dt.Rows.Add (new object [] {1, 3});
736 eventWriter.WriteLine (" added row to Rows.");
737 dt.Rows.Add (new object [] {2, 2});
738 eventWriter.WriteLine (" added row to Rows.");
739 dt.Rows.Add (new object [] {3, 1});
740 eventWriter.WriteLine (" added row to Rows.");
741 DataRowView drv = dv.AddNew ();
742 eventWriter.WriteLine (" AddNew() invoked.");
743 eventWriter.WriteLine (dv.Count);
746 eventWriter.WriteLine (" EndEdit() invoked.");
747 eventWriter.WriteLine (dv.Count);
748 dt.Rows [dt.Rows.Count - 1] [0] = 4;
749 eventWriter.WriteLine (" value changed to appear.");
750 eventWriter.WriteLine (dv.Count);
751 dt.Rows [dt.Rows.Count - 1] [1] = 4;
752 eventWriter.WriteLine (" value moved.");
753 eventWriter.WriteLine (dv.Count);
754 dt.Rows [dt.Rows.Count - 1] [1] = 1.5;
755 eventWriter.WriteLine (" value moved again.");
756 eventWriter.WriteLine (dv.Count);
757 dv.Table = new DataTable ("table2");
758 eventWriter.WriteLine ("table changed.");
760 AssertEquals (result, eventWriter.ToString ().Replace ("\r\n", "\n"));
763 public class ComplexEventSequence1View : DataView
767 public ComplexEventSequence1View (DataTable dt,
768 TextWriter w) : base ()
771 w.WriteLine ("setting table...");
773 w.WriteLine ("table was set.");
776 protected override void OnListChanged (ListChangedEventArgs e)
779 w.WriteLine ("---- OnListChanged " + e.ListChangedType + "," + e.NewIndex + "," + e.OldIndex);
780 base.OnListChanged (e);
783 protected override void UpdateIndex (bool force)
786 w.WriteLine ("----- UpdateIndex : " + force);
787 base.UpdateIndex (force);