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