d6f223b4f0a109eedb906f9097f467508cef70fd
[mono.git] / mcs / class / Managed.Windows.Forms / Test / System.Windows.Forms / FormTest.cs
1 //
2 // FormTest.cs: Test cases for Form.
3 //
4 // Author:
5 //   Ritvik Mayank (mritvik@novell.com)
6 //
7 // (C) 2005 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         [TestFixture]
20         public class FormTest
21         {
22                 [Test]
23                 public void FormPropertyTest ()
24                 {
25                         Form myform = new Form ();
26                         myform.Visible = true;
27                         myform.Text = "NewForm";
28                         myform.Name = "FormTest";
29                         Assert.IsNull (myform.AcceptButton, "#1");
30                         Assert.IsNull (myform.ActiveMdiChild, "#2"); 
31                         Assert.IsFalse (myform.AutoScale, "#3");
32                         Assert.AreEqual (13, myform.AutoScaleBaseSize.Height, "#4");
33                         Assert.AreEqual (5, myform.AutoScaleBaseSize.Width, "#5");
34                         Assert.IsNull (myform.CancelButton, "#6");
35                         Assert.IsTrue (myform.ControlBox, "#9");
36                         Assert.IsTrue (myform.DesktopBounds.X > 0, "#10a");
37                         Assert.IsTrue (myform.DesktopBounds.Y > 0, "#10b");
38                         Assert.AreEqual (300, myform.DesktopBounds.Height, "#10c");
39                         Assert.AreEqual (300, myform.DesktopBounds.Width, "#10d");
40                         Assert.IsTrue (myform.DesktopLocation.X > 0, "#11a");
41                         Assert.IsTrue (myform.DesktopLocation.Y > 0, "#11b");
42                         Assert.AreEqual (DialogResult.None, myform.DialogResult, "#12");
43                         Assert.AreEqual (FormBorderStyle.Sizable, myform.FormBorderStyle, "#13");
44                         Assert.IsFalse (myform.HelpButton, "#14");
45                         Assert.AreEqual ("System.Drawing.Icon", myform.Icon.GetType ().ToString (), "#15");
46                         Assert.IsFalse (myform.IsMdiChild, "#16");
47                         Assert.IsFalse (myform.IsMdiContainer, "#17");
48                         Assert.IsFalse (myform.KeyPreview, "#18");
49                         Assert.IsTrue (myform.MaximizeBox, "#19");
50                         Assert.AreEqual (0, myform.MaximumSize.Height, "#20a");
51                         Assert.AreEqual (0, myform.MaximumSize.Width, "#20b");
52                         Assert.AreEqual (0, myform.MdiChildren.Length, "#21a");
53                         Assert.AreEqual (1, myform.MdiChildren.Rank, "#21b");
54                         Assert.IsFalse (myform.MdiChildren.IsSynchronized, "#21c");
55                         Assert.IsNull (myform.MdiParent, "#22");
56                         Assert.IsNull (myform.Menu, "#23");
57                         Assert.IsNull (myform.MergedMenu, "#24");
58                         Assert.IsTrue (myform.MinimizeBox, "#25");
59                         Assert.AreEqual (0, myform.MinimumSize.Height, "#26a");
60                         Assert.AreEqual (0, myform.MinimumSize.Width, "#26b");
61                         Assert.IsTrue (myform.MinimumSize.IsEmpty, "#26c");
62                         Assert.IsFalse (myform.Modal, "#27");
63                         Assert.AreEqual (1, myform.Opacity, "#28");
64                         Assert.AreEqual (0, myform.OwnedForms.Length, "#29a");
65                         Assert.AreEqual (1, myform.OwnedForms.Rank, "#29b");
66                         Assert.IsNull (myform.Owner, "#30");
67                         Assert.IsTrue (myform.ShowInTaskbar, "#31");
68                         Assert.AreEqual (300, myform.Size.Height, "#32a");
69                         Assert.AreEqual (300, myform.Size.Width, "#32b");
70                         Assert.AreEqual (SizeGripStyle.Auto, myform.SizeGripStyle, "#33");
71                         Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, myform.StartPosition, "#34");
72                         Assert.IsTrue (myform.TopLevel, "#35");
73                         Assert.IsFalse (myform.TopMost, "#36");
74                         Assert.AreEqual (Color.Empty, myform.TransparencyKey, "#37");
75                         Assert.AreEqual (FormWindowState.Normal, myform.WindowState, "#38");
76                         myform.Dispose ();
77                 }
78
79                 [Test]
80                 public void ActivateTest ()
81                 {
82                         Form myform = new Form ();
83                         myform.ShowInTaskbar = false;
84                         myform.Visible = true;
85                         myform.Text = "NewForm";
86                         myform.Name = "FormTest";
87                         myform.Activate ();
88                         Assert.AreEqual (true, myform.Focus (), "#40");
89                         myform.Dispose ();
90                 }               
91
92                 [Test]
93                 public void AddOwnedFormTest ()
94                 {
95                         Form parent = new Form ();
96                         parent.ShowInTaskbar = false;
97                         parent.Text = "NewParent";
98                         Form ownedForm = new Form ();
99                         ownedForm.ShowInTaskbar = false;
100                         ownedForm.Text = "Owned Form";
101                         parent.AddOwnedForm (ownedForm);
102                         ownedForm.Show ();
103                         Assert.AreEqual ("NewParent", ownedForm.Owner.Text, "#41");
104                         ownedForm.Dispose ();
105                         parent.Dispose ();
106                 }
107
108                 [Test]
109                 public void RemoveOwnedFormTest ()
110                 {
111                         Form myform = new Form ();
112                         myform.ShowInTaskbar = false;
113                         myform.Text = "NewForm";
114                         myform.Name = "FormTest";
115                         myform.RemoveOwnedForm (myform);
116                         myform.Show ();
117                         Assert.AreEqual (null, myform.Owner, "#44");
118                         myform.Dispose ();
119                 }
120
121                 [Test]
122                 public void SetDesktopBoundsTest ()
123                 {
124                         Form myform = new Form ();
125                         myform.ShowInTaskbar = false;
126                         myform.Visible = true;
127                         myform.Text = "NewForm";
128                         myform.Name = "FormTest";
129                         myform.SetDesktopBounds (10, 10, 200 , 200);
130                         Assert.AreEqual (200, myform.DesktopBounds.Height, "#45");
131                         myform.Dispose ();
132                 }
133
134                 [Test]
135                 public void SetDesktopLocationTest ()
136                 {
137                         Form myform = new Form ();
138                         myform.ShowInTaskbar = false;
139                         myform.Visible = true;
140                         myform.Text = "NewForm";
141                         myform.Name = "FormTest";
142                         myform.SetDesktopLocation (10, 10);
143                         Assert.AreEqual (10, myform.DesktopLocation.X, "#46");
144                         myform.Dispose ();
145                 }
146
147                 [Test]
148                 public void SetDialogResultOutOfRange ()
149                 {
150                         Form myform = new Form ();
151                         myform.ShowInTaskbar = false;
152                         try {
153                                 myform.DialogResult = (DialogResult) (-1);
154                                 Assert.Fail ("#48");
155                         } catch (InvalidEnumArgumentException) {
156                         }
157
158                         try {
159                                 myform.DialogResult = (DialogResult) ((int) DialogResult.No + 1);
160                                 Assert.Fail ("#49");
161                         } catch (InvalidEnumArgumentException) {
162                         }
163                         myform.Dispose ();
164                 }
165
166                 void myform_set_dialogresult (object sender, EventArgs e)
167                 {
168                         Form f = (Form)sender;
169
170                         f.DialogResult = DialogResult.OK;
171                 }
172
173                 void myform_close (object sender, EventArgs e)
174                 {
175                         Form f = (Form)sender;
176
177                         f.Close();
178                 }
179
180                 [Test]
181                 public void SetDialogResult ()
182                 {
183                         Form myform = new Form ();
184                         myform.ShowInTaskbar = false;
185                         myform.Visible = true;
186
187                         myform.DialogResult = DialogResult.Cancel;
188
189                         Assert.IsTrue (myform.Visible, "A1");
190                         Assert.IsFalse (myform.IsDisposed, "A2");
191
192                         myform.Close ();
193
194                         Assert.IsFalse (myform.Visible, "A3");
195                         Assert.IsTrue (myform.IsDisposed, "A4");
196
197                         DialogResult result;
198
199                         myform = new Form ();
200                         myform.ShowInTaskbar = false;
201                         myform.VisibleChanged += new EventHandler (myform_set_dialogresult);
202                         result = myform.ShowDialog ();
203
204                         Assert.AreEqual (result, DialogResult.OK, "A5");
205                         Assert.IsFalse (myform.Visible, "A6");
206                         Assert.IsFalse (myform.IsDisposed, "A7");
207
208                         myform = new Form ();
209                         myform.ShowInTaskbar = false;
210                         myform.VisibleChanged += new EventHandler (myform_close);
211                         result = myform.ShowDialog ();
212
213                         Assert.AreEqual (result, DialogResult.Cancel, "A8");
214                         Assert.IsFalse (myform.Visible, "A9");
215                         Assert.IsFalse (myform.IsDisposed, "A10");
216                 }
217
218                 [Test]
219                 [ExpectedException (typeof (ObjectDisposedException))]
220                 public void AccessDisposedForm ()
221                 {
222                         Form myform = new Form ();
223                         myform.ShowInTaskbar = false;
224
225                         myform.Show ();
226                         myform.Close (); // this should result in the form being disposed
227                         myform.Show (); // and this line should result in the ODE being thrown
228                 }
229
230                 [Test]
231                 public void FormClose ()
232                 {
233                         Form myform = new Form ();
234                         myform.ShowInTaskbar = false;
235
236                         Assert.IsFalse (myform.Visible, "A1");
237                         Assert.IsFalse (myform.IsDisposed, "A2");
238
239                         myform.Close ();
240
241                         Assert.IsFalse (myform.Visible, "A3");
242                         Assert.IsFalse (myform.IsDisposed, "A4");
243
244                         myform.Show ();
245
246                         Assert.IsTrue (myform.Visible, "A5");
247                         Assert.IsFalse (myform.IsDisposed, "A6");
248
249                         myform.Close ();
250
251                         Assert.IsFalse (myform.Visible, "A7");
252                         Assert.IsTrue (myform.IsDisposed, "A8");
253                 }
254
255                 [Test]
256                 public void FormClose2 ()
257                 {
258                         WMCloseWatcher f = new WMCloseWatcher ();
259                         f.ShowInTaskbar = false;
260
261                         f.close_count = 0;
262                         Assert.IsFalse (f.Visible, "A1");
263                         f.Close ();
264                         Assert.AreEqual (0, f.close_count, "A2");
265
266
267                         f.Show ();
268                         f.Close ();
269                         Assert.AreEqual (1, f.close_count, "A3");
270                 }
271
272                 class WMCloseWatcher : Form {
273                         public int close_count;
274
275                         protected override void WndProc (ref Message msg) {
276                                 if (msg.Msg == 0x0010 /* WM_CLOSE */) {
277                                         close_count ++;
278                                 }
279
280                                 base.WndProc (ref msg);
281                         }
282                 }
283         }
284 }