2008-05-06 Carlos Alberto Cortez <calberto.cortez@gmail.com>
authorCarlos Alberto Cortez <calberto.cortez@gmail.com>
Tue, 6 May 2008 06:56:16 +0000 (06:56 -0000)
committerCarlos Alberto Cortez <calberto.cortez@gmail.com>
Tue, 6 May 2008 06:56:16 +0000 (06:56 -0000)
* BindingSource.cs: New tests for ISupportInitializeNotification
property.

svn path=/trunk/mcs/; revision=102585

mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/BindingSourceTest.cs
mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/ChangeLog

index 60b5d6c959f910e58c0dd01f1c7ca4dcede852ae..fae62339078a1d3cf9b1aa50ccffcf83d2c6ba52 100644 (file)
@@ -1639,25 +1639,89 @@ namespace MonoTests.System.Windows.Forms.DataBinding {
                }
 
                [Test]
-               public void InitializedEvent ()
+               public void ISupportInitializeNotification ()
                {
-                       // XXX this test is officially useless.  does
-                       // BindingSource even raise the event?  it
-                       // seems to always be initialized.
                        BindingSource source = new BindingSource ();
-                       ISupportInitializeNotification n = (ISupportInitializeNotification)source;
+                       List<string> list = new List<string> ();
 
-                       bool event_handled = false;
-                       n.Initialized += delegate (object sender, EventArgs e) {
-                               event_handled = true;
-                       };
+                       bool initialized_handled = false;
+                       ISupportInitializeNotification inotification = (ISupportInitializeNotification)source;
+                       inotification.Initialized += delegate { initialized_handled = true; };
+                       Assert.AreEqual (true, inotification.IsInitialized, "A1");
+                       Assert.AreEqual (false, initialized_handled, "A2");
 
-                       Assert.IsTrue (n.IsInitialized, "1");
+                       inotification.BeginInit ();
+                       Assert.AreEqual (false, inotification.IsInitialized, "B1");
+                       Assert.AreEqual (false, initialized_handled, "B2");
 
-                       source.DataSource = "hi";
+                       source.DataSource = list;
+                       Assert.AreEqual (list, source.DataSource, "C1");
+                       Assert.AreEqual (false, initialized_handled, "C2");
+
+                       inotification.EndInit ();
+                       Assert.AreEqual (true, inotification.IsInitialized, "D1");
+                       Assert.AreEqual (true, initialized_handled, "D2");
+
+                       // Reset event info
+                       initialized_handled = false;
+                       inotification.EndInit ();
+
+                       Assert.AreEqual (true, initialized_handled, "E1");
+
+                       // 
+                       // Case 2: use a data source that implements ISupportsInitializeNotification
+                       //
+                       InitializableObject init_obj = new InitializableObject ();
+                       init_obj.BeginInit ();
+                       source.DataSource = null;
+
+                       inotification.BeginInit ();
+                       initialized_handled = false;
+                       source.DataSource = init_obj;
+
+                       Assert.AreEqual (false, inotification.IsInitialized, "G1");
+                       Assert.AreEqual (false, initialized_handled, "G2");
+                       Assert.AreEqual (false, init_obj.IsInitialized, "G3");
+                       Assert.AreEqual (init_obj, source.DataSource, "G4");
+                       Assert.IsTrue (source.List is BindingList<object>, "G5"); // Default list
+
+                       inotification.EndInit ();
+                       Assert.AreEqual (false, inotification.IsInitialized, "H1");
+                       Assert.AreEqual (false, initialized_handled, "H2");
+                       Assert.AreEqual (false, init_obj.IsInitialized, "H3");
+
+                       init_obj.EndInit ();
+                       Assert.AreEqual (true, inotification.IsInitialized, "J1");
+                       Assert.AreEqual (true, initialized_handled, "J2");
+                       Assert.AreEqual (true, init_obj.IsInitialized, "J3");
+
+                       Assert.IsTrue (source.List is BindingList<InitializableObject>, "K");
+               }
+
+               class InitializableObject : ISupportInitializeNotification
+               {
+                       bool is_initialized = true;
+
+                       public void BeginInit ()
+                       {
+                               is_initialized = false;
+                       }
+
+                       public void EndInit ()
+                       {
+                               is_initialized = true;
+
+                               if (Initialized != null)
+                                       Initialized (this, EventArgs.Empty);
+                       }
+
+                       public bool IsInitialized {
+                               get {
+                                       return is_initialized;
+                               }
+                       }
 
-                       Assert.IsTrue (n.IsInitialized, "2");
-                       Assert.IsFalse (event_handled, "3");
+                       public event EventHandler Initialized;
                }
 
                //
index 0f2b338031ea210b2eefffdfc21401cf1995fbf6..1f8e189ff8a0434656d1bfd987e3ac20944544ec 100644 (file)
@@ -1,3 +1,8 @@
+2008-05-06  Carlos Alberto Cortez <calberto.cortez@gmail.com>
+
+       * BindingSource.cs: New tests for ISupportInitializeNotification
+       property.
+
 2008-05-04  Carlos Alberto Cortez <calberto.cortez@gmail.com>
 
        * BindingSourceTest.cs: New tests for Sort property.