* MdiFormTest.cs: Make StartLocationTest NotWorking, it fails on
[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.Drawing;
13 using System.Reflection;
14 using System.Windows.Forms;
15
16 using NUnit.Framework;
17
18 using CategoryAttribute = NUnit.Framework.CategoryAttribute;
19
20 namespace MonoTests.System.Windows.Forms
21 {
22         [TestFixture]
23         public class FormTest
24         {
25         
26                 [Test]
27                 public void FormStartupPositionChangeTest ()
28                 {
29                         using (Form frm = new Form ())
30                         {
31                                 frm.ShowInTaskbar = false;
32                                 frm.StartPosition = FormStartPosition.Manual;
33                                 frm.Location = new Point (0, 0);
34                                 frm.Show ();
35
36                                 // On X there seem to be pending messages in the queue aren't processed
37                                 // before Show returns, so process them. Otherwise the Location returns
38                                 // something like (5,23)
39                                 Application.DoEvents ();
40                                 
41                                 Assert.AreEqual ("{X=0,Y=0}", frm.Location.ToString (), "#01");
42
43                                 frm.StartPosition = FormStartPosition.CenterParent;
44                                 Assert.AreEqual ("{X=0,Y=0}", frm.Location.ToString (), "#02");
45
46                                 frm.StartPosition = FormStartPosition.CenterScreen;
47                                 Assert.AreEqual ("{X=0,Y=0}", frm.Location.ToString (), "#03");
48
49                                 frm.StartPosition = FormStartPosition.Manual;
50                                 Assert.AreEqual ("{X=0,Y=0}", frm.Location.ToString (), "#04");
51
52                                 frm.StartPosition = FormStartPosition.WindowsDefaultBounds;
53                                 Assert.AreEqual ("{X=0,Y=0}", frm.Location.ToString (), "#05");
54
55                                 frm.StartPosition = FormStartPosition.WindowsDefaultLocation;
56                                 Assert.AreEqual ("{X=0,Y=0}", frm.Location.ToString (), "#06");
57                         }
58                 }
59                 
60                 [Test]
61                 public void FormStartupPositionTest ()
62                 {
63                         CreateParams cp;
64                         
65                         using (Form frm = new Form ())
66                         {
67                                 cp = TestHelper.GetCreateParams (frm);
68                                 Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$01");
69                                 Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#01");
70
71                                 frm.StartPosition = FormStartPosition.CenterParent;
72                                 cp = TestHelper.GetCreateParams (frm);
73                                 Assert.AreEqual (FormStartPosition.CenterParent, frm.StartPosition, "$01");
74                                 Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#02");
75
76                                 frm.StartPosition = FormStartPosition.CenterScreen;
77                                 cp = TestHelper.GetCreateParams (frm);
78                                 Assert.AreEqual (FormStartPosition.CenterScreen, frm.StartPosition, "$01");
79                                 Assert.AreEqual (new Point (Screen.PrimaryScreen.WorkingArea.Width / 2 - frm.Width / 2, Screen.PrimaryScreen.WorkingArea.Height / 2 - frm.Height / 2).ToString (), new Point (cp.X, cp.Y).ToString (), "#03");
80
81                                 frm.StartPosition = FormStartPosition.Manual;
82                                 cp = TestHelper.GetCreateParams (frm);
83                                 Assert.AreEqual (FormStartPosition.Manual, frm.StartPosition, "$01");
84                                 Assert.AreEqual (new Point (0, 0).ToString (), new Point (cp.X, cp.Y).ToString (), "#04");
85
86                                 frm.StartPosition = FormStartPosition.WindowsDefaultBounds;
87                                 cp = TestHelper.GetCreateParams (frm);
88                                 Assert.AreEqual (FormStartPosition.WindowsDefaultBounds, frm.StartPosition, "$01");
89                                 Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#05");
90
91                                 frm.StartPosition = FormStartPosition.WindowsDefaultLocation;
92                                 cp = TestHelper.GetCreateParams (frm);
93                                 Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$01");
94                                 Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#06");
95                                 
96                         }
97
98
99                         using (Form frm = new Form ()) {
100                                 frm.Location = new Point (23, 45);
101
102                                 cp = TestHelper.GetCreateParams (frm);
103                                 Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$A1");
104                                 Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#A1");
105
106                                 frm.StartPosition = FormStartPosition.CenterParent;
107                                 cp = TestHelper.GetCreateParams (frm);
108                                 Assert.AreEqual (FormStartPosition.CenterParent, frm.StartPosition, "$A2");
109                                 Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#A2");
110
111                                 frm.StartPosition = FormStartPosition.CenterScreen;
112                                 cp = TestHelper.GetCreateParams (frm);
113                                 Assert.AreEqual (FormStartPosition.CenterScreen, frm.StartPosition, "$A3");
114                                 Assert.AreEqual (new Point (Screen.PrimaryScreen.WorkingArea.Width / 2 - frm.Width / 2, Screen.PrimaryScreen.WorkingArea.Height / 2 - frm.Height / 2).ToString (), new Point (cp.X, cp.Y).ToString (), "#A3");
115
116                                 frm.StartPosition = FormStartPosition.Manual;
117                                 cp = TestHelper.GetCreateParams (frm);
118                                 Assert.AreEqual (FormStartPosition.Manual, frm.StartPosition, "$A4");
119                                 Assert.AreEqual (new Point (23, 45).ToString (), new Point (cp.X, cp.Y).ToString (), "#A4");
120
121                                 frm.StartPosition = FormStartPosition.WindowsDefaultBounds;
122                                 cp = TestHelper.GetCreateParams (frm);
123                                 Assert.AreEqual (FormStartPosition.WindowsDefaultBounds, frm.StartPosition, "$A5");
124                                 Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#A5");
125
126                                 frm.StartPosition = FormStartPosition.WindowsDefaultLocation;
127                                 cp = TestHelper.GetCreateParams (frm);
128                                 Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$A6");
129                                 Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#A6");
130                                 
131
132                         }
133                 }
134                 
135                 [Test]
136                 public void MdiFormStartupPositionTest ()
137                 {
138                         CreateParams cp;
139                         using (Form Main = new Form ()) {
140                                 Main.IsMdiContainer = true;
141                                 Main.ShowInTaskbar = false;
142                                 Main.Show ();
143                                 
144                                 using (Form frm = new Form ()) {
145                                         frm.MdiParent = Main;
146                                         cp = TestHelper.GetCreateParams (frm);
147                                         Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$01");
148                                         Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#01");
149
150                                         frm.StartPosition = FormStartPosition.CenterParent;
151                                         cp = TestHelper.GetCreateParams (frm);
152                                         Assert.AreEqual (FormStartPosition.CenterParent, frm.StartPosition, "$01");
153                                         Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#02");
154
155                                         frm.StartPosition = FormStartPosition.CenterScreen;
156                                         cp = TestHelper.GetCreateParams (frm);
157                                         Assert.AreEqual (FormStartPosition.CenterScreen, frm.StartPosition, "$01");
158                                         Assert.AreEqual (new Point (0, 0).ToString (), new Point (cp.X, cp.Y).ToString (), "#03");
159
160                                         frm.StartPosition = FormStartPosition.Manual;
161                                         cp = TestHelper.GetCreateParams (frm);
162                                         Assert.AreEqual (FormStartPosition.Manual, frm.StartPosition, "$01");
163                                         Assert.AreEqual (new Point (0, 0).ToString (), new Point (cp.X, cp.Y).ToString (), "#04");
164
165                                         frm.StartPosition = FormStartPosition.WindowsDefaultBounds;
166                                         cp = TestHelper.GetCreateParams (frm);
167                                         Assert.AreEqual (FormStartPosition.WindowsDefaultBounds, frm.StartPosition, "$01");
168                                         Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#05");
169
170                                         frm.StartPosition = FormStartPosition.WindowsDefaultLocation;
171                                         cp = TestHelper.GetCreateParams (frm);
172                                         Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$01");
173                                         Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#06");
174                                         frm.Show ();
175                                 }
176
177
178                                 using (Form frm = new Form ()) {
179                                         frm.MdiParent = Main;
180                                         frm.Location = new Point (23, 45);
181
182                                         cp = TestHelper.GetCreateParams (frm);
183                                         Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$A1");
184                                         Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#A1");
185
186                                         frm.StartPosition = FormStartPosition.CenterParent;
187                                         cp = TestHelper.GetCreateParams (frm);
188                                         Assert.AreEqual (FormStartPosition.CenterParent, frm.StartPosition, "$A2");
189                                         Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#A2");
190
191                                         frm.StartPosition = FormStartPosition.CenterScreen;
192                                         cp = TestHelper.GetCreateParams (frm);
193                                         Assert.AreEqual (FormStartPosition.CenterScreen, frm.StartPosition, "$A3");
194                                         Assert.AreEqual (new Point (0, 0).ToString (), new Point (cp.X, cp.Y).ToString (), "#A3");
195
196                                         frm.StartPosition = FormStartPosition.Manual;
197                                         cp = TestHelper.GetCreateParams (frm);
198                                         Assert.AreEqual (FormStartPosition.Manual, frm.StartPosition, "$A4");
199                                         Assert.AreEqual (new Point (23, 45).ToString (), new Point (cp.X, cp.Y).ToString (), "#A4");
200
201                                         frm.StartPosition = FormStartPosition.WindowsDefaultBounds;
202                                         cp = TestHelper.GetCreateParams (frm);
203                                         Assert.AreEqual (FormStartPosition.WindowsDefaultBounds, frm.StartPosition, "$A5");
204                                         Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#A5");
205
206                                         frm.StartPosition = FormStartPosition.WindowsDefaultLocation;
207                                         cp = TestHelper.GetCreateParams (frm);
208                                         Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$A6");
209                                         Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#A6");
210
211                                         frm.Show ();
212                                 }
213
214
215
216                                 using (Form frm = new Form ()) {
217                                         frm.MdiParent = Main;
218                                         frm.Location = new Point (34, 56);
219
220                                         cp = TestHelper.GetCreateParams (frm);
221                                         Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$B1");
222                                         Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#B1");
223
224                                         frm.StartPosition = FormStartPosition.CenterParent;
225                                         cp = TestHelper.GetCreateParams (frm);
226                                         Assert.AreEqual (FormStartPosition.CenterParent, frm.StartPosition, "$B2");
227                                         Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#B2");
228
229                                         frm.StartPosition = FormStartPosition.CenterScreen;
230                                         cp = TestHelper.GetCreateParams (frm);
231                                         Assert.AreEqual (FormStartPosition.CenterScreen, frm.StartPosition, "$B3");
232                                         Assert.AreEqual (new Point (0, 0).ToString (), new Point (cp.X, cp.Y).ToString (), "#B3");
233
234                                         frm.StartPosition = FormStartPosition.Manual;
235                                         cp = TestHelper.GetCreateParams (frm);
236                                         Assert.AreEqual (FormStartPosition.Manual, frm.StartPosition, "$B4");
237                                         Assert.AreEqual (new Point (34, 56).ToString (), new Point (cp.X, cp.Y).ToString (), "#B4");
238
239                                         frm.StartPosition = FormStartPosition.WindowsDefaultBounds;
240                                         cp = TestHelper.GetCreateParams (frm);
241                                         Assert.AreEqual (FormStartPosition.WindowsDefaultBounds, frm.StartPosition, "$B5");
242                                         Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#B5");
243
244                                         frm.StartPosition = FormStartPosition.WindowsDefaultLocation;
245                                         cp = TestHelper.GetCreateParams (frm);
246                                         Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$B6");
247                                         Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#B6");
248
249                                         frm.Show ();
250                                 }
251
252                                 Main.Size = new Size (600, 600);
253                                 using (Form frm = new Form ()) {
254                                         frm.MdiParent = Main;
255                                         frm.Location = new Point (34, 56);
256
257                                         cp = TestHelper.GetCreateParams (frm);
258                                         Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$C1");
259                                         Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#C1");
260
261                                         frm.StartPosition = FormStartPosition.CenterParent;
262                                         cp = TestHelper.GetCreateParams (frm);
263                                         Assert.AreEqual (FormStartPosition.CenterParent, frm.StartPosition, "$C2");
264                                         Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#C2");
265
266                                         frm.StartPosition = FormStartPosition.CenterScreen;
267                                         cp = TestHelper.GetCreateParams (frm);
268                                         Assert.AreEqual (FormStartPosition.CenterScreen, frm.StartPosition, "$C3");
269                                         Assert.AreEqual (new Point (Main.Controls [0].ClientSize.Width / 2 - frm.Width / 2, Main.Controls [0].ClientSize.Height / 2 - frm.Height / 2).ToString (), new Point (cp.X, cp.Y).ToString (), "#C3");
270
271                                         frm.StartPosition = FormStartPosition.Manual;
272                                         cp = TestHelper.GetCreateParams (frm);
273                                         Assert.AreEqual (FormStartPosition.Manual, frm.StartPosition, "$C4");
274                                         Assert.AreEqual (new Point (34, 56).ToString (), new Point (cp.X, cp.Y).ToString (), "#C4");
275
276                                         frm.StartPosition = FormStartPosition.WindowsDefaultBounds;
277                                         cp = TestHelper.GetCreateParams (frm);
278                                         Assert.AreEqual (FormStartPosition.WindowsDefaultBounds, frm.StartPosition, "$C5");
279                                         Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#C5");
280
281                                         frm.StartPosition = FormStartPosition.WindowsDefaultLocation;
282                                         cp = TestHelper.GetCreateParams (frm);
283                                         Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$C6");
284                                         Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#C6");
285
286                                         frm.Show ();
287                                 }
288                         }
289                 }
290
291                 [Test]
292                 public void ParentedFormStartupPositionTest ()
293                 {
294                         CreateParams cp;
295                         using (Form Main = new Form ()) {
296                                 Main.ShowInTaskbar = false;
297                                 Main.Show ();
298
299                                 using (Form frm = new Form ()) {
300                                         frm.TopLevel = false;
301                                         Main.Controls.Add (frm);
302                                         cp = TestHelper.GetCreateParams (frm);
303                                         Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$01");
304                                         Assert.AreEqual (new Point (0, 0).ToString (), new Point (cp.X, cp.Y).ToString (), "#01");
305
306                                         frm.StartPosition = FormStartPosition.CenterParent;
307                                         cp = TestHelper.GetCreateParams (frm);
308                                         Assert.AreEqual (FormStartPosition.CenterParent, frm.StartPosition, "$02");
309                                         Assert.AreEqual (new Point (0, 0).ToString (), new Point (cp.X, cp.Y).ToString (), "#02");
310
311                                         frm.StartPosition = FormStartPosition.CenterScreen;
312                                         cp = TestHelper.GetCreateParams (frm);
313                                         Assert.AreEqual (FormStartPosition.CenterScreen, frm.StartPosition, "$03");
314                                         Assert.AreEqual (new Point (0, 0).ToString (), new Point (cp.X, cp.Y).ToString (), "#03");
315
316                                         frm.StartPosition = FormStartPosition.Manual;
317                                         cp = TestHelper.GetCreateParams (frm);
318                                         Assert.AreEqual (FormStartPosition.Manual, frm.StartPosition, "$04");
319                                         Assert.AreEqual (new Point (0, 0).ToString (), new Point (cp.X, cp.Y).ToString (), "#04");
320
321                                         frm.StartPosition = FormStartPosition.WindowsDefaultBounds;
322                                         cp = TestHelper.GetCreateParams (frm);
323                                         Assert.AreEqual (FormStartPosition.WindowsDefaultBounds, frm.StartPosition, "$05");
324                                         Assert.AreEqual (new Point (0, 0).ToString (), new Point (cp.X, cp.Y).ToString (), "#05");
325
326                                         frm.StartPosition = FormStartPosition.WindowsDefaultLocation;
327                                         cp = TestHelper.GetCreateParams (frm);
328                                         Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$06");
329                                         Assert.AreEqual (new Point (0, 0).ToString (), new Point (cp.X, cp.Y).ToString (), "#06");
330                                         frm.Show ();
331                                 }
332
333
334                                 using (Form frm = new Form ()) {
335                                         frm.TopLevel = false;
336                                         Main.Controls.Add (frm);
337                                         frm.Location = new Point (23, 45);
338
339                                         cp = TestHelper.GetCreateParams (frm);
340                                         Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$A1");
341                                         Assert.AreEqual (new Point (23, 45).ToString (), new Point (cp.X, cp.Y).ToString (), "#A1");
342
343                                         frm.StartPosition = FormStartPosition.CenterParent;
344                                         cp = TestHelper.GetCreateParams (frm);
345                                         Assert.AreEqual (FormStartPosition.CenterParent, frm.StartPosition, "$A2");
346                                         Assert.AreEqual (new Point (23, 45).ToString (), new Point (cp.X, cp.Y).ToString (), "#A2");
347
348                                         frm.StartPosition = FormStartPosition.CenterScreen;
349                                         cp = TestHelper.GetCreateParams (frm);
350                                         Assert.AreEqual (FormStartPosition.CenterScreen, frm.StartPosition, "$A3");
351                                         Assert.AreEqual (new Point (23, 45).ToString (), new Point (cp.X, cp.Y).ToString (), "#A3");
352
353                                         frm.StartPosition = FormStartPosition.Manual;
354                                         cp = TestHelper.GetCreateParams (frm);
355                                         Assert.AreEqual (FormStartPosition.Manual, frm.StartPosition, "$A4");
356                                         Assert.AreEqual (new Point (23, 45).ToString (), new Point (cp.X, cp.Y).ToString (), "#A4");
357
358                                         frm.StartPosition = FormStartPosition.WindowsDefaultBounds;
359                                         cp = TestHelper.GetCreateParams (frm);
360                                         Assert.AreEqual (FormStartPosition.WindowsDefaultBounds, frm.StartPosition, "$A5");
361                                         Assert.AreEqual (new Point (23, 45).ToString (), new Point (cp.X, cp.Y).ToString (), "#A5");
362
363                                         frm.StartPosition = FormStartPosition.WindowsDefaultLocation;
364                                         cp = TestHelper.GetCreateParams (frm);
365                                         Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$A6");
366                                         Assert.AreEqual (new Point (23, 45).ToString (), new Point (cp.X, cp.Y).ToString (), "#A6");
367
368                                         frm.Show ();
369                                 }
370
371
372
373                                 using (Form frm = new Form ()) {
374                                         frm.TopLevel = false;
375                                         Main.Controls.Add (frm);
376                                         frm.Location = new Point (34, 56);
377
378                                         cp = TestHelper.GetCreateParams (frm);
379                                         Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$B1");
380                                         Assert.AreEqual (new Point (34, 56).ToString (), new Point (cp.X, cp.Y).ToString (), "#B1");
381
382                                         frm.StartPosition = FormStartPosition.CenterParent;
383                                         cp = TestHelper.GetCreateParams (frm);
384                                         Assert.AreEqual (FormStartPosition.CenterParent, frm.StartPosition, "$B2");
385                                         Assert.AreEqual (new Point (34, 56).ToString (), new Point (cp.X, cp.Y).ToString (), "#B2");
386
387                                         frm.StartPosition = FormStartPosition.CenterScreen;
388                                         cp = TestHelper.GetCreateParams (frm);
389                                         Assert.AreEqual (FormStartPosition.CenterScreen, frm.StartPosition, "$B3");
390                                         Assert.AreEqual (new Point (34, 56).ToString (), new Point (cp.X, cp.Y).ToString (), "#B3");
391
392                                         frm.StartPosition = FormStartPosition.Manual;
393                                         cp = TestHelper.GetCreateParams (frm);
394                                         Assert.AreEqual (FormStartPosition.Manual, frm.StartPosition, "$B4");
395                                         Assert.AreEqual (new Point (34, 56).ToString (), new Point (cp.X, cp.Y).ToString (), "#B4");
396
397                                         frm.StartPosition = FormStartPosition.WindowsDefaultBounds;
398                                         cp = TestHelper.GetCreateParams (frm);
399                                         Assert.AreEqual (FormStartPosition.WindowsDefaultBounds, frm.StartPosition, "$B5");
400                                         Assert.AreEqual (new Point (34, 56).ToString (), new Point (cp.X, cp.Y).ToString (), "#B5");
401
402                                         frm.StartPosition = FormStartPosition.WindowsDefaultLocation;
403                                         cp = TestHelper.GetCreateParams (frm);
404                                         Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$B6");
405                                         Assert.AreEqual (new Point (34, 56).ToString (), new Point (cp.X, cp.Y).ToString (), "#B6");
406
407                                         frm.Show ();
408                                 }
409
410
411                                 Main.Size = new Size (600, 600);
412                                 using (Form frm = new Form ()) {
413                                         frm.TopLevel = false;
414                                         Main.Controls.Add (frm);
415                                         frm.Location = new Point (34, 56);
416
417                                         cp = TestHelper.GetCreateParams (frm);
418                                         Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$C1");
419                                         Assert.AreEqual (new Point (34, 56).ToString (), new Point (cp.X, cp.Y).ToString (), "#C1");
420
421                                         frm.StartPosition = FormStartPosition.CenterParent;
422                                         cp = TestHelper.GetCreateParams (frm);
423                                         Assert.AreEqual (FormStartPosition.CenterParent, frm.StartPosition, "$C2");
424                                         Assert.AreEqual (new Point (34, 56).ToString (), new Point (cp.X, cp.Y).ToString (), "#C2");
425
426                                         frm.StartPosition = FormStartPosition.CenterScreen;
427                                         cp = TestHelper.GetCreateParams (frm);
428                                         Assert.AreEqual (FormStartPosition.CenterScreen, frm.StartPosition, "$C3");
429                                         Assert.AreEqual (new Point (34, 56).ToString (), new Point (cp.X, cp.Y).ToString (), "#C3");
430
431                                         frm.StartPosition = FormStartPosition.Manual;
432                                         cp = TestHelper.GetCreateParams (frm);
433                                         Assert.AreEqual (FormStartPosition.Manual, frm.StartPosition, "$C4");
434                                         Assert.AreEqual (new Point (34, 56).ToString (), new Point (cp.X, cp.Y).ToString (), "#C4");
435
436                                         frm.StartPosition = FormStartPosition.WindowsDefaultBounds;
437                                         cp = TestHelper.GetCreateParams (frm);
438                                         Assert.AreEqual (FormStartPosition.WindowsDefaultBounds, frm.StartPosition, "$C5");
439                                         Assert.AreEqual (new Point (34, 56).ToString (), new Point (cp.X, cp.Y).ToString (), "#C5");
440
441                                         frm.StartPosition = FormStartPosition.WindowsDefaultLocation;
442                                         cp = TestHelper.GetCreateParams (frm);
443                                         Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$C6");
444                                         Assert.AreEqual (new Point (34, 56).ToString (), new Point (cp.X, cp.Y).ToString (), "#C6");
445
446                                         frm.Show ();
447                                 }
448                         }
449                 }
450                 
451                 [Test] // bug #80791
452                 public void ClientSizeTest ()
453                 {
454                         Form form = new Form ();
455                         Assert.IsFalse (form.ClientSize == form.Size);
456                 }
457
458                 [Test] // bug #80574
459                 [Category ("NotWorking")]
460                 public void FormBorderStyleTest ()
461                 {
462                         Form form = new Form ();
463                         Rectangle boundsBeforeBorderStyleChange = form.Bounds;
464                         Rectangle clientRectangleBeforeBorderStyleChange = form.ClientRectangle;
465                         form.FormBorderStyle = FormBorderStyle.None;
466                         Assert.AreEqual (form.Bounds, boundsBeforeBorderStyleChange, "#A1");
467                         Assert.AreEqual (form.ClientRectangle, clientRectangleBeforeBorderStyleChange, "#A2");
468
469                         form.Visible = true;
470                         form.FormBorderStyle = FormBorderStyle.Sizable;
471                         boundsBeforeBorderStyleChange = form.Bounds;
472                         clientRectangleBeforeBorderStyleChange = form.ClientRectangle;
473                         form.FormBorderStyle = FormBorderStyle.None;
474                         Assert.IsFalse (form.Bounds == boundsBeforeBorderStyleChange, "#B1");
475                         Assert.AreEqual (form.ClientRectangle, clientRectangleBeforeBorderStyleChange, "#B2");
476
477                         form.Visible = false;
478                         form.FormBorderStyle = FormBorderStyle.Sizable;
479                         boundsBeforeBorderStyleChange = form.Bounds;
480                         clientRectangleBeforeBorderStyleChange = form.ClientRectangle;
481                         form.FormBorderStyle = FormBorderStyle.None;
482                         Assert.IsFalse (form.Bounds == boundsBeforeBorderStyleChange, "#C1");
483                         Assert.AreEqual (form.ClientRectangle, clientRectangleBeforeBorderStyleChange, "#C2");
484                 }
485
486                 [Test]
487                 [Category ("NotWorking")]
488                 public void MaximizedParentedFormTest ()
489                 {
490                         using (Form Main = new Form ()) {
491                                 Form Child = new Form ();
492                                 Child.TopLevel = false;
493                                 Main.Controls.Add (Child);
494                                 Main.ShowInTaskbar = false;
495                                 Main.Show ();
496                                 
497                                 Child.WindowState = FormWindowState.Maximized;
498                                 Child.Visible = true;
499                                 // The exact negative value depends on the border with, but it should always be < 0.
500                                 Assert.IsTrue (Child.Location.X < 0 && Child.Location.Y < 0, "#A1");
501                         }
502                 }
503                 [Test]
504                 [Category ("NotWorking")]
505                 public void ParentedFormEventTest ()
506                 {
507
508                         using (Form Main = new Form ()) {
509                                 Form Child = new Form ();
510                                 Child.TopLevel = false;
511                                 Child.Visible = true;
512                                 Main.ShowInTaskbar = false;
513                                 Main.Show ();
514
515                                 EventLogger log = new EventLogger (Child);
516                                 Assert.AreEqual (true, Child.Visible, "#A0");
517                                 Main.Controls.Add (Child);
518                                 Assert.AreEqual (true, Child.Visible, "#B0");
519                                 Assert.AreEqual ("ParentChanged;BindingContextChanged;Layout;VisibleChanged;BindingContextChanged;BindingContextChanged", log.EventsJoined (), "#B1");
520                         }
521                 }
522                 [Test]
523                 [NUnit.Framework.Category ("NotWorking")]
524                 public void FormCreateParamsStyleTest ()
525                 {
526                         Form frm;
527                         
528                         using (frm = new Form ()) {
529                                 Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles) TestHelper.GetCreateParams (frm).Style), "#01-Style");
530                                 Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles) TestHelper.GetCreateParams (frm).ExStyle), "#01-ExStyle");
531                         }
532
533                         using (frm = new Form ()) {
534                                 frm.AllowDrop = !frm.AllowDrop;
535                                 Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#02-Style");
536                                 Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#02-ExStyle");
537                         }
538
539                         using (frm = new Form ()) {
540                                 frm.AllowTransparency = !frm.AllowTransparency;
541                                 Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#03-Style");
542                                 Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW | WindowExStyles.WS_EX_LAYERED, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#03-ExStyle");
543                         }
544
545                         using (frm = new Form ()) {
546                                 frm.Opacity = 0.50;
547                                 Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#04-Style");
548                                 Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW | WindowExStyles.WS_EX_LAYERED, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#04-ExStyle");
549                         }
550
551                         using (frm = new Form ()) {
552                                 frm.TransparencyKey = Color.Cyan;
553                                 Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#05-Style");
554                                 Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW | WindowExStyles.WS_EX_LAYERED, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#05-ExStyle");
555                         }
556                         
557                         using (frm = new Form ()) {
558                                 frm.CausesValidation = !frm.CausesValidation;
559                                 Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#06-Style");
560                                 Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#06-ExStyle");
561                         }
562
563                         using (frm = new Form ()) {
564                                 frm.ControlBox = !frm.ControlBox;
565                                 Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TABSTOP | WindowStyles.WS_GROUP | WindowStyles.WS_THICKFRAME | WindowStyles.WS_BORDER | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#07-Style");
566                                 Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#07-ExStyle");
567                         }
568
569                         using (frm = new Form ()) {
570                                 frm.Enabled = true;
571                                 Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#08-Style");
572                                 Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#08-ExStyle");
573                         }
574
575                         using (frm = new Form ()) {
576                                 frm.FormBorderStyle = FormBorderStyle.Fixed3D;
577                                 Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TABSTOP | WindowStyles.WS_GROUP | WindowStyles.WS_SYSMENU | WindowStyles.WS_CAPTION | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#10-Style");
578                                 Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CLIENTEDGE | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#10-ExStyle");
579                         }
580
581                         using (frm = new Form ()) {
582                                 frm.FormBorderStyle = FormBorderStyle.FixedDialog;
583                                 Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TABSTOP | WindowStyles.WS_GROUP | WindowStyles.WS_SYSMENU | WindowStyles.WS_CAPTION | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#11-Style");
584                                 Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_DLGMODALFRAME | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#11-ExStyle");
585                         }
586
587                         using (frm = new Form ()) {
588                                 frm.FormBorderStyle = FormBorderStyle.FixedSingle;
589                                 Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TABSTOP | WindowStyles.WS_GROUP | WindowStyles.WS_SYSMENU | WindowStyles.WS_CAPTION | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#12-Style");
590                                 Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#12-ExStyle");
591                         }
592
593                         using (frm = new Form ()) {
594                                 frm.FormBorderStyle = FormBorderStyle.FixedToolWindow;
595                                 Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TABSTOP | WindowStyles.WS_GROUP | WindowStyles.WS_SYSMENU | WindowStyles.WS_CAPTION | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#13-Style");
596                                 Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_TOOLWINDOW | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#13-ExStyle");
597                         }
598
599                         using (frm = new Form ()) {
600                                 frm.FormBorderStyle = FormBorderStyle.None;
601                                 Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TABSTOP | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#14-Style");
602                                 Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#14-ExStyle");
603                         }
604
605                         using (frm = new Form ()) {
606                                 frm.FormBorderStyle = FormBorderStyle.Sizable;
607                                 Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#15-Style");
608                                 Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#15-ExStyle");
609                         }
610
611                         using (frm = new Form ()) {
612                                 frm.FormBorderStyle = FormBorderStyle.SizableToolWindow;
613                                 Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#16-Style");
614                                 Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_TOOLWINDOW | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#16-ExStyle");
615                         }
616
617                         using (frm = new Form ()) {
618                                 frm.HelpButton = !frm.HelpButton;
619                                 Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#17-Style");
620                                 Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#17-ExStyle");
621                         }
622
623                         using (frm = new Form ()) {
624                                 frm.Icon = null;
625                                 Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#18-Style");
626                                 Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#18-ExStyle");
627                         }
628
629                         using (frm = new Form ()) {
630                                 frm.Icon = SystemIcons.Asterisk;
631                                 Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#19-Style");
632                                 Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#19-ExStyle");
633                         }
634
635                         using (frm = new Form ()) {
636                                 frm.IsMdiContainer = !frm.IsMdiContainer;
637                                 Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#20-Style");
638                                 Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#20-ExStyle");
639                         }
640
641                         using (frm = new Form ()) {
642                                 frm.MaximizeBox = !frm.MaximizeBox;
643                                 Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_GROUP | WindowStyles.WS_THICKFRAME | WindowStyles.WS_SYSMENU | WindowStyles.WS_CAPTION | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#21-Style");
644                                 Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#21-ExStyle");
645                         }
646
647                         using (frm = new Form ()) {
648                                 frm.MinimizeBox = !frm.MinimizeBox;
649                                 Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TABSTOP | WindowStyles.WS_THICKFRAME | WindowStyles.WS_SYSMENU | WindowStyles.WS_CAPTION | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#22-Style");
650                                 Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#22-ExStyle");
651                         }
652 #if NET_2_0
653                         using (frm = new Form ()) {
654                                 frm.ShowIcon = !frm.ShowIcon;
655                                 Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#23-Style");
656                                 Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_DLGMODALFRAME | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#23-ExStyle");
657                         }
658 #endif          
659                         using (frm = new Form ()) {
660                                 frm.ShowInTaskbar = !frm.ShowInTaskbar;
661                                 Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#24-Style");
662                                 Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#24-ExStyle");
663                         }
664
665
666                         using (frm = new Form ()) {
667                                 frm.TabStop = !frm.TabStop;
668                                 Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#25-Style");
669                                 Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#25-ExStyle");
670                         }
671
672                         using (frm = new Form ()) {
673                                 frm.TopLevel = !frm.TopLevel;
674                                 Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN | WindowStyles.WS_CLIPSIBLINGS | WindowStyles.WS_CHILD, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#26-Style");
675                                 Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#26-ExStyle");
676                         }
677
678                         using (frm = new Form ()) {
679                                 frm.Visible = !frm.Visible;
680                                 Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#27-Style");
681                                 Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#27-ExStyle");
682                         }
683                 }
684                 
685                 [Test]
686                 public void FormParentedTest ()
687                 {
688                         using (Form frm = new Form ()) {
689                                 Form frm2 = new Form ();
690                                 frm2.TopLevel = false;
691                                 frm.ShowInTaskbar = false;
692                                 frm2.ShowInTaskbar = false;
693                                 frm2.Visible = true;
694                                 frm.Visible = true;
695                                 
696                                 EventLogger log = new EventLogger (frm);
697                                 EventLogger log2 = new EventLogger (frm2);
698                                 
699                                 frm.Controls.Add (frm2);
700
701                                 Assert.IsTrue (log2.EventRaised ("ParentChanged"), "#C1");
702                                 Assert.IsTrue (log.EventRaised ("ControlAdded"), "#P1");
703                                 Assert.AreSame (frm, frm2.Parent, "#02");
704                         }
705                 }
706                 
707                 [Test]
708                 public void FormPropertyTest ()
709                 {
710                         Form myform = new Form ();
711                         myform.Visible = true;
712                         myform.Text = "NewForm";
713                         myform.Name = "FormTest";
714                         Assert.IsNull (myform.AcceptButton, "#1");
715                         Assert.IsNull (myform.ActiveMdiChild, "#2"); 
716                         Assert.IsFalse (myform.AutoScale, "#3");
717                         Assert.IsNull (myform.CancelButton, "#6");
718                         Assert.IsTrue (myform.ControlBox, "#9");
719                         Assert.IsTrue (myform.DesktopBounds.X > 0, "#10a");
720                         Assert.IsTrue (myform.DesktopBounds.Y > 0, "#10b");
721                         Assert.AreEqual (300, myform.DesktopBounds.Height, "#10c");
722                         Assert.AreEqual (300, myform.DesktopBounds.Width, "#10d");
723                         Assert.IsTrue (myform.DesktopLocation.X > 0, "#11a");
724                         Assert.IsTrue (myform.DesktopLocation.Y > 0, "#11b");
725                         Assert.AreEqual (DialogResult.None, myform.DialogResult, "#12");
726                         Assert.AreEqual (FormBorderStyle.Sizable, myform.FormBorderStyle, "#13");
727                         Assert.IsFalse (myform.HelpButton, "#14");
728                         Assert.AreEqual ("System.Drawing.Icon", myform.Icon.GetType ().ToString (), "#15");
729                         Assert.IsFalse (myform.IsMdiChild, "#16");
730                         Assert.IsFalse (myform.IsMdiContainer, "#17");
731                         Assert.IsFalse (myform.KeyPreview, "#18");
732                         Assert.IsTrue (myform.MaximizeBox, "#19");
733                         Assert.AreEqual (0, myform.MaximumSize.Height, "#20a");
734                         Assert.AreEqual (0, myform.MaximumSize.Width, "#20b");
735                         Assert.AreEqual (0, myform.MdiChildren.Length, "#21a");
736                         Assert.AreEqual (1, myform.MdiChildren.Rank, "#21b");
737                         Assert.IsFalse (myform.MdiChildren.IsSynchronized, "#21c");
738                         Assert.IsNull (myform.MdiParent, "#22");
739                         Assert.IsNull (myform.Menu, "#23");
740                         Assert.IsNull (myform.MergedMenu, "#24");
741                         Assert.IsTrue (myform.MinimizeBox, "#25");
742                         Assert.AreEqual (0, myform.MinimumSize.Height, "#26a");
743                         Assert.AreEqual (0, myform.MinimumSize.Width, "#26b");
744                         Assert.IsTrue (myform.MinimumSize.IsEmpty, "#26c");
745                         Assert.IsFalse (myform.Modal, "#27");
746                         Assert.AreEqual (1, myform.Opacity, "#28");
747                         Assert.AreEqual (0, myform.OwnedForms.Length, "#29a");
748                         Assert.AreEqual (1, myform.OwnedForms.Rank, "#29b");
749                         Assert.IsNull (myform.Owner, "#30");
750                         Assert.IsTrue (myform.ShowInTaskbar, "#31");
751                         Assert.AreEqual (300, myform.Size.Height, "#32a");
752                         Assert.AreEqual (300, myform.Size.Width, "#32b");
753                         Assert.AreEqual (SizeGripStyle.Auto, myform.SizeGripStyle, "#33");
754                         Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, myform.StartPosition, "#34");
755                         Assert.IsTrue (myform.TopLevel, "#35");
756                         Assert.IsFalse (myform.TopMost, "#36");
757                         Assert.AreEqual (Color.Empty, myform.TransparencyKey, "#37");
758                         Assert.AreEqual (FormWindowState.Normal, myform.WindowState, "#38");
759                         Assert.AreEqual (ImeMode.NoControl, myform.ImeMode, "#39");
760                         myform.Dispose ();
761                 }
762
763                 [Test]
764                 [Category ("NotWorking")]
765                 public void ActivateTest ()
766                 {
767                         Form myform = new Form ();
768                         myform.ShowInTaskbar = false;
769                         myform.Visible = true;
770                         myform.Text = "NewForm";
771                         myform.Name = "FormTest";
772                         myform.Activate ();
773                         Assert.AreEqual (true, myform.Focus (), "#40");
774                         myform.Dispose ();
775                 }
776
777                 [Test]
778                 public void AddOwnedFormTest ()
779                 {
780                         Form parent = new Form ();
781                         parent.ShowInTaskbar = false;
782                         parent.Text = "NewParent";
783                         Form ownedForm = new Form ();
784                         ownedForm.ShowInTaskbar = false;
785                         ownedForm.Text = "Owned Form";
786                         parent.AddOwnedForm (ownedForm);
787                         ownedForm.Show ();
788                         Assert.AreEqual ("NewParent", ownedForm.Owner.Text, "#41");
789                         ownedForm.Dispose ();
790                         parent.Dispose ();
791                 }
792
793                 [Test] // bug #80020
794                 public void IsHandleCreated ()
795                 {
796                         Form main = new Form ();
797                         main.Name = "main";
798                         main.IsMdiContainer = true;
799                         main.ShowInTaskbar = false;
800                         Assert.IsFalse (main.IsHandleCreated, "#1");
801
802                         Form child = new Form ();
803                         child.MdiParent = main;
804                         child.WindowState = FormWindowState.Maximized;
805                         Assert.IsFalse (main.IsHandleCreated, "#2");
806
807                         child.Show ();
808                         Assert.IsFalse (child.IsHandleCreated, "#3");
809                         Assert.IsFalse (main.IsHandleCreated, "#4");
810
811                         main.Show ();
812                         Assert.IsTrue (child.IsHandleCreated, "#5");
813                         Assert.IsTrue (main.IsHandleCreated, "#6");
814
815                         child.Dispose ();
816                         main.Dispose ();
817                 }
818
819                 [Test]
820                 public void RemoveOwnedFormTest ()
821                 {
822                         Form myform = new Form ();
823                         myform.ShowInTaskbar = false;
824                         myform.Text = "NewForm";
825                         myform.Name = "FormTest";
826                         myform.RemoveOwnedForm (myform);
827                         myform.Show ();
828                         Assert.AreEqual (null, myform.Owner, "#44");
829                         myform.Dispose ();
830                 }
831
832                 [Test]
833                 public void SetDesktopBoundsTest ()
834                 {
835                         Form myform = new Form ();
836                         myform.ShowInTaskbar = false;
837                         myform.Visible = true;
838                         myform.Text = "NewForm";
839                         myform.Name = "FormTest";
840                         myform.SetDesktopBounds (10, 10, 200 , 200);
841                         Assert.AreEqual (200, myform.DesktopBounds.Height, "#45");
842                         myform.Dispose ();
843                 }
844
845                 [Test]
846                 public void SetDesktopLocationTest ()
847                 {
848                         Form myform = new Form ();
849                         myform.ShowInTaskbar = false;
850                         myform.Visible = true;
851                         myform.Text = "NewForm";
852                         myform.Name = "FormTest";
853                         myform.SetDesktopLocation (10, 10);
854                         Assert.AreEqual (10, myform.DesktopLocation.X, "#46");
855                         myform.Dispose ();
856                 }
857
858                 [Test]
859                 public void SetDialogResultOutOfRange ()
860                 {
861                         Form myform = new Form ();
862                         myform.ShowInTaskbar = false;
863                         try {
864                                 myform.DialogResult = (DialogResult) (-1);
865                                 Assert.Fail ("#48");
866                         } catch (InvalidEnumArgumentException) {
867                         }
868
869                         try {
870                                 myform.DialogResult = (DialogResult) ((int) DialogResult.No + 1);
871                                 Assert.Fail ("#49");
872                         } catch (InvalidEnumArgumentException) {
873                         }
874                         myform.Dispose ();
875                 }
876
877                 void myform_set_dialogresult (object sender, EventArgs e)
878                 {
879                         Form f = (Form)sender;
880
881                         f.DialogResult = DialogResult.OK;
882                 }
883
884                 void myform_close (object sender, EventArgs e)
885                 {
886                         Form f = (Form)sender;
887
888                         f.Close();
889                 }
890
891                 [Test]
892                 public void SetDialogResult ()
893                 {
894                         Form myform = new Form ();
895                         myform.ShowInTaskbar = false;
896                         myform.Visible = true;
897
898                         myform.DialogResult = DialogResult.Cancel;
899
900                         Assert.IsTrue (myform.Visible, "A1");
901                         Assert.IsFalse (myform.IsDisposed, "A2");
902
903                         myform.Close ();
904
905                         Assert.IsFalse (myform.Visible, "A3");
906                         Assert.IsTrue (myform.IsDisposed, "A4");
907
908                         DialogResult result;
909
910                         myform = new Form ();
911                         myform.ShowInTaskbar = false;
912                         myform.VisibleChanged += new EventHandler (myform_set_dialogresult);
913                         result = myform.ShowDialog ();
914
915                         Assert.AreEqual (result, DialogResult.OK, "A5");
916                         Assert.IsFalse (myform.Visible, "A6");
917                         Assert.IsFalse (myform.IsDisposed, "A7");
918
919                         myform = new Form ();
920                         myform.ShowInTaskbar = false;
921                         myform.VisibleChanged += new EventHandler (myform_close);
922                         result = myform.ShowDialog ();
923
924                         Assert.AreEqual (result, DialogResult.Cancel, "A8");
925                         Assert.IsFalse (myform.Visible, "A9");
926                         Assert.IsFalse (myform.IsDisposed, "A10");
927                 }
928
929                 [Test]
930                 public void ShowDialog_Child ()
931                 {
932                         Form main = new Form ();
933                         main.IsMdiContainer = true;
934                         Form child = new Form ();
935                         child.MdiParent = main;
936                         try {
937                                 child.ShowDialog ();
938                                 Assert.Fail ("#1");
939                         } catch (InvalidOperationException ex) {
940                                 // Forms that are not top level forms cannot be displayed as a
941                                 // modal dialog. Remove the form from any parent form before 
942                                 // calling ShowDialog.
943                                 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");
944                                 Assert.IsNull (ex.InnerException, "#3");
945                                 Assert.IsNotNull (ex.Message, "#4");
946                         }
947                         Assert.IsNull (child.Owner, "#5");
948                         child.Dispose ();
949                         main.Dispose ();
950                 }
951
952                 [Test]
953                 public void ShowDialog_Disabled ()
954                 {
955                         Form form = new Form ();
956                         form.Enabled = false;
957                         try {
958                                 form.ShowDialog ();
959                                 Assert.Fail ("#A1");
960                         } catch (InvalidOperationException ex) {
961                                 // Forms that are not enabled cannot be displayed as a modal
962                                 // dialog. Set the form's enabled property to true before
963                                 // calling ShowDialog.
964                                 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#A2");
965                                 Assert.IsNull (ex.InnerException, "#A3");
966                                 Assert.IsNotNull (ex.Message, "#A4");
967                         }
968                         Assert.IsNull (form.Owner, "#A5");
969                         form.Dispose ();
970
971                         Form main = new Form ();
972                         form = new Form ();
973                         form.Owner = main;
974                         form.Enabled = false;
975                         try {
976                                 form.ShowDialog ();
977                                 Assert.Fail ("#B1");
978                         } catch (InvalidOperationException) {
979                         }
980                         Assert.IsNotNull (form.Owner, "#B2");
981                         Assert.AreSame (main, form.Owner, "#B3");
982                         form.Dispose ();
983                         main.Dispose ();
984                 }
985
986                 [Test]
987                 [Category ("NotWorking")]
988                 public void ShowDialog_Owner_Circular ()
989                 {
990                         Form main = new Form ();
991                         Form child = new Form ();
992                         child.Owner = main;
993                         try {
994                                 main.ShowDialog (child);
995                                 Assert.Fail ("#1");
996                         } catch (ArgumentException ex) {
997                                 // A circular control reference has been made. A control cannot
998                                 // be owned or parented to itself
999                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
1000                                 Assert.IsNull (ex.InnerException, "#3");
1001                                 Assert.IsNotNull (ex.Message, "#4");
1002                                 Assert.IsNull (ex.ParamName, "#5");
1003                         }
1004                         Assert.IsNull (main.Owner, "#6");
1005                         main.Dispose ();
1006                         child.Dispose ();
1007                 }
1008
1009                 [Test] // bug #80773
1010                 [Category ("NotWorking")]
1011                 public void ShowDialog_Owner_Self ()
1012                 {
1013                         Form form = new Form ();
1014                         try {
1015                                 form.ShowDialog (form);
1016                                 Assert.Fail ("#A1");
1017                         } catch (ArgumentException ex) {
1018                                 // Forms cannot own themselves or their owners
1019                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
1020                                 Assert.IsNull (ex.InnerException, "#A3");
1021                                 Assert.IsNotNull (ex.Message, "#A4");
1022                                 Assert.IsNotNull (ex.ParamName, "#A5");
1023                                 Assert.AreEqual ("owner", ex.ParamName, "#A6");
1024                         }
1025                         Assert.IsNull (form.Owner, "#A7");
1026                         form.Dispose ();
1027
1028                         Form main = new Form ();
1029                         form = new Form ();
1030                         form.Owner = main;
1031                         try {
1032                                 form.ShowDialog (form);
1033                                 Assert.Fail ("#B1");
1034                         } catch (ArgumentException) {
1035                         }
1036                         Assert.IsNotNull (form.Owner);
1037                         Assert.AreSame (main, form.Owner, "#B2");
1038                         form.Dispose ();
1039                         main.Dispose ();
1040                 }
1041
1042                 [Test]
1043                 public void ShowDialog_Visible ()
1044                 {
1045                         Form form = new Form ();
1046                         form.ShowInTaskbar = false;
1047                         form.Visible = true;
1048                         try {
1049                                 form.ShowDialog ();
1050                                 Assert.Fail ("#A1");
1051                         } catch (InvalidOperationException ex) {
1052                                 // Forms that are already visible cannot be displayed as a modal
1053                                 // dialog. Set the form's visible property to false before 
1054                                 // calling ShowDialog.
1055                                 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#A2");
1056                                 Assert.IsNull (ex.InnerException, "#A3");
1057                                 Assert.IsNotNull (ex.Message, "#A4");
1058                         }
1059                         Assert.IsNull (form.Owner, "#A5");
1060                         form.Dispose ();
1061
1062                         Form main = new Form ();
1063                         form = new Form ();
1064                         form.Owner = main;
1065                         form.Visible = true;
1066                         try {
1067                                 form.ShowDialog ();
1068                                 Assert.Fail ("#B1");
1069                         } catch (InvalidOperationException) {
1070                         }
1071                         Assert.IsNotNull (form.Owner, "#B2");
1072                         Assert.AreSame (main, form.Owner, "#B3");
1073                         form.Dispose ();
1074                         main.Dispose ();
1075                 }
1076
1077                 [Test] // bug #80604
1078                 public void VisibleOnLoad ()
1079                 {
1080                         MockForm form = new MockForm ();
1081                         form.CloseOnLoad = true;
1082                         Application.Run (form);
1083                         Assert.IsTrue (form.VisibleOnLoad, "#1");
1084                         form.Dispose ();
1085
1086                         form = new MockForm ();
1087                         form.ShowInTaskbar = false;
1088                         form.Show ();
1089                         Assert.IsTrue (form.VisibleOnLoad, "#2");
1090                         form.Dispose ();
1091                 }
1092
1093                 [Test] // bug #80052
1094                 [Category ("NotWorking")]
1095                 public void Location ()
1096                 {
1097                         // 
1098                         // CenterParent
1099                         // 
1100
1101                         Form formA = new Form ();
1102                         formA.ShowInTaskbar = false;
1103                         formA.StartPosition = FormStartPosition.CenterParent;
1104                         formA.Location = new Point (151, 251);
1105                         formA.Show ();
1106
1107                         Assert.AreEqual (FormStartPosition.CenterParent, formA.StartPosition, "#A1");
1108                         Assert.IsFalse (formA.Location.X == 151, "#A2");
1109                         Assert.IsFalse (formA.Location.Y == 251, "#A3");
1110
1111                         formA.Location = new Point (311, 221);
1112
1113                         Assert.AreEqual (FormStartPosition.CenterParent, formA.StartPosition, "#A4");
1114                         Assert.AreEqual (311, formA.Location.X, "#A5");
1115                         Assert.AreEqual (221, formA.Location.Y, "#A6");
1116
1117                         formA.Dispose ();
1118
1119                         // 
1120                         // CenterScreen
1121                         // 
1122
1123                         Form formB = new Form ();
1124                         formB.ShowInTaskbar = false;
1125                         formB.StartPosition = FormStartPosition.CenterScreen;
1126                         formB.Location = new Point (151, 251);
1127                         formB.Show ();
1128
1129                         Assert.AreEqual (FormStartPosition.CenterScreen, formB.StartPosition, "#B1");
1130                         Assert.IsFalse (formB.Location.X == 151, "#B2");
1131                         Assert.IsFalse (formB.Location.Y == 251, "#B3");
1132
1133                         formB.Location = new Point (311, 221);
1134
1135                         Assert.AreEqual (FormStartPosition.CenterScreen, formB.StartPosition, "#B4");
1136                         Assert.AreEqual (311, formB.Location.X, "#B5");
1137                         Assert.AreEqual (221, formB.Location.Y, "#B6");
1138
1139                         formB.Dispose ();
1140
1141                         // 
1142                         // Manual
1143                         // 
1144
1145                         Form formC = new Form ();
1146                         formC.ShowInTaskbar = false;
1147                         formC.StartPosition = FormStartPosition.Manual;
1148                         formC.Location = new Point (151, 251);
1149                         formC.Show ();
1150
1151                         Assert.AreEqual (FormStartPosition.Manual, formC.StartPosition, "#C1");
1152                         Assert.AreEqual (151, formC.Location.X, "#C2");
1153                         Assert.AreEqual (251, formC.Location.Y, "#C3");
1154
1155                         formC.Location = new Point (311, 221);
1156
1157                         Assert.AreEqual (FormStartPosition.Manual, formC.StartPosition, "#C4");
1158                         Assert.AreEqual (311, formC.Location.X, "#C5");
1159                         Assert.AreEqual (221, formC.Location.Y, "#C6");
1160
1161                         formC.Dispose ();
1162
1163                         // 
1164                         // WindowsDefaultBounds
1165                         // 
1166
1167                         Form formD = new Form ();
1168                         formD.ShowInTaskbar = false;
1169                         formD.StartPosition = FormStartPosition.WindowsDefaultBounds;
1170                         formD.Location = new Point (151, 251);
1171                         formD.Show ();
1172
1173                         Assert.AreEqual (FormStartPosition.WindowsDefaultBounds, formD.StartPosition, "#D1");
1174                         Assert.IsFalse (formD.Location.X == 151, "#D2");
1175                         Assert.IsFalse (formD.Location.Y == 251, "#D3");
1176
1177                         formD.Location = new Point (311, 221);
1178
1179                         Assert.AreEqual (FormStartPosition.WindowsDefaultBounds, formD.StartPosition, "#D4");
1180                         Assert.AreEqual (311, formD.Location.X, "#D5");
1181                         Assert.AreEqual (221, formD.Location.Y, "#D6");
1182
1183                         formD.Dispose ();
1184
1185                         // 
1186                         // WindowsDefaultLocation
1187                         // 
1188
1189                         Form formE = new Form ();
1190                         formE.ShowInTaskbar = false;
1191                         formE.Location = new Point (151, 251);
1192                         formE.Show ();
1193
1194                         Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, formE.StartPosition, "#E1");
1195                         Assert.IsFalse (formE.Location.X == 151, "#E2");
1196                         Assert.IsFalse (formE.Location.Y == 251, "#E3");
1197
1198                         formE.Location = new Point (311, 221);
1199
1200                         Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, formE.StartPosition, "#E4");
1201                         Assert.AreEqual (311, formE.Location.X, "#E5");
1202                         Assert.AreEqual (221, formE.Location.Y, "#E6");
1203
1204                         formE.Dispose ();
1205                 }
1206
1207                 [Test]
1208                 public void DisposeOwnerTest ()
1209                 {
1210                         Form f1 = new Form ();
1211                         Form f2 = new Form ();
1212
1213                         f2.Owner = f1;
1214
1215                         f1.Dispose ();
1216
1217                         Assert.IsNull (f2.Owner, "1");
1218                         Assert.AreEqual (0, f1.OwnedForms.Length, "2");
1219                 }
1220
1221                 [Test]
1222                 [ExpectedException (typeof (ObjectDisposedException))]
1223                 public void AccessDisposedForm ()
1224                 {
1225                         Form myform = new Form ();
1226                         myform.ShowInTaskbar = false;
1227
1228                         myform.Show ();
1229                         myform.Close (); // this should result in the form being disposed
1230                         myform.Show (); // and this line should result in the ODE being thrown
1231                 }
1232
1233                 class MyForm : Form
1234                 {
1235                         public void DoDestroyHandle ()
1236                         {
1237                                 DestroyHandle();
1238                         }
1239                         public void DoRecreateHandle ()
1240                         {
1241                                 RecreateHandle();
1242                         }
1243                 }
1244
1245                 int handle_destroyed_count;
1246                 void handle_destroyed (object sender, EventArgs e)
1247                 {
1248                         handle_destroyed_count++;
1249                 }
1250
1251                 [Test]
1252                 public void DestroyHandleTest ()
1253                 {
1254                         handle_destroyed_count = 0;
1255
1256                         MyForm f1 = new MyForm ();
1257                         f1.HandleDestroyed += new EventHandler (handle_destroyed);
1258                         f1.Show ();
1259                         f1.DoDestroyHandle ();
1260                         Assert.AreEqual (1, handle_destroyed_count, "1");
1261
1262                         f1 = new MyForm ();
1263                         f1.HandleDestroyed += new EventHandler (handle_destroyed);
1264                         f1.Show ();
1265                         f1.DoRecreateHandle ();
1266                         Assert.AreEqual (2, handle_destroyed_count, "2");
1267                 }
1268
1269                 [Test]
1270                 public void FormClose ()
1271                 {
1272                         Form myform = new Form ();
1273                         myform.ShowInTaskbar = false;
1274
1275                         Assert.IsFalse (myform.Visible, "A1");
1276                         Assert.IsFalse (myform.IsDisposed, "A2");
1277
1278                         myform.Close ();
1279
1280                         Assert.IsFalse (myform.Visible, "A3");
1281                         Assert.IsFalse (myform.IsDisposed, "A4");
1282
1283                         myform.Show ();
1284
1285                         Assert.IsTrue (myform.Visible, "A5");
1286                         Assert.IsFalse (myform.IsDisposed, "A6");
1287
1288                         myform.Close ();
1289
1290                         Assert.IsFalse (myform.Visible, "A7");
1291                         Assert.IsTrue (myform.IsDisposed, "A8");
1292                 }
1293
1294                 [Test]
1295                 public void FormClose2 ()
1296                 {
1297                         WMCloseWatcher f = new WMCloseWatcher ();
1298                         f.ShowInTaskbar = false;
1299
1300                         f.close_count = 0;
1301                         Assert.IsFalse (f.Visible, "A1");
1302                         f.Close ();
1303                         Assert.AreEqual (0, f.close_count, "A2");
1304
1305
1306                         f.Show ();
1307                         f.Close ();
1308                         Assert.AreEqual (1, f.close_count, "A3");
1309                 }
1310
1311                 class WMCloseWatcher : Form {
1312                         public int close_count;
1313
1314                         protected override void WndProc (ref Message msg) {
1315                                 if (msg.Msg == 0x0010 /* WM_CLOSE */) {
1316                                         close_count ++;
1317                                 }
1318
1319                                 base.WndProc (ref msg);
1320                         }
1321                 }
1322
1323                 class SwallowOnActivated : Form {
1324                         protected override void OnActivated (EventArgs e)
1325                         {
1326                                 // do nothing
1327                         }
1328
1329                         protected override void OnCreateControl () {
1330                                 base.OnCreateControl ();
1331                         }
1332                 }
1333
1334                 class EnterTest : Button {
1335                         protected override void OnEnter (EventArgs e)
1336                         {
1337                                 on_enter = true;
1338                                 base.OnEnter (e);
1339                         }
1340
1341                         public bool on_enter;
1342                 }
1343
1344                 [Test]
1345                 public void OnActivateEventHandlingTest1 ()
1346                 {
1347                         if (RunningOnUnix) {
1348                                 Assert.Ignore ("Relies on form.Show() synchronously generating WM_ACTIVATE");
1349                         }
1350
1351                         SwallowOnActivated f = new SwallowOnActivated ();
1352
1353                         f.ShowInTaskbar = false;
1354
1355                         EnterTest c = new EnterTest ();
1356                         f.Controls.Add (c);
1357
1358                         f.Show ();
1359
1360                         Assert.IsTrue (c.on_enter, "1");
1361
1362                         f.Dispose ();
1363                 }
1364                 
1365 #if NET_2_0
1366                 [Test]
1367                 public void FormClosingEvents ()
1368                 {
1369                         // Standard Close
1370                         Form f = new Form ();
1371                         string events = string.Empty;
1372
1373                         f.Closing += new CancelEventHandler (delegate (Object obj, CancelEventArgs e) { events += ("Closing;"); });
1374                         f.FormClosing += new FormClosingEventHandler (delegate (Object obj, FormClosingEventArgs e) { events += string.Format ("FormClosing [Reason:{0} - Cancel:{1}]", e.CloseReason, e.Cancel); });
1375         
1376                         f.Show ();
1377                         f.Close ();
1378                         
1379                         Assert.AreEqual ("Closing;FormClosing [Reason:UserClosing - Cancel:False]", events, "A1");                      
1380                 }
1381
1382                 [Test]
1383                 public void FormClosingEventsCancel ()
1384                 {
1385                         // Shows that setting Cancel in Closing flows through to FormClosing
1386                         Form f = new Form ();
1387                         string events = string.Empty;
1388
1389                         f.Closing += new CancelEventHandler (delegate (Object obj, CancelEventArgs e) { events += ("Closing;"); e.Cancel = true; });
1390                         f.FormClosing += new FormClosingEventHandler (delegate (Object obj, FormClosingEventArgs e) { events += string.Format("FormClosing [Reason:{0} - Cancel:{1}]", e.CloseReason, e.Cancel); e.Cancel = false; });
1391
1392                         f.Show ();
1393                         f.Close ();
1394
1395                         Assert.AreEqual ("Closing;FormClosing [Reason:UserClosing - Cancel:True]", events, "A1");
1396                 }
1397
1398                 [Test]
1399                 public void FormClosedEvents ()
1400                 {
1401                         // Standard Closed
1402                         Form f = new Form ();
1403                         string events = string.Empty;
1404
1405                         f.Closed += new EventHandler (delegate (Object obj, EventArgs e) { events += ("Closed;"); });
1406                         f.FormClosed += new FormClosedEventHandler (delegate (Object obj, FormClosedEventArgs e) { events += string.Format ("FormClosed [Reason:{0}]", e.CloseReason); });
1407
1408                         f.Show ();
1409                         f.Close ();
1410
1411                         Assert.AreEqual ("Closed;FormClosed [Reason:UserClosing]", events, "A1");
1412                 }
1413
1414                 [Test]
1415                 public void ShowWithOwner ()
1416                 {
1417                         Form f = new Form ();
1418                         Button b = new Button ();
1419                         f.Controls.Add (b);
1420
1421                         Form f2 = new Form ();
1422
1423                         f2.Show (f);
1424
1425                         Assert.AreSame (f, f2.Owner, "A1");
1426
1427                         f2 = new Form ();
1428
1429                         f2.Show (b);
1430                         Assert.AreSame (f, f2.Owner, "A2");
1431
1432                         Button b2 = new Button ();
1433                         f2 = new Form ();
1434
1435                         f2.Show (b2);
1436                         Assert.AreEqual (null, f2.Owner, "A3");
1437
1438                         f2 = new Form ();
1439                         f2.Show (null);
1440                         Assert.AreEqual (null, f2.Owner, "A4");
1441                 }
1442
1443                 [Test]
1444                 [ExpectedException (typeof (InvalidOperationException))]
1445                 public void ShowWithOwnerIOE ()
1446                 {
1447                         Form f = new Form ();
1448                         f.Show (f);
1449                 }
1450                 
1451                 [Test]  // Bug #79959, #80574, #80791
1452                 [Category ("NotWorking")]
1453                 public void BehaviorResizeOnBorderStyleChanged ()
1454                 {
1455                         // Marked NotWorking because the ClientSize is dependent on the WM.
1456                         // The values below match XP Luna to make sure our behavior is the same.
1457                         Form f = new Form ();
1458                         f.ShowInTaskbar = false;
1459                         f.Show ();
1460
1461                         Assert.AreEqual (true, f.IsHandleCreated, "A0");
1462
1463                         Assert.AreEqual (new Size (300, 300), f.Size, "A1");
1464                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A2");
1465
1466                         f.FormBorderStyle = FormBorderStyle.Fixed3D;
1467                         Assert.AreEqual (new Size (302, 302), f.Size, "A3");
1468                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A4");
1469
1470                         f.FormBorderStyle = FormBorderStyle.FixedDialog;
1471                         Assert.AreEqual (new Size (298, 298), f.Size, "A5");
1472                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A6");
1473
1474                         f.FormBorderStyle = FormBorderStyle.FixedSingle;
1475                         Assert.AreEqual (new Size (298, 298), f.Size, "A7");
1476                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A8");
1477
1478                         f.FormBorderStyle = FormBorderStyle.FixedToolWindow;
1479                         Assert.AreEqual (new Size (298, 290), f.Size, "A9");
1480                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A0");
1481
1482                         f.FormBorderStyle = FormBorderStyle.None;
1483                         Assert.AreEqual (new Size (292, 266), f.Size, "A11");
1484                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A12");
1485
1486                         f.FormBorderStyle = FormBorderStyle.SizableToolWindow;
1487                         Assert.AreEqual (new Size (300, 292), f.Size, "A13");
1488                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A14");
1489
1490                         f.FormBorderStyle = FormBorderStyle.Sizable;
1491                         Assert.AreEqual (new Size (300, 300), f.Size, "A15");
1492                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A16");
1493                         
1494                         f.Close ();
1495                 }
1496
1497                 [Test]  // Bug #80574, #80791
1498                 [Category ("NotWorking")]
1499                 public void BehaviorResizeOnBorderStyleChangedNotVisible ()
1500                 {
1501                         // Marked NotWorking because the ClientSize is dependent on the WM.
1502                         // The values below match XP Luna to make sure our behavior is the same.
1503                         Form f = new Form ();
1504                         f.ShowInTaskbar = false;
1505
1506                         Assert.AreEqual (false, f.IsHandleCreated, "A0");
1507                         
1508                         Assert.AreEqual (new Size (300, 300), f.Size, "A1");
1509                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A2");
1510
1511                         f.FormBorderStyle = FormBorderStyle.Fixed3D;
1512                         Assert.AreEqual (new Size (300, 300), f.Size, "A3");
1513                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A4");
1514
1515                         f.FormBorderStyle = FormBorderStyle.FixedDialog;
1516                         Assert.AreEqual (new Size (300, 300), f.Size, "A5");
1517                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A6");
1518
1519                         f.FormBorderStyle = FormBorderStyle.FixedSingle;
1520                         Assert.AreEqual (new Size (300, 300), f.Size, "A7");
1521                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A8");
1522
1523                         f.FormBorderStyle = FormBorderStyle.FixedToolWindow;
1524                         Assert.AreEqual (new Size (300, 300), f.Size, "A9");
1525                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A0");
1526
1527                         f.FormBorderStyle = FormBorderStyle.None;
1528                         Assert.AreEqual (new Size (300, 300), f.Size, "A11");
1529                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A12");
1530
1531                         f.FormBorderStyle = FormBorderStyle.SizableToolWindow;
1532                         Assert.AreEqual (new Size (300, 300), f.Size, "A13");
1533                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A14");
1534
1535                         f.FormBorderStyle = FormBorderStyle.Sizable;
1536                         Assert.AreEqual (new Size (300, 300), f.Size, "A15");
1537                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A16");
1538                 }
1539
1540                 [Test]  // Bug #80574, #80791
1541                 [Category ("NotWorking")]
1542                 public void MoreBehaviorResizeOnBorderStyleChangedNotVisible ()
1543                 {
1544                         // Marked NotWorking because the ClientSize is dependent on the WM.
1545                         // The values below match XP Luna to make sure our behavior is the same.
1546                         Form f = new Form ();
1547                         f.ShowInTaskbar = false;
1548
1549                         f.Show ();
1550                         f.Hide ();
1551
1552                         Assert.AreEqual (true, f.IsHandleCreated, "A0");
1553
1554                         f.FormBorderStyle = FormBorderStyle.Sizable;
1555                         Assert.AreEqual (new Size (300, 300), f.Size, "A1");
1556                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A2");
1557                         f.FormBorderStyle = FormBorderStyle.None;
1558                         Assert.AreEqual (new Size (292, 266), f.Size, "A3");
1559                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A4");
1560                 }
1561 #endif
1562                 
1563                 [Test]  // Bug #80773
1564                 public void DontSetOwnerOnShowDialogException ()
1565                 {
1566                         Form f = new Form ();
1567                         f.ShowInTaskbar = false;
1568                         
1569                         try { f.ShowDialog (f); }
1570                         catch { }
1571                         
1572                         Assert.AreEqual (null, f.Owner, "H1");
1573                 }
1574
1575                 private bool RunningOnUnix {
1576                         get {
1577                                 // check for Unix platforms - see FAQ for more details
1578                                 // http://www.mono-project.com/FAQ:_Technical#How_to_detect_the_execution_platform_.3F
1579                                 int platform = (int) Environment.OSVersion.Platform;
1580                                 return ((platform == 4) || (platform == 128));
1581                         }
1582                 }
1583
1584                 private class MockForm : Form
1585                 {
1586                         public bool CloseOnLoad {
1587                                 get { return _closeOnLoad; }
1588                                 set { _closeOnLoad = value; }
1589                         }
1590
1591                         public bool VisibleOnLoad {
1592                                 get { return _visibleOnLoad; }
1593                         }
1594
1595                         protected override void OnLoad(EventArgs e) {
1596                                 base.OnLoad(e);
1597                                 _visibleOnLoad = Visible;
1598                                 if (CloseOnLoad)
1599                                         Close ();
1600                         }
1601
1602                         private bool _closeOnLoad;
1603                         private bool _visibleOnLoad;
1604                 }
1605         }
1606 }