Jo Shields 3c1f479b9d Imported Upstream version 4.0.0~alpha1
Former-commit-id: 806294f5ded97629b74c85c09952f2a74fe182d9
2015-04-07 09:35:12 +01:00

1004 lines
26 KiB
C#

// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// Copyright (c) 2007 Novell, Inc.
//
// Authors:
// Chris Toshok toshok@ximian.com
#define WITH_BINDINGS
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Reflection;
using System.Windows.Forms;
using NUnit.Framework;
using CategoryAttribute = NUnit.Framework.CategoryAttribute;
namespace MonoTests.System.Windows.Forms.DataBinding
{
public class DataBindingTest : TestHelper
{
protected int event_num;
protected string event_log = "";
protected void CurrentChanged (object sender, EventArgs args)
{
//Console.WriteLine (Environment.StackTrace);
event_log += String.Format ("{0}: CurrentChanged\n", event_num++);
}
protected void PositionChanged (object sender, EventArgs args)
{
//Console.WriteLine (Environment.StackTrace);
event_log += String.Format ("{0}: PositionChanged (to {1})\n", event_num++, ((CurrencyManager)sender).Position);
}
protected void ItemChanged (object sender, ItemChangedEventArgs args)
{
//Console.WriteLine (Environment.StackTrace);
event_log += String.Format ("{0}: ItemChanged (index = {1})\n", event_num++, args.Index);
}
protected void ListChanged (object sender, ListChangedEventArgs args)
{
//Console.WriteLine (Environment.StackTrace);
event_log += String.Format ("{0}: ListChanged ({1}, {2}, {3})\n", event_num++, args.ListChangedType, args.OldIndex, args.NewIndex);
}
protected void MetaDataChanged (object sender, EventArgs args)
{
//Console.WriteLine (Environment.StackTrace);
event_log += String.Format ("{0}: MetaDataChanged\n", event_num++);
}
protected void BindingComplete (object sender, BindingCompleteEventArgs args)
{
//Console.WriteLine (Environment.StackTrace);
event_log += String.Format ("{0}: BindingComplete\n", event_num++);
}
protected void CurrentItemChanged (object sender, EventArgs args)
{
//Console.WriteLine (Environment.StackTrace);
event_log += String.Format ("{0}: CurrentItemChanged\n", event_num++);
}
protected void DataError (object sender, BindingManagerDataErrorEventArgs args)
{
//Console.WriteLine (Environment.StackTrace);
event_log += String.Format ("{0}: DataError\n", event_num++);
}
protected void Format (object sender, ConvertEventArgs args)
{
//Console.WriteLine (Environment.StackTrace);
event_log += String.Format ("{0}: Binding.Format\n", event_num++);
}
protected void Parse (object sender, ConvertEventArgs args)
{
//Console.WriteLine (Environment.StackTrace);
event_log += String.Format ("{0}: Binding.Parse\n", event_num++);
}
void TextChanged (object sender, EventArgs e)
{
//Console.WriteLine (Environment.StackTrace);
event_log += String.Format ("{0}: TextChanged\n", event_num++);
}
protected void HookupCurrencyManager (CurrencyManager cm)
{
cm.CurrentChanged += new EventHandler (CurrentChanged);
cm.PositionChanged += new EventHandler (PositionChanged);
cm.ItemChanged += new ItemChangedEventHandler (ItemChanged);
cm.MetaDataChanged += new EventHandler (MetaDataChanged);
cm.BindingComplete += new BindingCompleteEventHandler (BindingComplete);
cm.CurrentItemChanged += new EventHandler (CurrentItemChanged);
cm.DataError += new BindingManagerDataErrorEventHandler (DataError);
}
protected void HookupPropertyManager (PropertyManager pm)
{
pm.CurrentChanged += new EventHandler (CurrentChanged);
pm.PositionChanged += new EventHandler (PositionChanged);
pm.BindingComplete += new BindingCompleteEventHandler (BindingComplete);
pm.CurrentItemChanged += new EventHandler (CurrentItemChanged);
pm.DataError += new BindingManagerDataErrorEventHandler (DataError);
}
protected void HookupBinding (Binding b)
{
b.Parse += new ConvertEventHandler (Parse);
b.Format += new ConvertEventHandler (Format);
}
protected void HookupControl (Control c)
{
c.TextChanged += new EventHandler (TextChanged);
}
}
[TestFixture]
public class CurrencyManagerTest2 : DataBindingTest
{
[Test]
public void TestDeleteOnlyRow ()
{
Control c = new Control ();
c.CreateControl ();
Binding binding;
CurrencyManager cm;
DataSet dataSet1 = new DataSet();
dataSet1.Tables.Add();
dataSet1.Tables[0].Columns.Add();
DataRow newrow = dataSet1.Tables[0].NewRow ();
dataSet1.Tables[0].Rows.Add(newrow);
c.BindingContext = new BindingContext ();
cm = (CurrencyManager) c.BindingContext[dataSet1, dataSet1.Tables[0].TableName];
binding = c.DataBindings.Add ("Text", dataSet1.Tables[0], dataSet1.Tables[0].Columns[0].ColumnName);
HookupCurrencyManager (cm);
HookupBinding (binding);
cm.Position = 0;
Assert.AreEqual (1, cm.Count, "1");
DataRowView row = (DataRowView)cm.Current;
event_log = "";
event_num = 0;
row.Delete ();
Assert.AreEqual (-1, cm.Position);
// Console.WriteLine (event_log);
Assert.AreEqual (
"0: PositionChanged (to -1)\n1: ItemChanged (index = -1)\n2: PositionChanged (to -1)\n3: CurrentChanged\n4: CurrentItemChanged\n5: ItemChanged (index = -1)\n"
, event_log, "2");
Assert.AreEqual (0, cm.Count, "3");
}
[Test]
public void TestDeleteRowBeforeCurrent ()
{
Control c = new Control ();
c.CreateControl ();
Binding binding;
CurrencyManager cm;
DataRow newrow;
DataSet dataSet1 = new DataSet();
dataSet1.Tables.Add();
dataSet1.Tables[0].Columns.Add();
newrow = dataSet1.Tables[0].NewRow ();
dataSet1.Tables[0].Rows.Add(newrow);
newrow = dataSet1.Tables[0].NewRow ();
dataSet1.Tables[0].Rows.Add(newrow);
c.BindingContext = new BindingContext ();
cm = (CurrencyManager) c.BindingContext[dataSet1, dataSet1.Tables[0].TableName];
binding = c.DataBindings.Add ("Text", dataSet1.Tables[0], dataSet1.Tables[0].Columns[0].ColumnName);
HookupCurrencyManager (cm);
#if WITH_BINDINGS
HookupBinding (binding);
#endif
cm.Position = 1;
Assert.AreEqual (2, cm.Count, "1");
DataView dv = dataSet1.Tables[0].DefaultView;
DataRowView row = dv[0];
event_log = "";
event_num = 0;
row.Delete ();
Assert.AreEqual (0, cm.Position);
Console.WriteLine (event_log);
Assert.AreEqual (
#if WITH_BINDINGS
"0: CurrentChanged\n1: CurrentItemChanged\n2: PositionChanged (to 0)\n3: ItemChanged (index = -1)\n4: Binding.Format\n"
#else
"0: CurrentChanged\n1: CurrentItemChanged\n2: PositionChanged (to 0)\n3: ItemChanged (index = -1)\n"
#endif
, event_log, "2");
}
[Test]
public void TestDeleteRowAfterCurrent ()
{
Control c = new Control ();
c.CreateControl ();
Binding binding;
CurrencyManager cm;
DataRow newrow;
DataSet dataSet1 = new DataSet();
dataSet1.Tables.Add();
dataSet1.Tables[0].Columns.Add();
newrow = dataSet1.Tables[0].NewRow ();
dataSet1.Tables[0].Rows.Add(newrow);
newrow = dataSet1.Tables[0].NewRow ();
dataSet1.Tables[0].Rows.Add(newrow);
c.BindingContext = new BindingContext ();
cm = (CurrencyManager) c.BindingContext[dataSet1, dataSet1.Tables[0].TableName];
binding = c.DataBindings.Add ("Text", dataSet1.Tables[0], dataSet1.Tables[0].Columns[0].ColumnName);
HookupCurrencyManager (cm);
#if WITH_BINDINGS
HookupBinding (binding);
#endif
cm.Position = 0;
Assert.AreEqual (2, cm.Count, "1");
DataView dv = dataSet1.Tables[0].DefaultView;
DataRowView row = dv[1];
event_log = "";
event_num = 0;
row.Delete ();
Assert.AreEqual (0, cm.Position);
Console.WriteLine (event_log);
#if WITH_BINDINGS
Assert.AreEqual ("0: ItemChanged (index = -1)\n1: Binding.Format\n", event_log, "2");
#else
Assert.AreEqual ("0: ItemChanged (index = -1)\n", event_log, "2");
#endif
Assert.AreEqual (1, cm.Count, "3");
}
[Test]
public void TestDeleteCurrentRowWithOthers ()
{
Control c = new Control ();
c.CreateControl ();
Binding binding;
CurrencyManager cm;
DataRow newrow;
DataSet dataSet1 = new DataSet();
dataSet1.Tables.Add();
dataSet1.Tables[0].Columns.Add();
newrow = dataSet1.Tables[0].NewRow ();
dataSet1.Tables[0].Rows.Add(newrow);
newrow = dataSet1.Tables[0].NewRow ();
dataSet1.Tables[0].Rows.Add(newrow);
c.BindingContext = new BindingContext ();
cm = (CurrencyManager) c.BindingContext[dataSet1, dataSet1.Tables[0].TableName];
binding = c.DataBindings.Add ("Text", dataSet1.Tables[0], dataSet1.Tables[0].Columns[0].ColumnName);
HookupCurrencyManager (cm);
#if WITH_BINDINGS
HookupBinding (binding);
#endif
cm.Position = 0;
Assert.AreEqual (2, cm.Count, "1");
DataView dv = dataSet1.Tables[0].DefaultView;
DataRowView row = dv[0];
event_log = "";
event_num = 0;
row.Delete ();
Assert.AreEqual (0, cm.Position);
Console.WriteLine (event_log);
Assert.AreEqual (
#if WITH_BINDINGS
"0: CurrentChanged\n1: CurrentItemChanged\n2: ItemChanged (index = -1)\n3: Binding.Format\n"
#else
"0: CurrentChanged\n1: CurrentItemChanged\n2: ItemChanged (index = -1)\n"
#endif
, event_log, "2");
Assert.AreEqual (1, cm.Count, "3");
}
[Test]
public void TestAddFirstRow ()
{
if (TestHelper.RunningOnUnix) {
Assert.Ignore ("Fails at the moment");
}
Control c = new Control ();
c.CreateControl ();
Binding binding;
CurrencyManager cm;
DataSet dataSet1 = new DataSet();
dataSet1.Tables.Add();
dataSet1.Tables[0].Columns.Add();
c.BindingContext = new BindingContext ();
cm = (CurrencyManager) c.BindingContext[dataSet1, dataSet1.Tables[0].TableName];
binding = c.DataBindings.Add ("Text", dataSet1.Tables[0], dataSet1.Tables[0].Columns[0].ColumnName);
HookupCurrencyManager (cm);
#if WITH_BINDINGS
HookupBinding (binding);
#endif
cm.Position = 0;
Assert.AreEqual (0, cm.Count, "1");
event_log = "";
event_num = 0;
DataRow newrow = dataSet1.Tables[0].NewRow ();
dataSet1.Tables[0].Rows.Add(newrow);
Assert.AreEqual (0, cm.Position);
Console.WriteLine (event_log);
Assert.AreEqual (
#if WITH_BINDINGS
"0: PositionChanged (to 0)\n1: CurrentChanged\n2: CurrentItemChanged\n3: ItemChanged (index = -1)\n4: ItemChanged (index = -1)\n5: Binding.Format\n6: Binding.Format\n7: Binding.Format\n"
#else
"0: PositionChanged (to 0)\n1: CurrentChanged\n2: CurrentItemChanged\n3: ItemChanged (index = -1)\n4: ItemChanged (index = -1)\n"
#endif
, event_log, "2");
Assert.AreEqual (1, cm.Count, "3");
}
[Test]
public void TestAppendRowAfterCurrent ()
{
Control c = new Control ();
c.CreateControl ();
Binding binding;
CurrencyManager cm;
DataSet dataSet1 = new DataSet();
dataSet1.Tables.Add();
dataSet1.Tables[0].Columns.Add();
c.BindingContext = new BindingContext ();
cm = (CurrencyManager) c.BindingContext[dataSet1, dataSet1.Tables[0].TableName];
binding = c.DataBindings.Add ("Text", dataSet1.Tables[0], dataSet1.Tables[0].Columns[0].ColumnName);
HookupCurrencyManager (cm);
#if WITH_BINDINGS
HookupBinding (binding);
#endif
cm.Position = 0;
Assert.AreEqual (0, cm.Count, "1");
DataRow newrow = dataSet1.Tables[0].NewRow ();
dataSet1.Tables[0].Rows.Add(newrow);
event_log = "";
event_num = 0;
newrow = dataSet1.Tables[0].NewRow ();
dataSet1.Tables[0].Rows.Add(newrow);
Assert.AreEqual (0, cm.Position);
Console.WriteLine (event_log);
#if WITH_BINDINGS
Assert.AreEqual ("0: ItemChanged (index = -1)\n1: Binding.Format\n", event_log, "2");
#else
Assert.AreEqual ("0: ItemChanged (index = -1)\n", event_log, "2");
#endif
Assert.AreEqual (2, cm.Count, "3");
}
[Test]
public void TestInsertRowBeforeCurrent ()
{
#if WITH_BINDINGS
if (TestHelper.RunningOnUnix) {
Assert.Ignore ("Too many Binding.Format events here");
}
#endif
Control c = new Control ();
c.CreateControl ();
Binding binding;
CurrencyManager cm;
DataSet dataSet1 = new DataSet();
dataSet1.Tables.Add();
dataSet1.Tables[0].Columns.Add();
c.BindingContext = new BindingContext ();
cm = (CurrencyManager) c.BindingContext[dataSet1, dataSet1.Tables[0].TableName];
binding = c.DataBindings.Add ("Text", dataSet1.Tables[0], dataSet1.Tables[0].Columns[0].ColumnName);
/* insert 2 rows */
DataRow newrow = dataSet1.Tables[0].NewRow ();
dataSet1.Tables[0].Rows.Add(newrow);
newrow = dataSet1.Tables[0].NewRow ();
dataSet1.Tables[0].Rows.Add(newrow);
Assert.AreEqual (2, cm.Count, "1");
cm.Position = 1;
HookupCurrencyManager (cm);
#if WITH_BINDINGS
HookupBinding (binding);
#endif
event_log = "";
event_num = 0;
newrow = dataSet1.Tables[0].NewRow ();
dataSet1.Tables[0].Rows.InsertAt(newrow, 0);
Assert.AreEqual (2, cm.Position);
Console.WriteLine (event_log);
Assert.AreEqual (
#if WITH_BINDINGS
"0: CurrentChanged\n1: CurrentItemChanged\n2: ItemChanged (index = -1)\n3: PositionChanged (to 2)\n4: Binding.Format\n"
#else
"0: CurrentChanged\n1: CurrentItemChanged\n2: ItemChanged (index = -1)\n3: PositionChanged (to 2)\n"
#endif
, event_log, "2");
Assert.AreEqual (3, cm.Count, "3");
}
[Test]
public void TestInsertRowAtCurrent ()
{
Control c = new Control ();
c.CreateControl ();
Binding binding;
CurrencyManager cm;
DataSet dataSet1 = new DataSet();
dataSet1.Tables.Add();
dataSet1.Tables[0].Columns.Add();
c.BindingContext = new BindingContext ();
cm = (CurrencyManager) c.BindingContext[dataSet1, dataSet1.Tables[0].TableName];
binding = c.DataBindings.Add ("Text", dataSet1.Tables[0], dataSet1.Tables[0].Columns[0].ColumnName);
HookupCurrencyManager (cm);
#if WITH_BINDINGS
HookupBinding (binding);
#endif
/* insert 2 rows */
DataRow newrow = dataSet1.Tables[0].NewRow ();
dataSet1.Tables[0].Rows.Add(newrow);
newrow = dataSet1.Tables[0].NewRow ();
dataSet1.Tables[0].Rows.Add(newrow);
Assert.AreEqual (2, cm.Count, "1");
cm.Position = 1;
event_log = "";
event_num = 0;
newrow = dataSet1.Tables[0].NewRow ();
dataSet1.Tables[0].Rows.InsertAt(newrow, 1);
Assert.AreEqual (2, cm.Position);
Console.WriteLine (event_log);
Assert.AreEqual (
#if WITH_BINDINGS
"0: CurrentChanged\n1: CurrentItemChanged\n2: ItemChanged (index = -1)\n3: PositionChanged (to 2)\n4: Binding.Format\n"
#else
"0: CurrentChanged\n1: CurrentItemChanged\n2: ItemChanged (index = -1)\n3: PositionChanged (to 2)\n"
#endif
, event_log, "2");
Assert.AreEqual (3, cm.Count, "3");
}
[Test]
public void TestColumnAdd ()
{
Control c = new Control ();
c.CreateControl ();
Binding binding;
CurrencyManager cm;
DataSet dataSet1 = new DataSet();
dataSet1.Tables.Add();
dataSet1.Tables[0].Columns.Add();
c.BindingContext = new BindingContext ();
cm = (CurrencyManager) c.BindingContext[dataSet1, dataSet1.Tables[0].TableName];
binding = c.DataBindings.Add ("Text", dataSet1.Tables[0], dataSet1.Tables[0].Columns[0].ColumnName);
HookupCurrencyManager (cm);
HookupBinding (binding);
cm.Position = 0;
Assert.AreEqual (0, cm.Count, "1");
event_log = "";
event_num = 0;
dataSet1.Tables[0].Columns.Add();
Assert.AreEqual (-1, cm.Position);
Console.WriteLine (event_log);
Assert.AreEqual ("0: MetaDataChanged\n", event_log, "2");
Assert.AreEqual (0, cm.Count, "3");
}
[Test]
public void TestColumnRemove ()
{
Control c = new Control ();
c.CreateControl ();
Binding binding;
CurrencyManager cm;
DataSet dataSet1 = new DataSet();
dataSet1.Tables.Add();
dataSet1.Tables[0].Columns.Add();
dataSet1.Tables[0].Columns.Add();
c.BindingContext = new BindingContext ();
cm = (CurrencyManager) c.BindingContext[dataSet1, dataSet1.Tables[0].TableName];
binding = c.DataBindings.Add ("Text", dataSet1.Tables[0], dataSet1.Tables[0].Columns[0].ColumnName);
HookupCurrencyManager (cm);
HookupBinding (binding);
cm.Position = 0;
Assert.AreEqual (0, cm.Count, "1");
event_log = "";
event_num = 0;
dataSet1.Tables[0].Columns.Remove(dataSet1.Tables[0].Columns[1]);
Assert.AreEqual (-1, cm.Position);
Console.WriteLine (event_log);
Assert.AreEqual ("0: MetaDataChanged\n", event_log, "2");
Assert.AreEqual (0, cm.Count, "3");
}
[Test]
public void TestColumnRemoveBound ()
{
Control c = new Control ();
c.CreateControl ();
Binding binding;
CurrencyManager cm;
DataSet dataSet1 = new DataSet();
dataSet1.Tables.Add();
dataSet1.Tables[0].Columns.Add();
dataSet1.Tables[0].Columns.Add();
c.BindingContext = new BindingContext ();
cm = (CurrencyManager) c.BindingContext[dataSet1, dataSet1.Tables[0].TableName];
binding = c.DataBindings.Add ("Text", dataSet1.Tables[0], dataSet1.Tables[0].Columns[0].ColumnName);
HookupCurrencyManager (cm);
HookupBinding (binding);
cm.Position = 0;
Assert.IsFalse (binding.IsBinding, "1");
Assert.AreEqual (0, cm.Count, "2");
event_log = "";
event_num = 0;
dataSet1.Tables[0].Columns.Remove(dataSet1.Tables[0].Columns[0]);
Assert.AreEqual (-1, cm.Position);
Console.WriteLine (event_log);
Assert.AreEqual ("0: MetaDataChanged\n", event_log, "3");
Assert.AreEqual (0, cm.Count, "4");
Assert.IsFalse (binding.IsBinding, "5");
}
[Test]
public void TestColumnChangeName ()
{
Control c = new Control ();
c.CreateControl ();
Binding binding;
CurrencyManager cm;
DataSet dataSet1 = new DataSet();
dataSet1.Tables.Add();
dataSet1.Tables [0].Columns.CollectionChanged += new CollectionChangeEventHandler (
DataColumnCollection_CollectionChanged);
dataSet1.Tables[0].Columns.Add();
c.BindingContext = new BindingContext ();
cm = (CurrencyManager) c.BindingContext[dataSet1, dataSet1.Tables[0].TableName];
binding = c.DataBindings.Add ("Text", dataSet1.Tables[0], dataSet1.Tables[0].Columns[0].ColumnName);
HookupCurrencyManager (cm);
HookupBinding (binding);
cm.Position = 0;
Assert.IsFalse (binding.IsBinding, "1");
Assert.AreEqual (0, cm.Count, "2");
event_log = "";
event_num = 0;
dataSet1.Tables [0].DefaultView.ListChanged += new ListChangedEventHandler (
DataView_ListChanged);
dataSet1.Tables[0].Columns[0].ColumnName = "new name";
Assert.AreEqual (-1, cm.Position);
Console.WriteLine (event_log);
Assert.AreEqual ("0: MetaDataChanged\n", event_log, "3");
Assert.AreEqual (0, cm.Count, "4");
Assert.IsFalse (binding.IsBinding, "5");
}
void DataColumnCollection_CollectionChanged (object sender, CollectionChangeEventArgs e)
{
Console.WriteLine ("collection changed : {0} {1}", e.Action, e.Element.GetType());
}
void DataView_ListChanged (object sender, ListChangedEventArgs e)
{
Console.WriteLine ("list changed : {0} {1} {2}", e.ListChangedType, e.OldIndex, e.NewIndex);
}
[Test]
public void TestRowModify ()
{
Control c = new Control ();
c.CreateControl ();
Binding binding;
CurrencyManager cm;
string column_name;
DataSet dataSet1 = new DataSet();
dataSet1.Tables.Add();
dataSet1.Tables[0].Columns.Add();
DataRow newrow = dataSet1.Tables[0].NewRow ();
dataSet1.Tables[0].Rows.Add(newrow);
column_name = dataSet1.Tables[0].Columns[0].ColumnName;
c.BindingContext = new BindingContext ();
cm = (CurrencyManager) c.BindingContext[dataSet1, dataSet1.Tables[0].TableName];
binding = c.DataBindings.Add ("Text", dataSet1.Tables[0], column_name);
HookupCurrencyManager (cm);
#if WITH_BINDINGS
HookupBinding (binding);
#endif
cm.Position = 0;
Assert.AreEqual (1, cm.Count, "1");
event_log = "";
event_num = 0;
DataRowView row = (DataRowView)cm.Current;
row.BeginEdit ();
row[column_name] = "hi";
row.EndEdit ();
Assert.AreEqual (0, cm.Position);
Console.WriteLine (event_log);
Assert.AreEqual (
#if WITH_BINDINGS
"0: CurrentItemChanged\n1: ItemChanged (index = 0)\n2: Binding.Format\n"
#else
"0: CurrentItemChanged\n1: ItemChanged (index = 0)\n"
#endif
, event_log, "2");
Assert.AreEqual (1, cm.Count, "3");
}
[Test]
public void TestRowCancelModify ()
{
Control c = new Control ();
c.CreateControl ();
Binding binding;
CurrencyManager cm;
string column_name;
DataSet dataSet1 = new DataSet();
dataSet1.Tables.Add();
dataSet1.Tables[0].Columns.Add();
DataRow newrow = dataSet1.Tables[0].NewRow ();
dataSet1.Tables[0].Rows.Add(newrow);
column_name = dataSet1.Tables[0].Columns[0].ColumnName;
c.BindingContext = new BindingContext ();
cm = (CurrencyManager) c.BindingContext[dataSet1, dataSet1.Tables[0].TableName];
binding = c.DataBindings.Add ("Text", dataSet1.Tables[0], column_name);
HookupCurrencyManager (cm);
HookupBinding (binding);
cm.Position = 0;
Assert.AreEqual (1, cm.Count, "1");
event_log = "";
event_num = 0;
DataRowView row = (DataRowView)cm.Current;
row.BeginEdit ();
row[column_name] = "hi";
cm.CancelCurrentEdit ();
Assert.AreEqual (0, cm.Position);
Console.WriteLine (event_log);
Assert.AreEqual ("0: ItemChanged (index = 0)\n", event_log, "2");
Assert.AreEqual (1, cm.Count, "3");
}
[Test]
public void TestDeleteInEdit ()
{
Control c = new Control ();
c.CreateControl ();
Binding binding;
BindingContext bc = new BindingContext ();
CurrencyManager cm;
DataSet dataSet1 = new DataSet();
dataSet1.Tables.Add();
dataSet1.Tables[0].Columns.Add();
DataRow newrow = dataSet1.Tables[0].NewRow ();
dataSet1.Tables[0].Rows.Add(newrow);
cm = (CurrencyManager) bc[dataSet1, dataSet1.Tables[0].TableName];
binding = c.DataBindings.Add ("Text", dataSet1.Tables[0], dataSet1.Tables[0].Columns[0].ColumnName);
Assert.AreEqual (1, cm.Count, "1");
HookupCurrencyManager (cm);
#if WITH_BINDINGS
HookupBinding (binding);
#endif
cm.Position = 0;
event_log = "";
event_num = 0;
DataRowView row = (DataRowView)cm.Current;
row.Delete ();
Assert.AreEqual (-1, cm.Position);
Console.WriteLine (event_log);
Assert.AreEqual (
"0: PositionChanged (to -1)\n1: ItemChanged (index = -1)\n2: PositionChanged (to -1)\n3: CurrentChanged\n4: CurrentItemChanged\n5: ItemChanged (index = -1)\n"
, event_log, "1");
Assert.AreEqual (0, cm.Count, "2");
}
[Test]
public void Bug81022 ()
{
if (TestHelper.RunningOnUnix) {
Assert.Ignore ("Fails at the moment");
}
BindingContext bc = new BindingContext ();
CurrencyManager cm;
DataView dv = new DataView();
DataTable dt = new DataTable("Testdata");
cm = (CurrencyManager)bc [dt];
HookupCurrencyManager (cm);
event_log = ""; event_num = 0;
dv.Table = dt;
Assert.AreEqual ("", event_log, "1");
Console.WriteLine (">1");
dt.Columns.Add("A");
Console.WriteLine ("<1");
Assert.AreEqual ("0: MetaDataChanged\n", event_log, "1");
event_log = ""; event_num = 0;
Console.WriteLine (">2");
dt.Columns.Add("B");
Console.WriteLine ("<2");
Assert.AreEqual ("0: MetaDataChanged\n", event_log, "2");
event_log = ""; event_num = 0;
Console.WriteLine (">3");
dt.Rows.Add(new object[]{"A1", "B1"});
Console.WriteLine ("<3");
Assert.AreEqual ("0: PositionChanged (to 0)\n1: CurrentChanged\n2: CurrentItemChanged\n3: ItemChanged (index = -1)\n4: ItemChanged (index = -1)\n", event_log, "3");
event_log = ""; event_num = 0;
Console.WriteLine (">4");
dt.Rows.Add(new object[]{"A2", "B2"});
Console.WriteLine ("<4");
Assert.AreEqual ("0: ItemChanged (index = -1)\n", event_log, "4");
Assert.AreEqual (2, cm.Count, "5");
}
[Test]
public void CancelAddNew ()
{
if (TestHelper.RunningOnUnix) {
Assert.Ignore ("Fails at the moment");
}
Control c = new Control ();
c.CreateControl ();
Binding binding;
CurrencyManager cm;
DataSet dataSet1 = new DataSet();
dataSet1.Tables.Add();
dataSet1.Tables[0].Columns.Add();
c.BindingContext = new BindingContext ();
cm = (CurrencyManager) c.BindingContext[dataSet1, dataSet1.Tables[0].TableName];
binding = c.DataBindings.Add ("Text", dataSet1.Tables[0], dataSet1.Tables[0].Columns[0].ColumnName);
HookupCurrencyManager (cm);
#if WITH_BINDINGS
HookupBinding (binding);
#endif
event_log = "";
event_num = 0;
Console.WriteLine (">>>");
cm.AddNew ();
cm.CancelCurrentEdit ();
Console.WriteLine ("<<<");
Console.WriteLine (event_log);
Assert.AreEqual (
"0: PositionChanged (to 0)\n1: CurrentChanged\n2: CurrentItemChanged\n3: ItemChanged (index = -1)\n4: ItemChanged (index = -1)\n5: PositionChanged (to -1)\n6: ItemChanged (index = -1)\n7: PositionChanged (to -1)\n8: CurrentChanged\n9: CurrentItemChanged\n10: ItemChanged (index = -1)\n11: ItemChanged (index = -1)\n",
event_log, "1");
}
}
[TestFixture]
public class PropertyManagerTest2 : DataBindingTest
{
[Test]
public void TestPropertyChange ()
{
if (TestHelper.RunningOnUnix) {
Assert.Ignore ("Fails at the moment");
}
Control c1 = new Control ();
Control c2 = new Control ();
c1.CreateControl ();
c2.CreateControl ();
Binding binding;
PropertyManager pm;
c1.BindingContext = new BindingContext ();
c2.BindingContext = c1.BindingContext;
pm = (PropertyManager) c2.BindingContext[c1, "Text"];
binding = c2.DataBindings.Add ("Text", c1, "Text");
Console.WriteLine (pm.GetType());
Console.WriteLine (binding.BindingManagerBase.GetType());
Assert.IsFalse (pm == binding.BindingManagerBase, "0");
HookupPropertyManager (pm);
HookupBinding (binding);
event_log = "";
event_num = 0;
c1.Text = "hi";
Console.WriteLine (event_log);
Assert.AreEqual ("0: CurrentChanged\n1: CurrentItemChanged\n2: Binding.Format\n3: CurrentChanged\n4: CurrentItemChanged\n", event_log, "1");
}
}
}