| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968 |
- // 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) 2006 Novell, Inc.
- //
- // Authors:
- // Jackson Harper [email protected]
- using System;
- using System.Data;
- using System.Collections;
- using System.ComponentModel;
- using System.Reflection;
- using System.Windows.Forms;
- using NUnit.Framework;
- namespace MonoTests.System.Windows.Forms {
- [TestFixture]
- public class CurrencyManagerTest {
- [Test]
- public void Defaults ()
- {
- BindingContext bc = new BindingContext ();
- ArrayList data_source = new ArrayList ();
- CurrencyManager cm = bc [data_source] as CurrencyManager;
- Assert.AreSame (data_source, cm.List, "DEFAULTS1");
- Assert.AreEqual (0, cm.Count, "DEFAULTS2");
- Assert.AreEqual (-1, cm.Position, "DEFAULTS3");
- }
- [Test]
- [ExpectedException (typeof (IndexOutOfRangeException))]
- public void UninitializedCurrent ()
- {
- BindingContext bc = new BindingContext ();
- ArrayList data_source = new ArrayList ();
- CurrencyManager cm = bc [data_source] as CurrencyManager;
- // This line should throw
- Assert.AreSame (null, cm.Current, "CurrentOfEmpty");
- }
- [Test]
- public void DataSetList ()
- {
- DataSet dataset = new DataSet ("DataSet");
- DataTable table = new DataTable ("Table");
- BindingContext bc = new BindingContext ();
- CurrencyManager cm;
- dataset.Tables.Add (table);
- cm = bc [dataset] as CurrencyManager;
- Assert.AreEqual (typeof (DataViewManager), cm.List.GetType (), "DATASETLIST1");
- Assert.AreEqual (1, cm.Count, "DATASETLIST2");
- Assert.AreEqual (0, cm.Position, "DATASETLIST3");
- // Assert.AreEqual (typeof (DataViewManagerListItemTypeDescriptor), cm.Current.GetType (),
- // "DATASETLIST4");
- }
- [Test]
- public void DataSetListTable ()
- {
- DataSet dataset = new DataSet ("DataSet");
- DataTable table = new DataTable ("Table");
- BindingContext bc = new BindingContext ();
- CurrencyManager cm;
- dataset.Tables.Add (table);
- cm = bc [dataset, "Table"] as CurrencyManager;
- Assert.AreEqual (typeof (DataView), cm.List.GetType (), "DATASETLIST1");
- Assert.AreEqual (0, cm.Count, "DATASETLIST2");
- Assert.AreEqual (-1, cm.Position, "DATASETLIST3");
- }
- [Test]
- [ExpectedException (typeof (ArgumentException))]
- public void DataSetListTableBogusField ()
- {
- DataSet dataset = new DataSet ("DataSet");
- DataTable table = new DataTable ("Table.Column");
- BindingContext bc = new BindingContext ();
- CurrencyManager cm;
- dataset.Tables.Add (table);
- // child list can't be created
- cm = bc [dataset, "Table"] as CurrencyManager;
- }
- [Test]
- public void MoveArrayListForward ()
- {
- ArrayList data_source = new ArrayList ();
- BindingContext bc = new BindingContext ();
- for (int i = 0; i < 10; i++)
- data_source.Add (new object ());
- CurrencyManager cm = bc [data_source] as CurrencyManager;
- for (int i = 0; i < 10; i++) {
- Assert.AreSame (data_source [i], cm.Current, "MOVEALF" + i);
- cm.Position++;
- }
- cm.Position++;
- cm.Position++;
- Assert.AreSame (data_source [9], cm.Current, "MOVEALFEND");
- }
- [Test]
- public void MoveArrayListBackward ()
- {
- ArrayList data_source = new ArrayList ();
- BindingContext bc = new BindingContext ();
- for (int i = 0; i < 10; i++)
- data_source.Add (new object ());
- CurrencyManager cm = bc [data_source] as CurrencyManager;
- cm.Position = 9;
- for (int i = 9; i >= 0; i--) {
- Assert.AreSame (data_source [i], cm.Current, "MOVEALB" + i);
- cm.Position--;
- }
- cm.Position--;
- cm.Position--;
- Assert.AreSame (data_source [0], cm.Current, "MOVEALBSTART");
- }
- [Test]
- public void SetPositionArrayList ()
- {
- ArrayList data_source = new ArrayList ();
- BindingContext bc = new BindingContext ();
- for (int i = 0; i < 10; i++)
- data_source.Add (new object ());
- CurrencyManager cm = bc [data_source] as CurrencyManager;
- for (int i = 3; i >= 0; i--) {
- cm.Position = i;
- Assert.AreSame (data_source [i], cm.Current, "MOVEAL1-" + i);
- }
- cm.Position--;
- for (int i = 0; i < 10; i++) {
- cm.Position = i;
- Assert.AreSame (data_source [i], cm.Current, "MOVEAL2-" + i);
- }
- for (int i = 5; i < 10; i++) {
- cm.Position = i;
- Assert.AreSame (data_source [i], cm.Current, "MOVEAL3-" + i);
- }
- }
- [Test]
- public void LateBuildDataTable ()
- {
- DataTable data_source = new DataTable ("Table");
- BindingContext bc = new BindingContext ();
- CurrencyManager cm = bc [data_source] as CurrencyManager;
- Assert.AreEqual (-1, cm.Position, "LATEBUILDTABLE1");
- Assert.AreEqual (0, cm.Count, "LATEBUILDTABLE2");
- DataColumn column = new DataColumn ("Column");
- column.DataType = typeof (int);
- data_source.Columns.Add (column);
-
- for (int i = 0; i < 10; i++) {
- DataRow row = data_source.NewRow ();
- row ["Column"] = i;
- data_source.Rows.Add (row);
- }
- Assert.AreEqual (0, cm.Position, "LATEBUILDTABLE3");
- Assert.AreEqual (10, cm.Count, "LATEBUILDTABLE4");
- }
- [Test]
- public void LateBuildArrayList ()
- {
- ArrayList data_source = new ArrayList ();
- BindingContext bc = new BindingContext ();
- CurrencyManager cm = bc [data_source] as CurrencyManager;
- Assert.AreEqual (-1, cm.Position, "LATEBUILDLIST1");
- Assert.AreEqual (0, cm.Count, "LATEBUILDLIST2");
- data_source.AddRange (new object [] { 1, 2, 3, 4, 5, 6, 7 });
- Assert.AreEqual (-1, cm.Position, "LATEBUILDLIST3");
- Assert.AreEqual (7, cm.Count, "LATEBUILDLIST4");
- }
- [Test]
- public void MoveDataTableForward ()
- {
- DataTable data_source = new DataTable ("Table");
- BindingContext bc = new BindingContext ();
- CurrencyManager cm = bc [data_source] as CurrencyManager;
- DataColumn column = new DataColumn ("Column");
- column.DataType = typeof (int);
- data_source.Columns.Add (column);
- for (int i = 0; i < 10; i++) {
- DataRow row = data_source.NewRow ();
- row ["Column"] = i;
- data_source.Rows.Add (row);
- }
- for (int i = 0; i < 10; i++) {
- DataRowView row = cm.Current as DataRowView;
- Assert.IsFalse (row == null, "MOVETABLEF-NULL-" + i);
- Assert.AreEqual (row ["Column"], i, "MOVETABLEF-" + i);
- cm.Position++;
- }
- cm.Position++;
- cm.Position++;
- Assert.AreEqual (9, ((DataRowView) cm.Current) ["Column"], "MOVETABLEF-END");
- }
- [Test]
- public void MoveDataTableBackward ()
- {
- DataTable data_source = new DataTable ("Table");
- BindingContext bc = new BindingContext ();
- CurrencyManager cm = bc [data_source] as CurrencyManager;
- DataColumn column = new DataColumn ("Column");
- column.DataType = typeof (int);
- data_source.Columns.Add (column);
- for (int i = 0; i < 10; i++) {
- DataRow row = data_source.NewRow ();
- row ["Column"] = i;
- data_source.Rows.Add (row);
- }
- cm.Position = 9;
- for (int i = 9; i >= 0; i--) {
- DataRowView row = cm.Current as DataRowView;
- Assert.IsFalse (row == null, "MOVETABLEB-NULL-" + i);
- Assert.AreEqual (row ["Column"], i, "MOVETABLEB-" + i);
- cm.Position--;
- }
- cm.Position--;
- cm.Position--;
- Assert.AreEqual (0, ((DataRowView) cm.Current) ["Column"], "MOVETABLEB-START");
- }
- [Test]
- public void SetPositionDataTable ()
- {
- DataTable data_source = new DataTable ("Table");
- BindingContext bc = new BindingContext ();
- CurrencyManager cm = bc [data_source] as CurrencyManager;
- DataColumn column = new DataColumn ("Column");
- column.DataType = typeof (int);
- data_source.Columns.Add (column);
- for (int i = 0; i < 10; i++) {
- DataRow row = data_source.NewRow ();
- row ["Column"] = i;
- data_source.Rows.Add (row);
- }
- for (int i = 5; i < 10; i++) {
- cm.Position = i;
- DataRowView row = cm.Current as DataRowView;
- Assert.IsFalse (row == null, "SETTABLE1-NULL-" + i);
- Assert.AreEqual (row ["Column"], i, "SETTABLE1-" + i);
- }
- for (int i = 5; i >= 0; i--) {
- cm.Position = i;
- DataRowView row = cm.Current as DataRowView;
- Assert.IsFalse (row == null, "SETTABLE2-NULL-" + i);
- Assert.AreEqual (row ["Column"], i, "SETTABLE2-" + i);
- }
- }
- [Test]
- public void NavigateDataSetToTable ()
- {
- DataSet data_source = new DataSet ("DataSet");
- DataTable table = new DataTable ("Table");
- DataColumn column = new DataColumn ("Column");
- BindingContext bc = new BindingContext ();
- data_source.Tables.Add (table);
- column.DataType = typeof (int);
- table.Columns.Add (column);
- for (int i = 0; i < 10; i++) {
- DataRow row = table.NewRow ();
- row ["Column"] = i;
- table.Rows.Add (row);
- }
- CurrencyManager cm = bc [data_source, "Table"] as CurrencyManager;
- Assert.AreEqual (0, cm.Position, "NAVSETTOTABLE1");
- Assert.AreEqual (10, cm.Count, "NAVSETTOTABLE2");
- Assert.AreEqual (typeof (DataView), cm.List.GetType (), "NAVSETTOTABLE3");
- for (int i = 0; i < 10; i++) {
- DataRowView row = cm.Current as DataRowView;
- Assert.IsFalse (row == null, "NAVSETTOTABLE-NULL-" + i);
- Assert.AreEqual (i, row ["Column"], "NAVSETTOTABLE-" + i);
- cm.Position++;
- }
- cm.Position++;
- cm.Position++;
- Assert.AreEqual (9, ((DataRowView) cm.Current) ["Column"], "NAVSETTOTABLE-END");
- }
- [Test]
- public void NavigateDataSetToColumn ()
- {
- DataSet data_source = new DataSet ("DataSet");
- DataTable table = new DataTable ("Table");
- DataColumn column = new DataColumn ("Column");
- BindingContext bc = new BindingContext ();
- data_source.Tables.Add (table);
- column.DataType = typeof (int);
- table.Columns.Add (column);
- for (int i = 0; i < 10; i++) {
- DataRow row = table.NewRow ();
- row ["Column"] = i;
- table.Rows.Add (row);
- }
- CurrencyManager cm = bc [data_source, "Table.Column"] as CurrencyManager;
- Assert.AreEqual (null, cm, "NAVSETTOCOLUMN1");
- }
- [Test]
- public void NavigateDataSetToParentRelation ()
- {
- DataSet data_source = CreateRelatedDataSet ();
- BindingContext bc = new BindingContext ();
- CurrencyManager cm = bc [data_source, "Table1.Relation"] as CurrencyManager;
- Assert.AreEqual (0, cm.Position, "NAVSETTORELATION1");
- Assert.AreEqual (1, cm.Count, "NAVSETTORELATION2");
- Assert.IsTrue (cm.List is DataView, "NAVSETTORELATION3");
- DataRowView row = cm.Current as DataRowView;
- Assert.IsFalse (row == null, "NAVSETTORELATION-NULL-VALUE");
- Assert.AreEqual (0, row ["Two"], "NAVSETTORELATION-VALUE");
- cm.Position++;
- cm.Position++;
- Assert.AreEqual (0, ((DataRowView) cm.Current) ["Two"], "NAVSETTORELATION-END");
- }
- [Test]
- [ExpectedException (typeof (ArgumentException))]
- public void DataSetToChildRelation ()
- {
- DataSet data_source = CreateRelatedDataSet ();
- BindingContext bc = new BindingContext ();
- // Can't create a list on a child relation
- CurrencyManager cm = bc [data_source, "Table2.Relation"] as CurrencyManager;
- }
- [Test]
- public void DataSetToParentRelationField ()
- {
- DataSet data_source = CreateRelatedDataSet ();
- BindingContext bc = new BindingContext ();
- CurrencyManager cm = bc [data_source, "Table1.Relation.Two"] as CurrencyManager;
- Assert.AreEqual (null, cm, "SETTOPARENTRELATIONFIELD");
- }
- [Test]
- public void MultiColumnedRelation ()
- {
- DataSet dataset = new DataSet ();
- DataTable sports = new DataTable ("Sports");
- DataTable athletes = new DataTable ("Athletes");
-
- DataColumn column;
- DataRow row;
- column = new DataColumn ();
- column.DataType = typeof (int);
- column.ColumnName = "SportID";
- column.Unique = true;
- sports.Columns.Add (column);
- column = new DataColumn ();
- column.DataType = typeof (string);
- column.ColumnName = "SportName";
- sports.Columns.Add (column);
- string [] sports_names = new string [] { "Hockey", "Baseball", "Basketball", "Football", "Boxing", "Surfing" };
- for (int i = 0; i < sports_names.Length; i++) {
- row = sports.NewRow ();
- row ["SportID"] = i;
- row ["SportName"] = sports_names [i];
- sports.Rows.Add (row);
- }
-
-
- // Athletes table
- column = new DataColumn ();
- column.DataType = typeof (int);
- column.ColumnName = "AthleteID";
- column.Unique = true;
- athletes.Columns.Add (column);
- column = new DataColumn ();
- column.DataType = typeof (int);
- column.ColumnName = "Sport";
- athletes.Columns.Add (column);
- column = new DataColumn ();
- column.DataType = typeof (string);
- column.ColumnName = "AthleteName";
- athletes.Columns.Add (column);
- string [] athlete_names = new string [] { "@alp", "@lupus", "@tjfontaine", "duncan", "marv", "WindowsUninstall",
- "@jackson", "@migHome", "_Synced[work]", "GodZhila", "Raboo",
- "@jchambers", "@mkestner", "barbosa", "IzeBurn", "squinky86",
- "@kangaroo", "@paco", "Demian", "logiclrd", "tenshiKur0" };
- for (int i = 0; i < athlete_names.Length; i++) {
- row = athletes.NewRow ();
- row ["AthleteID"] = i;
- row ["Sport"] = i % sports_names.Length;
- row ["AthleteName"] = athlete_names [i];
- athletes.Rows.Add (row);
- }
- dataset.Tables.Add (sports);
- dataset.Tables.Add (athletes);
- dataset.Relations.Add ("AthletesSports", sports.Columns ["SportID"], athletes.Columns ["Sport"]);
- BindingContext bc = new BindingContext ();
- CurrencyManager cm = bc [dataset, "Sports.AthletesSports"] as CurrencyManager;
- Assert.AreEqual (0, cm.Position, "MC1");
- Assert.AreEqual (4, cm.Count, "MC2");
- DataRowView rowview = cm.Current as DataRowView;
- Assert.IsFalse (rowview == null, "MC3");
- Assert.AreEqual (0, rowview ["AthleteID"], "MC4");
- Assert.AreEqual ("@alp", rowview ["AthleteName"], "MC5");
- Assert.AreEqual (0, rowview ["Sport"], "MC6");
- cm.Position++;
- rowview = cm.Current as DataRowView;
- Assert.IsFalse (rowview == null, "MC7");
- Assert.AreEqual (6, rowview ["AthleteID"], "MC8");
- Assert.AreEqual ("@jackson", rowview ["AthleteName"], "MC9");
- Assert.AreEqual (0, rowview ["Sport"], "MC10");
- cm.Position++;
- rowview = cm.Current as DataRowView;
- Assert.IsFalse (rowview == null, "MC11");
- Assert.AreEqual (12, rowview ["AthleteID"], "MC12");
- Assert.AreEqual ("@mkestner", rowview ["AthleteName"], "MC13");
- Assert.AreEqual (0, rowview ["Sport"], "MC14");
- cm.Position++;
- rowview = cm.Current as DataRowView;
- Assert.IsFalse (rowview == null, "MC15");
- Assert.AreEqual (18, rowview ["AthleteID"], "MC16");
- Assert.AreEqual ("Demian", rowview ["AthleteName"], "MC17");
- Assert.AreEqual (0, rowview ["Sport"], "MC18");
- cm.Position++;
- rowview = cm.Current as DataRowView;
- Assert.IsFalse (rowview == null, "MC19");
- Assert.AreEqual (18, rowview ["AthleteID"], "MC20");
- Assert.AreEqual ("Demian", rowview ["AthleteName"], "MC21");
- Assert.AreEqual (0, rowview ["Sport"], "MC22");
- }
- private DataSet CreateRelatedDataSet ()
- {
- DataSet dataset = new DataSet ("DataSet");
- DataTable dt1 = new DataTable ("Table1");
- DataTable dt2 = new DataTable ("Table2");
- DataColumn column;
- column = new DataColumn ("One");
- column.DataType = typeof (int);
- column.Unique = true;
- dt1.Columns.Add (column);
- for (int i = 0; i < 10; i++) {
- DataRow row = dt1.NewRow ();
- row ["One"] = i;
- dt1.Rows.Add (row);
- }
-
- column = new DataColumn ("Two");
- column.DataType = typeof (int);
- column.Unique = true;
- dt2.Columns.Add (column);
- for (int i = 0; i < 10; i++) {
- DataRow row = dt2.NewRow ();
- row ["Two"] = i;
- dt2.Rows.Add (row);
- }
- dataset.Tables.Add (dt1);
- dataset.Tables.Add (dt2);
- dataset.Relations.Add ("Relation", dt1.Columns ["One"], dt2.Columns ["Two"]);
- return dataset;
- }
- [Test]
- public void EndUninitializedEdit ()
- {
- ArrayList list = new ArrayList ();
- BindingContext bc = new BindingContext ();
- CurrencyManager cm = bc [list] as CurrencyManager;
- cm.EndCurrentEdit ();
- }
- [Test]
- public void CancelUninitializedEdit ()
- {
- ArrayList list = new ArrayList ();
- BindingContext bc = new BindingContext ();
- CurrencyManager cm = bc [list] as CurrencyManager;
- cm.CancelCurrentEdit ();
- }
- [Test]
- public void CheckPositionOfRelatedSibling1 ()
- {
- DataSet data_source = CreateRelatedDataSet ();
- BindingContext bc = new BindingContext ();
- CurrencyManager cm = bc [data_source, "Table1.Relation"] as CurrencyManager;
- CurrencyManager scm = bc [data_source, "Table1"] as CurrencyManager;
- cm.Position++;
- cm.Position++;
- // position is not updated
- Assert.AreEqual (0, scm.Position, "#8");
- }
- [Test]
- public void CheckPositionOfRelatedSibling2 ()
- {
- DataSet data_source = CreateRelatedDataSet ();
- BindingContext bc = new BindingContext ();
- CurrencyManager cm = bc [data_source, "Table1.Relation"] as CurrencyManager;
- CurrencyManager scm = bc [data_source, "Table1"] as CurrencyManager;
- Assert.AreEqual (0, cm.Position, "#1");
- scm.Position++;
- Assert.AreEqual (0, cm.Position, "#2");
- }
- int event_num;
- int current_changed;
- int position_changed;
- int item_changed;
- ItemChangedEventArgs item_changed_args;
- void CurrentChanged (object sender, EventArgs args) { current_changed = ++event_num; /*Console.WriteLine ("current_changed = {0}", current_changed); Console.WriteLine (Environment.StackTrace);*/ }
- void PositionChanged (object sender, EventArgs args) { position_changed = ++event_num; /*Console.WriteLine ("position_changed = {0}", position_changed); Console.WriteLine (Environment.StackTrace);*/}
- void ItemChanged (object sender, ItemChangedEventArgs args) { item_changed = ++event_num; item_changed_args = args; /*Console.WriteLine ("item_changed = {0}, index = {1}", item_changed, args.Index); Console.WriteLine (Environment.StackTrace);*/ }
- void ListChanged (object sender, ListChangedEventArgs args) { /*Console.WriteLine ("ListChanged ({0},{1},{2})", args.ListChangedType, args.OldIndex, args.NewIndex); Console.WriteLine (Environment.StackTrace);*/ }
- [Test]
- public void AddNew ()
- {
- DataSet data_source = CreateRelatedDataSet ();
- BindingContext bc = new BindingContext ();
- CurrencyManager cm = bc [data_source, "Table1"] as CurrencyManager;
- event_num = current_changed = position_changed = -1;
- cm.CurrentChanged += new EventHandler (CurrentChanged);
- cm.PositionChanged += new EventHandler (PositionChanged);
- cm.ItemChanged += new ItemChangedEventHandler (ItemChanged);
- Assert.AreEqual (0, cm.Position, "AddNew1");
- Assert.AreEqual (10, cm.Count, "AddNew2");
- Assert.AreEqual (cm.Count, cm.List.Count, "AddNew2.5");
- cm.AddNew ();
- Assert.AreEqual (10, cm.Position, "AddNew3");
- Assert.AreEqual (11, cm.Count, "AddNew4");
- Assert.AreEqual (cm.Count, cm.List.Count, "AddNew4.5");
- Assert.AreEqual (0, item_changed, "AddNew5");
- Assert.AreEqual (-1, item_changed_args.Index, "AddNew6");
- Assert.AreEqual (1, current_changed, "AddNew7");
- Assert.AreEqual (2, position_changed, "AddNew8");
- cm.CurrentChanged -= new EventHandler (CurrentChanged);
- cm.PositionChanged -= new EventHandler (PositionChanged);
- }
- [Test]
- public void CancelAddNew ()
- {
- DataSet data_source = CreateRelatedDataSet ();
- BindingContext bc = new BindingContext ();
- CurrencyManager cm = bc [data_source, "Table1"] as CurrencyManager;
- DataView dv = cm.List as DataView;
- event_num = current_changed = position_changed = -1;
- cm.CurrentChanged += new EventHandler (CurrentChanged);
- cm.PositionChanged += new EventHandler (PositionChanged);
- cm.ItemChanged += new ItemChangedEventHandler (ItemChanged);
- dv.ListChanged += new ListChangedEventHandler (ListChanged);
- Assert.AreEqual (0, cm.Position, "CancelAddNew1");
- Assert.AreEqual (10, cm.Count, "CancelAddNew2");
- Assert.AreEqual (cm.Count, cm.List.Count, "AddNew2.5");
- cm.AddNew ();
- Assert.AreEqual (0, item_changed, "CancelAddNew3");
- Assert.AreEqual (-1, item_changed_args.Index, "CancelAddNew4");
- Assert.AreEqual (1, current_changed, "CancelAddNew5");
- Assert.AreEqual (2, position_changed, "CancelAddNew6");
- cm.CancelCurrentEdit ();
- Assert.AreEqual (6, item_changed, "CancelAddNew7");
- Assert.AreEqual (9, item_changed_args.Index, "CancelAddNew8");
- Assert.AreEqual (3, current_changed, "CancelAddNew9");
- Assert.AreEqual (4, position_changed, "CancelAddNew10");
- Assert.AreEqual (9, cm.Position, "CancelAddNew11");
- Assert.AreEqual (10, cm.Count, "CancelAddNew12");
- Assert.AreEqual (cm.Count, cm.List.Count, "AddNew12.5");
- cm.CurrentChanged -= new EventHandler (CurrentChanged);
- cm.PositionChanged -= new EventHandler (PositionChanged);
- }
- [Test]
- public void EndAddNew ()
- {
- DataSet data_source = CreateRelatedDataSet ();
- BindingContext bc = new BindingContext ();
- CurrencyManager cm = bc [data_source, "Table1"] as CurrencyManager;
- event_num = current_changed = position_changed = -1;
- cm.CurrentChanged += new EventHandler (CurrentChanged);
- cm.PositionChanged += new EventHandler (PositionChanged);
- cm.ItemChanged += new ItemChangedEventHandler (ItemChanged);
- Assert.AreEqual (0, cm.Position, "EndAddNew1");
- Assert.AreEqual (10, cm.Count, "EndAddNew2");
- cm.AddNew ();
- Assert.AreEqual (0, item_changed, "EndAddNew3");
- Assert.AreEqual (-1, item_changed_args.Index, "EndAddNew4");
- Assert.AreEqual (1, current_changed, "EndAddNew5");
- Assert.AreEqual (2, position_changed, "EndAddNew6");
- cm.EndCurrentEdit ();
- // Assert.AreEqual (3, item_changed, "EndAddNew7");
- // Assert.AreEqual (-1, item_changed_args.Index, "EndAddNew8");
- Assert.AreEqual (1, current_changed, "EndAddNew9");
- Assert.AreEqual (2, position_changed, "EndAddNew10");
- Assert.AreEqual (10, cm.Position, "EndAddNew11");
- Assert.AreEqual (11, cm.Count, "EndAddNew12");
- cm.CurrentChanged -= new EventHandler (CurrentChanged);
- cm.PositionChanged -= new EventHandler (PositionChanged);
- }
- [Test]
- public void AddNew2 ()
- {
- DataSet data_source = CreateRelatedDataSet ();
- BindingContext bc = new BindingContext ();
- CurrencyManager cm = bc [data_source, "Table1"] as CurrencyManager;
- DataView dv = cm.List as DataView;
- event_num = current_changed = position_changed = -1;
- cm.CurrentChanged += new EventHandler (CurrentChanged);
- cm.PositionChanged += new EventHandler (PositionChanged);
- cm.ItemChanged += new ItemChangedEventHandler (ItemChanged);
- dv.ListChanged += new ListChangedEventHandler (ListChanged);
- Assert.AreEqual (0, cm.Position, "AddNew1");
- Assert.AreEqual (10, cm.Count, "AddNew2");
- cm.AddNew ();
- Assert.AreEqual (10, cm.Position, "AddNew3");
- Assert.AreEqual (11, cm.Count, "AddNew4");
- // this does an implicit EndCurrentEdit
- cm.AddNew ();
- Assert.AreEqual (11, cm.Position, "AddNew5");
- Assert.AreEqual (12, cm.Count, "AddNew6");
- }
- DataSet CreateRelatedDataSetLarge ()
- {
- DataSet dataset = new DataSet ("CustomerSet");
- DataTable dt1 = new DataTable ("Customers");
- DataTable dt2 = new DataTable ("Orders");
- DataTable dt3 = new DataTable ("Addresses");
- DataColumn column;
- // customer table
- column = new DataColumn ("CustomerID");
- column.DataType = typeof (int);
- column.Unique = true;
- dt1.Columns.Add (column);
- column = new DataColumn ("CustomerName");
- column.DataType = typeof (string);
- column.Unique = false;
- dt1.Columns.Add (column);
- // order table
- column = new DataColumn ("OrderID");
- column.DataType = typeof (int);
- column.Unique = true;
- dt2.Columns.Add (column);
- column = new DataColumn ("ItemName");
- column.DataType = typeof (string);
- column.Unique = false;
- dt2.Columns.Add (column);
- column = new DataColumn ("CustomerID");
- column.DataType = typeof (int);
- column.Unique = false;
- dt2.Columns.Add (column);
- column = new DataColumn ("AddressID");
- column.DataType = typeof (int);
- column.Unique = false;
- dt2.Columns.Add (column);
- // address table
- column = new DataColumn ("AddressID");
- column.DataType = typeof (int);
- column.Unique = true;
- dt3.Columns.Add (column);
- column = new DataColumn ("AddressString");
- column.DataType = typeof (string);
- column.Unique = false;
- dt3.Columns.Add (column);
- column = new DataColumn ("CustomerID");
- column.DataType = typeof (int);
- column.Unique = false;
- dt3.Columns.Add (column);
- for (int i = 0; i < 10; i ++) {
- DataRow row = dt1.NewRow ();
- row["CustomerID"] = i;
- row["CustomerName"] = String.Format ("Customer Name #{0}", i);
- dt1.Rows.Add (row);
- }
- int ordernum = 0;
- for (int i = 0; i < 10; i ++) {
- for (int j = 0; j < (i < 5 ? 3 : 5); j ++) {
- DataRow row = dt2.NewRow ();
- row["OrderID"] = ordernum++;
- row["ItemName"] = String.Format ("Item order #{0}", j);
- row["CustomerID"] = i;
- row["AddressID"] = j;
- dt2.Rows.Add (row);
- }
- }
- int addressid = 0;
- for (int i = 0; i < 4; i ++) {
- for (int j = 0; j < 4; j ++) {
- DataRow row = dt3.NewRow ();
- row["AddressID"] = addressid++;
- row["AddressString"] = String.Format ("Customer Address {0}", j);
- row["CustomerID"] = i;
- dt3.Rows.Add (row);
- }
- }
- dataset.Tables.Add (dt1);
- dataset.Tables.Add (dt2);
- dataset.Tables.Add (dt3);
- dataset.Relations.Add ("Customer_Orders", dt1.Columns["CustomerID"], dt2.Columns["CustomerID"]);
- dataset.Relations.Add ("Customer_Addresses", dt1.Columns["CustomerID"], dt3.Columns["CustomerID"]);
- dataset.Relations.Add ("Address_Orders", dt3.Columns["AddressID"], dt2.Columns["AddressID"]);
- return dataset;
- }
- [Test]
- public void RelatedCurrencyManagerTest ()
- {
- DataSet data_source = CreateRelatedDataSetLarge ();
- BindingContext bc = new BindingContext ();
- CurrencyManager cm = bc [data_source, "Customers"] as CurrencyManager;
- CurrencyManager rcm = bc [data_source, "Customers.Customer_Orders"] as CurrencyManager;
- IList list = rcm.List;
- Assert.AreEqual (3, rcm.Count, "count1");
- Assert.AreEqual (3, list.Count, "listcount1");
- cm.Position = 1;
- Assert.AreEqual (3, rcm.Count, "count2");
- Assert.AreEqual (3, list.Count, "listcount2");
- cm.Position = 5;
- Assert.AreEqual (5, rcm.Count, "count3");
- Assert.AreEqual (3, list.Count, "listcount3");
- }
-
- [Test]
- public void TestCurrencyManagerBindings ()
- {
- DataSet data_source = CreateRelatedDataSetLarge ();
- BindingContext bc = new BindingContext ();
- CurrencyManager cm = bc [data_source] as CurrencyManager;
- Console.WriteLine ("cm properties:");
- foreach (PropertyDescriptor pd in cm.GetItemProperties ())
- Console.WriteLine (" + {0}", pd.Name);
- Console.WriteLine ();
- Console.WriteLine ("dataset:");
- Console.WriteLine ("cm = {0}", cm.GetType());
- Console.WriteLine ("cm.Count = {0}", cm.Count);
- cm.Position = 0;
- Console.WriteLine ("cm.Current = {0}", cm.Current);
- Console.WriteLine ("cm.Current properties");
- foreach (PropertyDescriptor pd in ((ICustomTypeDescriptor)cm.Current).GetProperties ())
- Console.WriteLine (" + {0}", pd.Name);
- Console.WriteLine ();
- cm = bc [data_source.Tables["Customers"]] as CurrencyManager;
- Console.WriteLine ("datatable:");
- Console.WriteLine ("cm = {0}", cm.GetType());
- Console.WriteLine ("cm.Count = {0}", cm.Count);
- cm.Position = 0;
- Console.WriteLine ("cm.Current = {0}", cm.Current);
- Console.WriteLine ("cm.Current properties");
- foreach (PropertyDescriptor pd in ((ICustomTypeDescriptor)cm.Current).GetProperties ())
- Console.WriteLine (" + {0}", pd.Name);
- Console.WriteLine ();
- DataViewManager vm = new DataViewManager (data_source);
- Console.WriteLine ("vm properties:");
- foreach (PropertyDescriptor pd in ((ITypedList)vm).GetItemProperties (null))
- Console.WriteLine (" + {0}", pd.Name);
- Console.WriteLine ();
- }
- Type GetFinalType (CurrencyManager cm)
- {
- FieldInfo fi = cm.GetType().GetField ("finalType", BindingFlags.NonPublic | BindingFlags.Instance);
- return (Type)fi.GetValue (cm);
- }
- [Test]
- public void FinalTypeTest ()
- {
- BindingContext bc = new BindingContext ();
- CurrencyManager cm;
- ArrayList al;
- DataSet data_source = CreateRelatedDataSetLarge ();
- /* empty arraylist */
- al = new ArrayList ();
- cm = bc[al] as CurrencyManager;
- Assert.AreEqual (typeof (ArrayList), GetFinalType (cm), "A1");
- /* arraylist with a string element*/
- al = new ArrayList ();
- al.Add ("hi");
- cm = bc[al] as CurrencyManager;
- Assert.AreEqual (typeof (ArrayList), GetFinalType (cm), "A2");
- /* string array */
- string[] s = new string[1];
- s[0] = "hi";
- cm = bc[s] as CurrencyManager;
- Assert.AreEqual (typeof (string[]), GetFinalType (cm), "A3");
- /* dataview */
- cm = bc [data_source, "Customers"] as CurrencyManager;
- Assert.AreEqual (typeof (DataView), GetFinalType (cm), "A4");
- /* relatedview */
- cm = bc [data_source, "Customers.Customer_Orders"] as CurrencyManager;
- /* on MS this is a RelatedView, on Mono a RelatedDataView. both subclass from DataView, so let's check that. */
- Assert.IsFalse (typeof (DataView) == GetFinalType (cm), "A5");
- Assert.IsTrue (typeof (DataView).IsAssignableFrom (GetFinalType (cm)), "A6");
- }
- }
- }
|