diff options
author | Atsushi Eno <atsushieno@gmail.com> | 2005-02-02 11:12:32 +0300 |
---|---|---|
committer | Atsushi Eno <atsushieno@gmail.com> | 2005-02-02 11:12:32 +0300 |
commit | ccf9ce170472892c3dabc34267d1c74dc27461a7 (patch) | |
tree | 325212573727bac9deb72f5e439478b87753b93e /mcs | |
parent | 63b27fea50e775b50c3067da25d94b9331d3d26a (diff) |
2005-02-02 Atsushi Enomoto <atsushi@ximian.com>
* DataView.cs :
- Clear() should clear AddNew cache.
- Open() invokes Reset().
- ConstraintCollectionChanged() itself does not invoke OnListChanged().
- Reset() does not Open, Close and Update Index.
- UpdateIndex() can be invoked even if it has no table.
- Reset event is invoked always after actual query to table.
- set_Table should raise PropertyDescriptorChanged event.
* DataViewTest.cs : added practical event handling tests (though
NotWorking since it is still not complete).
svn path=/trunk/mcs/; revision=39966
Diffstat (limited to 'mcs')
-rw-r--r-- | mcs/class/System.Data/System.Data/ChangeLog | 11 | ||||
-rw-r--r-- | mcs/class/System.Data/System.Data/DataView.cs | 35 | ||||
-rw-r--r-- | mcs/class/System.Data/Test/System.Data/ChangeLog | 5 | ||||
-rw-r--r-- | mcs/class/System.Data/Test/System.Data/DataViewTest.cs | 190 |
4 files changed, 218 insertions, 23 deletions
diff --git a/mcs/class/System.Data/System.Data/ChangeLog b/mcs/class/System.Data/System.Data/ChangeLog index 8b62e283446..581c8274858 100644 --- a/mcs/class/System.Data/System.Data/ChangeLog +++ b/mcs/class/System.Data/System.Data/ChangeLog @@ -1,5 +1,16 @@ 2005-02-02 Atsushi Enomoto <atsushi@ximian.com> + * DataView.cs : + - Clear() should clear AddNew cache. + - Open() invokes Reset(). + - ConstraintCollectionChanged() itself does not invoke OnListChanged(). + - Reset() does not Open, Close and Update Index. + - UpdateIndex() can be invoked even if it has no table. + - Reset event is invoked always after actual query to table. + - set_Table should raise PropertyDescriptorChanged event. + +2005-02-02 Atsushi Enomoto <atsushi@ximian.com> + * DataView.cs : ColumnCollectionChanged() is the event invoker (i.e. when overriden, no column change events are fired). diff --git a/mcs/class/System.Data/System.Data/DataView.cs b/mcs/class/System.Data/System.Data/DataView.cs index 45764fec4f9..d9a83417dbf 100644 --- a/mcs/class/System.Data/System.Data/DataView.cs +++ b/mcs/class/System.Data/System.Data/DataView.cs @@ -99,7 +99,7 @@ namespace System.Data this.RowFilter = RowFilter; this.Sort = Sort; rowState = RowState; - Open(); + Open (); } #endregion // Constructors #region PublicProperties @@ -161,7 +161,6 @@ namespace System.Data } } UpdateIndex (true); - OnListChanged (new ListChangedEventArgs (ListChangedType.Reset,-1,-1)); } } // get the count of rows in the DataView after RowFilter @@ -212,7 +211,6 @@ namespace System.Data } rowFilter = value; UpdateIndex (true); - OnListChanged (new ListChangedEventArgs (ListChangedType.Reset, - 1, -1)); } } @@ -226,7 +224,6 @@ namespace System.Data return; rowState = value; UpdateIndex (true); - OnListChanged (new ListChangedEventArgs (ListChangedType.Reset, - 1, -1)); } } @@ -262,7 +259,6 @@ namespace System.Data sortedColumns = SortableColumn.ParseSortString (dataTable, value, true); } UpdateIndex (true); - OnListChanged (new ListChangedEventArgs (ListChangedType.Reset, - 1, -1)); } } @@ -279,15 +275,15 @@ namespace System.Data } if (dataTable != null) { - UnregisterEventHandlers(); + UnregisterEventHandlers (); } dataTable = value; if (dataTable != null) { RegisterEventHandlers(); + OnListChanged (new ListChangedEventArgs (ListChangedType.PropertyDescriptorChanged, 0, 0)); UpdateIndex (true); - OnListChanged (new ListChangedEventArgs (ListChangedType.Reset, - 1, -1)); } } } @@ -501,7 +497,9 @@ namespace System.Data { if (dataTable != null) UnregisterEventHandlers (); + UpdateIndex (false); rowViewPool.Clear (); + addNewCache.Clear (); isOpen = false; } @@ -527,7 +525,7 @@ namespace System.Data ListChanged (this, e); } - protected void Open() + protected void Open () { // I wonder if this comment is still valid, but keep // in the meantime. @@ -551,9 +549,9 @@ namespace System.Data // Count, or other properties, then just use the // index cache. if (dataTable != null) { - RegisterEventHandlers(); - UpdateIndex (true); + RegisterEventHandlers (); } + UpdateIndex (true); isOpen = true; } @@ -691,20 +689,13 @@ namespace System.Data } // UpdateIndex() is not invoked here. - - /* ItemReset */ - OnListChanged (new ListChangedEventArgs (ListChangedType.Reset,-1,-1)); } // internal use by Mono - protected void Reset() + protected void Reset () { - // TODO: what really happens? - if (IsOpen) - Close (); - UpdateIndex (true); - Open (); - OnListChanged (new ListChangedEventArgs (ListChangedType.Reset, -1 )); + // TODO: what really happens? at least it does not Open, Close and Update Index. + OnListChanged (new ListChangedEventArgs (ListChangedType.Reset, -1, -1)); } #if NET_2_0 @@ -737,6 +728,8 @@ namespace System.Data // I assume this is what UpdateIndex is used for protected virtual void UpdateIndex (bool force) { + if (dataTable == null || !force) + return; DataRow[] rows = null; // I guess, "force" parameter is used to indicate @@ -765,6 +758,8 @@ namespace System.Data } rowViewPool = newPool; + + OnListChanged (new ListChangedEventArgs (ListChangedType.Reset, -1, -1)); } [MonoTODO] diff --git a/mcs/class/System.Data/Test/System.Data/ChangeLog b/mcs/class/System.Data/Test/System.Data/ChangeLog index 2328d0a17c6..d182923d7e3 100644 --- a/mcs/class/System.Data/Test/System.Data/ChangeLog +++ b/mcs/class/System.Data/Test/System.Data/ChangeLog @@ -1,3 +1,8 @@ +2005-02-02 Atsushi Enomoto <atsushi@ximian.com> + + * DataViewTest.cs : added practical event handling tests (though + NotWorking since it is still not complete). + 2005-02-01 Atsushi Enomoto <atsushi@ximian.com> * DataTableTest.cs : added RowChanging event test. diff --git a/mcs/class/System.Data/Test/System.Data/DataViewTest.cs b/mcs/class/System.Data/Test/System.Data/DataViewTest.cs index e55ba0267da..9aafb3ccf6d 100644 --- a/mcs/class/System.Data/Test/System.Data/DataViewTest.cs +++ b/mcs/class/System.Data/Test/System.Data/DataViewTest.cs @@ -1,13 +1,14 @@ -// DataView.cs - Nunit Test Cases for for testing the DataView +// DataViewTest.cs - Nunit Test Cases for for testing the DataView // class // Authors: // Punit Kumar Todi ( punit_todi@da-iict.org ) // Patrick Kalkman kalkman@cistron.nl // Umadevi S (sumadevi@novell.com) +// Atsushi Enomoto (atsushi@ximian.com) // // (C) 2003 Patrick Kalkman // -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) +// Copyright (C) 2004-2005 Novell, Inc (http://www.novell.com) // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the @@ -35,6 +36,7 @@ using NUnit.Framework; using System; using System.Data; using System.ComponentModel; +using System.IO; namespace MonoTests.System.Data { @@ -46,6 +48,7 @@ namespace MonoTests.System.Data Random rndm; int seed, rowCount; ListChangedEventArgs listChangedArgs; + TextWriter eventWriter; [SetUp] public void GetReady () @@ -426,11 +429,192 @@ namespace MonoTests.System.Data ListChangedEventArgs ListChangeArgOnSetItem; - public void OnChange (object o, ListChangedEventArgs e) + void OnChange (object o, ListChangedEventArgs e) { if (ListChangeArgOnSetItem != null) throw new Exception ("The event is already fired."); ListChangeArgOnSetItem = e; } + + [Test] + [NUnit.Framework.Category ("NotWorking")] + public void CancelEditAndEvents () + { + string reference = " =====ItemAdded:3 ------4 =====ItemAdded:3 =====ItemAdded:4 ------5 =====ItemAdded:4 =====ItemAdded:5 ------6 =====ItemDeleted:5 ------5 =====ItemAdded:5"; + + eventWriter = new StringWriter (); + + DataTable dt = new DataTable (); + dt.Columns.Add ("col1"); + dt.Columns.Add ("col2"); + dt.Columns.Add ("col3"); + dt.Rows.Add (new object [] {1,2,3}); + dt.Rows.Add (new object [] {1,2,3}); + dt.Rows.Add (new object [] {1,2,3}); + + DataView dv = new DataView (dt); + dv.ListChanged += new ListChangedEventHandler (ListChanged); + DataRowView a1 = dv.AddNew (); + eventWriter.Write (" ------" + dv.Count); + // I wonder why but MS fires another event here. + a1 = dv.AddNew (); + eventWriter.Write (" ------" + dv.Count); + // I wonder why but MS fires another event here. + DataRowView a2 = dv.AddNew (); + eventWriter.Write (" ------" + dv.Count); + a2.CancelEdit (); + eventWriter.Write (" ------" + dv.Count); + DataRowView a3 = dv.AddNew (); + + AssertEquals (reference, eventWriter.ToString ()); + } + + private void ListChanged (object o, ListChangedEventArgs e) + { + eventWriter.Write (" =====" + e.ListChangedType + ":" + e.NewIndex); + } + + [Test] + [NUnit.Framework.Category ("NotWorking")] + public void ComplexEventSequence1 () + { + string result = @"setting table... +---- OnListChanged PropertyDescriptorChanged,0,0 +----- UpdateIndex : True +---- OnListChanged Reset,-1,-1 +table was set. +---- OnListChanged PropertyDescriptorAdded,0,0 + col1 added. +---- OnListChanged PropertyDescriptorAdded,0,0 + col2 added. +---- OnListChanged PropertyDescriptorAdded,0,0 + col3 added. + uniq added. +----- UpdateIndex : True +---- OnListChanged Reset,-1,-1 + sort changed. +---- OnListChanged PropertyDescriptorDeleted,0,0 + col3 removed. +----- UpdateIndex : True +---- OnListChanged Reset,-1,-1 + rowfilter changed. +----- UpdateIndex : True +---- OnListChanged Reset,-1,-1 + rowstatefilter changed. +----- UpdateIndex : True +---- OnListChanged Reset,-1,-1 +---- OnListChanged Reset,-1,-1 + apply default sort changed. +----- UpdateIndex : True +---- OnListChanged Reset,-1,-1 + rowstatefilter changed. +---- OnListChanged ItemAdded,0,-1 + added row to Rows. +---- OnListChanged ItemAdded,0,-1 + added row to Rows. +---- OnListChanged ItemAdded,0,-1 + added row to Rows. +---- OnListChanged ItemAdded,3,-1 + AddNew() invoked. +4 +---- OnListChanged ItemDeleted,3,-1 +---- OnListChanged ItemMoved,-2147483648,3 + EndEdit() invoked. +3 +---- OnListChanged ItemMoved,0,-2147483648 + value changed to appear. +4 +---- OnListChanged ItemMoved,3,0 + value moved. +4 +---- OnListChanged ItemMoved,1,3 + value moved again. +4 +---- OnListChanged PropertyDescriptorChanged,0,0 +----- UpdateIndex : True +---- OnListChanged Reset,-1,-1 +table changed. +"; + + eventWriter = new StringWriter (); + + DataTable dt = new DataTable ("table"); + ComplexEventSequence1View dv = + new ComplexEventSequence1View (dt, eventWriter); + dt.Columns.Add ("col1"); + eventWriter.WriteLine (" col1 added."); + dt.Columns.Add ("col2"); + eventWriter.WriteLine (" col2 added."); + dt.Columns.Add ("col3"); + eventWriter.WriteLine (" col3 added."); + dt.Constraints.Add (new UniqueConstraint (dt.Columns [0])); + eventWriter.WriteLine (" uniq added."); + dv.Sort = "col2"; + eventWriter.WriteLine (" sort changed."); + dt.Columns.Remove ("col3"); + eventWriter.WriteLine (" col3 removed."); + dv.RowFilter = "col1 <> 0"; + eventWriter.WriteLine (" rowfilter changed."); + dv.RowStateFilter = DataViewRowState.Deleted; + eventWriter.WriteLine (" rowstatefilter changed."); + dv.ApplyDefaultSort = true; + eventWriter.WriteLine (" apply default sort changed."); + dv.RowStateFilter = DataViewRowState.CurrentRows; + eventWriter.WriteLine (" rowstatefilter changed."); + dt.Rows.Add (new object [] {1, 3}); + eventWriter.WriteLine (" added row to Rows."); + dt.Rows.Add (new object [] {2, 2}); + eventWriter.WriteLine (" added row to Rows."); + dt.Rows.Add (new object [] {3, 1}); + eventWriter.WriteLine (" added row to Rows."); + DataRowView drv = dv.AddNew (); + eventWriter.WriteLine (" AddNew() invoked."); + eventWriter.WriteLine (dv.Count); + drv [0] = 0; + drv.EndEdit (); + eventWriter.WriteLine (" EndEdit() invoked."); + eventWriter.WriteLine (dv.Count); + dt.Rows [dt.Rows.Count - 1] [0] = 4; + eventWriter.WriteLine (" value changed to appear."); + eventWriter.WriteLine (dv.Count); + dt.Rows [dt.Rows.Count - 1] [1] = 4; + eventWriter.WriteLine (" value moved."); + eventWriter.WriteLine (dv.Count); + dt.Rows [dt.Rows.Count - 1] [1] = 1; + eventWriter.WriteLine (" value moved again."); + eventWriter.WriteLine (dv.Count); + dv.Table = new DataTable ("table2"); + eventWriter.WriteLine ("table changed."); + + AssertEquals (result, eventWriter.ToString ().Replace ("\r\n", "\n")); + } + + public class ComplexEventSequence1View : DataView + { + TextWriter w; + + public ComplexEventSequence1View (DataTable dt, + TextWriter w) : base () + { + this.w = w; + w.WriteLine ("setting table..."); + Table = dt; + w.WriteLine ("table was set."); + } + + protected override void OnListChanged (ListChangedEventArgs e) + { + if (w != null) + w.WriteLine ("---- OnListChanged " + e.ListChangedType + "," + e.NewIndex + "," + e.OldIndex); + base.OnListChanged (e); + } + + protected override void UpdateIndex (bool force) + { + if (w != null) + w.WriteLine ("----- UpdateIndex : " + force); + base.UpdateIndex (force); + } + } } } |