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