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