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
diff options
context:
space:
mode:
authorMiguel de Icaza <miguel@gnome.org>2012-07-21 20:04:58 +0400
committerMiguel de Icaza <miguel@gnome.org>2012-07-21 20:04:58 +0400
commitdba2dd4098aefe507818a8b739cd966e23edc9f5 (patch)
tree58a7f84f49c74d0a71af469c8e6911a6e60f02e2 /mcs/class/Managed.Windows.Forms/Test
parentf4a44a474ea9dbf49544cf9c97d727645c2d8e4a (diff)
parent38bdbad5071487a11f4330077c383375dce39840 (diff)
Merge pull request #337 from robwilkens/IdleThreadsFixes
Fix:Idle event handler was called on every thread rather than thread ass...
Diffstat (limited to 'mcs/class/Managed.Windows.Forms/Test')
-rw-r--r--mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/FormEventTest.cs74
1 files changed, 74 insertions, 0 deletions
diff --git a/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/FormEventTest.cs b/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/FormEventTest.cs
index c2f3c375158..9a7e9bcfb40 100644
--- a/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/FormEventTest.cs
+++ b/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/FormEventTest.cs
@@ -624,6 +624,80 @@ namespace MonoTests.System.Windows.Forms
_form.MinimumSize = new Size(100, 100);
Assert.AreEqual (true, eventhandled, "#A10");
}
+
+ /**
+ ** This next test is in response to a bug report
+ ** which pointed out that the idle events were being
+ ** sent to every thread rather than just the thread
+ ** they were assigned on.
+ **
+ ** Report: https://bugzilla.novell.com/show_bug.cgi?id=321541
+ **/
+ private static Form form1_OneIdlePerThread = null;
+ private static Form form2_OneIdlePerThread = null;
+ private static int count1_OIPT = 0;
+ private static int count2_OIPT = 0;
+ private static ThreadStart OIPT_ThreadStart2;
+ private static Thread OIPT_Thread2;
+ private static int oipt_t1 = 0;
+ private static int oipt_t2 = 0;
+ [Test]
+ public void OneIdlePerThread () {
+ Thread t = Thread.CurrentThread;
+ oipt_t1 = t.ManagedThreadId;
+ count1_OIPT = 0;
+ count2_OIPT = 0;
+ form1_OneIdlePerThread = new Form ();
+ form2_OneIdlePerThread = new Form ();
+ form1_OneIdlePerThread.Show ();
+
+ OIPT_ThreadStart2 = new ThreadStart (TIPT_Two);
+ OIPT_Thread2=new Thread (OIPT_ThreadStart2);
+ OIPT_Thread2.IsBackground = true;
+ OIPT_Thread2.SetApartmentState (ApartmentState.STA);
+ OIPT_Thread2.Start ();
+ Application.Idle += new EventHandler (TestIdlePerThread);
+ Application.Run (form1_OneIdlePerThread);
+ if (!OIPT_Thread2.Join (1000)){
+ OIPT_Thread2.Abort();
+ }
+
+ Assert.AreEqual (true, count1_OIPT == 1,
+ "#Idle: idle #1 hit too many times");
+ Assert.AreEqual (true, count2_OIPT == 1,
+ "#Idle: idle #2 hit too many times");
+ }
+ public static void TIPT_Two (){
+ Thread t = Thread.CurrentThread;
+ oipt_t2 = t.ManagedThreadId;
+ Application.Idle +=
+ new EventHandler (TestIdlePerThread2);
+ Application.Run (form2_OneIdlePerThread);
+ }
+ public static void TestIdlePerThread (object o, EventArgs e) {
+ Thread t = Thread.CurrentThread;
+ count1_OIPT++;
+ Application.Idle -=
+ new EventHandler (TestIdlePerThread);
+ /* Give thread2 time to finish before we close */
+ Thread.Sleep(100);
+ if (form1_OneIdlePerThread != null)
+ form1_OneIdlePerThread.Close ();
+ Assert.AreEqual (true, oipt_t1 == t.ManagedThreadId,
+ "#Idle:Wrong Thread-t1");
+ }
+ public static void TestIdlePerThread2 (object o, EventArgs e) {
+ Thread t = Thread.CurrentThread;
+ count2_OIPT++;
+ Application.Idle -=
+ new EventHandler(TestIdlePerThread2);
+ if (form2_OneIdlePerThread != null)
+ form2_OneIdlePerThread.Invoke
+ (new MethodInvoker (form2_OneIdlePerThread.Close));
+ Assert.AreEqual (true, oipt_t2 == t.ManagedThreadId,
+ "#Idle:Wrong Thread-t2");
+ }
+
}
[TestFixture]