2007-01-10 Chris Toshok <toshok@ximian.com>
[mono.git] / mcs / class / Managed.Windows.Forms / Test / System.Windows.Forms / ApplicationContextTest.cs
1 //
2 // ApplicationContextTest.cs
3 //
4 // Author:
5 //   Chris Toshok (toshok@ximian.com)
6 //
7 // (C) 2006 Novell, Inc. (http://www.novell.com)
8 //
9
10 using System;
11 using System.ComponentModel;
12 using System.Windows.Forms;
13 using System.Drawing;
14 using System.Reflection;
15 using NUnit.Framework;
16
17 namespace MonoTests.System.Windows.Forms
18 {
19         class MyForm : Form
20         {
21                 public void DoDestroyHandle ()
22                 {
23                         DestroyHandle();
24                 }
25         }
26
27
28         [TestFixture]
29         public class ApplicationContextTest
30         {
31                 ApplicationContext ctx;
32                 int thread_exit_count;
33                 bool reached_form_handle_destroyed;
34
35                 void thread_exit (object sender, EventArgs e)
36                 {
37                         thread_exit_count++;
38                 }
39
40                 void form_handle_destroyed (object sender, EventArgs e)
41                 {
42                         Assert.AreEqual (0, thread_exit_count, "1");
43                         Assert.AreEqual (sender, ctx.MainForm, "2");
44                         reached_form_handle_destroyed = true;
45                 }
46
47                 void form_handle_destroyed2 (object sender, EventArgs e)
48                 {
49                         Assert.AreEqual (1, thread_exit_count, "1");
50                         Assert.AreEqual (sender, ctx.MainForm, "2");
51                         reached_form_handle_destroyed = true;
52                 }
53
54                 [Test]
55                 public void TestEventOrdering ()
56                 {
57                         thread_exit_count = 0;
58                         reached_form_handle_destroyed = false;
59
60                         MyForm f1 = new MyForm ();
61                         f1.ShowInTaskbar = false;
62                         f1.HandleDestroyed += new EventHandler (form_handle_destroyed);
63
64                         ctx = new ApplicationContext (f1);
65                         ctx.ThreadExit += new EventHandler (thread_exit);
66
67                         f1.Show ();
68                         f1.DoDestroyHandle ();
69
70                         Assert.AreEqual (true, reached_form_handle_destroyed, "3");
71                         Assert.AreEqual (1, thread_exit_count, "4");
72                 }
73
74                 [Test]
75                 public void TestEventOrdering2 ()
76                 {
77                         thread_exit_count = 0;
78                         reached_form_handle_destroyed = false;
79
80                         MyForm f1 = new MyForm ();
81                         f1.ShowInTaskbar = false;
82
83                         ctx = new ApplicationContext (f1);
84                         ctx.ThreadExit += new EventHandler (thread_exit);
85
86                         f1.HandleDestroyed += new EventHandler (form_handle_destroyed2);
87
88                         f1.Show ();
89                         f1.DoDestroyHandle ();
90                         Assert.AreEqual (true, reached_form_handle_destroyed, "3");
91                         Assert.AreEqual (1, thread_exit_count, "4");
92                 }
93
94                 [Test]
95                 public void ThreadExitTest ()
96                 {
97                         thread_exit_count = 0;
98
99                         MyForm f1 = new MyForm ();
100                         f1.ShowInTaskbar = false;
101                         ctx = new ApplicationContext (f1);
102                         ctx.ThreadExit += new EventHandler (thread_exit);
103
104                         Assert.AreEqual (f1, ctx.MainForm, "1");
105                         f1.ShowInTaskbar = false;
106                         f1.Show ();
107                         f1.Dispose ();
108                         Assert.AreEqual (f1, ctx.MainForm, "2");
109                         Assert.AreEqual (1, thread_exit_count, "3");
110
111                         f1 = new MyForm ();
112                         ctx = new ApplicationContext (f1);
113                         ctx.ThreadExit += new EventHandler (thread_exit);
114                         f1.ShowInTaskbar = false;
115                         f1.Show ();
116                         f1.DoDestroyHandle ();
117                         Assert.AreEqual (f1, ctx.MainForm, "4");
118                         Assert.AreEqual (2, thread_exit_count, "5");
119                 }
120
121                 
122         }
123 }