| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591 |
- #if NET_2_0
- using System;
- using System.ComponentModel;
- using System.ComponentModel.Design.Serialization;
- using System.Collections.Generic;
- using NUnit.Framework;
- namespace MonoTests.System.ComponentModel
- {
- [TestFixture]
- public class BindingListTest
- {
- [Test]
- public void BindingListDefaults ()
- {
- BindingList<string> l = new BindingList<string> ();
- IBindingList ibl = (IBindingList)l;
-
- Assert.IsTrue (l.AllowEdit, "1");
- Assert.IsFalse (l.AllowNew, "2");
- Assert.IsTrue (l.AllowRemove, "3");
- Assert.IsTrue (l.RaiseListChangedEvents, "4");
- Assert.IsFalse (ibl.IsSorted, "5");
- Assert.AreEqual (ibl.SortDirection, ListSortDirection.Ascending, "6");
- Assert.IsTrue (ibl.SupportsChangeNotification, "7");
- Assert.IsFalse (ibl.SupportsSearching, "8");
- Assert.IsFalse (ibl.SupportsSorting, "9");
- Assert.IsFalse (((IRaiseItemChangedEvents)l).RaisesItemChangedEvents, "10");
- }
- [Test]
- public void BindingListDefaults_FixedSizeList ()
- {
- string[] arr = new string[10];
- BindingList<string> l = new BindingList<string> (arr);
- IBindingList ibl = (IBindingList)l;
- Assert.IsTrue (l.AllowEdit, "1");
- Assert.IsFalse (l.AllowNew, "2");
- Assert.IsTrue (l.AllowRemove, "3");
- Assert.IsTrue (l.RaiseListChangedEvents, "4");
- Assert.IsFalse (ibl.IsSorted, "5");
- Assert.AreEqual (ibl.SortDirection, ListSortDirection.Ascending, "6");
- Assert.IsTrue (ibl.SupportsChangeNotification, "7");
- Assert.IsFalse (ibl.SupportsSearching, "8");
- Assert.IsFalse (ibl.SupportsSorting, "9");
- Assert.IsFalse (((IRaiseItemChangedEvents)l).RaisesItemChangedEvents, "10");
- }
- [Test]
- public void BindingListDefaults_NonFixedSizeList ()
- {
- List<string> list = new List<string> ();
- BindingList<string> l = new BindingList<string> (list);
- IBindingList ibl = (IBindingList)l;
- Assert.IsTrue (l.AllowEdit, "1");
- Assert.IsFalse (l.AllowNew, "2");
- Assert.IsTrue (l.AllowRemove, "3");
- Assert.IsTrue (l.RaiseListChangedEvents, "4");
- Assert.IsFalse (ibl.IsSorted, "5");
- Assert.AreEqual (ibl.SortDirection, ListSortDirection.Ascending, "6");
- Assert.IsTrue (ibl.SupportsChangeNotification, "7");
- Assert.IsFalse (ibl.SupportsSearching, "8");
- Assert.IsFalse (ibl.SupportsSorting, "9");
- Assert.IsFalse (((IRaiseItemChangedEvents)l).RaisesItemChangedEvents, "10");
- }
- [Test]
- public void BindingListDefaults_ReadOnlyList ()
- {
- List<string> list = new List<string> ();
- BindingList<string> l = new BindingList<string> (list);
- IBindingList ibl = (IBindingList)l;
- Assert.IsTrue (l.AllowEdit, "1");
- Assert.IsFalse (l.AllowNew, "2");
- Assert.IsTrue (l.AllowRemove, "3");
- Assert.IsTrue (l.RaiseListChangedEvents, "4");
- Assert.IsFalse (ibl.IsSorted, "5");
- Assert.AreEqual (ibl.SortDirection, ListSortDirection.Ascending, "6");
- Assert.IsTrue (ibl.SupportsChangeNotification, "7");
- Assert.IsFalse (ibl.SupportsSearching, "8");
- Assert.IsFalse (ibl.SupportsSorting, "9");
- Assert.IsFalse (((IRaiseItemChangedEvents)l).RaisesItemChangedEvents, "10");
- }
- [Test]
- public void TestAllowNew ()
- {
- /* Object has a default ctor */
- BindingList<object> l1 = new BindingList<object> ();
- Assert.IsTrue (l1.AllowNew, "1");
- /* string has no default ctor */
- BindingList<string> l2 = new BindingList<string> ();
- Assert.IsFalse (l2.AllowNew, "2");
- /* adding a delegate to AddingNew fixes that */
- l2.AddingNew += delegate (object sender, AddingNewEventArgs e) { };
- Assert.IsTrue (l2.AllowNew, "3");
- l1 = new BindingList<object> ();
- bool list_changed = false;
- bool expected = false;
- l1.ListChanged += delegate (object sender, ListChangedEventArgs e) {
- list_changed = true;
- Assert.AreEqual (-1, e.NewIndex, "4");
- Assert.AreEqual (ListChangedType.Reset, e.ListChangedType, "5");
- Assert.AreEqual (expected, l1.AllowNew, "6");
- };
- expected = false;
- l1.AllowNew = false;
- Assert.IsTrue (list_changed, "7");
- /* the default for T=object is true, so check
- if we enter the block for raising the event
- if we explicitly set it to the value it
- currently has. */
- l1 = new BindingList<object> ();
- list_changed = false;
-
- l1.ListChanged += delegate (object sender, ListChangedEventArgs e) {
- list_changed = true;
- Assert.AreEqual (-1, e.NewIndex, "8");
- Assert.AreEqual (ListChangedType.Reset, e.ListChangedType, "9");
- Assert.AreEqual (expected, l1.AllowNew, "10");
- };
- expected = true;
- l1.AllowNew = true;
- /* turns out it doesn't raise the event, so the check must only be for "allow_new == value" */
- Assert.IsFalse (list_changed, "11");
- }
- [Test]
- public void TestResetBindings ()
- {
- BindingList<object> l = new BindingList<object> ();
- bool list_changed = false;
- l.ListChanged += delegate (object sender, ListChangedEventArgs e) {
- list_changed = true;
- Assert.AreEqual (-1, e.NewIndex, "1");
- Assert.AreEqual (ListChangedType.Reset, e.ListChangedType, "2");
- };
- l.ResetBindings ();
- Assert.IsTrue (list_changed, "3");
- }
- [Test]
- public void TestResetItem ()
- {
- List<object> list = new List<object>();
- list.Add (new object());
- BindingList<object> l = new BindingList<object> (list);
- bool item_changed = false;
- l.ListChanged += delegate (object sender, ListChangedEventArgs e) {
- item_changed = true;
- Assert.AreEqual (0, e.NewIndex, "1");
- Assert.AreEqual (ListChangedType.ItemChanged, e.ListChangedType, "2");
- };
- l.ResetItem (0);
- Assert.IsTrue (item_changed, "3");
- }
- [Test]
- public void TestRemoveItem ()
- {
- List<object> list = new List<object>();
- list.Add (new object());
- BindingList<object> l = new BindingList<object> (list);
- bool item_deleted = false;
- l.ListChanged += delegate (object sender, ListChangedEventArgs e) {
- item_deleted = true;
- Assert.AreEqual (0, e.NewIndex, "1");
- Assert.AreEqual (ListChangedType.ItemDeleted, e.ListChangedType, "2");
- Assert.AreEqual (0, l.Count, "3"); // to show the event is raised after the removal
- };
- l.RemoveAt (0);
- Assert.IsTrue (item_deleted, "4");
- }
- [Test]
- [ExpectedException (typeof (NotSupportedException))]
- public void TestRemoveItem_AllowRemoveFalse ()
- {
- List<object> list = new List<object>();
- list.Add (new object());
- BindingList<object> l = new BindingList<object> (list);
- l.AllowRemove = false;
- l.RemoveAt (0);
- }
- [Test]
- public void TestAllowEditEvent ()
- {
- BindingList<object> l = new BindingList<object>();
- bool event_raised = false;
- bool expected = false;
- l.ListChanged += delegate (object sender, ListChangedEventArgs e) {
- event_raised = true;
- Assert.AreEqual (-1, e.NewIndex, "1");
- Assert.AreEqual (ListChangedType.Reset, e.ListChangedType, "2");
- Assert.AreEqual (expected, l.AllowEdit, "3");
- };
- expected = false;
- l.AllowEdit = false;
- Assert.IsTrue (event_raised, "4");
- // check to see if RaiseListChangedEvents affects AllowEdit's event.
- l.RaiseListChangedEvents = false;
- event_raised = false;
- expected = true;
- l.AllowEdit = true;
- Assert.IsFalse (event_raised, "5");
- }
- [Test]
- public void TestAllowRemove ()
- {
- BindingList<object> l = new BindingList<object>();
- bool event_raised = false;
- bool expected = false;
- l.ListChanged += delegate (object sender, ListChangedEventArgs e) {
- event_raised = true;
- Assert.AreEqual (-1, e.NewIndex, "1");
- Assert.AreEqual (ListChangedType.Reset, e.ListChangedType, "2");
- Assert.AreEqual (expected, l.AllowRemove, "3");
- };
- expected = false;
- l.AllowRemove = false;
- Assert.IsTrue (event_raised, "4");
- // check to see if RaiseListChangedEvents affects AllowRemove's event.
- l.RaiseListChangedEvents = false;
- event_raised = false;
- expected = true;
- l.AllowRemove = true;
- Assert.IsFalse (event_raised, "5");
- }
- [Test]
- public void TestAddNew_SettingArgsNewObject ()
- {
- BindingList<object> l = new BindingList<object>();
- bool adding_event_raised = false;
- object o = new object ();
- l.AddingNew += delegate (object sender, AddingNewEventArgs e) {
- adding_event_raised = true;
- Assert.IsNull (e.NewObject, "1");
- e.NewObject = o;
- };
- object rv = l.AddNew ();
- Assert.IsTrue (adding_event_raised, "2");
- Assert.AreSame (o, rv, "3");
- }
- [Test]
- public void TestAddNew ()
- {
- BindingList<object> l = new BindingList<object>();
- bool adding_event_raised = false;
- object o = new object ();
- l.AddingNew += delegate (object sender, AddingNewEventArgs e) {
- adding_event_raised = true;
- Assert.IsNull (e.NewObject, "1");
- };
- object rv = l.AddNew ();
- Assert.IsTrue (adding_event_raised, "2");
- Assert.IsNotNull (rv, "3");
- }
- [Test]
- public void TestAddNew_Cancel ()
- {
- BindingList<object> l = new BindingList<object>();
- bool adding_event_raised = false;
- object o = new object ();
- bool list_changed = false;
- ListChangedType change_type = ListChangedType.Reset;
- int list_changed_index = -1;
- l.AddingNew += delegate (object sender, AddingNewEventArgs e) {
- adding_event_raised = true;
- Assert.IsNull (e.NewObject, "1");
- };
- l.ListChanged += delegate (object sender, ListChangedEventArgs e) {
- list_changed = true;
- change_type = e.ListChangedType;
- list_changed_index = e.NewIndex;
- };
- object rv = l.AddNew ();
- Assert.IsTrue (adding_event_raised, "2");
- Assert.IsNotNull (rv, "3");
- Assert.AreEqual (1, l.Count, "4");
- Assert.AreEqual (0, l.IndexOf (rv), "5");
- Assert.IsTrue (list_changed, "6");
- Assert.AreEqual (ListChangedType.ItemAdded, change_type, "7");
- Assert.AreEqual (0, list_changed_index, "8");
- list_changed = false;
- l.CancelNew (0);
- Assert.AreEqual (0, l.Count, "9");
- Assert.IsTrue (list_changed, "10");
- Assert.AreEqual (ListChangedType.ItemDeleted, change_type, "11");
- Assert.AreEqual (0, list_changed_index, "12");
- }
- [Test]
- public void TestAddNew_CancelDifferentIndex ()
- {
- List<object> list = new List<object>();
- list.Add (new object ());
- list.Add (new object ());
- BindingList<object> l = new BindingList<object>(list);
- bool adding_event_raised = false;
- object o = new object ();
- bool list_changed = false;
- ListChangedType change_type = ListChangedType.Reset;
- int list_changed_index = -1;
- l.AddingNew += delegate (object sender, AddingNewEventArgs e) {
- adding_event_raised = true;
- Assert.IsNull (e.NewObject, "1");
- };
- l.ListChanged += delegate (object sender, ListChangedEventArgs e) {
- list_changed = true;
- change_type = e.ListChangedType;
- list_changed_index = e.NewIndex;
- };
- object rv = l.AddNew ();
- Assert.IsTrue (adding_event_raised, "2");
- Assert.IsNotNull (rv, "3");
- Assert.AreEqual (3, l.Count, "4");
- Assert.AreEqual (2, l.IndexOf (rv), "5");
- Assert.IsTrue (list_changed, "6");
- Assert.AreEqual (ListChangedType.ItemAdded, change_type, "7");
- Assert.AreEqual (2, list_changed_index, "8");
- list_changed = false;
- l.CancelNew (0);
- Assert.IsFalse (list_changed, "9");
- Assert.AreEqual (3, l.Count, "10");
- l.CancelNew (2);
- Assert.IsTrue (list_changed, "11");
- Assert.AreEqual (ListChangedType.ItemDeleted, change_type, "12");
- Assert.AreEqual (2, list_changed_index, "13");
- Assert.AreEqual (2, l.Count, "14");
- }
- [Test]
- public void TestAddNew_End ()
- {
- BindingList<object> l = new BindingList<object>();
- bool adding_event_raised = false;
- object o = new object ();
- bool list_changed = false;
- ListChangedType change_type = ListChangedType.Reset;
- int list_changed_index = -1;
- l.AddingNew += delegate (object sender, AddingNewEventArgs e) {
- adding_event_raised = true;
- Assert.IsNull (e.NewObject, "1");
- };
- l.ListChanged += delegate (object sender, ListChangedEventArgs e) {
- list_changed = true;
- change_type = e.ListChangedType;
- list_changed_index = e.NewIndex;
- };
- object rv = l.AddNew ();
- Assert.IsTrue (adding_event_raised, "2");
- Assert.IsNotNull (rv, "3");
- Assert.AreEqual (1, l.Count, "4");
- Assert.AreEqual (0, l.IndexOf (rv), "5");
- Assert.IsTrue (list_changed, "6");
- Assert.AreEqual (ListChangedType.ItemAdded, change_type, "7");
- Assert.AreEqual (0, list_changed_index, "8");
- list_changed = false;
- l.EndNew (0);
- Assert.AreEqual (1, l.Count, "9");
- Assert.IsFalse (list_changed, "10");
- }
- [Test]
- public void TestAddNew_CancelDifferentIndexThenEnd ()
- {
- BindingList<object> l = new BindingList<object>();
- bool adding_event_raised = false;
- object o = new object ();
- bool list_changed = false;
- ListChangedType change_type = ListChangedType.Reset;
- int list_changed_index = -1;
- l.AddingNew += delegate (object sender, AddingNewEventArgs e) {
- adding_event_raised = true;
- Assert.IsNull (e.NewObject, "1");
- };
- l.ListChanged += delegate (object sender, ListChangedEventArgs e) {
- list_changed = true;
- change_type = e.ListChangedType;
- list_changed_index = e.NewIndex;
- };
- object rv = l.AddNew ();
- Assert.IsTrue (adding_event_raised, "2");
- Assert.IsNotNull (rv, "3");
- Assert.AreEqual (1, l.Count, "4");
- Assert.AreEqual (0, l.IndexOf (rv), "5");
- Assert.IsTrue (list_changed, "6");
- Assert.AreEqual (ListChangedType.ItemAdded, change_type, "7");
- Assert.AreEqual (0, list_changed_index, "8");
- list_changed = false;
- l.CancelNew (2);
- Assert.AreEqual (1, l.Count, "9");
- Assert.IsFalse (list_changed, "10");
- l.EndNew (0);
- Assert.AreEqual (1, l.Count, "11");
- Assert.IsFalse (list_changed, "12");
- }
- [Test]
- public void TestAddNew_EndDifferentIndexThenCancel ()
- {
- BindingList<object> l = new BindingList<object>();
- bool adding_event_raised = false;
- object o = new object ();
- bool list_changed = false;
- ListChangedType change_type = ListChangedType.Reset;
- int list_changed_index = -1;
- l.AddingNew += delegate (object sender, AddingNewEventArgs e) {
- adding_event_raised = true;
- Assert.IsNull (e.NewObject, "1");
- };
- l.ListChanged += delegate (object sender, ListChangedEventArgs e) {
- list_changed = true;
- change_type = e.ListChangedType;
- list_changed_index = e.NewIndex;
- };
- object rv = l.AddNew ();
- Assert.IsTrue (adding_event_raised, "2");
- Assert.IsNotNull (rv, "3");
- Assert.AreEqual (1, l.Count, "4");
- Assert.AreEqual (0, l.IndexOf (rv), "5");
- Assert.IsTrue (list_changed, "6");
- Assert.AreEqual (ListChangedType.ItemAdded, change_type, "7");
- Assert.AreEqual (0, list_changed_index, "8");
- list_changed = false;
- l.EndNew (2);
- Assert.AreEqual (1, l.Count, "9");
- Assert.IsFalse (list_changed, "10");
- l.CancelNew (0);
- Assert.IsTrue (list_changed, "11");
- Assert.AreEqual (ListChangedType.ItemDeleted, change_type, "12");
- Assert.AreEqual (0, list_changed_index, "13");
- }
- class BindingListPoker : BindingList<object>
- {
- public object DoAddNewCore()
- {
- return base.AddNewCore ();
- }
- }
- // test to make sure that the events are raised in AddNewCore and not in AddNew
- [Test]
- public void TestAddNewCore_Insert ()
- {
- BindingListPoker poker = new BindingListPoker ();
- bool adding_event_raised = false;
- bool list_changed = false;
- ListChangedType change_type = ListChangedType.Reset;
- int list_changed_index = -1;
- poker.AddingNew += delegate (object sender, AddingNewEventArgs e) {
- adding_event_raised = true;
- };
- poker.ListChanged += delegate (object sender, ListChangedEventArgs e) {
- list_changed = true;
- change_type = e.ListChangedType;
- list_changed_index = e.NewIndex;
- };
- object o = poker.DoAddNewCore ();
- Assert.IsTrue (adding_event_raised, "1");
- Assert.IsTrue (list_changed, "2");
- Assert.AreEqual (ListChangedType.ItemAdded, change_type, "3");
- Assert.AreEqual (0, list_changed_index, "4");
- Assert.AreEqual (1, poker.Count, "5");
- }
- }
- }
- #endif
|