* EventLogger.cs: Add CountEvents.
[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                                         FormClosed += new FormClosedEventHandler (ChildForm_FormClosed);
153                                         FormClosing += new FormClosingEventHandler (ChildForm_FormClosing);
154                                 }
155
156                                 void ChildForm_FormClosing (object sender, FormClosingEventArgs e)
157                                 {
158                                         Assert.IsNotNull (MdiParent, "ChildForm_FormClosing");
159                                 }
160
161                                 void ChildForm_FormClosed (object sender, FormClosedEventArgs e)
162                                 {
163                                         Assert.IsNotNull (MdiParent, "ChildForm_FormClosed");
164                                 }
165
166                                 void ChildForm_Closing (object sender, CancelEventArgs e)
167                                 {
168                                         Assert.IsNotNull (MdiParent, "ChildForm_Closing");
169                                 }
170
171                                 void ChildForm_Closed (object sender, EventArgs e)
172                                 {
173                                         Assert.IsNotNull (MdiParent, "ChildForm_Closed");
174                                 }
175                         
176                                 protected override void OnClosed (EventArgs e)
177                                 {
178                                         Assert.IsNotNull (MdiParent, "OnClosed 1");
179                                         base.OnClosed (e);
180                                         Assert.IsNotNull (MdiParent, "OnClosed 2");
181                                 }
182
183                                 protected override void OnClosing (CancelEventArgs e)
184                                 {
185                                         Assert.IsNotNull (MdiParent, "OnClosing 1");
186                                         base.OnClosing (e);
187                                         Assert.IsNotNull (MdiParent, "OnClosing 2");
188                                 }
189                                 
190                         }
191                         [Test]
192                         public void Test () {
193                                 using (Form main = new Form ()) {
194                                         main.IsMdiContainer = true;
195                                         main.ShowInTaskbar = false;
196                                         main.Visible = true;
197
198                                         ChildForm child = new ChildForm ();
199                                         EventLogger log = new EventLogger (child);
200                                         child.MdiParent = main;
201                                         child.Visible = true;
202                                         child.Close ();
203                                         
204                                         Assert.AreEqual (1, log.CountEvents ("Closed"), "#01");
205                                         Assert.AreEqual (1, log.CountEvents ("Closing"), "#02");
206                                         Assert.IsNull (child.MdiParent, "#03");
207                                         Assert.AreEqual (0, main.MdiChildren.Length, "#04");            
208                                         Assert.AreEqual (false, child.IsMdiChild, "#05");               
209                                 }
210                         }
211                 }
212                 
213                 [Category("NotWorking")]
214                 [Test]
215                 public void StartLocationTest1 ()
216                 {
217                         SetUp (false, false);
218
219                         child1.MdiParent = main;
220                         child2.MdiParent = main;
221
222                         child1.Visible = true;
223                         child2.Visible = true;
224
225                         main.Show ();
226                         
227                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
228                         Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#2");
229
230                         TearDown ();
231                 }
232
233                 [Category("NotWorking")]
234                 [Test]
235                 public void StartLocationTest2 ()
236                 {
237                         SetUp (false, false);
238
239                         child1.MdiParent = main;
240                         child2.MdiParent = main;
241
242                         child1.StartPosition = FormStartPosition.Manual;
243
244                         child1.Visible = true;
245                         child2.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
252                         TearDown ();
253                 }
254
255
256                 [Category("NotWorking")]
257                 [Test]
258                 public void StartLocationTest3 ()
259                 {
260                         SetUp (false, false);
261
262                         child1.MdiParent = main;
263                         child2.MdiParent = main;
264
265                         child2.StartPosition = FormStartPosition.Manual;
266
267                         child1.Visible = true;
268                         child2.Visible = true;
269
270                         main.Show ();
271                         
272                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
273                         Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#2");
274
275                         TearDown ();
276                 }
277
278                 [Category("NotWorking")]
279                 [Test]
280                 public void StartLocationTest4 ()
281                 {
282                         SetUp (false, false);
283
284                         child1.MdiParent = main;
285                         child2.MdiParent = main;
286
287                         child1.StartPosition = FormStartPosition.Manual;
288                         child2.StartPosition = FormStartPosition.Manual;
289
290                         child1.Visible = true;
291                         child2.Visible = true;
292
293                         main.Show ();
294                         
295                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
296                         Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#2");
297
298                         TearDown ();
299                 }
300
301                 [Category("NotWorking")]
302                 [Test]
303                 public void StartLocationTest5 ()
304                 {
305                         SetUp (false, false);
306
307                         child1.MdiParent = main;
308                         child2.MdiParent = main;
309                         child3.MdiParent = main;
310
311                         child2.StartPosition = FormStartPosition.Manual;
312
313                         child1.Visible = true;
314                         child2.Visible = true;
315                         child3.Visible = true;
316
317                         main.Show ();
318                         
319                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
320                         Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#2");
321                         Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
322
323                         TearDown ();
324                 }
325
326                 [Category("NotWorking")]
327                 [Test]
328                 public void StartLocationTest6 ()
329                 {
330                         SetUp (false, false);
331
332                         child1.MdiParent = main;
333                         child2.MdiParent = main;
334                         child3.MdiParent = main;
335
336                         child2.StartPosition = FormStartPosition.CenterParent;
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=22,Y=22}", 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 StartLocationTest7 ()
354                 {
355                         SetUp (false, false);
356
357                         child1.MdiParent = main;
358                         child2.MdiParent = main;
359                         child3.MdiParent = main;
360
361                         child2.StartPosition = FormStartPosition.CenterScreen;
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=0,Y=0}", 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 StartLocationTest8 ()
379                 {
380                         SetUp (false, false);
381
382                         child1.MdiParent = main;
383                         child2.MdiParent = main;
384                         child3.MdiParent = main;
385
386                         child2.StartPosition = FormStartPosition.WindowsDefaultBounds;
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=22,Y=22}", 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 StartLocationTest9 ()
404                 {
405                         SetUp (false, false);
406
407                         child1.MdiParent = main;
408                         child2.MdiParent = main;
409                         child3.MdiParent = main;
410
411                         child2.StartPosition = FormStartPosition.WindowsDefaultLocation;
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 StartLocationTest10 ()
429                 {
430                         SetUp (false, false);
431
432                         child1.MdiParent = main;
433                         child2.MdiParent = main;
434                         child3.MdiParent = main;
435
436                         child2.StartPosition = FormStartPosition.Manual;
437                         child2.Location = new Point (123, 123);
438
439                         child1.Visible = true;
440                         child2.Visible = true;
441                         child3.Visible = true;
442
443                         main.Show ();
444                         
445                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
446                         Assert.AreEqual ("{X=123,Y=123}", child2.Location.ToString (), "#2");
447                         Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
448
449                         TearDown ();
450                 }
451
452                 [Category("NotWorking")]
453                 [Test]
454                 public void StartLocationTest11 ()
455                 {
456                         SetUp (false, false);
457
458                         child1.MdiParent = main;
459                         child2.MdiParent = main;
460                         child3.MdiParent = main;
461
462                         child2.Location = new Point (123, 123);
463
464                         Assert.AreEqual ("{X=123,Y=123}", child2.Location.ToString (), "#0");
465
466                         child1.Visible = true;
467                         child2.Visible = true;
468                         child3.Visible = true;
469
470                         Assert.AreEqual ("{X=123,Y=123}", child2.Location.ToString (), "#0");
471
472                         main.Show ();
473                         
474                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
475                         Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#2");
476                         Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
477
478                         TearDown ();
479                 }
480
481                 [Category("NotWorking")]
482                 [Test]
483                 public void StartLocationTest12 ()
484                 {
485                         SetUp (false, false);
486
487                         child1.MdiParent = main;
488                         child2.MdiParent = main;
489                         child3.MdiParent = main;
490
491                         child1.Visible = true;
492                         //child2.Visible = true;
493                         child3.Visible = true;
494
495                         main.Show ();
496                         
497                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
498                         Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#2");
499                         Assert.AreEqual ("{X=22,Y=22}", child3.Location.ToString (), "#3");
500
501                         child2.Visible = true;
502                         Assert.AreEqual ("{X=44,Y=44}", child2.Location.ToString (), "#4");
503
504                         child1.Visible = false;
505                         child1.Visible = true;
506                         Assert.AreEqual ("{X=66,Y=66}", child1.Location.ToString (), "#1");
507
508                         TearDown ();
509                 }
510
511                 [Category("NotWorking")]
512                 [Test]
513                 public void StartLocationTest13 ()
514                 {
515                         SetUp (false, false);
516
517                         child1.MdiParent = main;
518                         child2.MdiParent = main;
519                         child3.MdiParent = main;
520
521                         child1.Visible = true;
522                         //child2.Visible = true;
523                         child3.Visible = true;
524
525                         main.Show ();
526                         
527                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
528                         Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#2");
529                         Assert.AreEqual ("{X=22,Y=22}", child3.Location.ToString (), "#3");
530
531                         child2.Visible = true;
532                         Assert.AreEqual ("{X=44,Y=44}", child2.Location.ToString (), "#4");
533
534                         child1.Visible = false;
535                         child1.Visible = true;
536                         Assert.AreEqual ("{X=66,Y=66}", child1.Location.ToString (), "#5");
537                         
538                         child3.Visible = true;
539                         Assert.AreEqual ("{X=22,Y=22}", child3.Location.ToString (), "#6");
540
541                         // MDI Child size does not seem to affect layout.
542                         // Size 500,500
543                         child2.Visible = false;
544                         child2.Size = new Size (500, 500);
545                         child2.Visible = true;
546                         Assert.AreEqual ("{X=88,Y=88}", child2.Location.ToString (), "#7");
547
548                         child2.Visible = false;
549                         child2.Visible = true;
550                         Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#8");
551                         
552                         child2.Visible = false;
553                         child2.Visible = true;
554                         Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#9");
555
556                         // Size 5,5
557                         child2.Visible = false;
558                         child2.Size = new Size (5, 5);
559                         child2.Visible = true;
560                         Assert.AreEqual ("{X=44,Y=44}", child2.Location.ToString (), "#10");
561
562                         child2.Visible = false;
563                         child2.Visible = true;
564                         Assert.AreEqual ("{X=66,Y=66}", child2.Location.ToString (), "#11");
565                         
566                         child2.Visible = false;
567                         child2.Visible = true;
568                         Assert.AreEqual ("{X=88,Y=88}", child2.Location.ToString (), "#12");
569
570                         child2.Visible = false;
571                         child2.Visible = true;
572                         Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#13");
573
574                         TearDown ();
575                 }
576
577                 [Category("NotWorking")]
578                 [Test]
579                 public void StartLocationTest14 ()
580                 {
581                         SetUp (false, false);
582
583                         child1.MdiParent = main;
584                         child2.MdiParent = main;
585                         child3.MdiParent = main;
586
587                         child2.StartPosition = FormStartPosition.Manual;
588                         child2.Location = new Point (44, 44);
589                         child1.Visible = true;
590                         child2.Visible = true;
591                         child3.Visible = true;
592
593                         main.Show ();
594                         
595                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
596                         Assert.AreEqual ("{X=44,Y=44}", child2.Location.ToString (), "#2");
597                         Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
598
599                         child1.Visible = false;
600                         child1.Visible = true;
601                         Assert.AreEqual ("{X=66,Y=66}", child1.Location.ToString (), "#4");
602
603                         TearDown ();
604                 }
605
606                 [Category("NotWorking")]
607                 [Test]
608                 public void StartLocationTest15 ()
609                 {
610                         SetUp (false, false);
611
612                         child1.MdiParent = main;
613                         child2.MdiParent = main;
614                         child3.MdiParent = main;
615
616                         main.Show ();
617
618                         child1.Visible = true;
619                         child2.Visible = true;
620                         child2.Location = new Point (22, 44);
621                         child3.Visible = true;
622
623                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
624                         Assert.AreEqual ("{X=22,Y=44}", child2.Location.ToString (), "#2");
625                         Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
626
627                         child1.Visible = false;
628                         child1.Visible = true;
629                         Assert.AreEqual ("{X=66,Y=66}", child1.Location.ToString (), "#4");
630
631                         TearDown ();
632                 }
633
634                 [Category("NotWorking")]
635                 [Test]
636                 public void StartLocationTest16 ()
637                 {
638                         SetUp (false, false);
639
640                         child1.MdiParent = main;
641                         child2.MdiParent = main;
642                         child3.MdiParent = main;
643
644                         child1.Visible = true;
645                         child2.Visible = true;
646                         child2.Location = new Point (22, 44);
647                         child3.Visible = true;
648
649                         main.Show ();
650                         
651                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
652                         Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#2");
653                         Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
654
655                         child1.Visible = false;
656                         child1.Visible = true;
657                         Assert.AreEqual ("{X=66,Y=66}", child1.Location.ToString (), "#4");
658
659                         TearDown ();
660                 }
661                 
662                 [Category("NotWorking")]
663                 [Test]
664                 public void StartLocationTest17 ()
665                 {
666                         SetUp (false, false);
667
668                         child1.MdiParent = main;
669                         child2.MdiParent = main;
670                         child3.MdiParent = main;
671
672                         child1.Visible = true;
673                         child2.Visible = true;
674
675                         main.Show ();
676                         
677                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
678                         Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#2");
679                         Assert.AreEqual ("{X=0,Y=0}", child3.Location.ToString (), "#3");
680
681                         child2.Visible = false;
682                         child3.Visible = true;
683
684                         Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#4");
685
686                         TearDown ();
687                 }
688
689                 [Category("NotWorking")]
690                 [Test]
691                 public void StartLocationTest18 ()
692                 {
693                         SetUp (false, false);
694
695                         child1.MdiParent = main;
696                         child2.MdiParent = main;
697                         child3.MdiParent = main;
698
699                         child1.Visible = true;
700                         child2.Visible = true;
701
702                         main.Show ();
703                         
704                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
705                         Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#2");
706                         Assert.AreEqual ("{X=0,Y=0}", child3.Location.ToString (), "#3");
707
708                         child2.Visible = false;
709                         child2.Close ();
710                         child2.Dispose ();
711                         child2 = null;
712
713                         child3.Visible = true;
714
715                         Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#4");
716
717                         TearDown ();
718                 }
719
720                 [Category("NotWorking")]                
721                 [Test]
722                 public void StartLocationTest19 ()
723                 {
724                         SetUp (false, false);
725
726                         child1.MdiParent = main;
727                         child2.MdiParent = main;
728                         child3.MdiParent = main;
729
730                         child1.Visible = true;
731                         child2.Visible = true;
732                         child3.Visible = true;
733
734                         child1.StartPosition = FormStartPosition.Manual;
735                         child2.StartPosition = FormStartPosition.Manual;
736                         child3.StartPosition = FormStartPosition.Manual;
737
738                         main.Show ();
739                         
740                         Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
741                         Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#2");
742                         Assert.AreEqual ("{X=0,Y=0}", child3.Location.ToString (), "#3");
743
744                         TearDown ();
745                 }
746
747                 [Test]
748                 public void StartSizeTest1 ()
749                 {
750                         SetUp (false, false);
751
752                         child1.MdiParent = main;
753                         child2.MdiParent = main;
754                         child3.MdiParent = main;
755
756                         main.Show ();
757                         
758                         Assert.AreEqual ("{Width=300, Height=300}", main.Size.ToString (), "#1");
759                         Assert.AreEqual ("{Width=300, Height=300}", child1.Size.ToString (), "#2");
760                         Assert.AreEqual ("{Width=300, Height=300}", child2.Size.ToString (), "#3");
761                         Assert.AreEqual ("{Width=300, Height=300}", child3.Size.ToString (), "#4");
762
763                         child1.Visible = true;
764                         child2.Visible = true;
765                         child3.Visible = true;
766
767                         Assert.AreEqual ("{Width=300, Height=300}", main.Size.ToString (), "#1");
768                         Assert.AreEqual ("{Width=300, Height=300}", child1.Size.ToString (), "#2");
769                         Assert.AreEqual ("{Width=300, Height=300}", child2.Size.ToString (), "#3");
770                         Assert.AreEqual ("{Width=300, Height=300}", child3.Size.ToString (), "#4");
771
772                         TearDown ();
773                 }
774
775                 [Test]
776                 public void IsMdiContainerTest ()
777                 {
778                         SetUp (false, true);
779
780                         main.Visible = true;
781                         main.Visible = false;
782                         
783                         main.IsMdiContainer = true;
784                         
785                         child1.MdiParent = main;
786
787                         main.IsMdiContainer = false;
788
789                         Assert.AreSame (null, main.ActiveMdiChild, "#1");
790
791                         main.Visible = true;
792                         Assert.AreSame (null, main.ActiveMdiChild, "#2");
793                         
794                         Assert.AreSame (null, main.MdiParent, "#3");
795
796                         TearDown ();
797                 }
798
799                 [Category("NotWorking")]
800                 [Test]
801                 [ExpectedException(typeof(ArgumentException), "Cannot add a top level control to a control.")]
802                 public void AddToControlsTest ()
803                 {
804                         SetUp (false, true);
805                         
806                         main.Visible = true;
807                         main.Visible = false;
808
809                         main.Controls.Add (child1);
810
811                         TearDown ();
812                 }
813
814                 [Test]
815                 public void Text ()
816                 {
817                         Form main = null, child1 = null, child2 = null, child3 = null;
818
819                         main = new Form ();
820                         main.IsMdiContainer = true;
821                         main.Name = "main";
822                         main.Text = main.Name;
823                         main.Show();
824                         
825                         Assert.AreEqual ("main", main.Text, "#1");
826                         
827                         child1 = new Form ();
828                         child1.Name = "child1";
829                         child1.MdiParent = main;
830                         child1.Text = child1.Name;
831                         child1.WindowState = FormWindowState.Maximized;
832                         child1.Show ();
833                         
834                         Assert.AreEqual ("main - [child1]", main.Text, "#2");
835                         
836                         child2 = new Form ();
837                         child2.Name = "child2";
838                         child1.MdiParent = main;
839                         child2.Text = string.Empty;
840                         child2.WindowState = FormWindowState.Maximized;
841                         child2.Show();
842                         
843                         Assert.AreEqual ("main - [child1]", main.Text, "#3");
844                         
845                         child1.Activate();
846                         Assert.AreEqual ("main - [child1]", main.Text, "#4");
847                         
848                         child1.WindowState = FormWindowState.Minimized;
849                         Assert.AreEqual ("main", main.Text, "#5");
850                         
851                         child2.Activate ();
852                         Assert.AreEqual ("main", main.Text, "#6");
853                         
854                         child2.WindowState = FormWindowState.Maximized;
855                         Assert.AreEqual ("main", main.Text, "#7");
856
857                         child3 = new Form ();
858                         child3.Name = "child3";
859                         child3.MdiParent = main;
860                         child3.Text = child3.Name;
861                         child3.WindowState = FormWindowState.Maximized;
862                         child3.Show ();
863
864                         Assert.AreEqual ("main - [child3]", main.Text, "#8");
865                         child3.WindowState = FormWindowState.Normal;
866                         Assert.AreEqual ("main", main.Text, "#9");
867
868                         main.Text = string.Empty;
869                         child3.WindowState = FormWindowState.Maximized;
870                         Assert.AreEqual (" - [child3]", main.Text, "#10");
871
872                         child3.Text = string.Empty;
873                         Assert.AreEqual (string.Empty, main.Text, "#11");
874
875                         child3.Dispose ();
876                         child2.Dispose ();
877                         child1.Dispose ();
878                         main.Dispose ();
879                 }
880
881                 [Test]
882                 public void Text_MdiContainer ()
883                 {
884                         Form main = new Form ();
885                         main.ShowInTaskbar = false;
886                         main.Text = "main";
887                         main.IsMdiContainer = true;
888                         main.Show ();
889
890                         Assert.AreEqual ("main", main.Text, "#1");
891
892                         Form child = new Form ();
893                         child.Name = "child";
894                         child.MdiParent = main;
895                         child.Text = child.Name;
896                         child.WindowState = FormWindowState.Maximized;
897                         child.Show ();
898
899                         Assert.AreEqual ("main - [child]", main.Text, "#2");
900
901                         main.Dispose ();
902                 }
903
904                 [Test] // bug 80038
905                 public void Text_ChildClose ()
906                 {
907                         Form main = new Form ();
908                         main.ShowInTaskbar = false;
909                         main.IsMdiContainer = true;
910                         main.Text = "main";
911                         main.Show ();
912
913                         Assert.AreEqual ("main", main.Text, "#1");
914
915                         Form child = new Form ();
916                         child.Name = "child";
917                         child.MdiParent = main;
918                         child.Text = child.Name;
919                         child.WindowState = FormWindowState.Maximized;
920                         child.Show ();
921
922                         Assert.AreEqual ("main - [child]", main.Text, "#2");
923
924                         child.Close ();
925                         Assert.AreEqual ("main", main.Text, "#3");
926
927                         main.Dispose ();
928                 }
929
930                 [Test]
931                 public void Text_Maximized ()
932                 {
933                         Form main = new Form ();
934                         main.IsMdiContainer = true;
935                         main.Name = "main";
936                         main.Text = main.Name;
937                         main.Show ();
938
939                         Assert.AreEqual ("main", main.Text, "#1");
940
941                         Form child1 = new Form ();
942                         child1.Name = "child1";
943                         child1.MdiParent = main;
944                         child1.Text = child1.Name;
945                         child1.WindowState = FormWindowState.Maximized;
946                         child1.Show ();
947
948                         Assert.AreEqual ("main - [child1]", main.Text, "#2");
949
950                         Form child2 = new Form ();
951                         child2.Name = "child2";
952                         child2.MdiParent = main;
953                         child2.Text = child2.Name;
954                         child2.WindowState = FormWindowState.Maximized;
955                         child2.Show ();
956
957                         Assert.AreEqual ("main - [child2]", main.Text, "#3");
958
959                         child1.WindowState = FormWindowState.Maximized;
960
961                         Assert.AreEqual ("main - [child1]", main.Text, "#4");
962
963                         main.Dispose ();
964                 }
965                 
966                 [Test]
967                 [Category ("NotWorking")]
968                 public void TopLevelTest ()
969                 {
970                         Form main, child1;
971
972                         main = new Form ();
973                         main.IsMdiContainer = true;
974                         main.Name = "main";
975
976                         child1 = new Form ();
977                         child1.Name = "child1";
978                         Assert.AreEqual (true, child1.TopLevel, "#01");
979                         child1.MdiParent = main;
980                         Assert.AreEqual (false, child1.TopLevel, "#02");
981                         
982                         child1.Dispose ();
983                         main.Dispose ();
984                 }
985                 [Test]
986                 public void ActiveMdiChild ()
987                 {
988                         Form main, child1, child2;
989                         
990                         main = new Form ();
991                         main.IsMdiContainer = true;
992                         main.Name = "main";
993
994                         child1 = new Form ();
995                         child1.Name = "child1";
996                         child1.MdiParent = main;
997                         child1.WindowState = FormWindowState.Maximized;
998                         child1.Show ();
999                         
1000                         child2 = new Form ();
1001                         child2.Name = "child2";
1002                         child2.MdiParent = main;
1003                         child2.Show();
1004                         
1005                         Assert.IsNull (main.ActiveMdiChild, "#1");
1006
1007                         main.Show ();
1008                         Assert.AreSame (child2, main.ActiveMdiChild, "#2");
1009
1010                         child1.WindowState = FormWindowState.Maximized;
1011                         Assert.AreSame (child1, main.ActiveMdiChild, "#3");
1012
1013                         child2.WindowState = FormWindowState.Maximized;
1014                         Assert.AreSame (child2, main.ActiveMdiChild, "#4");
1015
1016                         main.Visible = false;
1017 #if NET_2_0
1018                         Assert.IsNull (main.ActiveMdiChild, "#5");
1019 #else
1020                         Assert.AreSame (child2, main.ActiveMdiChild, "#5");
1021 #endif
1022
1023                         child2.Dispose ();
1024                         child1.Dispose ();
1025                         main.Dispose ();
1026                         main.Close();
1027                 }
1028
1029                 [Test]
1030                 public void ActiveMdiChild2 ()
1031                 {
1032                         SetUp (false, false);
1033
1034                         child1.MdiParent = main;
1035                         child2.MdiParent = main;
1036
1037                         main.Show ();
1038                         child1.Show ();
1039                         child2.Show ();
1040                         
1041                         child1.Activate ();
1042                         child1.Visible = false;
1043                         
1044                         Assert.AreSame (child2, main.ActiveMdiChild, "#1");
1045
1046                         TearDown ();
1047                 }
1048
1049                 [Test]
1050                 public void ActiveMdiChild3 ()
1051                 {
1052                         SetUp (false, false);
1053                         
1054                         child1.MdiParent = main;
1055                         child2.MdiParent = main;
1056
1057                         main.Visible = true;
1058                         main.Visible = false;
1059
1060                         Assert.AreSame (null, main.ActiveMdiChild, "#1");
1061                         //child2.Visible = true; This will cause StackOverflowException on MS.
1062                         main.Visible = true;
1063                         Assert.AreSame (null, main.ActiveMdiChild, "#2");
1064
1065                         TearDown ();
1066                 }
1067                 [Test]
1068                 public void MdiChild_WindowState1 ()
1069                 {
1070                         Form main = null, child1 = null, child2 = null;
1071                         try {
1072                                 
1073                                 main = new Form ();
1074                                 main.IsMdiContainer = true;
1075                                 main.Name = "main";
1076
1077                                 child1 = new Form ();
1078                                 child1.Name = "child1";
1079                                 child1.Text = "child1";
1080                                 child1.MdiParent = main;
1081                                 child1.WindowState = FormWindowState.Maximized;
1082                                 child1.Show ();
1083                                 
1084                                 child2 = new Form ();
1085                                 child2.Name = "child2";
1086                                 child2.Text = "child2";
1087                                 child2.MdiParent = main;
1088                                 child2.Show();
1089                                 
1090                                 Assert.AreEqual (FormWindowState.Maximized, child1.WindowState, "#1");
1091                                 Assert.AreEqual (FormWindowState.Normal, child2.WindowState, "#2");
1092                                 main.Show ();
1093                                 Assert.AreEqual (FormWindowState.Normal, child1.WindowState, "#3");
1094                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#4");
1095                         } finally {
1096                                 child2.Dispose ();
1097                                 child1.Dispose ();
1098                                 main.Dispose ();
1099                                 main.Close();
1100                         }
1101                 }
1102
1103                 [Test]
1104                 public void MdiChild_WindowState2 ()
1105                 {
1106                         Form main = null, child1 = null, child2 = null;
1107                         try{
1108                                 
1109                                 main = new Form ();
1110                                 main.Name = "main";
1111                                 main.IsMdiContainer = true;
1112                                 main.Show ();
1113                                 
1114                                 child1 = new Form ();
1115                                 child1.Name = "child1";
1116                                 child1.MdiParent = main;
1117                                 child1.WindowState = FormWindowState.Maximized;
1118                                 child1.Show ();
1119                                 
1120                                 child2 = new Form ();
1121                                 child2.Name = "child2";
1122                                 child2.MdiParent = main;
1123                                 child2.Show();
1124
1125                                 
1126                                 Assert.AreEqual (FormWindowState.Normal, child1.WindowState, "#1");
1127                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#2");
1128                         
1129                         } finally {
1130                                 child2.Dispose ();
1131                                 child1.Dispose ();
1132                                 main.Dispose ();
1133                                 main.Close();
1134                         }
1135                 }
1136
1137                 [Test]
1138                 public void MdiChild_WindowState3 ()
1139                 {
1140                         Form main = null, child1 = null, child2 = null;
1141                         try {                           
1142                                 main = new Form ();
1143                                 main.IsMdiContainer = true;
1144                                 main.Show ();
1145                                 
1146                                 child1 = new Form ();
1147                                 child1.MdiParent = main;
1148                                 child1.Show ();
1149                                 
1150                                 child2 = new Form ();
1151                                 child2.MdiParent = main;
1152                                 child2.WindowState = FormWindowState.Maximized;
1153                                 child2.Show();
1154                                 
1155                                 Assert.AreEqual (FormWindowState.Normal, child1.WindowState, "#1");
1156                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#2");
1157                                 
1158                         } finally {
1159                                 child2.Dispose ();
1160                                 child1.Dispose ();
1161                                 main.Dispose ();
1162                                 main.Close();
1163                         }
1164                 }
1165
1166                 [Test]
1167                 public void MdiChild_WindowState4 ()
1168                 {
1169                         Form main = null, child1 = null, child2 = null;
1170                         try {                           
1171                                 main = new Form ();
1172                                 main.IsMdiContainer = true;
1173                                 main.Show ();
1174                                 
1175                                 child1 = new Form ();
1176                                 child1.MdiParent = main;
1177                                 child1.WindowState = FormWindowState.Maximized;
1178                                 child1.Show ();
1179                                 
1180                                 child2 = new Form ();
1181                                 child2.MdiParent = main;
1182                                 child2.WindowState = FormWindowState.Maximized;
1183
1184                                 Assert.AreEqual (FormWindowState.Maximized, child1.WindowState, "#1");
1185                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#2");
1186
1187                                 child2.Show();
1188                                 
1189                                 Assert.AreEqual (FormWindowState.Normal, child1.WindowState, "#3");
1190                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#4");
1191                                 
1192                                 child2.WindowState = FormWindowState.Normal;
1193
1194                                 Assert.AreEqual (FormWindowState.Normal, child1.WindowState, "#5");
1195                                 Assert.AreEqual (FormWindowState.Normal, child2.WindowState, "#6");
1196                         } finally {
1197                                 child2.Dispose ();
1198                                 child1.Dispose ();
1199                                 main.Dispose ();
1200                                 main.Close();
1201                         }
1202                 }
1203
1204                 [Test]
1205                 public void MdiChild_WindowState5 ()
1206                 {
1207                         Form main = null, child1 = null, child2 = null;
1208                         try {                           
1209                                 main = new Form ();
1210                                 main.Name = "main";
1211                                 main.IsMdiContainer = true;
1212                                 main.Show ();
1213                                 
1214                                 child1 = new Form ();
1215                                 child1.Name = "child1";
1216                                 child1.MdiParent = main;
1217                                 child1.WindowState = FormWindowState.Maximized;
1218                                 child1.Show ();
1219                                 
1220                                 child2 = new Form ();
1221                                 child2.Name = "child2";
1222                                 child2.MdiParent = main;
1223                                 child2.WindowState = FormWindowState.Maximized;
1224                                 
1225                                 Assert.AreEqual (FormWindowState.Maximized, child1.WindowState, "#1");
1226                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#2");
1227
1228                                 child2.Show();
1229
1230                                 Assert.AreEqual (FormWindowState.Normal, child1.WindowState, "#3");
1231                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#4");
1232
1233                                 child1.Activate ();
1234
1235                                 Assert.AreEqual (FormWindowState.Maximized, child1.WindowState, "#5");
1236                                 Assert.AreEqual (FormWindowState.Normal, child2.WindowState, "#6");
1237                         } finally {
1238                                 child2.Dispose ();
1239                                 child1.Dispose ();
1240                                 main.Dispose ();
1241                                 main.Close();
1242                         }
1243                 }
1244
1245                 [Test]
1246                 public void MdiChild_WindowState6 ()
1247                 {
1248                         Form main = null, child1 = null, child2 = null;
1249                         try {
1250                                 
1251                                 main = new Form ();
1252                                 main.Name = "main";
1253                                 main.IsMdiContainer = true;
1254                                 main.Show ();
1255                                 
1256                                 child1 = new Form ();
1257                                 child1.Name = "child1";
1258                                 child1.MdiParent = main;
1259                                 child1.WindowState = FormWindowState.Minimized;
1260                                 child1.Show ();
1261                                 
1262                                 child2 = new Form ();
1263                                 child2.Name = "child2";
1264                                 child2.MdiParent = main;
1265                                 child2.WindowState = FormWindowState.Maximized;
1266
1267                                 Assert.AreEqual (FormWindowState.Minimized, child1.WindowState, "#1");
1268                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#2");
1269
1270                                 child2.Show();
1271                                 
1272                                 Assert.AreEqual (FormWindowState.Minimized, child1.WindowState, "#3");
1273                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#4");
1274                                 
1275                                 child1.Activate ();
1276
1277                                 Assert.AreEqual (FormWindowState.Maximized, child1.WindowState, "#5");
1278                                 Assert.AreEqual (FormWindowState.Normal, child2.WindowState, "#6");
1279                                 
1280                                 child2.Activate ();
1281
1282                                 Assert.AreEqual (FormWindowState.Minimized, child1.WindowState, "#7");
1283                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#8");
1284                         } finally {
1285                                 child2.Dispose ();
1286                                 child1.Dispose ();
1287                                 main.Dispose ();
1288                                 main.Close();
1289                         }
1290                 }
1291         }
1292 }