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