[bcl] Remove more NET_2_0 checks from class libs
[mono.git] / mcs / class / Managed.Windows.Forms / Test / System.Windows.Forms / MdiFormTest.cs
1 //
2 // MdiFormTest.cs: Test cases for MDI Forms.
3 //
4 // Author:
5 //   Rolf Bjarne Kvinge (RKvinge@novell.com)
6 //
7 // (C) 2006 Novell, Inc. (http://www.novell.com)
8 //
9
10 using System;
11 using System.Drawing;
12 using System.Reflection;
13 using System.Windows.Forms;
14 using System.ComponentModel;
15 using NUnit.Framework;
16 using CategoryAttribute = NUnit.Framework.CategoryAttribute;
17 using System.Threading;
18
19 namespace MonoTests.System.Windows.Forms
20 {
21         [TestFixture]
22         public class MdiFormTest : TestHelper
23         {
24                 private Form main;
25                 private Form child1;
26                 private Form child2;
27                 private Form child3;
28
29                 [TearDown]
30                 protected override void TearDown ()
31                 {
32                         if (main != null)
33                                 main.Dispose ();
34                         if (child1 != null)
35                                 child1.Dispose ();
36                         if (child2 != null)
37                                 child2.Dispose ();
38                         if (child3 != null)
39                                 child3.Dispose ();
40                         main = null;
41                         child1 = null;
42                         child2 = null;
43                         child3 = null;
44                         base.TearDown ();
45                 }
46         
47                 // No attribute here since this is supposed to be called from 
48                 // each test directly, not by nunit.
49                 void SetUp (bool only_create, bool only_text)
50                 {
51                         SetUp (only_create, only_text, false);
52                 }       
53                                 
54                 // No attribute here since this is supposed to be called from 
55                 // each test directly, not by nunit.
56                 public void SetUp (bool only_create, bool only_text, bool set_parent)
57                 {
58                         TearDown ();
59                         
60                         main = new Form ();
61                         child1 = new Form ();
62                         child2 = new Form ();
63                         child3 = new Form ();
64
65                         if (only_create)
66                                 return;
67
68                         main.Text = main.Name = "main";
69                         main.ShowInTaskbar = false;
70                         child1.Text = child1.Name = "child1";
71                         child2.Text = child2.Name = "child2";
72                         child3.Text = child3.Name = "child3";
73
74                         if (only_text)
75                                 return;
76
77                         main.IsMdiContainer = true;
78                         
79                         if (set_parent) {
80                                 child1.MdiParent = main;
81                                 child2.MdiParent = main;
82                                 child3.MdiParent = main;
83                         }
84                 }
85
86                 [Test]
87                 public void DeactivatedEventTest ()
88                 {
89                         using (Form f = new Form ()) {
90                                 Form c1 = new Form ();
91                                 Form c2 = new Form ();
92                                 EventLogger log1 = new EventLogger (c1);
93                                 EventLogger log2 = new EventLogger (c2);
94
95                                 f.IsMdiContainer = true;
96                                 f.ShowInTaskbar = false;
97                                 c2.MdiParent = c1.MdiParent = f;
98
99                                 c1.Show ();
100                                 c2.Show ();
101                                 Assert.AreEqual (0, log1.CountEvents ("Deactivate"), "#A1");
102                                 Assert.AreEqual (0, log2.CountEvents ("Deactivate"), "#A2");
103
104                                 f.Show ();
105                                 Assert.AreEqual (1, log1.CountEvents ("Deactivate"), "#B1");
106                                 Assert.AreEqual (0, log2.CountEvents ("Deactivate"), "#B2");
107
108                                 c1.Show ();
109                                 c2.Show ();
110                                 Assert.AreEqual (1, log1.CountEvents ("Deactivate"), "#C1");
111                                 Assert.AreEqual (0, log2.CountEvents ("Deactivate"), "#C2");
112
113                                 c1.Activate ();
114                                 Assert.AreEqual (1, log1.CountEvents ("Deactivate"), "#D1");
115                                 Assert.AreEqual (1, log2.CountEvents ("Deactivate"), "#D2");
116
117                                 c1.Activate ();
118                                 Assert.AreEqual (1, log1.CountEvents ("Deactivate"), "#E1");
119                                 Assert.AreEqual (1, log2.CountEvents ("Deactivate"), "#E2");
120
121                                 c2.Activate ();
122                                 Assert.AreEqual (2, log1.CountEvents ("Deactivate"), "#F1");
123                                 Assert.AreEqual (1, log2.CountEvents ("Deactivate"), "#F2");
124
125                                 c1.Activate ();
126                                 Assert.AreEqual (2, log1.CountEvents ("Deactivate"), "#G1");
127                                 Assert.AreEqual (2, log2.CountEvents ("Deactivate"), "#G2");
128                         }
129                 }
130                 
131                 [Test]
132                 public void ActivatedEventTest ()
133                 {
134                         using (Form f = new Form ()) {
135                                 Form c1 = new Form ();
136                                 Form c2 = new Form ();
137                                 EventLogger log1 = new EventLogger (c1);
138                                 EventLogger log2 = new EventLogger (c2);
139
140                                 f.IsMdiContainer = true;
141                                 f.ShowInTaskbar = false;
142                                 c2.MdiParent = c1.MdiParent = f;
143
144                                 c1.Show ();
145                                 c2.Show ();
146                                 Assert.AreEqual (0, log1.CountEvents ("Activated"), "#A1");
147                                 Assert.AreEqual (0, log2.CountEvents ("Activated"), "#A2");
148                                 
149                                 f.Show ();
150                                 Assert.AreEqual (1, log1.CountEvents ("Activated"), "#B1");
151                                 Assert.AreEqual (1, log2.CountEvents ("Activated"), "#B2");
152                                 
153                                 c1.Show ();
154                                 c2.Show ();
155                                 Assert.AreEqual (1, log1.CountEvents ("Activated"), "#C1");
156                                 Assert.AreEqual (1, log2.CountEvents ("Activated"), "#C2");
157
158                                 c1.Activate ();
159                                 Assert.AreEqual (2, log1.CountEvents ("Activated"), "#D1");
160                                 Assert.AreEqual (1, log2.CountEvents ("Activated"), "#D2");
161
162                                 c1.Activate ();
163                                 Assert.AreEqual (2, log1.CountEvents ("Activated"), "#E1");
164                                 Assert.AreEqual (1, log2.CountEvents ("Activated"), "#E2");
165
166                                 c2.Activate ();
167                                 Assert.AreEqual (2, log1.CountEvents ("Activated"), "#F1");
168                                 Assert.AreEqual (2, log2.CountEvents ("Activated"), "#F2");
169
170                                 c1.Activate ();
171                                 Assert.AreEqual (3, log1.CountEvents ("Activated"), "#G1");
172                                 Assert.AreEqual (2, log2.CountEvents ("Activated"), "#G2");
173                         }
174                 }
175                 
176                 [Test]
177                 public void ActiveControlTest ()
178                 {
179                         SetUp (false, false, true);
180                         
181                         main.Show ();
182                         
183                         Assert.IsNull (main.ActiveControl, "#01");                      
184                         child1.Visible = true;
185                         Assert.AreSame (child1, main.ActiveControl, "#02");
186                         child2.Visible = true;
187                         Assert.AreSame (child2, main.ActiveControl, "#03");
188                         child3.Visible = true;
189                         Assert.AreSame (child3, main.ActiveControl, "#04");
190                         TearDown ();
191                 }
192                 
193                 [Test]
194                 public void SelectNextControlTest ()
195                 {
196                         SetUp (false, false, true);
197
198                         main.Show ();
199                         
200                         child1.Visible = true;
201                         child2.Visible = true;
202                         child3.Visible = true;
203                         
204                         main.SelectNextControl (main.ActiveControl, true, false, true, true);
205                         Assert.AreSame (child1, main.ActiveControl, "#01");
206                         main.SelectNextControl (main.ActiveControl, true, false, true, true);
207                         Assert.AreSame (child2, main.ActiveControl, "#02");
208                         main.SelectNextControl (main.ActiveControl, true, false, true, true);
209                         Assert.AreSame (child3, main.ActiveControl, "#03");
210                                                 
211                         TearDown ();
212                 }
213
214                 [Test]
215                 public void SelectPreviousControlTest ()
216                 {
217                         SetUp (false, false, true);
218
219                         main.Show ();
220                         
221                         child1.Visible = true;
222                         child2.Visible = true;
223                         child3.Visible = true;
224
225                         main.SelectNextControl (main.ActiveControl, false, false, true, true);
226                         Assert.AreSame (child2, main.ActiveControl, "#01");
227                         main.SelectNextControl (main.ActiveControl, false, false, true, true);
228                         Assert.AreSame (child1, main.ActiveControl, "#02");
229                         main.SelectNextControl (main.ActiveControl, false, false, true, true);
230                         Assert.AreSame (child3, main.ActiveControl, "#03");
231
232                         TearDown ();
233                 }
234                 
235                 [TestFixture]
236                 public class CloseTest
237                 {
238                         class ChildForm : Form
239                         {
240                                 public ChildForm ()
241                                 {
242                                         Closed += new EventHandler (ChildForm_Closed);
243                                         Closing += new CancelEventHandler (ChildForm_Closing);
244                                         FormClosed += new FormClosedEventHandler (ChildForm_FormClosed);
245                                         FormClosing += new FormClosingEventHandler (ChildForm_FormClosing);
246                                 }
247                                 void ChildForm_FormClosing (object sender, FormClosingEventArgs e)
248                                 {
249                                         Assert.IsNotNull (MdiParent, "ChildForm_FormClosing");
250                                 }
251
252                                 void ChildForm_FormClosed (object sender, FormClosedEventArgs e)
253                                 {
254                                         Assert.IsNotNull (MdiParent, "ChildForm_FormClosed");
255                                 }
256                                 void ChildForm_Closing (object sender, CancelEventArgs e)
257                                 {
258                                         Assert.IsNotNull (MdiParent, "ChildForm_Closing");
259                                 }
260
261                                 void ChildForm_Closed (object sender, EventArgs e)
262                                 {
263                                         Assert.IsNotNull (MdiParent, "ChildForm_Closed");
264                                 }
265                         
266                                 protected override void OnClosed (EventArgs e)
267                                 {
268                                         Assert.IsNotNull (MdiParent, "OnClosed 1");
269                                         base.OnClosed (e);
270                                         Assert.IsNotNull (MdiParent, "OnClosed 2");
271                                 }
272
273                                 protected override void OnClosing (CancelEventArgs e)
274                                 {
275                                         Assert.IsNotNull (MdiParent, "OnClosing 1");
276                                         base.OnClosing (e);
277                                         Assert.IsNotNull (MdiParent, "OnClosing 2");
278                                 }
279                                 
280                         }
281                         [Test]
282                         public void Test () {
283                                 using (Form main = new Form ()) {
284                                         main.IsMdiContainer = true;
285                                         main.ShowInTaskbar = false;
286                                         main.Visible = true;
287
288                                         ChildForm child = new ChildForm ();
289                                         EventLogger log = new EventLogger (child);
290                                         child.MdiParent = main;
291                                         child.Visible = true;
292                                         child.Close ();
293                                         
294                                         Assert.AreEqual (1, log.CountEvents ("Closed"), "#01");
295                                         Assert.AreEqual (1, log.CountEvents ("Closing"), "#02");
296                                         Assert.IsNull (child.MdiParent, "#03");
297                                         Assert.AreEqual (0, main.MdiChildren.Length, "#04");            
298                                         Assert.AreEqual (false, child.IsMdiChild, "#05");               
299                                 }
300                         }
301                 }
302                 [Test]
303                 [Category ("NotWorking")]
304                 public void StartLocationTest ()
305                 {
306                         SetUp (false, false);
307
308                         child1.MdiParent = main;
309                         child2.MdiParent = main;
310
311                         child1.Visible = true;
312                         child2.Visible = true;
313
314                         main.Show ();
315
316                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
317                         Assert.AreEqual (true, "{X=0,Y=0}" != child2.Location.ToString (), "#2");
318
319                         TearDown ();
320                 }
321                 
322                 [Test]
323                 public void StartLocationTest2 ()
324                 {
325                         SetUp (false, false);
326
327                         child1.MdiParent = main;
328                         child2.MdiParent = main;
329
330                         child1.Visible = true;
331                         child2.Visible = true;
332                         child2.StartPosition = FormStartPosition.Manual;
333                         child2.Location = new Point(23, 34);
334
335                         main.Show ();
336
337                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
338                         Assert.AreEqual ("{X=23,Y=34}",child2.Location.ToString (), "#2");
339
340                         TearDown ();
341                 }
342                 
343                 [Test]
344                 public void NewFormShouldAlsoBeMaximized ()
345                 {
346                         Form parent = new Form ();
347                         
348                         Form child1 = new Form ();
349                         Form child2 = new Form ();
350                         
351                         parent.ShowInTaskbar = false;
352                         parent.IsMdiContainer = true;
353                         parent.ClientSize = new Size (300, 300);
354                         
355                         parent.Show ();
356                         
357                         child1.MdiParent = parent;
358                         child1.Show ();
359                         
360                         child1.WindowState = FormWindowState.Maximized;
361                         
362                         child2.MdiParent = parent;
363                         child2.ClientSize = new Size (100, 100);
364                         child2.Show ();
365
366                         Assert.IsTrue (child2.Width > 200, "Width should be maximized");
367                         Assert.IsTrue (child2.Height > 200, "Height should be maximized");
368                         
369                         parent.Dispose ();
370                 }
371
372                 [Test]
373                 public void RestoreWithMainMenuStrip ()
374                 {
375                         Form parent = new Form ();
376
377                         Form child1 = new Form ();
378
379                         parent.ShowInTaskbar = false;
380                         parent.IsMdiContainer = true;
381                         parent.ClientSize = new Size (500, 500);
382
383                         MenuStrip ms = new MenuStrip ();
384                         ms.Items.Add (new ToolStripMenuItem ("main", null, new ToolStripMenuItem ("item1")));
385                         parent.Controls.Add (ms);
386                         parent.MainMenuStrip = ms;
387
388                         parent.Show ();
389
390                         child1.MdiParent = parent;
391                         child1.Show ();
392
393                         Size s = child1.Size;
394                         
395                         child1.WindowState = FormWindowState.Maximized;
396                         child1.WindowState = FormWindowState.Normal;
397
398                         Assert.AreEqual (s, child1.Size, "A1");
399
400                         parent.Dispose ();
401                 }
402
403                 /* These tests are all failing on WinXP with XP Theme. 
404                  * offset seems to be 22,22 normally, and 22,29 with XP theme.
405                  * Find a way to test this reliably.
406                  * /
407                 [Category("NotWorking")]
408                 [Test]
409                 public void StartLocationTest1 ()
410                 {
411                         SetUp (false, false);
412
413                         child1.MdiParent = main;
414                         child2.MdiParent = main;
415
416                         child1.Visible = true;
417                         child2.Visible = true;
418
419                         main.Show ();
420                         
421                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
422                         Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#2");
423
424                         TearDown ();
425                 }
426
427                 [Category("NotWorking")]
428                 [Test]
429                 public void StartLocationTest2 ()
430                 {
431                         SetUp (false, false);
432
433                         child1.MdiParent = main;
434                         child2.MdiParent = main;
435
436                         child1.StartPosition = FormStartPosition.Manual;
437
438                         child1.Visible = true;
439                         child2.Visible = true;
440
441                         main.Show ();
442                         
443                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
444                         Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#2");
445
446                         TearDown ();
447                 }
448
449
450                 [Category("NotWorking")]
451                 [Test]
452                 public void StartLocationTest3 ()
453                 {
454                         SetUp (false, false);
455
456                         child1.MdiParent = main;
457                         child2.MdiParent = main;
458
459                         child2.StartPosition = FormStartPosition.Manual;
460
461                         child1.Visible = true;
462                         child2.Visible = true;
463
464                         main.Show ();
465                         
466                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
467                         Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#2");
468
469                         TearDown ();
470                 }
471
472                 [Category("NotWorking")]
473                 [Test]
474                 public void StartLocationTest4 ()
475                 {
476                         SetUp (false, false);
477
478                         child1.MdiParent = main;
479                         child2.MdiParent = main;
480
481                         child1.StartPosition = FormStartPosition.Manual;
482                         child2.StartPosition = FormStartPosition.Manual;
483
484                         child1.Visible = true;
485                         child2.Visible = true;
486
487                         main.Show ();
488                         
489                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
490                         Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#2");
491
492                         TearDown ();
493                 }
494
495                 [Category("NotWorking")]
496                 [Test]
497                 public void StartLocationTest5 ()
498                 {
499                         SetUp (false, false);
500
501                         child1.MdiParent = main;
502                         child2.MdiParent = main;
503                         child3.MdiParent = main;
504
505                         child2.StartPosition = FormStartPosition.Manual;
506
507                         child1.Visible = true;
508                         child2.Visible = true;
509                         child3.Visible = true;
510
511                         main.Show ();
512                         
513                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
514                         Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#2");
515                         Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
516
517                         TearDown ();
518                 }
519
520                 [Category("NotWorking")]
521                 [Test]
522                 public void StartLocationTest6 ()
523                 {
524                         SetUp (false, false);
525
526                         child1.MdiParent = main;
527                         child2.MdiParent = main;
528                         child3.MdiParent = main;
529
530                         child2.StartPosition = FormStartPosition.CenterParent;
531
532                         child1.Visible = true;
533                         child2.Visible = true;
534                         child3.Visible = true;
535
536                         main.Show ();
537                         
538                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
539                         Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#2");
540                         Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
541
542                         TearDown ();
543                 }
544
545                 [Category("NotWorking")]
546                 [Test]
547                 public void StartLocationTest7 ()
548                 {
549                         SetUp (false, false);
550
551                         child1.MdiParent = main;
552                         child2.MdiParent = main;
553                         child3.MdiParent = main;
554
555                         child2.StartPosition = FormStartPosition.CenterScreen;
556
557                         child1.Visible = true;
558                         child2.Visible = true;
559                         child3.Visible = true;
560
561                         main.Show ();
562                         
563                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
564                         Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#2");
565                         Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
566
567                         TearDown ();
568                 }
569
570                 [Category("NotWorking")]
571                 [Test]
572                 public void StartLocationTest8 ()
573                 {
574                         SetUp (false, false);
575
576                         child1.MdiParent = main;
577                         child2.MdiParent = main;
578                         child3.MdiParent = main;
579
580                         child2.StartPosition = FormStartPosition.WindowsDefaultBounds;
581
582                         child1.Visible = true;
583                         child2.Visible = true;
584                         child3.Visible = true;
585
586                         main.Show ();
587                         
588                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
589                         Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#2");
590                         Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
591
592                         TearDown ();
593                 }
594
595                 [Category("NotWorking")]
596                 [Test]
597                 public void StartLocationTest9 ()
598                 {
599                         SetUp (false, false);
600
601                         child1.MdiParent = main;
602                         child2.MdiParent = main;
603                         child3.MdiParent = main;
604
605                         child2.StartPosition = FormStartPosition.WindowsDefaultLocation;
606
607                         child1.Visible = true;
608                         child2.Visible = true;
609                         child3.Visible = true;
610
611                         main.Show ();
612                         
613                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
614                         Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#2");
615                         Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
616
617                         TearDown ();
618                 }
619                 
620                 [Category("NotWorking")]
621                 [Test]
622                 public void StartLocationTest10 ()
623                 {
624                         SetUp (false, false);
625
626                         child1.MdiParent = main;
627                         child2.MdiParent = main;
628                         child3.MdiParent = main;
629
630                         child2.StartPosition = FormStartPosition.Manual;
631                         child2.Location = new Point (123, 123);
632
633                         child1.Visible = true;
634                         child2.Visible = true;
635                         child3.Visible = true;
636
637                         main.Show ();
638                         
639                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
640                         Assert.AreEqual ("{X=123,Y=123}", child2.Location.ToString (), "#2");
641                         Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
642
643                         TearDown ();
644                 }
645
646                 [Category("NotWorking")]
647                 [Test]
648                 public void StartLocationTest11 ()
649                 {
650                         SetUp (false, false);
651
652                         child1.MdiParent = main;
653                         child2.MdiParent = main;
654                         child3.MdiParent = main;
655
656                         child2.Location = new Point (123, 123);
657
658                         Assert.AreEqual ("{X=123,Y=123}", child2.Location.ToString (), "#0");
659
660                         child1.Visible = true;
661                         child2.Visible = true;
662                         child3.Visible = true;
663
664                         Assert.AreEqual ("{X=123,Y=123}", child2.Location.ToString (), "#0");
665
666                         main.Show ();
667                         
668                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
669                         Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#2");
670                         Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
671
672                         TearDown ();
673                 }
674
675                 [Category("NotWorking")]
676                 [Test]
677                 public void StartLocationTest12 ()
678                 {
679                         SetUp (false, false);
680
681                         child1.MdiParent = main;
682                         child2.MdiParent = main;
683                         child3.MdiParent = main;
684
685                         child1.Visible = true;
686                         //child2.Visible = true;
687                         child3.Visible = true;
688
689                         main.Show ();
690                         
691                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
692                         Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#2");
693                         Assert.AreEqual ("{X=22,Y=22}", child3.Location.ToString (), "#3");
694
695                         child2.Visible = true;
696                         Assert.AreEqual ("{X=44,Y=44}", child2.Location.ToString (), "#4");
697
698                         child1.Visible = false;
699                         child1.Visible = true;
700                         Assert.AreEqual ("{X=66,Y=66}", child1.Location.ToString (), "#1");
701
702                         TearDown ();
703                 }
704
705                 [Category("NotWorking")]
706                 [Test]
707                 public void StartLocationTest13 ()
708                 {
709                         SetUp (false, false);
710
711                         child1.MdiParent = main;
712                         child2.MdiParent = main;
713                         child3.MdiParent = main;
714
715                         child1.Visible = true;
716                         //child2.Visible = true;
717                         child3.Visible = true;
718
719                         main.Show ();
720                         
721                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
722                         Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#2");
723                         Assert.AreEqual ("{X=22,Y=22}", child3.Location.ToString (), "#3");
724
725                         child2.Visible = true;
726                         Assert.AreEqual ("{X=44,Y=44}", child2.Location.ToString (), "#4");
727
728                         child1.Visible = false;
729                         child1.Visible = true;
730                         Assert.AreEqual ("{X=66,Y=66}", child1.Location.ToString (), "#5");
731                         
732                         child3.Visible = true;
733                         Assert.AreEqual ("{X=22,Y=22}", child3.Location.ToString (), "#6");
734
735                         // MDI Child size does not seem to affect layout.
736                         // Size 500,500
737                         child2.Visible = false;
738                         child2.Size = new Size (500, 500);
739                         child2.Visible = true;
740                         Assert.AreEqual ("{X=88,Y=88}", child2.Location.ToString (), "#7");
741
742                         child2.Visible = false;
743                         child2.Visible = true;
744                         Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#8");
745                         
746                         child2.Visible = false;
747                         child2.Visible = true;
748                         Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#9");
749
750                         // Size 5,5
751                         child2.Visible = false;
752                         child2.Size = new Size (5, 5);
753                         child2.Visible = true;
754                         Assert.AreEqual ("{X=44,Y=44}", child2.Location.ToString (), "#10");
755
756                         child2.Visible = false;
757                         child2.Visible = true;
758                         Assert.AreEqual ("{X=66,Y=66}", child2.Location.ToString (), "#11");
759                         
760                         child2.Visible = false;
761                         child2.Visible = true;
762                         Assert.AreEqual ("{X=88,Y=88}", child2.Location.ToString (), "#12");
763
764                         child2.Visible = false;
765                         child2.Visible = true;
766                         Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#13");
767
768                         TearDown ();
769                 }
770
771                 [Category("NotWorking")]
772                 [Test]
773                 public void StartLocationTest14 ()
774                 {
775                         SetUp (false, false);
776
777                         child1.MdiParent = main;
778                         child2.MdiParent = main;
779                         child3.MdiParent = main;
780
781                         child2.StartPosition = FormStartPosition.Manual;
782                         child2.Location = new Point (44, 44);
783                         child1.Visible = true;
784                         child2.Visible = true;
785                         child3.Visible = true;
786
787                         main.Show ();
788                         
789                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
790                         Assert.AreEqual ("{X=44,Y=44}", child2.Location.ToString (), "#2");
791                         Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
792
793                         child1.Visible = false;
794                         child1.Visible = true;
795                         Assert.AreEqual ("{X=66,Y=66}", child1.Location.ToString (), "#4");
796
797                         TearDown ();
798                 }
799
800                 [Category("NotWorking")]
801                 [Test]
802                 public void StartLocationTest15 ()
803                 {
804                         SetUp (false, false);
805
806                         child1.MdiParent = main;
807                         child2.MdiParent = main;
808                         child3.MdiParent = main;
809
810                         main.Show ();
811
812                         child1.Visible = true;
813                         child2.Visible = true;
814                         child2.Location = new Point (22, 44);
815                         child3.Visible = true;
816
817                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
818                         Assert.AreEqual ("{X=22,Y=44}", child2.Location.ToString (), "#2");
819                         Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
820
821                         child1.Visible = false;
822                         child1.Visible = true;
823                         Assert.AreEqual ("{X=66,Y=66}", child1.Location.ToString (), "#4");
824
825                         TearDown ();
826                 }
827
828                 [Category("NotWorking")]
829                 [Test]
830                 public void StartLocationTest16 ()
831                 {
832                         SetUp (false, false);
833
834                         child1.MdiParent = main;
835                         child2.MdiParent = main;
836                         child3.MdiParent = main;
837
838                         child1.Visible = true;
839                         child2.Visible = true;
840                         child2.Location = new Point (22, 44);
841                         child3.Visible = true;
842
843                         main.Show ();
844                         
845                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
846                         Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#2");
847                         Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
848
849                         child1.Visible = false;
850                         child1.Visible = true;
851                         Assert.AreEqual ("{X=66,Y=66}", child1.Location.ToString (), "#4");
852
853                         TearDown ();
854                 }
855                 
856                 [Category("NotWorking")]
857                 [Test]
858                 public void StartLocationTest17 ()
859                 {
860                         SetUp (false, false);
861
862                         child1.MdiParent = main;
863                         child2.MdiParent = main;
864                         child3.MdiParent = main;
865
866                         child1.Visible = true;
867                         child2.Visible = true;
868
869                         main.Show ();
870                         
871                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
872                         Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#2");
873                         Assert.AreEqual ("{X=0,Y=0}", child3.Location.ToString (), "#3");
874
875                         child2.Visible = false;
876                         child3.Visible = true;
877
878                         Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#4");
879
880                         TearDown ();
881                 }
882
883                 [Category("NotWorking")]
884                 [Test]
885                 public void StartLocationTest18 ()
886                 {
887                         SetUp (false, false);
888
889                         child1.MdiParent = main;
890                         child2.MdiParent = main;
891                         child3.MdiParent = main;
892
893                         child1.Visible = true;
894                         child2.Visible = true;
895
896                         main.Show ();
897                         
898                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
899                         Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#2");
900                         Assert.AreEqual ("{X=0,Y=0}", child3.Location.ToString (), "#3");
901
902                         child2.Visible = false;
903                         child2.Close ();
904                         child2.Dispose ();
905                         child2 = null;
906
907                         child3.Visible = true;
908
909                         Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#4");
910
911                         TearDown ();
912                 }
913
914                 [Category("NotWorking")]                
915                 [Test]
916                 public void StartLocationTest19 ()
917                 {
918                         SetUp (false, false);
919
920                         child1.MdiParent = main;
921                         child2.MdiParent = main;
922                         child3.MdiParent = main;
923
924                         child1.Visible = true;
925                         child2.Visible = true;
926                         child3.Visible = true;
927
928                         child1.StartPosition = FormStartPosition.Manual;
929                         child2.StartPosition = FormStartPosition.Manual;
930                         child3.StartPosition = FormStartPosition.Manual;
931
932                         main.Show ();
933                         
934                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
935                         Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#2");
936                         Assert.AreEqual ("{X=0,Y=0}", child3.Location.ToString (), "#3");
937
938                         TearDown ();
939                 }
940 */
941                 [Test]
942                 public void StartSizeTest1 ()
943                 {
944                         SetUp (false, false);
945
946                         child1.MdiParent = main;
947                         child2.MdiParent = main;
948                         child3.MdiParent = main;
949
950                         main.Show ();
951                         
952                         Assert.AreEqual ("{Width=300, Height=300}", main.Size.ToString (), "#1");
953                         Assert.AreEqual ("{Width=300, Height=300}", child1.Size.ToString (), "#2");
954                         Assert.AreEqual ("{Width=300, Height=300}", child2.Size.ToString (), "#3");
955                         Assert.AreEqual ("{Width=300, Height=300}", child3.Size.ToString (), "#4");
956
957                         child1.Visible = true;
958                         child2.Visible = true;
959                         child3.Visible = true;
960
961                         Assert.AreEqual ("{Width=300, Height=300}", main.Size.ToString (), "#1");
962                         Assert.AreEqual ("{Width=300, Height=300}", child1.Size.ToString (), "#2");
963                         Assert.AreEqual ("{Width=300, Height=300}", child2.Size.ToString (), "#3");
964                         Assert.AreEqual ("{Width=300, Height=300}", child3.Size.ToString (), "#4");
965
966                         TearDown ();
967                 }
968
969                 [Test]
970                 public void IsMdiContainerTest ()
971                 {
972                         SetUp (false, true);
973
974                         main.Visible = true;
975                         main.Visible = false;
976                         
977                         main.IsMdiContainer = true;
978                         
979                         child1.MdiParent = main;
980
981                         main.IsMdiContainer = false;
982
983                         Assert.AreSame (null, main.ActiveMdiChild, "#1");
984
985                         main.Visible = true;
986                         Assert.AreSame (null, main.ActiveMdiChild, "#2");
987                         
988                         Assert.AreSame (null, main.MdiParent, "#3");
989
990                         TearDown ();
991                 }
992
993                 [Category("NotWorking")]
994                 [Test]
995                 [ExpectedException(typeof(ArgumentException), ExpectedMessage = "Cannot add a top level control to a control.")]
996                 public void AddToControlsTest ()
997                 {
998                         SetUp (false, true);
999                         
1000                         main.Visible = true;
1001                         main.Visible = false;
1002
1003                         main.Controls.Add (child1);
1004
1005                         TearDown ();
1006                 }
1007
1008                 [Test]
1009                 public void Text ()
1010                 {
1011                         Form main = null, child1 = null, child2 = null, child3 = null;
1012
1013                         main = new Form ();
1014                         main.IsMdiContainer = true;
1015                         main.Name = "main";
1016                         main.Text = main.Name;
1017                         main.Show();
1018                         
1019                         Assert.AreEqual ("main", main.Text, "#1");
1020                         
1021                         child1 = new Form ();
1022                         child1.Name = "child1";
1023                         child1.MdiParent = main;
1024                         child1.Text = child1.Name;
1025                         child1.WindowState = FormWindowState.Maximized;
1026                         child1.Show ();
1027                         
1028                         Assert.AreEqual ("main - [child1]", main.Text, "#2");
1029                         
1030                         child2 = new Form ();
1031                         child2.Name = "child2";
1032                         child1.MdiParent = main;
1033                         child2.Text = string.Empty;
1034                         child2.WindowState = FormWindowState.Maximized;
1035                         child2.Show();
1036                         
1037                         Assert.AreEqual ("main - [child1]", main.Text, "#3");
1038                         
1039                         child1.Activate();
1040                         Assert.AreEqual ("main - [child1]", main.Text, "#4");
1041                         
1042                         child1.WindowState = FormWindowState.Minimized;
1043                         Assert.AreEqual ("main", main.Text, "#5");
1044                         
1045                         child2.Activate ();
1046                         Assert.AreEqual ("main", main.Text, "#6");
1047                         
1048                         child2.WindowState = FormWindowState.Maximized;
1049                         Assert.AreEqual ("main", main.Text, "#7");
1050
1051                         child3 = new Form ();
1052                         child3.Name = "child3";
1053                         child3.MdiParent = main;
1054                         child3.Text = child3.Name;
1055                         child3.WindowState = FormWindowState.Maximized;
1056                         child3.Show ();
1057
1058                         Assert.AreEqual ("main - [child3]", main.Text, "#8");
1059                         child3.WindowState = FormWindowState.Normal;
1060                         Assert.AreEqual ("main", main.Text, "#9");
1061
1062                         main.Text = string.Empty;
1063                         child3.WindowState = FormWindowState.Maximized;
1064                         Assert.AreEqual (" - [child3]", main.Text, "#10");
1065
1066                         child3.Text = string.Empty;
1067                         Assert.AreEqual (string.Empty, main.Text, "#11");
1068
1069                         main.Close ();
1070                         
1071                         child3.Dispose ();
1072                         child2.Dispose ();
1073                         child1.Dispose ();
1074                         main.Dispose ();
1075                 }
1076
1077                 [Test]
1078                 public void Text_MdiContainer ()
1079                 {
1080                         Form main = new Form ();
1081                         main.ShowInTaskbar = false;
1082                         main.Text = "main";
1083                         main.IsMdiContainer = true;
1084                         main.Show ();
1085
1086                         Assert.AreEqual ("main", main.Text, "#1");
1087
1088                         Form child = new Form ();
1089                         child.Name = "child";
1090                         child.MdiParent = main;
1091                         child.Text = child.Name;
1092                         child.WindowState = FormWindowState.Maximized;
1093                         child.Show ();
1094
1095                         Assert.AreEqual ("main - [child]", main.Text, "#2");
1096
1097                         main.Dispose ();
1098                 }
1099
1100                 [Test] // bug 80038
1101                 public void Text_ChildClose ()
1102                 {
1103                         Form main = new Form ();
1104                         main.ShowInTaskbar = false;
1105                         main.IsMdiContainer = true;
1106                         main.Text = "main";
1107                         main.Show ();
1108
1109                         Assert.AreEqual ("main", main.Text, "#1");
1110
1111                         Form child = new Form ();
1112                         child.Name = "child";
1113                         child.MdiParent = main;
1114                         child.Text = child.Name;
1115                         child.WindowState = FormWindowState.Maximized;
1116                         child.Show ();
1117
1118                         Assert.AreEqual ("main - [child]", main.Text, "#2");
1119
1120                         child.Close ();
1121                         Assert.AreEqual ("main", main.Text, "#3");
1122
1123                         main.Dispose ();
1124                 }
1125
1126                 [Test]
1127                 public void Text_Maximized ()
1128                 {
1129                         Form main = new Form ();
1130                         main.IsMdiContainer = true;
1131                         main.Name = "main";
1132                         main.Text = main.Name;
1133                         main.Show ();
1134
1135                         Assert.AreEqual ("main", main.Text, "#1");
1136
1137                         Form child1 = new Form ();
1138                         child1.Name = "child1";
1139                         child1.MdiParent = main;
1140                         child1.Text = child1.Name;
1141                         child1.WindowState = FormWindowState.Maximized;
1142                         child1.Show ();
1143
1144                         Assert.AreEqual ("main - [child1]", main.Text, "#2");
1145
1146                         Form child2 = new Form ();
1147                         child2.Name = "child2";
1148                         child2.MdiParent = main;
1149                         child2.Text = child2.Name;
1150                         child2.WindowState = FormWindowState.Maximized;
1151                         child2.Show ();
1152
1153                         Assert.AreEqual ("main - [child2]", main.Text, "#3");
1154
1155                         child1.WindowState = FormWindowState.Maximized;
1156
1157                         Assert.AreEqual ("main - [child1]", main.Text, "#4");
1158
1159                         main.Dispose ();
1160                 }
1161                 
1162                 [Test]
1163                 [Category ("NotWorking")]
1164                 public void TopLevelTest ()
1165                 {
1166                         Form main, child1;
1167
1168                         main = new Form ();
1169                         main.IsMdiContainer = true;
1170                         main.Name = "main";
1171
1172                         child1 = new Form ();
1173                         child1.Name = "child1";
1174                         Assert.AreEqual (true, child1.TopLevel, "#01");
1175                         child1.MdiParent = main;
1176                         Assert.AreEqual (false, child1.TopLevel, "#02");
1177                         
1178                         child1.Dispose ();
1179                         main.Dispose ();
1180                 }
1181                 [Test]
1182                 public void ActiveMdiChild ()
1183                 {
1184                         Form main, child1, child2;
1185                         
1186                         main = new Form ();
1187                         main.IsMdiContainer = true;
1188                         main.Name = "main";
1189
1190                         child1 = new Form ();
1191                         child1.Name = "child1";
1192                         child1.MdiParent = main;
1193                         child1.WindowState = FormWindowState.Maximized;
1194                         child1.Show ();
1195                         
1196                         child2 = new Form ();
1197                         child2.Name = "child2";
1198                         child2.MdiParent = main;
1199                         child2.Show();
1200                         
1201                         Assert.IsNull (main.ActiveMdiChild, "#1");
1202
1203                         main.Show ();
1204                         Assert.AreSame (child2, main.ActiveMdiChild, "#2");
1205
1206                         child1.WindowState = FormWindowState.Maximized;
1207                         Assert.AreSame (child1, main.ActiveMdiChild, "#3");
1208
1209                         child2.WindowState = FormWindowState.Maximized;
1210                         Assert.AreSame (child2, main.ActiveMdiChild, "#4");
1211
1212                         main.Visible = false;
1213                         Assert.IsNull (main.ActiveMdiChild, "#5");
1214
1215                         child2.Dispose ();
1216                         child1.Dispose ();
1217                         main.Dispose ();
1218                         main.Close();
1219                 }
1220
1221                 [Test]
1222                 public void ActiveMdiChild2 ()
1223                 {
1224                         SetUp (false, false);
1225
1226                         child1.MdiParent = main;
1227                         child2.MdiParent = main;
1228
1229                         main.Show ();
1230                         child1.Show ();
1231                         child2.Show ();
1232                         
1233                         child1.Activate ();
1234                         child1.Visible = false;
1235                         
1236                         Assert.AreSame (child2, main.ActiveMdiChild, "#1");
1237
1238                         TearDown ();
1239                 }
1240
1241                 [Test]
1242                 public void ActiveMdiChild3 ()
1243                 {
1244                         SetUp (false, false);
1245                         
1246                         child1.MdiParent = main;
1247                         child2.MdiParent = main;
1248
1249                         main.Visible = true;
1250                         main.Visible = false;
1251
1252                         Assert.AreSame (null, main.ActiveMdiChild, "#1");
1253                         //child2.Visible = true; This will cause StackOverflowException on MS.
1254                         main.Visible = true;
1255                         Assert.AreSame (null, main.ActiveMdiChild, "#2");
1256
1257                         TearDown ();
1258                 }
1259                 [Test]
1260                 public void MdiChild_WindowState1 ()
1261                 {
1262                         Form main = null, child1 = null, child2 = null;
1263                         try {
1264                                 
1265                                 main = new Form ();
1266                                 main.IsMdiContainer = true;
1267                                 main.Name = "main";
1268
1269                                 child1 = new Form ();
1270                                 child1.Name = "child1";
1271                                 child1.Text = "child1";
1272                                 child1.MdiParent = main;
1273                                 child1.WindowState = FormWindowState.Maximized;
1274                                 child1.Show ();
1275                                 
1276                                 child2 = new Form ();
1277                                 child2.Name = "child2";
1278                                 child2.Text = "child2";
1279                                 child2.MdiParent = main;
1280                                 child2.Show();
1281                                 
1282                                 Assert.AreEqual (FormWindowState.Maximized, child1.WindowState, "#1");
1283                                 Assert.AreEqual (FormWindowState.Normal, child2.WindowState, "#2");
1284                                 main.Show ();
1285                                 Assert.AreEqual (FormWindowState.Normal, child1.WindowState, "#3");
1286                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#4");
1287                         } finally {
1288                                 child2.Dispose ();
1289                                 child1.Dispose ();
1290                                 main.Dispose ();
1291                                 main.Close();
1292                         }
1293                 }
1294
1295                 [Test]
1296                 public void MdiChild_WindowState2 ()
1297                 {
1298                         Form main = null, child1 = null, child2 = null;
1299                         try{
1300                                 
1301                                 main = new Form ();
1302                                 main.Name = "main";
1303                                 main.IsMdiContainer = true;
1304                                 main.Show ();
1305                                 
1306                                 child1 = new Form ();
1307                                 child1.Name = "child1";
1308                                 child1.MdiParent = main;
1309                                 child1.WindowState = FormWindowState.Maximized;
1310                                 child1.Show ();
1311                                 
1312                                 child2 = new Form ();
1313                                 child2.Name = "child2";
1314                                 child2.MdiParent = main;
1315                                 child2.Show();
1316
1317                                 
1318                                 Assert.AreEqual (FormWindowState.Normal, child1.WindowState, "#1");
1319                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#2");
1320                         
1321                         } finally {
1322                                 child2.Dispose ();
1323                                 child1.Dispose ();
1324                                 main.Dispose ();
1325                                 main.Close();
1326                         }
1327                 }
1328
1329                 [Test]
1330                 public void MdiChild_WindowState3 ()
1331                 {
1332                         Form main = null, child1 = null, child2 = null;
1333                         try {                           
1334                                 main = new Form ();
1335                                 main.IsMdiContainer = true;
1336                                 main.Show ();
1337                                 
1338                                 child1 = new Form ();
1339                                 child1.MdiParent = main;
1340                                 child1.Show ();
1341                                 
1342                                 child2 = new Form ();
1343                                 child2.MdiParent = main;
1344                                 child2.WindowState = FormWindowState.Maximized;
1345                                 child2.Show();
1346                                 
1347                                 Assert.AreEqual (FormWindowState.Normal, child1.WindowState, "#1");
1348                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#2");
1349                                 
1350                         } finally {
1351                                 child2.Dispose ();
1352                                 child1.Dispose ();
1353                                 main.Dispose ();
1354                                 main.Close();
1355                         }
1356                 }
1357
1358                 [Test]
1359                 public void MdiChild_WindowState4 ()
1360                 {
1361                         Form main = null, child1 = null, child2 = null;
1362                         try {                           
1363                                 main = new Form ();
1364                                 main.IsMdiContainer = true;
1365                                 main.Show ();
1366                                 
1367                                 child1 = new Form ();
1368                                 child1.MdiParent = main;
1369                                 child1.WindowState = FormWindowState.Maximized;
1370                                 child1.Show ();
1371                                 
1372                                 child2 = new Form ();
1373                                 child2.MdiParent = main;
1374                                 child2.WindowState = FormWindowState.Maximized;
1375
1376                                 Assert.AreEqual (FormWindowState.Maximized, child1.WindowState, "#1");
1377                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#2");
1378
1379                                 child2.Show();
1380                                 
1381                                 Assert.AreEqual (FormWindowState.Normal, child1.WindowState, "#3");
1382                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#4");
1383                                 
1384                                 child2.WindowState = FormWindowState.Normal;
1385
1386                                 Assert.AreEqual (FormWindowState.Normal, child1.WindowState, "#5");
1387                                 Assert.AreEqual (FormWindowState.Normal, child2.WindowState, "#6");
1388                         } finally {
1389                                 child2.Dispose ();
1390                                 child1.Dispose ();
1391                                 main.Dispose ();
1392                                 main.Close();
1393                         }
1394                 }
1395
1396                 [Test]
1397                 public void MdiChild_WindowState5 ()
1398                 {
1399                         Form main = null, child1 = null, child2 = null;
1400                         try {                           
1401                                 main = new Form ();
1402                                 main.Name = "main";
1403                                 main.IsMdiContainer = true;
1404                                 main.Show ();
1405                                 
1406                                 child1 = new Form ();
1407                                 child1.Name = "child1";
1408                                 child1.MdiParent = main;
1409                                 child1.WindowState = FormWindowState.Maximized;
1410                                 child1.Show ();
1411                                 
1412                                 child2 = new Form ();
1413                                 child2.Name = "child2";
1414                                 child2.MdiParent = main;
1415                                 child2.WindowState = FormWindowState.Maximized;
1416                                 
1417                                 Assert.AreEqual (FormWindowState.Maximized, child1.WindowState, "#1");
1418                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#2");
1419
1420                                 child2.Show();
1421
1422                                 Assert.AreEqual (FormWindowState.Normal, child1.WindowState, "#3");
1423                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#4");
1424
1425                                 child1.Activate ();
1426
1427                                 Assert.AreEqual (FormWindowState.Maximized, child1.WindowState, "#5");
1428                                 Assert.AreEqual (FormWindowState.Normal, child2.WindowState, "#6");
1429                         } finally {
1430                                 child2.Dispose ();
1431                                 child1.Dispose ();
1432                                 main.Dispose ();
1433                                 main.Close();
1434                         }
1435                 }
1436
1437                 [Test]
1438                 public void MdiChild_WindowState6 ()
1439                 {
1440                         Form main = null, child1 = null, child2 = null;
1441                         try {
1442                                 
1443                                 main = new Form ();
1444                                 main.Name = "main";
1445                                 main.IsMdiContainer = true;
1446                                 main.Show ();
1447                                 
1448                                 child1 = new Form ();
1449                                 child1.Name = "child1";
1450                                 child1.MdiParent = main;
1451                                 child1.WindowState = FormWindowState.Minimized;
1452                                 child1.Show ();
1453                                 
1454                                 child2 = new Form ();
1455                                 child2.Name = "child2";
1456                                 child2.MdiParent = main;
1457                                 child2.WindowState = FormWindowState.Maximized;
1458
1459                                 Assert.AreEqual (FormWindowState.Minimized, child1.WindowState, "#1");
1460                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#2");
1461
1462                                 child2.Show();
1463                                 
1464                                 Assert.AreEqual (FormWindowState.Minimized, child1.WindowState, "#3");
1465                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#4");
1466                                 
1467                                 child1.Activate ();
1468
1469                                 Assert.AreEqual (FormWindowState.Maximized, child1.WindowState, "#5");
1470                                 Assert.AreEqual (FormWindowState.Normal, child2.WindowState, "#6");
1471                                 
1472                                 child2.Activate ();
1473
1474                                 Assert.AreEqual (FormWindowState.Minimized, child1.WindowState, "#7");
1475                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#8");
1476                         } finally {
1477                                 child2.Dispose ();
1478                                 child1.Dispose ();
1479                                 main.Dispose ();
1480                                 main.Close();
1481                         }
1482                 }
1483                 
1484                 [Test] // bug 80995
1485                 public void ChangeClientSizeTest ()
1486                 {
1487                         SetUp (false, false, false);
1488                         child1.ClientSize = new Size (224, 37);
1489                         child1.MdiParent = main;
1490                         Assert.AreEqual ("{Width=224, Height=37}", child1.ClientSize.ToString (), "#01");
1491                         child1.Show ();
1492                         Assert.AreEqual ("{Width=224, Height=37}", child1.ClientSize.ToString (), "#02");
1493                         main.Show ();
1494                         Assert.AreEqual ("{Width=224, Height=37}", child1.ClientSize.ToString (), "#03");
1495                 }
1496                 
1497                 private string events_fired;
1498                 
1499                 [Test]
1500                 public void MdiClosingClosedEvent ()
1501                 {
1502                         Form f = new Form ();
1503                         f.IsMdiContainer = true;
1504                         
1505                         MdiChild mdi = new MdiChild ();
1506                         mdi.can_close = false;
1507                         mdi.MdiParent = f;
1508
1509                         f.Closing += new CancelEventHandler (f_Closing);
1510                         f.Closed += new EventHandler (f_Closed);
1511                         mdi.Closing += new CancelEventHandler (mdi_Closing);
1512                         mdi.Closed += new EventHandler (mdi_Closed);
1513
1514                         f.FormClosing += new FormClosingEventHandler (f_FormClosing);
1515                         f.FormClosed += new FormClosedEventHandler (f_FormClosed);
1516                         mdi.FormClosing += new FormClosingEventHandler (mdi_FormClosing);
1517                         mdi.FormClosed += new FormClosedEventHandler (mdi_FormClosed);
1518
1519                         f.Show ();
1520                         mdi.Show ();
1521                         
1522                         events_fired = string.Empty;
1523                         
1524                         f.Close ();
1525                         
1526                         Assert.AreEqual ("Child.Closing: True, Child.FormClosing: True, Parent.Closing: True, Parent.FormClosing: True, ", events_fired, "A1-2.0");
1527
1528                         events_fired = string.Empty;
1529                         mdi.can_close = true;
1530                         f.Close ();
1531                         
1532                         Assert.AreEqual ("Child.Closing: False, Child.FormClosing: False, Parent.Closing: False, Parent.FormClosing: False, Child.Closed, Child.FormClosed, Parent.Closed, Parent.FormClosed, ", events_fired, "A2-2.0");
1533
1534                         f.Dispose ();
1535                 }
1536
1537                 void mdi_FormClosed (object sender, FormClosedEventArgs e)
1538                 {
1539                         events_fired += "Child.FormClosed, ";
1540                 }
1541
1542                 void mdi_FormClosing (object sender, FormClosingEventArgs e)
1543                 {
1544                         events_fired += string.Format ("Child.FormClosing: {0}, ", e.Cancel);
1545                 }
1546
1547                 void f_FormClosed (object sender, FormClosedEventArgs e)
1548                 {
1549                         events_fired += "Parent.FormClosed, ";
1550                 }
1551
1552                 void f_FormClosing (object sender, FormClosingEventArgs e)
1553                 {
1554                         events_fired += string.Format ("Parent.FormClosing: {0}, ", e.Cancel);
1555                 }
1556
1557                 void mdi_Closed (object sender, EventArgs e)
1558                 {
1559                         events_fired += "Child.Closed, ";
1560                 }
1561
1562                 void mdi_Closing (object sender, CancelEventArgs e)
1563                 {
1564                         events_fired += string.Format ("Child.Closing: {0}, ", e.Cancel);
1565                 }
1566
1567                 void f_Closed (object sender, EventArgs e)
1568                 {
1569                         events_fired += "Parent.Closed, ";
1570                 }
1571
1572                 void f_Closing (object sender, CancelEventArgs e)
1573                 {
1574                         events_fired += string.Format ("Parent.Closing: {0}, ", e.Cancel);
1575                 }
1576                 
1577                 private class MdiChild : Form
1578                 {
1579                         public bool can_close = false;
1580                         
1581                         public MdiChild ()
1582                         {
1583                                 Closing += new CancelEventHandler (MdiChild_Closing);
1584                         }
1585
1586                         void MdiChild_Closing (object sender, CancelEventArgs e)
1587                         {
1588                                 e.Cancel = !can_close;
1589                         }
1590                 }
1591         }
1592 }