4ea0d8496ff4e339288441229589a0d145b398fd
[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                 public void Location ()
1095                 {
1096                         // 
1097                         // CenterParent
1098                         // 
1099
1100                         Form formA = new Form ();
1101                         formA.ShowInTaskbar = false;
1102                         formA.StartPosition = FormStartPosition.CenterParent;
1103                         formA.Location = new Point (151, 251);
1104                         formA.Show ();
1105
1106                         Assert.AreEqual (FormStartPosition.CenterParent, formA.StartPosition, "#A1");
1107                         Assert.IsFalse (formA.Location.X == 151, "#A2");
1108                         Assert.IsFalse (formA.Location.Y == 251, "#A3");
1109
1110                         formA.Location = new Point (311, 221);
1111
1112                         Assert.AreEqual (FormStartPosition.CenterParent, formA.StartPosition, "#A4");
1113                         Assert.AreEqual (311, formA.Location.X, "#A5");
1114                         Assert.AreEqual (221, formA.Location.Y, "#A6");
1115
1116                         formA.Dispose ();
1117
1118                         // 
1119                         // CenterScreen
1120                         // 
1121
1122                         Form formB = new Form ();
1123                         formB.ShowInTaskbar = false;
1124                         formB.StartPosition = FormStartPosition.CenterScreen;
1125                         formB.Location = new Point (151, 251);
1126                         formB.Show ();
1127
1128                         Assert.AreEqual (FormStartPosition.CenterScreen, formB.StartPosition, "#B1");
1129                         Assert.IsFalse (formB.Location.X == 151, "#B2");
1130                         Assert.IsFalse (formB.Location.Y == 251, "#B3");
1131
1132                         formB.Location = new Point (311, 221);
1133
1134                         Assert.AreEqual (FormStartPosition.CenterScreen, formB.StartPosition, "#B4");
1135                         Assert.AreEqual (311, formB.Location.X, "#B5");
1136                         Assert.AreEqual (221, formB.Location.Y, "#B6");
1137
1138                         formB.Dispose ();
1139
1140                         // 
1141                         // Manual
1142                         // 
1143
1144                         Form formC = new Form ();
1145                         formC.ShowInTaskbar = false;
1146                         formC.StartPosition = FormStartPosition.Manual;
1147                         formC.Location = new Point (151, 251);
1148                         formC.Show ();
1149
1150                         Assert.AreEqual (FormStartPosition.Manual, formC.StartPosition, "#C1");
1151                         Assert.AreEqual (151, formC.Location.X, "#C2");
1152                         Assert.AreEqual (251, formC.Location.Y, "#C3");
1153
1154                         formC.Location = new Point (311, 221);
1155
1156                         Assert.AreEqual (FormStartPosition.Manual, formC.StartPosition, "#C4");
1157                         Assert.AreEqual (311, formC.Location.X, "#C5");
1158                         Assert.AreEqual (221, formC.Location.Y, "#C6");
1159
1160                         formC.Dispose ();
1161
1162                         // 
1163                         // WindowsDefaultBounds
1164                         // 
1165
1166                         Form formD = new Form ();
1167                         formD.ShowInTaskbar = false;
1168                         formD.StartPosition = FormStartPosition.WindowsDefaultBounds;
1169                         formD.Location = new Point (151, 251);
1170                         formD.Show ();
1171
1172                         Assert.AreEqual (FormStartPosition.WindowsDefaultBounds, formD.StartPosition, "#D1");
1173                         Assert.IsFalse (formD.Location.X == 151, "#D2");
1174                         Assert.IsFalse (formD.Location.Y == 251, "#D3");
1175
1176                         formD.Location = new Point (311, 221);
1177
1178                         Assert.AreEqual (FormStartPosition.WindowsDefaultBounds, formD.StartPosition, "#D4");
1179                         Assert.AreEqual (311, formD.Location.X, "#D5");
1180                         Assert.AreEqual (221, formD.Location.Y, "#D6");
1181
1182                         formD.Dispose ();
1183
1184                         // 
1185                         // WindowsDefaultLocation
1186                         // 
1187
1188                         Form formE = new Form ();
1189                         formE.ShowInTaskbar = false;
1190                         formE.Location = new Point (151, 251);
1191                         formE.Show ();
1192
1193                         Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, formE.StartPosition, "#E1");
1194                         Assert.IsFalse (formE.Location.X == 151, "#E2");
1195                         Assert.IsFalse (formE.Location.Y == 251, "#E3");
1196
1197                         formE.Location = new Point (311, 221);
1198
1199                         Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, formE.StartPosition, "#E4");
1200                         Assert.AreEqual (311, formE.Location.X, "#E5");
1201                         Assert.AreEqual (221, formE.Location.Y, "#E6");
1202
1203                         formE.Dispose ();
1204                 }
1205
1206                 [Test]
1207                 public void DisposeOwnerTest ()
1208                 {
1209                         Form f1 = new Form ();
1210                         Form f2 = new Form ();
1211
1212                         f2.Owner = f1;
1213
1214                         f1.Dispose ();
1215
1216                         Assert.IsNull (f2.Owner, "1");
1217                         Assert.AreEqual (0, f1.OwnedForms.Length, "2");
1218                 }
1219
1220                 [Test]
1221                 [ExpectedException (typeof (ObjectDisposedException))]
1222                 public void AccessDisposedForm ()
1223                 {
1224                         Form myform = new Form ();
1225                         myform.ShowInTaskbar = false;
1226
1227                         myform.Show ();
1228                         myform.Close (); // this should result in the form being disposed
1229                         myform.Show (); // and this line should result in the ODE being thrown
1230                 }
1231
1232                 class MyForm : Form
1233                 {
1234                         public void DoDestroyHandle ()
1235                         {
1236                                 DestroyHandle();
1237                         }
1238                         public void DoRecreateHandle ()
1239                         {
1240                                 RecreateHandle();
1241                         }
1242                 }
1243
1244                 int handle_destroyed_count;
1245                 void handle_destroyed (object sender, EventArgs e)
1246                 {
1247                         handle_destroyed_count++;
1248                 }
1249
1250                 [Test]
1251                 public void DestroyHandleTest ()
1252                 {
1253                         handle_destroyed_count = 0;
1254
1255                         MyForm f1 = new MyForm ();
1256                         f1.HandleDestroyed += new EventHandler (handle_destroyed);
1257                         f1.Show ();
1258                         f1.DoDestroyHandle ();
1259                         Assert.AreEqual (1, handle_destroyed_count, "1");
1260
1261                         f1 = new MyForm ();
1262                         f1.HandleDestroyed += new EventHandler (handle_destroyed);
1263                         f1.Show ();
1264                         f1.DoRecreateHandle ();
1265                         Assert.AreEqual (2, handle_destroyed_count, "2");
1266                 }
1267
1268                 [Test]
1269                 public void FormClose ()
1270                 {
1271                         Form myform = new Form ();
1272                         myform.ShowInTaskbar = false;
1273
1274                         Assert.IsFalse (myform.Visible, "A1");
1275                         Assert.IsFalse (myform.IsDisposed, "A2");
1276
1277                         myform.Close ();
1278
1279                         Assert.IsFalse (myform.Visible, "A3");
1280                         Assert.IsFalse (myform.IsDisposed, "A4");
1281
1282                         myform.Show ();
1283
1284                         Assert.IsTrue (myform.Visible, "A5");
1285                         Assert.IsFalse (myform.IsDisposed, "A6");
1286
1287                         myform.Close ();
1288
1289                         Assert.IsFalse (myform.Visible, "A7");
1290                         Assert.IsTrue (myform.IsDisposed, "A8");
1291                 }
1292
1293                 [Test]
1294                 public void FormClose2 ()
1295                 {
1296                         WMCloseWatcher f = new WMCloseWatcher ();
1297                         f.ShowInTaskbar = false;
1298
1299                         f.close_count = 0;
1300                         Assert.IsFalse (f.Visible, "A1");
1301                         f.Close ();
1302                         Assert.AreEqual (0, f.close_count, "A2");
1303
1304
1305                         f.Show ();
1306                         f.Close ();
1307                         Assert.AreEqual (1, f.close_count, "A3");
1308                 }
1309
1310                 class WMCloseWatcher : Form {
1311                         public int close_count;
1312
1313                         protected override void WndProc (ref Message msg) {
1314                                 if (msg.Msg == 0x0010 /* WM_CLOSE */) {
1315                                         close_count ++;
1316                                 }
1317
1318                                 base.WndProc (ref msg);
1319                         }
1320                 }
1321
1322                 class SwallowOnActivated : Form {
1323                         protected override void OnActivated (EventArgs e)
1324                         {
1325                                 // do nothing
1326                         }
1327
1328                         protected override void OnCreateControl () {
1329                                 base.OnCreateControl ();
1330                         }
1331                 }
1332
1333                 class EnterTest : Button {
1334                         protected override void OnEnter (EventArgs e)
1335                         {
1336                                 on_enter = true;
1337                                 base.OnEnter (e);
1338                         }
1339
1340                         public bool on_enter;
1341                 }
1342
1343                 [Test]
1344                 public void OnActivateEventHandlingTest1 ()
1345                 {
1346                         if (RunningOnUnix) {
1347                                 Assert.Ignore ("Relies on form.Show() synchronously generating WM_ACTIVATE");
1348                         }
1349
1350                         SwallowOnActivated f = new SwallowOnActivated ();
1351
1352                         f.ShowInTaskbar = false;
1353
1354                         EnterTest c = new EnterTest ();
1355                         f.Controls.Add (c);
1356
1357                         f.Show ();
1358
1359                         Assert.IsTrue (c.on_enter, "1");
1360
1361                         f.Dispose ();
1362                 }
1363                 
1364 #if NET_2_0
1365                 [Test]
1366                 public void FormClosingEvents ()
1367                 {
1368                         // Standard Close
1369                         Form f = new Form ();
1370                         string events = string.Empty;
1371
1372                         f.Closing += new CancelEventHandler (delegate (Object obj, CancelEventArgs e) { events += ("Closing;"); });
1373                         f.FormClosing += new FormClosingEventHandler (delegate (Object obj, FormClosingEventArgs e) { events += string.Format ("FormClosing [Reason:{0} - Cancel:{1}]", e.CloseReason, e.Cancel); });
1374         
1375                         f.Show ();
1376                         f.Close ();
1377                         
1378                         Assert.AreEqual ("Closing;FormClosing [Reason:UserClosing - Cancel:False]", events, "A1");                      
1379                 }
1380
1381                 [Test]
1382                 public void FormClosingEventsCancel ()
1383                 {
1384                         // Shows that setting Cancel in Closing flows through to FormClosing
1385                         Form f = new Form ();
1386                         string events = string.Empty;
1387
1388                         f.Closing += new CancelEventHandler (delegate (Object obj, CancelEventArgs e) { events += ("Closing;"); e.Cancel = true; });
1389                         f.FormClosing += new FormClosingEventHandler (delegate (Object obj, FormClosingEventArgs e) { events += string.Format("FormClosing [Reason:{0} - Cancel:{1}]", e.CloseReason, e.Cancel); e.Cancel = false; });
1390
1391                         f.Show ();
1392                         f.Close ();
1393
1394                         Assert.AreEqual ("Closing;FormClosing [Reason:UserClosing - Cancel:True]", events, "A1");
1395                 }
1396
1397                 [Test]
1398                 public void FormClosedEvents ()
1399                 {
1400                         // Standard Closed
1401                         Form f = new Form ();
1402                         string events = string.Empty;
1403
1404                         f.Closed += new EventHandler (delegate (Object obj, EventArgs e) { events += ("Closed;"); });
1405                         f.FormClosed += new FormClosedEventHandler (delegate (Object obj, FormClosedEventArgs e) { events += string.Format ("FormClosed [Reason:{0}]", e.CloseReason); });
1406
1407                         f.Show ();
1408                         f.Close ();
1409
1410                         Assert.AreEqual ("Closed;FormClosed [Reason:UserClosing]", events, "A1");
1411                 }
1412
1413                 [Test]
1414                 public void ShowWithOwner ()
1415                 {
1416                         Form f = new Form ();
1417                         Button b = new Button ();
1418                         f.Controls.Add (b);
1419
1420                         Form f2 = new Form ();
1421
1422                         f2.Show (f);
1423
1424                         Assert.AreSame (f, f2.Owner, "A1");
1425
1426                         f2 = new Form ();
1427
1428                         f2.Show (b);
1429                         Assert.AreSame (f, f2.Owner, "A2");
1430
1431                         Button b2 = new Button ();
1432                         f2 = new Form ();
1433
1434                         f2.Show (b2);
1435                         Assert.AreEqual (null, f2.Owner, "A3");
1436
1437                         f2 = new Form ();
1438                         f2.Show (null);
1439                         Assert.AreEqual (null, f2.Owner, "A4");
1440                 }
1441
1442                 [Test]
1443                 [ExpectedException (typeof (InvalidOperationException))]
1444                 public void ShowWithOwnerIOE ()
1445                 {
1446                         Form f = new Form ();
1447                         f.Show (f);
1448                 }
1449                 
1450                 [Test]  // Bug #79959, #80574, #80791
1451                 [Category ("NotWorking")]
1452                 public void BehaviorResizeOnBorderStyleChanged ()
1453                 {
1454                         // Marked NotWorking because the ClientSize is dependent on the WM.
1455                         // The values below match XP Luna to make sure our behavior is the same.
1456                         Form f = new Form ();
1457                         f.ShowInTaskbar = false;
1458                         f.Show ();
1459
1460                         Assert.AreEqual (true, f.IsHandleCreated, "A0");
1461
1462                         Assert.AreEqual (new Size (300, 300), f.Size, "A1");
1463                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A2");
1464
1465                         f.FormBorderStyle = FormBorderStyle.Fixed3D;
1466                         Assert.AreEqual (new Size (302, 302), f.Size, "A3");
1467                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A4");
1468
1469                         f.FormBorderStyle = FormBorderStyle.FixedDialog;
1470                         Assert.AreEqual (new Size (298, 298), f.Size, "A5");
1471                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A6");
1472
1473                         f.FormBorderStyle = FormBorderStyle.FixedSingle;
1474                         Assert.AreEqual (new Size (298, 298), f.Size, "A7");
1475                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A8");
1476
1477                         f.FormBorderStyle = FormBorderStyle.FixedToolWindow;
1478                         Assert.AreEqual (new Size (298, 290), f.Size, "A9");
1479                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A0");
1480
1481                         f.FormBorderStyle = FormBorderStyle.None;
1482                         Assert.AreEqual (new Size (292, 266), f.Size, "A11");
1483                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A12");
1484
1485                         f.FormBorderStyle = FormBorderStyle.SizableToolWindow;
1486                         Assert.AreEqual (new Size (300, 292), f.Size, "A13");
1487                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A14");
1488
1489                         f.FormBorderStyle = FormBorderStyle.Sizable;
1490                         Assert.AreEqual (new Size (300, 300), f.Size, "A15");
1491                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A16");
1492                         
1493                         f.Close ();
1494                 }
1495
1496                 [Test]  // Bug #80574, #80791
1497                 [Category ("NotWorking")]
1498                 public void BehaviorResizeOnBorderStyleChangedNotVisible ()
1499                 {
1500                         // Marked NotWorking because the ClientSize is dependent on the WM.
1501                         // The values below match XP Luna to make sure our behavior is the same.
1502                         Form f = new Form ();
1503                         f.ShowInTaskbar = false;
1504
1505                         Assert.AreEqual (false, f.IsHandleCreated, "A0");
1506                         
1507                         Assert.AreEqual (new Size (300, 300), f.Size, "A1");
1508                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A2");
1509
1510                         f.FormBorderStyle = FormBorderStyle.Fixed3D;
1511                         Assert.AreEqual (new Size (300, 300), f.Size, "A3");
1512                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A4");
1513
1514                         f.FormBorderStyle = FormBorderStyle.FixedDialog;
1515                         Assert.AreEqual (new Size (300, 300), f.Size, "A5");
1516                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A6");
1517
1518                         f.FormBorderStyle = FormBorderStyle.FixedSingle;
1519                         Assert.AreEqual (new Size (300, 300), f.Size, "A7");
1520                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A8");
1521
1522                         f.FormBorderStyle = FormBorderStyle.FixedToolWindow;
1523                         Assert.AreEqual (new Size (300, 300), f.Size, "A9");
1524                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A0");
1525
1526                         f.FormBorderStyle = FormBorderStyle.None;
1527                         Assert.AreEqual (new Size (300, 300), f.Size, "A11");
1528                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A12");
1529
1530                         f.FormBorderStyle = FormBorderStyle.SizableToolWindow;
1531                         Assert.AreEqual (new Size (300, 300), f.Size, "A13");
1532                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A14");
1533
1534                         f.FormBorderStyle = FormBorderStyle.Sizable;
1535                         Assert.AreEqual (new Size (300, 300), f.Size, "A15");
1536                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A16");
1537                 }
1538
1539                 [Test]  // Bug #80574, #80791
1540                 [Category ("NotWorking")]
1541                 public void MoreBehaviorResizeOnBorderStyleChangedNotVisible ()
1542                 {
1543                         // Marked NotWorking because the ClientSize is dependent on the WM.
1544                         // The values below match XP Luna to make sure our behavior is the same.
1545                         Form f = new Form ();
1546                         f.ShowInTaskbar = false;
1547
1548                         f.Show ();
1549                         f.Hide ();
1550
1551                         Assert.AreEqual (true, f.IsHandleCreated, "A0");
1552
1553                         f.FormBorderStyle = FormBorderStyle.Sizable;
1554                         Assert.AreEqual (new Size (300, 300), f.Size, "A1");
1555                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A2");
1556                         f.FormBorderStyle = FormBorderStyle.None;
1557                         Assert.AreEqual (new Size (292, 266), f.Size, "A3");
1558                         Assert.AreEqual (new Size (292, 266), f.ClientSize, "A4");
1559                 }
1560 #endif
1561                 
1562                 [Test]  // Bug #80773
1563                 public void DontSetOwnerOnShowDialogException ()
1564                 {
1565                         Form f = new Form ();
1566                         f.ShowInTaskbar = false;
1567                         
1568                         try { f.ShowDialog (f); }
1569                         catch { }
1570                         
1571                         Assert.AreEqual (null, f.Owner, "H1");
1572                 }
1573
1574                 private bool RunningOnUnix {
1575                         get {
1576                                 // check for Unix platforms - see FAQ for more details
1577                                 // http://www.mono-project.com/FAQ:_Technical#How_to_detect_the_execution_platform_.3F
1578                                 int platform = (int) Environment.OSVersion.Platform;
1579                                 return ((platform == 4) || (platform == 128));
1580                         }
1581                 }
1582
1583                 private class MockForm : Form
1584                 {
1585                         public bool CloseOnLoad {
1586                                 get { return _closeOnLoad; }
1587                                 set { _closeOnLoad = value; }
1588                         }
1589
1590                         public bool VisibleOnLoad {
1591                                 get { return _visibleOnLoad; }
1592                         }
1593
1594                         protected override void OnLoad(EventArgs e) {
1595                                 base.OnLoad(e);
1596                                 _visibleOnLoad = Visible;
1597                                 if (CloseOnLoad)
1598                                         Close ();
1599                         }
1600
1601                         private bool _closeOnLoad;
1602                         private bool _visibleOnLoad;
1603                 }
1604         }
1605 }