* MdiFormTest.cs, ControlTest.cs: Remove a warning.
[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
15 using NUnit.Framework;
16
17 namespace MonoTests.System.Windows.Forms
18 {
19         [TestFixture]
20         public class MdiFormTest
21         {
22                 private Form main;
23                 private Form child1;
24                 private Form child2;
25                 private Form child3;
26
27                 [TearDown]
28                 public void TearDown ()
29                 {
30                         if (main != null)
31                                 main.Dispose ();
32                         if (child1 != null)
33                                 child1.Dispose ();
34                         if (child2 != null)
35                                 child2.Dispose ();
36                         if (child3 != null)
37                                 child3.Dispose ();
38                         main = null;
39                         child1 = null;
40                         child2 = null;
41                         child3 = null;
42                 }
43         
44                 // No attribute here since this is supposed to be called from 
45                 // each test directly, not by nunit.
46                 public void SetUp (bool only_create, bool only_text)
47                 {
48                         SetUp (only_create, only_text, false);
49                 }       
50                                 
51                 // No attribute here since this is supposed to be called from 
52                 // each test directly, not by nunit.
53                 public void SetUp (bool only_create, bool only_text, bool set_parent)
54                 {
55                         TearDown ();
56                         
57                         main = new Form ();
58                         child1 = new Form ();
59                         child2 = new Form ();
60                         child3 = new Form ();
61
62                         if (only_create)
63                                 return;
64
65                         main.Text = main.Name = "main";
66                         main.ShowInTaskbar = false;
67                         child1.Text = child1.Name = "child1";
68                         child2.Text = child2.Name = "child2";
69                         child3.Text = child3.Name = "child3";
70
71                         if (only_text)
72                                 return;
73
74                         main.IsMdiContainer = true;
75                         
76                         if (set_parent) {
77                                 child1.MdiParent = main;
78                                 child2.MdiParent = main;
79                                 child3.MdiParent = main;
80                         }
81                 }
82                 
83                 [Test]
84                 public void ActiveControlTest ()
85                 {
86                         SetUp (false, false, true);
87                         
88                         main.Show ();
89                         
90                         Assert.IsNull (main.ActiveControl, "#01");                      
91                         child1.Visible = true;
92                         Assert.AreSame (child1, main.ActiveControl, "#02");
93                         child2.Visible = true;
94                         Assert.AreSame (child2, main.ActiveControl, "#03");
95                         child3.Visible = true;
96                         Assert.AreSame (child3, main.ActiveControl, "#04");
97                         TearDown ();
98                 }
99                 
100                 [Test]
101                 public void SelectNextControlTest ()
102                 {
103                         SetUp (false, false, true);
104
105                         main.Show ();
106                         
107                         child1.Visible = true;
108                         child2.Visible = true;
109                         child3.Visible = true;
110                         
111                         main.SelectNextControl (main.ActiveControl, true, false, true, true);
112                         Assert.AreSame (child1, main.ActiveControl, "#01");
113                         main.SelectNextControl (main.ActiveControl, true, false, true, true);
114                         Assert.AreSame (child2, main.ActiveControl, "#02");
115                         main.SelectNextControl (main.ActiveControl, true, false, true, true);
116                         Assert.AreSame (child3, main.ActiveControl, "#03");
117                                                 
118                         TearDown ();
119                 }
120
121                 [Test]
122                 public void SelectPreviousControlTest ()
123                 {
124                         SetUp (false, false, true);
125
126                         main.Show ();
127                         
128                         child1.Visible = true;
129                         child2.Visible = true;
130                         child3.Visible = true;
131
132                         main.SelectNextControl (main.ActiveControl, false, false, true, true);
133                         Assert.AreSame (child2, main.ActiveControl, "#01");
134                         main.SelectNextControl (main.ActiveControl, false, false, true, true);
135                         Assert.AreSame (child1, main.ActiveControl, "#02");
136                         main.SelectNextControl (main.ActiveControl, false, false, true, true);
137                         Assert.AreSame (child3, main.ActiveControl, "#03");
138
139                         TearDown ();
140                 }
141                 
142                 [Category("NotWorking")]
143                 [Test]
144                 public void StartLocationTest1 ()
145                 {
146                         SetUp (false, false);
147
148                         child1.MdiParent = main;
149                         child2.MdiParent = main;
150
151                         child1.Visible = true;
152                         child2.Visible = true;
153
154                         main.Show ();
155                         
156                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
157                         Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#2");
158
159                         TearDown ();
160                 }
161
162                 [Category("NotWorking")]
163                 [Test]
164                 public void StartLocationTest2 ()
165                 {
166                         SetUp (false, false);
167
168                         child1.MdiParent = main;
169                         child2.MdiParent = main;
170
171                         child1.StartPosition = FormStartPosition.Manual;
172
173                         child1.Visible = true;
174                         child2.Visible = true;
175
176                         main.Show ();
177                         
178                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
179                         Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#2");
180
181                         TearDown ();
182                 }
183
184
185                 [Category("NotWorking")]
186                 [Test]
187                 public void StartLocationTest3 ()
188                 {
189                         SetUp (false, false);
190
191                         child1.MdiParent = main;
192                         child2.MdiParent = main;
193
194                         child2.StartPosition = FormStartPosition.Manual;
195
196                         child1.Visible = true;
197                         child2.Visible = true;
198
199                         main.Show ();
200                         
201                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
202                         Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#2");
203
204                         TearDown ();
205                 }
206
207                 [Category("NotWorking")]
208                 [Test]
209                 public void StartLocationTest4 ()
210                 {
211                         SetUp (false, false);
212
213                         child1.MdiParent = main;
214                         child2.MdiParent = main;
215
216                         child1.StartPosition = FormStartPosition.Manual;
217                         child2.StartPosition = FormStartPosition.Manual;
218
219                         child1.Visible = true;
220                         child2.Visible = true;
221
222                         main.Show ();
223                         
224                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
225                         Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#2");
226
227                         TearDown ();
228                 }
229
230                 [Category("NotWorking")]
231                 [Test]
232                 public void StartLocationTest5 ()
233                 {
234                         SetUp (false, false);
235
236                         child1.MdiParent = main;
237                         child2.MdiParent = main;
238                         child3.MdiParent = main;
239
240                         child2.StartPosition = FormStartPosition.Manual;
241
242                         child1.Visible = true;
243                         child2.Visible = true;
244                         child3.Visible = true;
245
246                         main.Show ();
247                         
248                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
249                         Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#2");
250                         Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
251
252                         TearDown ();
253                 }
254
255                 [Category("NotWorking")]
256                 [Test]
257                 public void StartLocationTest6 ()
258                 {
259                         SetUp (false, false);
260
261                         child1.MdiParent = main;
262                         child2.MdiParent = main;
263                         child3.MdiParent = main;
264
265                         child2.StartPosition = FormStartPosition.CenterParent;
266
267                         child1.Visible = true;
268                         child2.Visible = true;
269                         child3.Visible = true;
270
271                         main.Show ();
272                         
273                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
274                         Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#2");
275                         Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
276
277                         TearDown ();
278                 }
279
280                 [Category("NotWorking")]
281                 [Test]
282                 public void StartLocationTest7 ()
283                 {
284                         SetUp (false, false);
285
286                         child1.MdiParent = main;
287                         child2.MdiParent = main;
288                         child3.MdiParent = main;
289
290                         child2.StartPosition = FormStartPosition.CenterScreen;
291
292                         child1.Visible = true;
293                         child2.Visible = true;
294                         child3.Visible = true;
295
296                         main.Show ();
297                         
298                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
299                         Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#2");
300                         Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
301
302                         TearDown ();
303                 }
304
305                 [Category("NotWorking")]
306                 [Test]
307                 public void StartLocationTest8 ()
308                 {
309                         SetUp (false, false);
310
311                         child1.MdiParent = main;
312                         child2.MdiParent = main;
313                         child3.MdiParent = main;
314
315                         child2.StartPosition = FormStartPosition.WindowsDefaultBounds;
316
317                         child1.Visible = true;
318                         child2.Visible = true;
319                         child3.Visible = true;
320
321                         main.Show ();
322                         
323                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
324                         Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#2");
325                         Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
326
327                         TearDown ();
328                 }
329
330                 [Category("NotWorking")]
331                 [Test]
332                 public void StartLocationTest9 ()
333                 {
334                         SetUp (false, false);
335
336                         child1.MdiParent = main;
337                         child2.MdiParent = main;
338                         child3.MdiParent = main;
339
340                         child2.StartPosition = FormStartPosition.WindowsDefaultLocation;
341
342                         child1.Visible = true;
343                         child2.Visible = true;
344                         child3.Visible = true;
345
346                         main.Show ();
347                         
348                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
349                         Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#2");
350                         Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
351
352                         TearDown ();
353                 }
354                 
355                 [Category("NotWorking")]
356                 [Test]
357                 public void StartLocationTest10 ()
358                 {
359                         SetUp (false, false);
360
361                         child1.MdiParent = main;
362                         child2.MdiParent = main;
363                         child3.MdiParent = main;
364
365                         child2.StartPosition = FormStartPosition.Manual;
366                         child2.Location = new Point (123, 123);
367
368                         child1.Visible = true;
369                         child2.Visible = true;
370                         child3.Visible = true;
371
372                         main.Show ();
373                         
374                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
375                         Assert.AreEqual ("{X=123,Y=123}", child2.Location.ToString (), "#2");
376                         Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
377
378                         TearDown ();
379                 }
380
381                 [Category("NotWorking")]
382                 [Test]
383                 public void StartLocationTest11 ()
384                 {
385                         SetUp (false, false);
386
387                         child1.MdiParent = main;
388                         child2.MdiParent = main;
389                         child3.MdiParent = main;
390
391                         child2.Location = new Point (123, 123);
392
393                         Assert.AreEqual ("{X=123,Y=123}", child2.Location.ToString (), "#0");
394
395                         child1.Visible = true;
396                         child2.Visible = true;
397                         child3.Visible = true;
398
399                         Assert.AreEqual ("{X=123,Y=123}", child2.Location.ToString (), "#0");
400
401                         main.Show ();
402                         
403                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
404                         Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#2");
405                         Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
406
407                         TearDown ();
408                 }
409
410                 [Category("NotWorking")]
411                 [Test]
412                 public void StartLocationTest12 ()
413                 {
414                         SetUp (false, false);
415
416                         child1.MdiParent = main;
417                         child2.MdiParent = main;
418                         child3.MdiParent = main;
419
420                         child1.Visible = true;
421                         //child2.Visible = true;
422                         child3.Visible = true;
423
424                         main.Show ();
425                         
426                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
427                         Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#2");
428                         Assert.AreEqual ("{X=22,Y=22}", child3.Location.ToString (), "#3");
429
430                         child2.Visible = true;
431                         Assert.AreEqual ("{X=44,Y=44}", child2.Location.ToString (), "#4");
432
433                         child1.Visible = false;
434                         child1.Visible = true;
435                         Assert.AreEqual ("{X=66,Y=66}", child1.Location.ToString (), "#1");
436
437                         TearDown ();
438                 }
439
440                 [Category("NotWorking")]
441                 [Test]
442                 public void StartLocationTest13 ()
443                 {
444                         SetUp (false, false);
445
446                         child1.MdiParent = main;
447                         child2.MdiParent = main;
448                         child3.MdiParent = main;
449
450                         child1.Visible = true;
451                         //child2.Visible = true;
452                         child3.Visible = true;
453
454                         main.Show ();
455                         
456                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
457                         Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#2");
458                         Assert.AreEqual ("{X=22,Y=22}", child3.Location.ToString (), "#3");
459
460                         child2.Visible = true;
461                         Assert.AreEqual ("{X=44,Y=44}", child2.Location.ToString (), "#4");
462
463                         child1.Visible = false;
464                         child1.Visible = true;
465                         Assert.AreEqual ("{X=66,Y=66}", child1.Location.ToString (), "#5");
466                         
467                         child3.Visible = true;
468                         Assert.AreEqual ("{X=22,Y=22}", child3.Location.ToString (), "#6");
469
470                         // MDI Child size does not seem to affect layout.
471                         // Size 500,500
472                         child2.Visible = false;
473                         child2.Size = new Size (500, 500);
474                         child2.Visible = true;
475                         Assert.AreEqual ("{X=88,Y=88}", child2.Location.ToString (), "#7");
476
477                         child2.Visible = false;
478                         child2.Visible = true;
479                         Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#8");
480                         
481                         child2.Visible = false;
482                         child2.Visible = true;
483                         Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#9");
484
485                         // Size 5,5
486                         child2.Visible = false;
487                         child2.Size = new Size (5, 5);
488                         child2.Visible = true;
489                         Assert.AreEqual ("{X=44,Y=44}", child2.Location.ToString (), "#10");
490
491                         child2.Visible = false;
492                         child2.Visible = true;
493                         Assert.AreEqual ("{X=66,Y=66}", child2.Location.ToString (), "#11");
494                         
495                         child2.Visible = false;
496                         child2.Visible = true;
497                         Assert.AreEqual ("{X=88,Y=88}", child2.Location.ToString (), "#12");
498
499                         child2.Visible = false;
500                         child2.Visible = true;
501                         Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#13");
502
503                         TearDown ();
504                 }
505
506                 [Category("NotWorking")]
507                 [Test]
508                 public void StartLocationTest14 ()
509                 {
510                         SetUp (false, false);
511
512                         child1.MdiParent = main;
513                         child2.MdiParent = main;
514                         child3.MdiParent = main;
515
516                         child2.StartPosition = FormStartPosition.Manual;
517                         child2.Location = new Point (44, 44);
518                         child1.Visible = true;
519                         child2.Visible = true;
520                         child3.Visible = true;
521
522                         main.Show ();
523                         
524                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
525                         Assert.AreEqual ("{X=44,Y=44}", child2.Location.ToString (), "#2");
526                         Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
527
528                         child1.Visible = false;
529                         child1.Visible = true;
530                         Assert.AreEqual ("{X=66,Y=66}", child1.Location.ToString (), "#4");
531
532                         TearDown ();
533                 }
534
535                 [Category("NotWorking")]
536                 [Test]
537                 public void StartLocationTest15 ()
538                 {
539                         SetUp (false, false);
540
541                         child1.MdiParent = main;
542                         child2.MdiParent = main;
543                         child3.MdiParent = main;
544
545                         main.Show ();
546
547                         child1.Visible = true;
548                         child2.Visible = true;
549                         child2.Location = new Point (22, 44);
550                         child3.Visible = true;
551
552                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
553                         Assert.AreEqual ("{X=22,Y=44}", child2.Location.ToString (), "#2");
554                         Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
555
556                         child1.Visible = false;
557                         child1.Visible = true;
558                         Assert.AreEqual ("{X=66,Y=66}", child1.Location.ToString (), "#4");
559
560                         TearDown ();
561                 }
562
563                 [Category("NotWorking")]
564                 [Test]
565                 public void StartLocationTest16 ()
566                 {
567                         SetUp (false, false);
568
569                         child1.MdiParent = main;
570                         child2.MdiParent = main;
571                         child3.MdiParent = main;
572
573                         child1.Visible = true;
574                         child2.Visible = true;
575                         child2.Location = new Point (22, 44);
576                         child3.Visible = true;
577
578                         main.Show ();
579                         
580                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
581                         Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#2");
582                         Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
583
584                         child1.Visible = false;
585                         child1.Visible = true;
586                         Assert.AreEqual ("{X=66,Y=66}", child1.Location.ToString (), "#4");
587
588                         TearDown ();
589                 }
590                 
591                 [Category("NotWorking")]
592                 [Test]
593                 public void StartLocationTest17 ()
594                 {
595                         SetUp (false, false);
596
597                         child1.MdiParent = main;
598                         child2.MdiParent = main;
599                         child3.MdiParent = main;
600
601                         child1.Visible = true;
602                         child2.Visible = true;
603
604                         main.Show ();
605                         
606                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
607                         Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#2");
608                         Assert.AreEqual ("{X=0,Y=0}", child3.Location.ToString (), "#3");
609
610                         child2.Visible = false;
611                         child3.Visible = true;
612
613                         Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#4");
614
615                         TearDown ();
616                 }
617
618                 [Category("NotWorking")]
619                 [Test]
620                 public void StartLocationTest18 ()
621                 {
622                         SetUp (false, false);
623
624                         child1.MdiParent = main;
625                         child2.MdiParent = main;
626                         child3.MdiParent = main;
627
628                         child1.Visible = true;
629                         child2.Visible = true;
630
631                         main.Show ();
632                         
633                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
634                         Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#2");
635                         Assert.AreEqual ("{X=0,Y=0}", child3.Location.ToString (), "#3");
636
637                         child2.Visible = false;
638                         child2.Close ();
639                         child2.Dispose ();
640                         child2 = null;
641
642                         child3.Visible = true;
643
644                         Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#4");
645
646                         TearDown ();
647                 }
648
649                 [Category("NotWorking")]                
650                 [Test]
651                 public void StartLocationTest19 ()
652                 {
653                         SetUp (false, false);
654
655                         child1.MdiParent = main;
656                         child2.MdiParent = main;
657                         child3.MdiParent = main;
658
659                         child1.Visible = true;
660                         child2.Visible = true;
661                         child3.Visible = true;
662
663                         child1.StartPosition = FormStartPosition.Manual;
664                         child2.StartPosition = FormStartPosition.Manual;
665                         child3.StartPosition = FormStartPosition.Manual;
666
667                         main.Show ();
668                         
669                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
670                         Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#2");
671                         Assert.AreEqual ("{X=0,Y=0}", child3.Location.ToString (), "#3");
672
673                         TearDown ();
674                 }
675
676                 [Test]
677                 public void StartSizeTest1 ()
678                 {
679                         SetUp (false, false);
680
681                         child1.MdiParent = main;
682                         child2.MdiParent = main;
683                         child3.MdiParent = main;
684
685                         main.Show ();
686                         
687                         Assert.AreEqual ("{Width=300, Height=300}", main.Size.ToString (), "#1");
688                         Assert.AreEqual ("{Width=300, Height=300}", child1.Size.ToString (), "#2");
689                         Assert.AreEqual ("{Width=300, Height=300}", child2.Size.ToString (), "#3");
690                         Assert.AreEqual ("{Width=300, Height=300}", child3.Size.ToString (), "#4");
691
692                         child1.Visible = true;
693                         child2.Visible = true;
694                         child3.Visible = true;
695
696                         Assert.AreEqual ("{Width=300, Height=300}", main.Size.ToString (), "#1");
697                         Assert.AreEqual ("{Width=300, Height=300}", child1.Size.ToString (), "#2");
698                         Assert.AreEqual ("{Width=300, Height=300}", child2.Size.ToString (), "#3");
699                         Assert.AreEqual ("{Width=300, Height=300}", child3.Size.ToString (), "#4");
700
701                         TearDown ();
702                 }
703
704                 [Test]
705                 public void IsMdiContainerTest ()
706                 {
707                         SetUp (false, true);
708
709                         main.Visible = true;
710                         main.Visible = false;
711                         
712                         main.IsMdiContainer = true;
713                         
714                         child1.MdiParent = main;
715
716                         main.IsMdiContainer = false;
717
718                         Assert.AreSame (null, main.ActiveMdiChild, "#1");
719
720                         main.Visible = true;
721                         Assert.AreSame (null, main.ActiveMdiChild, "#2");
722                         
723                         Assert.AreSame (null, main.MdiParent, "#3");
724
725                         TearDown ();
726                 }
727
728                 [Category("NotWorking")]
729                 [Test]
730                 [ExpectedException(typeof(ArgumentException), "Cannot add a top level control to a control.")]
731                 public void AddToControlsTest ()
732                 {
733                         SetUp (false, true);
734                         
735                         main.Visible = true;
736                         main.Visible = false;
737
738                         main.Controls.Add (child1);
739
740                         TearDown ();
741                 }
742
743                 [Test]
744                 public void Text ()
745                 {
746                         Form main = null, child1 = null, child2 = null, child3 = null;
747
748                         main = new Form ();
749                         main.IsMdiContainer = true;
750                         main.Name = "main";
751                         main.Text = main.Name;
752                         main.Show();
753                         
754                         Assert.AreEqual ("main", main.Text, "#1");
755                         
756                         child1 = new Form ();
757                         child1.Name = "child1";
758                         child1.MdiParent = main;
759                         child1.Text = child1.Name;
760                         child1.WindowState = FormWindowState.Maximized;
761                         child1.Show ();
762                         
763                         Assert.AreEqual ("main - [child1]", main.Text, "#2");
764                         
765                         child2 = new Form ();
766                         child2.Name = "child2";
767                         child1.MdiParent = main;
768                         child2.Text = string.Empty;
769                         child2.WindowState = FormWindowState.Maximized;
770                         child2.Show();
771                         
772                         Assert.AreEqual ("main - [child1]", main.Text, "#3");
773                         
774                         child1.Activate();
775                         Assert.AreEqual ("main - [child1]", main.Text, "#4");
776                         
777                         child1.WindowState = FormWindowState.Minimized;
778                         Assert.AreEqual ("main", main.Text, "#5");
779                         
780                         child2.Activate ();
781                         Assert.AreEqual ("main", main.Text, "#6");
782                         
783                         child2.WindowState = FormWindowState.Maximized;
784                         Assert.AreEqual ("main", main.Text, "#7");
785
786                         child3 = new Form ();
787                         child3.Name = "child3";
788                         child3.MdiParent = main;
789                         child3.Text = child3.Name;
790                         child3.WindowState = FormWindowState.Maximized;
791                         child3.Show ();
792
793                         Assert.AreEqual ("main - [child3]", main.Text, "#8");
794                         child3.WindowState = FormWindowState.Normal;
795                         Assert.AreEqual ("main", main.Text, "#9");
796
797                         main.Text = string.Empty;
798                         child3.WindowState = FormWindowState.Maximized;
799                         Assert.AreEqual (" - [child3]", main.Text, "#10");
800
801                         child3.Text = string.Empty;
802                         Assert.AreEqual (string.Empty, main.Text, "#11");
803
804                         child3.Dispose ();
805                         child2.Dispose ();
806                         child1.Dispose ();
807                         main.Dispose ();
808                 }
809
810                 [Test]
811                 public void Text_MdiContainer ()
812                 {
813                         Form main = new Form ();
814                         main.ShowInTaskbar = false;
815                         main.Text = "main";
816                         main.IsMdiContainer = true;
817                         main.Show ();
818
819                         Assert.AreEqual ("main", main.Text, "#1");
820
821                         Form child = new Form ();
822                         child.Name = "child";
823                         child.MdiParent = main;
824                         child.Text = child.Name;
825                         child.WindowState = FormWindowState.Maximized;
826                         child.Show ();
827
828                         Assert.AreEqual ("main - [child]", main.Text, "#2");
829
830                         main.Dispose ();
831                 }
832
833                 [Test] // bug 80038
834                 public void Text_ChildClose ()
835                 {
836                         Form main = new Form ();
837                         main.ShowInTaskbar = false;
838                         main.IsMdiContainer = true;
839                         main.Text = "main";
840                         main.Show ();
841
842                         Assert.AreEqual ("main", main.Text, "#1");
843
844                         Form child = new Form ();
845                         child.Name = "child";
846                         child.MdiParent = main;
847                         child.Text = child.Name;
848                         child.WindowState = FormWindowState.Maximized;
849                         child.Show ();
850
851                         Assert.AreEqual ("main - [child]", main.Text, "#2");
852
853                         child.Close ();
854                         Assert.AreEqual ("main", main.Text, "#3");
855
856                         main.Dispose ();
857                 }
858
859                 [Test]
860                 public void Text_Maximized ()
861                 {
862                         Form main = new Form ();
863                         main.IsMdiContainer = true;
864                         main.Name = "main";
865                         main.Text = main.Name;
866                         main.Show ();
867
868                         Assert.AreEqual ("main", main.Text, "#1");
869
870                         Form child1 = new Form ();
871                         child1.Name = "child1";
872                         child1.MdiParent = main;
873                         child1.Text = child1.Name;
874                         child1.WindowState = FormWindowState.Maximized;
875                         child1.Show ();
876
877                         Assert.AreEqual ("main - [child1]", main.Text, "#2");
878
879                         Form child2 = new Form ();
880                         child2.Name = "child2";
881                         child2.MdiParent = main;
882                         child2.Text = child2.Name;
883                         child2.WindowState = FormWindowState.Maximized;
884                         child2.Show ();
885
886                         Assert.AreEqual ("main - [child2]", main.Text, "#3");
887
888                         child1.WindowState = FormWindowState.Maximized;
889
890                         Assert.AreEqual ("main - [child1]", main.Text, "#4");
891
892                         main.Dispose ();
893                 }
894                 
895                 [Test]
896                 public void TopLevelTest ()
897                 {
898                         Form main, child1;
899
900                         main = new Form ();
901                         main.IsMdiContainer = true;
902                         main.Name = "main";
903
904                         child1 = new Form ();
905                         child1.Name = "child1";
906                         Assert.AreEqual (true, child1.TopLevel, "#01");
907                         child1.MdiParent = main;
908                         Assert.AreEqual (false, child1.TopLevel, "#02");
909                         
910                         child1.Dispose ();
911                         main.Dispose ();
912                 }
913                 [Test]
914                 public void ActiveMdiChild ()
915                 {
916                         Form main, child1, child2;
917                         
918                         main = new Form ();
919                         main.IsMdiContainer = true;
920                         main.Name = "main";
921
922                         child1 = new Form ();
923                         child1.Name = "child1";
924                         child1.MdiParent = main;
925                         child1.WindowState = FormWindowState.Maximized;
926                         child1.Show ();
927                         
928                         child2 = new Form ();
929                         child2.Name = "child2";
930                         child2.MdiParent = main;
931                         child2.Show();
932                         
933                         Assert.IsNull (main.ActiveMdiChild, "#1");
934
935                         main.Show ();
936                         Assert.AreSame (child2, main.ActiveMdiChild, "#2");
937
938                         child1.WindowState = FormWindowState.Maximized;
939                         Assert.AreSame (child1, main.ActiveMdiChild, "#3");
940
941                         child2.WindowState = FormWindowState.Maximized;
942                         Assert.AreSame (child2, main.ActiveMdiChild, "#4");
943
944                         main.Visible = false;
945 #if NET_2_0
946                         Assert.IsNull (main.ActiveMdiChild, "#5");
947 #else
948                         Assert.AreSame (child2, main.ActiveMdiChild, "#5");
949 #endif
950
951                         child2.Dispose ();
952                         child1.Dispose ();
953                         main.Dispose ();
954                         main.Close();
955                 }
956
957                 [Test]
958                 public void ActiveMdiChild2 ()
959                 {
960                         SetUp (false, false);
961
962                         child1.MdiParent = main;
963                         child2.MdiParent = main;
964
965                         main.Show ();
966                         child1.Show ();
967                         child2.Show ();
968                         
969                         child1.Activate ();
970                         child1.Visible = false;
971                         
972                         Assert.AreSame (child2, main.ActiveMdiChild, "#1");
973
974                         TearDown ();
975                 }
976
977                 [Test]
978                 public void ActiveMdiChild3 ()
979                 {
980                         SetUp (false, false);
981                         
982                         child1.MdiParent = main;
983                         child2.MdiParent = main;
984
985                         main.Visible = true;
986                         main.Visible = false;
987
988                         Assert.AreSame (null, main.ActiveMdiChild, "#1");
989                         //child2.Visible = true; This will cause StackOverflowException on MS.
990                         main.Visible = true;
991                         Assert.AreSame (null, main.ActiveMdiChild, "#2");
992
993                         TearDown ();
994                 }
995                 [Test]
996                 public void MdiChild_WindowState1 ()
997                 {
998                         Form main = null, child1 = null, child2 = null;
999                         try {
1000                                 
1001                                 main = new Form ();
1002                                 main.IsMdiContainer = true;
1003                                 main.Name = "main";
1004
1005                                 child1 = new Form ();
1006                                 child1.Name = "child1";
1007                                 child1.Text = "child1";
1008                                 child1.MdiParent = main;
1009                                 child1.WindowState = FormWindowState.Maximized;
1010                                 child1.Show ();
1011                                 
1012                                 child2 = new Form ();
1013                                 child2.Name = "child2";
1014                                 child2.Text = "child2";
1015                                 child2.MdiParent = main;
1016                                 child2.Show();
1017                                 
1018                                 Assert.AreEqual (FormWindowState.Maximized, child1.WindowState, "#1");
1019                                 Assert.AreEqual (FormWindowState.Normal, child2.WindowState, "#2");
1020                                 main.Show ();
1021                                 Assert.AreEqual (FormWindowState.Normal, child1.WindowState, "#3");
1022                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#4");
1023                         } finally {
1024                                 child2.Dispose ();
1025                                 child1.Dispose ();
1026                                 main.Dispose ();
1027                                 main.Close();
1028                         }
1029                 }
1030
1031                 [Test]
1032                 public void MdiChild_WindowState2 ()
1033                 {
1034                         Form main = null, child1 = null, child2 = null;
1035                         try{
1036                                 
1037                                 main = new Form ();
1038                                 main.Name = "main";
1039                                 main.IsMdiContainer = true;
1040                                 main.Show ();
1041                                 
1042                                 child1 = new Form ();
1043                                 child1.Name = "child1";
1044                                 child1.MdiParent = main;
1045                                 child1.WindowState = FormWindowState.Maximized;
1046                                 child1.Show ();
1047                                 
1048                                 child2 = new Form ();
1049                                 child2.Name = "child2";
1050                                 child2.MdiParent = main;
1051                                 child2.Show();
1052
1053                                 
1054                                 Assert.AreEqual (FormWindowState.Normal, child1.WindowState, "#1");
1055                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#2");
1056                         
1057                         } finally {
1058                                 child2.Dispose ();
1059                                 child1.Dispose ();
1060                                 main.Dispose ();
1061                                 main.Close();
1062                         }
1063                 }
1064
1065                 [Test]
1066                 public void MdiChild_WindowState3 ()
1067                 {
1068                         Form main = null, child1 = null, child2 = null;
1069                         try {                           
1070                                 main = new Form ();
1071                                 main.IsMdiContainer = true;
1072                                 main.Show ();
1073                                 
1074                                 child1 = new Form ();
1075                                 child1.MdiParent = main;
1076                                 child1.Show ();
1077                                 
1078                                 child2 = new Form ();
1079                                 child2.MdiParent = main;
1080                                 child2.WindowState = FormWindowState.Maximized;
1081                                 child2.Show();
1082                                 
1083                                 Assert.AreEqual (FormWindowState.Normal, child1.WindowState, "#1");
1084                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#2");
1085                                 
1086                         } finally {
1087                                 child2.Dispose ();
1088                                 child1.Dispose ();
1089                                 main.Dispose ();
1090                                 main.Close();
1091                         }
1092                 }
1093
1094                 [Test]
1095                 public void MdiChild_WindowState4 ()
1096                 {
1097                         Form main = null, child1 = null, child2 = null;
1098                         try {                           
1099                                 main = new Form ();
1100                                 main.IsMdiContainer = true;
1101                                 main.Show ();
1102                                 
1103                                 child1 = new Form ();
1104                                 child1.MdiParent = main;
1105                                 child1.WindowState = FormWindowState.Maximized;
1106                                 child1.Show ();
1107                                 
1108                                 child2 = new Form ();
1109                                 child2.MdiParent = main;
1110                                 child2.WindowState = FormWindowState.Maximized;
1111
1112                                 Assert.AreEqual (FormWindowState.Maximized, child1.WindowState, "#1");
1113                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#2");
1114
1115                                 child2.Show();
1116                                 
1117                                 Assert.AreEqual (FormWindowState.Normal, child1.WindowState, "#3");
1118                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#4");
1119                                 
1120                                 child2.WindowState = FormWindowState.Normal;
1121
1122                                 Assert.AreEqual (FormWindowState.Normal, child1.WindowState, "#5");
1123                                 Assert.AreEqual (FormWindowState.Normal, child2.WindowState, "#6");
1124                         } finally {
1125                                 child2.Dispose ();
1126                                 child1.Dispose ();
1127                                 main.Dispose ();
1128                                 main.Close();
1129                         }
1130                 }
1131
1132                 [Test]
1133                 public void MdiChild_WindowState5 ()
1134                 {
1135                         Form main = null, child1 = null, child2 = null;
1136                         try {                           
1137                                 main = new Form ();
1138                                 main.Name = "main";
1139                                 main.IsMdiContainer = true;
1140                                 main.Show ();
1141                                 
1142                                 child1 = new Form ();
1143                                 child1.Name = "child1";
1144                                 child1.MdiParent = main;
1145                                 child1.WindowState = FormWindowState.Maximized;
1146                                 child1.Show ();
1147                                 
1148                                 child2 = new Form ();
1149                                 child2.Name = "child2";
1150                                 child2.MdiParent = main;
1151                                 child2.WindowState = FormWindowState.Maximized;
1152                                 
1153                                 Assert.AreEqual (FormWindowState.Maximized, child1.WindowState, "#1");
1154                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#2");
1155
1156                                 child2.Show();
1157
1158                                 Assert.AreEqual (FormWindowState.Normal, child1.WindowState, "#3");
1159                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#4");
1160
1161                                 child1.Activate ();
1162
1163                                 Assert.AreEqual (FormWindowState.Maximized, child1.WindowState, "#5");
1164                                 Assert.AreEqual (FormWindowState.Normal, child2.WindowState, "#6");
1165                         } finally {
1166                                 child2.Dispose ();
1167                                 child1.Dispose ();
1168                                 main.Dispose ();
1169                                 main.Close();
1170                         }
1171                 }
1172
1173                 [Test]
1174                 public void MdiChild_WindowState6 ()
1175                 {
1176                         Form main = null, child1 = null, child2 = null;
1177                         try {
1178                                 
1179                                 main = new Form ();
1180                                 main.Name = "main";
1181                                 main.IsMdiContainer = true;
1182                                 main.Show ();
1183                                 
1184                                 child1 = new Form ();
1185                                 child1.Name = "child1";
1186                                 child1.MdiParent = main;
1187                                 child1.WindowState = FormWindowState.Minimized;
1188                                 child1.Show ();
1189                                 
1190                                 child2 = new Form ();
1191                                 child2.Name = "child2";
1192                                 child2.MdiParent = main;
1193                                 child2.WindowState = FormWindowState.Maximized;
1194
1195                                 Assert.AreEqual (FormWindowState.Minimized, child1.WindowState, "#1");
1196                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#2");
1197
1198                                 child2.Show();
1199                                 
1200                                 Assert.AreEqual (FormWindowState.Minimized, child1.WindowState, "#3");
1201                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#4");
1202                                 
1203                                 child1.Activate ();
1204
1205                                 Assert.AreEqual (FormWindowState.Maximized, child1.WindowState, "#5");
1206                                 Assert.AreEqual (FormWindowState.Normal, child2.WindowState, "#6");
1207                                 
1208                                 child2.Activate ();
1209
1210                                 Assert.AreEqual (FormWindowState.Minimized, child1.WindowState, "#7");
1211                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#8");
1212                         } finally {
1213                                 child2.Dispose ();
1214                                 child1.Dispose ();
1215                                 main.Dispose ();
1216                                 main.Close();
1217                         }
1218                 }
1219         }
1220 }