Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/mcs
diff options
context:
space:
mode:
authorAtsushi Eno <atsushieno@gmail.com>2005-02-02 11:12:32 +0300
committerAtsushi Eno <atsushieno@gmail.com>2005-02-02 11:12:32 +0300
commitccf9ce170472892c3dabc34267d1c74dc27461a7 (patch)
tree325212573727bac9deb72f5e439478b87753b93e /mcs
parent63b27fea50e775b50c3067da25d94b9331d3d26a (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/ChangeLog11
-rw-r--r--mcs/class/System.Data/System.Data/DataView.cs35
-rw-r--r--mcs/class/System.Data/Test/System.Data/ChangeLog5
-rw-r--r--mcs/class/System.Data/Test/System.Data/DataViewTest.cs190
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);
+ }
+ }
}
}