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