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 using System.Threading;
18 
19 namespace MonoTests.System.Windows.Forms
20 {
21 	[TestFixture]
22 	public class MdiFormTest : TestHelper
23 	{
24 		private Form main;
25 		private Form child1;
26 		private Form child2;
27 		private Form child3;
28 
29 		[TearDown]
TearDown()30 		protected override void TearDown ()
31 		{
32 			if (main != null)
33 				main.Dispose ();
34 			if (child1 != null)
35 				child1.Dispose ();
36 			if (child2 != null)
37 				child2.Dispose ();
38 			if (child3 != null)
39 				child3.Dispose ();
40 			main = null;
41 			child1 = null;
42 			child2 = null;
43 			child3 = null;
44 			base.TearDown ();
45 		}
46 
47 		// No attribute here since this is supposed to be called from
48 		// each test directly, not by nunit.
SetUp(bool only_create, bool only_text)49 		void SetUp (bool only_create, bool only_text)
50 		{
51 			SetUp (only_create, only_text, false);
52 		}
53 
54 		// No attribute here since this is supposed to be called from
55 		// each test directly, not by nunit.
SetUp(bool only_create, bool only_text, bool set_parent)56 		public void SetUp (bool only_create, bool only_text, bool set_parent)
57 		{
58 			TearDown ();
59 
60 			main = new Form ();
61 			child1 = new Form ();
62 			child2 = new Form ();
63 			child3 = new Form ();
64 
65 			if (only_create)
66 				return;
67 
68 			main.Text = main.Name = "main";
69 			main.ShowInTaskbar = false;
70 			child1.Text = child1.Name = "child1";
71 			child2.Text = child2.Name = "child2";
72 			child3.Text = child3.Name = "child3";
73 
74 			if (only_text)
75 				return;
76 
77 			main.IsMdiContainer = true;
78 
79 			if (set_parent) {
80 				child1.MdiParent = main;
81 				child2.MdiParent = main;
82 				child3.MdiParent = main;
83 			}
84 		}
85 
86 		[Test]
DeactivatedEventTest()87 		public void DeactivatedEventTest ()
88 		{
89 			using (Form f = new Form ()) {
90 				Form c1 = new Form ();
91 				Form c2 = new Form ();
92 				EventLogger log1 = new EventLogger (c1);
93 				EventLogger log2 = new EventLogger (c2);
94 
95 				f.IsMdiContainer = true;
96 				f.ShowInTaskbar = false;
97 				c2.MdiParent = c1.MdiParent = f;
98 
99 				c1.Show ();
100 				c2.Show ();
101 				Assert.AreEqual (0, log1.CountEvents ("Deactivate"), "#A1");
102 				Assert.AreEqual (0, log2.CountEvents ("Deactivate"), "#A2");
103 
104 				f.Show ();
105 				Assert.AreEqual (1, log1.CountEvents ("Deactivate"), "#B1");
106 				Assert.AreEqual (0, log2.CountEvents ("Deactivate"), "#B2");
107 
108 				c1.Show ();
109 				c2.Show ();
110 				Assert.AreEqual (1, log1.CountEvents ("Deactivate"), "#C1");
111 				Assert.AreEqual (0, log2.CountEvents ("Deactivate"), "#C2");
112 
113 				c1.Activate ();
114 				Assert.AreEqual (1, log1.CountEvents ("Deactivate"), "#D1");
115 				Assert.AreEqual (1, log2.CountEvents ("Deactivate"), "#D2");
116 
117 				c1.Activate ();
118 				Assert.AreEqual (1, log1.CountEvents ("Deactivate"), "#E1");
119 				Assert.AreEqual (1, log2.CountEvents ("Deactivate"), "#E2");
120 
121 				c2.Activate ();
122 				Assert.AreEqual (2, log1.CountEvents ("Deactivate"), "#F1");
123 				Assert.AreEqual (1, log2.CountEvents ("Deactivate"), "#F2");
124 
125 				c1.Activate ();
126 				Assert.AreEqual (2, log1.CountEvents ("Deactivate"), "#G1");
127 				Assert.AreEqual (2, log2.CountEvents ("Deactivate"), "#G2");
128 			}
129 		}
130 
131 		[Test]
ActivatedEventTest()132 		public void ActivatedEventTest ()
133 		{
134 			using (Form f = new Form ()) {
135 				Form c1 = new Form ();
136 				Form c2 = new Form ();
137 				EventLogger log1 = new EventLogger (c1);
138 				EventLogger log2 = new EventLogger (c2);
139 
140 				f.IsMdiContainer = true;
141 				f.ShowInTaskbar = false;
142 				c2.MdiParent = c1.MdiParent = f;
143 
144 				c1.Show ();
145 				c2.Show ();
146 				Assert.AreEqual (0, log1.CountEvents ("Activated"), "#A1");
147 				Assert.AreEqual (0, log2.CountEvents ("Activated"), "#A2");
148 
149 				f.Show ();
150 				Assert.AreEqual (1, log1.CountEvents ("Activated"), "#B1");
151 				Assert.AreEqual (1, log2.CountEvents ("Activated"), "#B2");
152 
153 				c1.Show ();
154 				c2.Show ();
155 				Assert.AreEqual (1, log1.CountEvents ("Activated"), "#C1");
156 				Assert.AreEqual (1, log2.CountEvents ("Activated"), "#C2");
157 
158 				c1.Activate ();
159 				Assert.AreEqual (2, log1.CountEvents ("Activated"), "#D1");
160 				Assert.AreEqual (1, log2.CountEvents ("Activated"), "#D2");
161 
162 				c1.Activate ();
163 				Assert.AreEqual (2, log1.CountEvents ("Activated"), "#E1");
164 				Assert.AreEqual (1, log2.CountEvents ("Activated"), "#E2");
165 
166 				c2.Activate ();
167 				Assert.AreEqual (2, log1.CountEvents ("Activated"), "#F1");
168 				Assert.AreEqual (2, log2.CountEvents ("Activated"), "#F2");
169 
170 				c1.Activate ();
171 				Assert.AreEqual (3, log1.CountEvents ("Activated"), "#G1");
172 				Assert.AreEqual (2, log2.CountEvents ("Activated"), "#G2");
173 			}
174 		}
175 
176 		[Test]
ActiveControlTest()177 		public void ActiveControlTest ()
178 		{
179 			SetUp (false, false, true);
180 
181 			main.Show ();
182 
183 			Assert.IsNull (main.ActiveControl, "#01");
184 			child1.Visible = true;
185 			Assert.AreSame (child1, main.ActiveControl, "#02");
186 			child2.Visible = true;
187 			Assert.AreSame (child2, main.ActiveControl, "#03");
188 			child3.Visible = true;
189 			Assert.AreSame (child3, main.ActiveControl, "#04");
190 			TearDown ();
191 		}
192 
193 		[Test]
SelectNextControlTest()194 		public void SelectNextControlTest ()
195 		{
196 			SetUp (false, false, true);
197 
198 			main.Show ();
199 
200 			child1.Visible = true;
201 			child2.Visible = true;
202 			child3.Visible = true;
203 
204 			main.SelectNextControl (main.ActiveControl, true, false, true, true);
205 			Assert.AreSame (child1, main.ActiveControl, "#01");
206 			main.SelectNextControl (main.ActiveControl, true, false, true, true);
207 			Assert.AreSame (child2, main.ActiveControl, "#02");
208 			main.SelectNextControl (main.ActiveControl, true, false, true, true);
209 			Assert.AreSame (child3, main.ActiveControl, "#03");
210 
211 			TearDown ();
212 		}
213 
214 		[Test]
SelectPreviousControlTest()215 		public void SelectPreviousControlTest ()
216 		{
217 			SetUp (false, false, true);
218 
219 			main.Show ();
220 
221 			child1.Visible = true;
222 			child2.Visible = true;
223 			child3.Visible = true;
224 
225 			main.SelectNextControl (main.ActiveControl, false, false, true, true);
226 			Assert.AreSame (child2, main.ActiveControl, "#01");
227 			main.SelectNextControl (main.ActiveControl, false, false, true, true);
228 			Assert.AreSame (child1, main.ActiveControl, "#02");
229 			main.SelectNextControl (main.ActiveControl, false, false, true, true);
230 			Assert.AreSame (child3, main.ActiveControl, "#03");
231 
232 			TearDown ();
233 		}
234 
235 		[TestFixture]
236 		public class CloseTest
237 		{
238 			class ChildForm : Form
239 			{
ChildForm()240 				public ChildForm ()
241 				{
242 					Closed += new EventHandler (ChildForm_Closed);
243 					Closing += new CancelEventHandler (ChildForm_Closing);
244 					FormClosed += new FormClosedEventHandler (ChildForm_FormClosed);
245 					FormClosing += new FormClosingEventHandler (ChildForm_FormClosing);
246 				}
ChildForm_FormClosing(object sender, FormClosingEventArgs e)247 				void ChildForm_FormClosing (object sender, FormClosingEventArgs e)
248 				{
249 					Assert.IsNotNull (MdiParent, "ChildForm_FormClosing");
250 				}
251 
ChildForm_FormClosed(object sender, FormClosedEventArgs e)252 				void ChildForm_FormClosed (object sender, FormClosedEventArgs e)
253 				{
254 					Assert.IsNotNull (MdiParent, "ChildForm_FormClosed");
255 				}
ChildForm_Closing(object sender, CancelEventArgs e)256 				void ChildForm_Closing (object sender, CancelEventArgs e)
257 				{
258 					Assert.IsNotNull (MdiParent, "ChildForm_Closing");
259 				}
260 
ChildForm_Closed(object sender, EventArgs e)261 				void ChildForm_Closed (object sender, EventArgs e)
262 				{
263 					Assert.IsNotNull (MdiParent, "ChildForm_Closed");
264 				}
265 
OnClosed(EventArgs e)266 				protected override void OnClosed (EventArgs e)
267 				{
268 					Assert.IsNotNull (MdiParent, "OnClosed 1");
269 					base.OnClosed (e);
270 					Assert.IsNotNull (MdiParent, "OnClosed 2");
271 				}
272 
OnClosing(CancelEventArgs e)273 				protected override void OnClosing (CancelEventArgs e)
274 				{
275 					Assert.IsNotNull (MdiParent, "OnClosing 1");
276 					base.OnClosing (e);
277 					Assert.IsNotNull (MdiParent, "OnClosing 2");
278 				}
279 
280 			}
281 			[Test]
Test()282 			public void Test () {
283 				using (Form main = new Form ()) {
284 					main.IsMdiContainer = true;
285 					main.ShowInTaskbar = false;
286 					main.Visible = true;
287 
288 					ChildForm child = new ChildForm ();
289 					EventLogger log = new EventLogger (child);
290 					child.MdiParent = main;
291 					child.Visible = true;
292 					child.Close ();
293 
294 					Assert.AreEqual (1, log.CountEvents ("Closed"), "#01");
295 					Assert.AreEqual (1, log.CountEvents ("Closing"), "#02");
296 					Assert.IsNull (child.MdiParent, "#03");
297 					Assert.AreEqual (0, main.MdiChildren.Length, "#04");
298 					Assert.AreEqual (false, child.IsMdiChild, "#05");
299 				}
300 			}
301 		}
302 		[Test]
303 		[Category ("NotWorking")]
StartLocationTest()304 		public void StartLocationTest ()
305 		{
306 			SetUp (false, false);
307 
308 			child1.MdiParent = main;
309 			child2.MdiParent = main;
310 
311 			child1.Visible = true;
312 			child2.Visible = true;
313 
314 			main.Show ();
315 
316 			Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
317 			Assert.AreEqual (true, "{X=0,Y=0}" != child2.Location.ToString (), "#2");
318 
319 			TearDown ();
320 		}
321 
322 		[Test]
StartLocationTest2()323 		public void StartLocationTest2 ()
324 		{
325 			SetUp (false, false);
326 
327 			child1.MdiParent = main;
328 			child2.MdiParent = main;
329 
330 			child1.Visible = true;
331 			child2.Visible = true;
332 			child2.StartPosition = FormStartPosition.Manual;
333 			child2.Location = new Point(23, 34);
334 
335 			main.Show ();
336 
337 			Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
338 			Assert.AreEqual ("{X=23,Y=34}",child2.Location.ToString (), "#2");
339 
340 			TearDown ();
341 		}
342 
343 		[Test]
NewFormShouldAlsoBeMaximized()344 		public void NewFormShouldAlsoBeMaximized ()
345 		{
346 			Form parent = new Form ();
347 
348 			Form child1 = new Form ();
349 			Form child2 = new Form ();
350 
351 			parent.ShowInTaskbar = false;
352 			parent.IsMdiContainer = true;
353 			parent.ClientSize = new Size (300, 300);
354 
355 			parent.Show ();
356 
357 			child1.MdiParent = parent;
358 			child1.Show ();
359 
360 			child1.WindowState = FormWindowState.Maximized;
361 
362 			child2.MdiParent = parent;
363 			child2.ClientSize = new Size (100, 100);
364 			child2.Show ();
365 
366 			Assert.IsTrue (child2.Width > 200, "Width should be maximized");
367 			Assert.IsTrue (child2.Height > 200, "Height should be maximized");
368 
369 			parent.Dispose ();
370 		}
371 
372 		[Test]
RestoreWithMainMenuStrip()373 		public void RestoreWithMainMenuStrip ()
374 		{
375 			Form parent = new Form ();
376 
377 			Form child1 = new Form ();
378 
379 			parent.ShowInTaskbar = false;
380 			parent.IsMdiContainer = true;
381 			parent.ClientSize = new Size (500, 500);
382 
383 			MenuStrip ms = new MenuStrip ();
384 			ms.Items.Add (new ToolStripMenuItem ("main", null, new ToolStripMenuItem ("item1")));
385 			parent.Controls.Add (ms);
386 			parent.MainMenuStrip = ms;
387 
388 			parent.Show ();
389 
390 			child1.MdiParent = parent;
391 			child1.Show ();
392 
393 			Size s = child1.Size;
394 
395 			child1.WindowState = FormWindowState.Maximized;
396 			child1.WindowState = FormWindowState.Normal;
397 
398 			Assert.AreEqual (s, child1.Size, "A1");
399 
400 			parent.Dispose ();
401 		}
402 
403 		/* These tests are all failing on WinXP with XP Theme.
404 		 * offset seems to be 22,22 normally, and 22,29 with XP theme.
405 		 * Find a way to test this reliably.
406 		 * /
407 		[Category("NotWorking")]
408 		[Test]
409 		public void StartLocationTest1 ()
410 		{
411 			SetUp (false, false);
412 
413 			child1.MdiParent = main;
414 			child2.MdiParent = main;
415 
416 			child1.Visible = true;
417 			child2.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 
424 			TearDown ();
425 		}
426 
427 		[Category("NotWorking")]
428 		[Test]
429 		public void StartLocationTest2 ()
430 		{
431 			SetUp (false, false);
432 
433 			child1.MdiParent = main;
434 			child2.MdiParent = main;
435 
436 			child1.StartPosition = FormStartPosition.Manual;
437 
438 			child1.Visible = true;
439 			child2.Visible = true;
440 
441 			main.Show ();
442 
443 			Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
444 			Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#2");
445 
446 			TearDown ();
447 		}
448 
449 
450 		[Category("NotWorking")]
451 		[Test]
452 		public void StartLocationTest3 ()
453 		{
454 			SetUp (false, false);
455 
456 			child1.MdiParent = main;
457 			child2.MdiParent = main;
458 
459 			child2.StartPosition = FormStartPosition.Manual;
460 
461 			child1.Visible = true;
462 			child2.Visible = true;
463 
464 			main.Show ();
465 
466 			Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
467 			Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#2");
468 
469 			TearDown ();
470 		}
471 
472 		[Category("NotWorking")]
473 		[Test]
474 		public void StartLocationTest4 ()
475 		{
476 			SetUp (false, false);
477 
478 			child1.MdiParent = main;
479 			child2.MdiParent = main;
480 
481 			child1.StartPosition = FormStartPosition.Manual;
482 			child2.StartPosition = FormStartPosition.Manual;
483 
484 			child1.Visible = true;
485 			child2.Visible = true;
486 
487 			main.Show ();
488 
489 			Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
490 			Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#2");
491 
492 			TearDown ();
493 		}
494 
495 		[Category("NotWorking")]
496 		[Test]
497 		public void StartLocationTest5 ()
498 		{
499 			SetUp (false, false);
500 
501 			child1.MdiParent = main;
502 			child2.MdiParent = main;
503 			child3.MdiParent = main;
504 
505 			child2.StartPosition = FormStartPosition.Manual;
506 
507 			child1.Visible = true;
508 			child2.Visible = true;
509 			child3.Visible = true;
510 
511 			main.Show ();
512 
513 			Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
514 			Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#2");
515 			Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
516 
517 			TearDown ();
518 		}
519 
520 		[Category("NotWorking")]
521 		[Test]
522 		public void StartLocationTest6 ()
523 		{
524 			SetUp (false, false);
525 
526 			child1.MdiParent = main;
527 			child2.MdiParent = main;
528 			child3.MdiParent = main;
529 
530 			child2.StartPosition = FormStartPosition.CenterParent;
531 
532 			child1.Visible = true;
533 			child2.Visible = true;
534 			child3.Visible = true;
535 
536 			main.Show ();
537 
538 			Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
539 			Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#2");
540 			Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
541 
542 			TearDown ();
543 		}
544 
545 		[Category("NotWorking")]
546 		[Test]
547 		public void StartLocationTest7 ()
548 		{
549 			SetUp (false, false);
550 
551 			child1.MdiParent = main;
552 			child2.MdiParent = main;
553 			child3.MdiParent = main;
554 
555 			child2.StartPosition = FormStartPosition.CenterScreen;
556 
557 			child1.Visible = true;
558 			child2.Visible = true;
559 			child3.Visible = true;
560 
561 			main.Show ();
562 
563 			Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
564 			Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#2");
565 			Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
566 
567 			TearDown ();
568 		}
569 
570 		[Category("NotWorking")]
571 		[Test]
572 		public void StartLocationTest8 ()
573 		{
574 			SetUp (false, false);
575 
576 			child1.MdiParent = main;
577 			child2.MdiParent = main;
578 			child3.MdiParent = main;
579 
580 			child2.StartPosition = FormStartPosition.WindowsDefaultBounds;
581 
582 			child1.Visible = true;
583 			child2.Visible = true;
584 			child3.Visible = true;
585 
586 			main.Show ();
587 
588 			Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
589 			Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#2");
590 			Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
591 
592 			TearDown ();
593 		}
594 
595 		[Category("NotWorking")]
596 		[Test]
597 		public void StartLocationTest9 ()
598 		{
599 			SetUp (false, false);
600 
601 			child1.MdiParent = main;
602 			child2.MdiParent = main;
603 			child3.MdiParent = main;
604 
605 			child2.StartPosition = FormStartPosition.WindowsDefaultLocation;
606 
607 			child1.Visible = true;
608 			child2.Visible = true;
609 			child3.Visible = true;
610 
611 			main.Show ();
612 
613 			Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
614 			Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#2");
615 			Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
616 
617 			TearDown ();
618 		}
619 
620 		[Category("NotWorking")]
621 		[Test]
622 		public void StartLocationTest10 ()
623 		{
624 			SetUp (false, false);
625 
626 			child1.MdiParent = main;
627 			child2.MdiParent = main;
628 			child3.MdiParent = main;
629 
630 			child2.StartPosition = FormStartPosition.Manual;
631 			child2.Location = new Point (123, 123);
632 
633 			child1.Visible = true;
634 			child2.Visible = true;
635 			child3.Visible = true;
636 
637 			main.Show ();
638 
639 			Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
640 			Assert.AreEqual ("{X=123,Y=123}", child2.Location.ToString (), "#2");
641 			Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
642 
643 			TearDown ();
644 		}
645 
646 		[Category("NotWorking")]
647 		[Test]
648 		public void StartLocationTest11 ()
649 		{
650 			SetUp (false, false);
651 
652 			child1.MdiParent = main;
653 			child2.MdiParent = main;
654 			child3.MdiParent = main;
655 
656 			child2.Location = new Point (123, 123);
657 
658 			Assert.AreEqual ("{X=123,Y=123}", child2.Location.ToString (), "#0");
659 
660 			child1.Visible = true;
661 			child2.Visible = true;
662 			child3.Visible = true;
663 
664 			Assert.AreEqual ("{X=123,Y=123}", child2.Location.ToString (), "#0");
665 
666 			main.Show ();
667 
668 			Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
669 			Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#2");
670 			Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
671 
672 			TearDown ();
673 		}
674 
675 		[Category("NotWorking")]
676 		[Test]
677 		public void StartLocationTest12 ()
678 		{
679 			SetUp (false, false);
680 
681 			child1.MdiParent = main;
682 			child2.MdiParent = main;
683 			child3.MdiParent = main;
684 
685 			child1.Visible = true;
686 			//child2.Visible = true;
687 			child3.Visible = true;
688 
689 			main.Show ();
690 
691 			Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
692 			Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#2");
693 			Assert.AreEqual ("{X=22,Y=22}", child3.Location.ToString (), "#3");
694 
695 			child2.Visible = true;
696 			Assert.AreEqual ("{X=44,Y=44}", child2.Location.ToString (), "#4");
697 
698 			child1.Visible = false;
699 			child1.Visible = true;
700 			Assert.AreEqual ("{X=66,Y=66}", child1.Location.ToString (), "#1");
701 
702 			TearDown ();
703 		}
704 
705 		[Category("NotWorking")]
706 		[Test]
707 		public void StartLocationTest13 ()
708 		{
709 			SetUp (false, false);
710 
711 			child1.MdiParent = main;
712 			child2.MdiParent = main;
713 			child3.MdiParent = main;
714 
715 			child1.Visible = true;
716 			//child2.Visible = true;
717 			child3.Visible = true;
718 
719 			main.Show ();
720 
721 			Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
722 			Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#2");
723 			Assert.AreEqual ("{X=22,Y=22}", child3.Location.ToString (), "#3");
724 
725 			child2.Visible = true;
726 			Assert.AreEqual ("{X=44,Y=44}", child2.Location.ToString (), "#4");
727 
728 			child1.Visible = false;
729 			child1.Visible = true;
730 			Assert.AreEqual ("{X=66,Y=66}", child1.Location.ToString (), "#5");
731 
732 			child3.Visible = true;
733 			Assert.AreEqual ("{X=22,Y=22}", child3.Location.ToString (), "#6");
734 
735 			// MDI Child size does not seem to affect layout.
736 			// Size 500,500
737 			child2.Visible = false;
738 			child2.Size = new Size (500, 500);
739 			child2.Visible = true;
740 			Assert.AreEqual ("{X=88,Y=88}", child2.Location.ToString (), "#7");
741 
742 			child2.Visible = false;
743 			child2.Visible = true;
744 			Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#8");
745 
746 			child2.Visible = false;
747 			child2.Visible = true;
748 			Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#9");
749 
750 			// Size 5,5
751 			child2.Visible = false;
752 			child2.Size = new Size (5, 5);
753 			child2.Visible = true;
754 			Assert.AreEqual ("{X=44,Y=44}", child2.Location.ToString (), "#10");
755 
756 			child2.Visible = false;
757 			child2.Visible = true;
758 			Assert.AreEqual ("{X=66,Y=66}", child2.Location.ToString (), "#11");
759 
760 			child2.Visible = false;
761 			child2.Visible = true;
762 			Assert.AreEqual ("{X=88,Y=88}", child2.Location.ToString (), "#12");
763 
764 			child2.Visible = false;
765 			child2.Visible = true;
766 			Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#13");
767 
768 			TearDown ();
769 		}
770 
771 		[Category("NotWorking")]
772 		[Test]
773 		public void StartLocationTest14 ()
774 		{
775 			SetUp (false, false);
776 
777 			child1.MdiParent = main;
778 			child2.MdiParent = main;
779 			child3.MdiParent = main;
780 
781 			child2.StartPosition = FormStartPosition.Manual;
782 			child2.Location = new Point (44, 44);
783 			child1.Visible = true;
784 			child2.Visible = true;
785 			child3.Visible = true;
786 
787 			main.Show ();
788 
789 			Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
790 			Assert.AreEqual ("{X=44,Y=44}", child2.Location.ToString (), "#2");
791 			Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
792 
793 			child1.Visible = false;
794 			child1.Visible = true;
795 			Assert.AreEqual ("{X=66,Y=66}", child1.Location.ToString (), "#4");
796 
797 			TearDown ();
798 		}
799 
800 		[Category("NotWorking")]
801 		[Test]
802 		public void StartLocationTest15 ()
803 		{
804 			SetUp (false, false);
805 
806 			child1.MdiParent = main;
807 			child2.MdiParent = main;
808 			child3.MdiParent = main;
809 
810 			main.Show ();
811 
812 			child1.Visible = true;
813 			child2.Visible = true;
814 			child2.Location = new Point (22, 44);
815 			child3.Visible = true;
816 
817 			Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
818 			Assert.AreEqual ("{X=22,Y=44}", child2.Location.ToString (), "#2");
819 			Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
820 
821 			child1.Visible = false;
822 			child1.Visible = true;
823 			Assert.AreEqual ("{X=66,Y=66}", child1.Location.ToString (), "#4");
824 
825 			TearDown ();
826 		}
827 
828 		[Category("NotWorking")]
829 		[Test]
830 		public void StartLocationTest16 ()
831 		{
832 			SetUp (false, false);
833 
834 			child1.MdiParent = main;
835 			child2.MdiParent = main;
836 			child3.MdiParent = main;
837 
838 			child1.Visible = true;
839 			child2.Visible = true;
840 			child2.Location = new Point (22, 44);
841 			child3.Visible = true;
842 
843 			main.Show ();
844 
845 			Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
846 			Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#2");
847 			Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#3");
848 
849 			child1.Visible = false;
850 			child1.Visible = true;
851 			Assert.AreEqual ("{X=66,Y=66}", child1.Location.ToString (), "#4");
852 
853 			TearDown ();
854 		}
855 
856 		[Category("NotWorking")]
857 		[Test]
858 		public void StartLocationTest17 ()
859 		{
860 			SetUp (false, false);
861 
862 			child1.MdiParent = main;
863 			child2.MdiParent = main;
864 			child3.MdiParent = main;
865 
866 			child1.Visible = true;
867 			child2.Visible = true;
868 
869 			main.Show ();
870 
871 			Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
872 			Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#2");
873 			Assert.AreEqual ("{X=0,Y=0}", child3.Location.ToString (), "#3");
874 
875 			child2.Visible = false;
876 			child3.Visible = true;
877 
878 			Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#4");
879 
880 			TearDown ();
881 		}
882 
883 		[Category("NotWorking")]
884 		[Test]
885 		public void StartLocationTest18 ()
886 		{
887 			SetUp (false, false);
888 
889 			child1.MdiParent = main;
890 			child2.MdiParent = main;
891 			child3.MdiParent = main;
892 
893 			child1.Visible = true;
894 			child2.Visible = true;
895 
896 			main.Show ();
897 
898 			Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
899 			Assert.AreEqual ("{X=22,Y=22}", child2.Location.ToString (), "#2");
900 			Assert.AreEqual ("{X=0,Y=0}", child3.Location.ToString (), "#3");
901 
902 			child2.Visible = false;
903 			child2.Close ();
904 			child2.Dispose ();
905 			child2 = null;
906 
907 			child3.Visible = true;
908 
909 			Assert.AreEqual ("{X=44,Y=44}", child3.Location.ToString (), "#4");
910 
911 			TearDown ();
912 		}
913 
914 		[Category("NotWorking")]
915 		[Test]
916 		public void StartLocationTest19 ()
917 		{
918 			SetUp (false, false);
919 
920 			child1.MdiParent = main;
921 			child2.MdiParent = main;
922 			child3.MdiParent = main;
923 
924 			child1.Visible = true;
925 			child2.Visible = true;
926 			child3.Visible = true;
927 
928 			child1.StartPosition = FormStartPosition.Manual;
929 			child2.StartPosition = FormStartPosition.Manual;
930 			child3.StartPosition = FormStartPosition.Manual;
931 
932 			main.Show ();
933 
934 			Assert.AreEqual ("{X=0,Y=0}", child1.Location.ToString (), "#1");
935 			Assert.AreEqual ("{X=0,Y=0}", child2.Location.ToString (), "#2");
936 			Assert.AreEqual ("{X=0,Y=0}", child3.Location.ToString (), "#3");
937 
938 			TearDown ();
939 		}
940 */
941 		[Test]
StartSizeTest1()942 		public void StartSizeTest1 ()
943 		{
944 			SetUp (false, false);
945 
946 			child1.MdiParent = main;
947 			child2.MdiParent = main;
948 			child3.MdiParent = main;
949 
950 			main.Show ();
951 
952 			Assert.AreEqual ("{Width=300, Height=300}", main.Size.ToString (), "#1");
953 			Assert.AreEqual ("{Width=300, Height=300}", child1.Size.ToString (), "#2");
954 			Assert.AreEqual ("{Width=300, Height=300}", child2.Size.ToString (), "#3");
955 			Assert.AreEqual ("{Width=300, Height=300}", child3.Size.ToString (), "#4");
956 
957 			child1.Visible = true;
958 			child2.Visible = true;
959 			child3.Visible = true;
960 
961 			Assert.AreEqual ("{Width=300, Height=300}", main.Size.ToString (), "#1");
962 			Assert.AreEqual ("{Width=300, Height=300}", child1.Size.ToString (), "#2");
963 			Assert.AreEqual ("{Width=300, Height=300}", child2.Size.ToString (), "#3");
964 			Assert.AreEqual ("{Width=300, Height=300}", child3.Size.ToString (), "#4");
965 
966 			TearDown ();
967 		}
968 
969 		[Test]
IsMdiContainerTest()970 		public void IsMdiContainerTest ()
971 		{
972 			SetUp (false, true);
973 
974 			main.Visible = true;
975 			main.Visible = false;
976 
977 			main.IsMdiContainer = true;
978 
979 			child1.MdiParent = main;
980 
981 			main.IsMdiContainer = false;
982 
983 			Assert.AreSame (null, main.ActiveMdiChild, "#1");
984 
985 			main.Visible = true;
986 			Assert.AreSame (null, main.ActiveMdiChild, "#2");
987 
988 			Assert.AreSame (null, main.MdiParent, "#3");
989 
990 			TearDown ();
991 		}
992 
993 		[Category("NotWorking")]
994 		[Test]
995 		[ExpectedException(typeof(ArgumentException), ExpectedMessage = "Cannot add a top level control to a control.")]
AddToControlsTest()996 		public void AddToControlsTest ()
997 		{
998 			SetUp (false, true);
999 
1000 			main.Visible = true;
1001 			main.Visible = false;
1002 
1003 			main.Controls.Add (child1);
1004 
1005 			TearDown ();
1006 		}
1007 
1008 		[Test]
Text()1009 		public void Text ()
1010 		{
1011 			Form main = null, child1 = null, child2 = null, child3 = null;
1012 
1013 			main = new Form ();
1014 			main.IsMdiContainer = true;
1015 			main.Name = "main";
1016 			main.Text = main.Name;
1017 			main.Show();
1018 
1019 			Assert.AreEqual ("main", main.Text, "#1");
1020 
1021 			child1 = new Form ();
1022 			child1.Name = "child1";
1023 			child1.MdiParent = main;
1024 			child1.Text = child1.Name;
1025 			child1.WindowState = FormWindowState.Maximized;
1026 			child1.Show ();
1027 
1028 			Assert.AreEqual ("main - [child1]", main.Text, "#2");
1029 
1030 			child2 = new Form ();
1031 			child2.Name = "child2";
1032 			child1.MdiParent = main;
1033 			child2.Text = string.Empty;
1034 			child2.WindowState = FormWindowState.Maximized;
1035 			child2.Show();
1036 
1037 			Assert.AreEqual ("main - [child1]", main.Text, "#3");
1038 
1039 			child1.Activate();
1040 			Assert.AreEqual ("main - [child1]", main.Text, "#4");
1041 
1042 			child1.WindowState = FormWindowState.Minimized;
1043 			Assert.AreEqual ("main", main.Text, "#5");
1044 
1045 			child2.Activate ();
1046 			Assert.AreEqual ("main", main.Text, "#6");
1047 
1048 			child2.WindowState = FormWindowState.Maximized;
1049 			Assert.AreEqual ("main", main.Text, "#7");
1050 
1051 			child3 = new Form ();
1052 			child3.Name = "child3";
1053 			child3.MdiParent = main;
1054 			child3.Text = child3.Name;
1055 			child3.WindowState = FormWindowState.Maximized;
1056 			child3.Show ();
1057 
1058 			Assert.AreEqual ("main - [child3]", main.Text, "#8");
1059 			child3.WindowState = FormWindowState.Normal;
1060 			Assert.AreEqual ("main", main.Text, "#9");
1061 
1062 			main.Text = string.Empty;
1063 			child3.WindowState = FormWindowState.Maximized;
1064 			Assert.AreEqual (" - [child3]", main.Text, "#10");
1065 
1066 			child3.Text = string.Empty;
1067 			Assert.AreEqual (string.Empty, main.Text, "#11");
1068 
1069 			main.Close ();
1070 
1071 			child3.Dispose ();
1072 			child2.Dispose ();
1073 			child1.Dispose ();
1074 			main.Dispose ();
1075 		}
1076 
1077 		[Test]
Text_MdiContainer()1078 		public void Text_MdiContainer ()
1079 		{
1080 			Form main = new Form ();
1081 			main.ShowInTaskbar = false;
1082 			main.Text = "main";
1083 			main.IsMdiContainer = true;
1084 			main.Show ();
1085 
1086 			Assert.AreEqual ("main", main.Text, "#1");
1087 
1088 			Form child = new Form ();
1089 			child.Name = "child";
1090 			child.MdiParent = main;
1091 			child.Text = child.Name;
1092 			child.WindowState = FormWindowState.Maximized;
1093 			child.Show ();
1094 
1095 			Assert.AreEqual ("main - [child]", main.Text, "#2");
1096 
1097 			main.Dispose ();
1098 		}
1099 
1100 		[Test] // bug 80038
Text_ChildClose()1101 		public void Text_ChildClose ()
1102 		{
1103 			Form main = new Form ();
1104 			main.ShowInTaskbar = false;
1105 			main.IsMdiContainer = true;
1106 			main.Text = "main";
1107 			main.Show ();
1108 
1109 			Assert.AreEqual ("main", main.Text, "#1");
1110 
1111 			Form child = new Form ();
1112 			child.Name = "child";
1113 			child.MdiParent = main;
1114 			child.Text = child.Name;
1115 			child.WindowState = FormWindowState.Maximized;
1116 			child.Show ();
1117 
1118 			Assert.AreEqual ("main - [child]", main.Text, "#2");
1119 
1120 			child.Close ();
1121 			Assert.AreEqual ("main", main.Text, "#3");
1122 
1123 			main.Dispose ();
1124 		}
1125 
1126 		[Test]
Text_Maximized()1127 		public void Text_Maximized ()
1128 		{
1129 			Form main = new Form ();
1130 			main.IsMdiContainer = true;
1131 			main.Name = "main";
1132 			main.Text = main.Name;
1133 			main.Show ();
1134 
1135 			Assert.AreEqual ("main", main.Text, "#1");
1136 
1137 			Form child1 = new Form ();
1138 			child1.Name = "child1";
1139 			child1.MdiParent = main;
1140 			child1.Text = child1.Name;
1141 			child1.WindowState = FormWindowState.Maximized;
1142 			child1.Show ();
1143 
1144 			Assert.AreEqual ("main - [child1]", main.Text, "#2");
1145 
1146 			Form child2 = new Form ();
1147 			child2.Name = "child2";
1148 			child2.MdiParent = main;
1149 			child2.Text = child2.Name;
1150 			child2.WindowState = FormWindowState.Maximized;
1151 			child2.Show ();
1152 
1153 			Assert.AreEqual ("main - [child2]", main.Text, "#3");
1154 
1155 			child1.WindowState = FormWindowState.Maximized;
1156 
1157 			Assert.AreEqual ("main - [child1]", main.Text, "#4");
1158 
1159 			main.Dispose ();
1160 		}
1161 
1162 		[Test]
1163 		[Category ("NotWorking")]
TopLevelTest()1164 		public void TopLevelTest ()
1165 		{
1166 			Form main, child1;
1167 
1168 			main = new Form ();
1169 			main.IsMdiContainer = true;
1170 			main.Name = "main";
1171 
1172 			child1 = new Form ();
1173 			child1.Name = "child1";
1174 			Assert.AreEqual (true, child1.TopLevel, "#01");
1175 			child1.MdiParent = main;
1176 			Assert.AreEqual (false, child1.TopLevel, "#02");
1177 
1178 			child1.Dispose ();
1179 			main.Dispose ();
1180 		}
1181 		[Test]
ActiveMdiChild()1182 		public void ActiveMdiChild ()
1183 		{
1184 			Form main, child1, child2;
1185 
1186 			main = new Form ();
1187 			main.IsMdiContainer = true;
1188 			main.Name = "main";
1189 
1190 			child1 = new Form ();
1191 			child1.Name = "child1";
1192 			child1.MdiParent = main;
1193 			child1.WindowState = FormWindowState.Maximized;
1194 			child1.Show ();
1195 
1196 			child2 = new Form ();
1197 			child2.Name = "child2";
1198 			child2.MdiParent = main;
1199 			child2.Show();
1200 
1201 			Assert.IsNull (main.ActiveMdiChild, "#1");
1202 
1203 			main.Show ();
1204 			Assert.AreSame (child2, main.ActiveMdiChild, "#2");
1205 
1206 			child1.WindowState = FormWindowState.Maximized;
1207 			Assert.AreSame (child1, main.ActiveMdiChild, "#3");
1208 
1209 			child2.WindowState = FormWindowState.Maximized;
1210 			Assert.AreSame (child2, main.ActiveMdiChild, "#4");
1211 
1212 			main.Visible = false;
1213 			Assert.IsNull (main.ActiveMdiChild, "#5");
1214 
1215 			child2.Dispose ();
1216 			child1.Dispose ();
1217 			main.Dispose ();
1218 			main.Close();
1219 		}
1220 
1221 		[Test]
ActiveMdiChild2()1222 		public void ActiveMdiChild2 ()
1223 		{
1224 			SetUp (false, false);
1225 
1226 			child1.MdiParent = main;
1227 			child2.MdiParent = main;
1228 
1229 			main.Show ();
1230 			child1.Show ();
1231 			child2.Show ();
1232 
1233 			child1.Activate ();
1234 			child1.Visible = false;
1235 
1236 			Assert.AreSame (child2, main.ActiveMdiChild, "#1");
1237 
1238 			TearDown ();
1239 		}
1240 
1241 		[Test]
ActiveMdiChild3()1242 		public void ActiveMdiChild3 ()
1243 		{
1244 			SetUp (false, false);
1245 
1246 			child1.MdiParent = main;
1247 			child2.MdiParent = main;
1248 
1249 			main.Visible = true;
1250 			main.Visible = false;
1251 
1252 			Assert.AreSame (null, main.ActiveMdiChild, "#1");
1253 			//child2.Visible = true; This will cause StackOverflowException on MS.
1254 			main.Visible = true;
1255 			Assert.AreSame (null, main.ActiveMdiChild, "#2");
1256 
1257 			TearDown ();
1258 		}
1259 		[Test]
MdiChild_WindowState1()1260 		public void MdiChild_WindowState1 ()
1261 		{
1262 			Form main = null, child1 = null, child2 = null;
1263 			try {
1264 
1265 				main = new Form ();
1266 				main.IsMdiContainer = true;
1267 				main.Name = "main";
1268 
1269 				child1 = new Form ();
1270 				child1.Name = "child1";
1271 				child1.Text = "child1";
1272 				child1.MdiParent = main;
1273 				child1.WindowState = FormWindowState.Maximized;
1274 				child1.Show ();
1275 
1276 				child2 = new Form ();
1277 				child2.Name = "child2";
1278 				child2.Text = "child2";
1279 				child2.MdiParent = main;
1280 				child2.Show();
1281 
1282 				Assert.AreEqual (FormWindowState.Maximized, child1.WindowState, "#1");
1283 				Assert.AreEqual (FormWindowState.Normal, child2.WindowState, "#2");
1284 				main.Show ();
1285 				Assert.AreEqual (FormWindowState.Normal, child1.WindowState, "#3");
1286 				Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#4");
1287 			} finally {
1288 				child2.Dispose ();
1289 				child1.Dispose ();
1290 				main.Dispose ();
1291 				main.Close();
1292 			}
1293 		}
1294 
1295 		[Test]
MdiChild_WindowState2()1296 		public void MdiChild_WindowState2 ()
1297 		{
1298 			Form main = null, child1 = null, child2 = null;
1299 			try{
1300 
1301 				main = new Form ();
1302 				main.Name = "main";
1303 				main.IsMdiContainer = true;
1304 				main.Show ();
1305 
1306 				child1 = new Form ();
1307 				child1.Name = "child1";
1308 				child1.MdiParent = main;
1309 				child1.WindowState = FormWindowState.Maximized;
1310 				child1.Show ();
1311 
1312 				child2 = new Form ();
1313 				child2.Name = "child2";
1314 				child2.MdiParent = main;
1315 				child2.Show();
1316 
1317 
1318 				Assert.AreEqual (FormWindowState.Normal, child1.WindowState, "#1");
1319 				Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#2");
1320 
1321 			} finally {
1322 				child2.Dispose ();
1323 				child1.Dispose ();
1324 				main.Dispose ();
1325 				main.Close();
1326 			}
1327 		}
1328 
1329 		[Test]
MdiChild_WindowState3()1330 		public void MdiChild_WindowState3 ()
1331 		{
1332 			Form main = null, child1 = null, child2 = null;
1333 			try {
1334 				main = new Form ();
1335 				main.IsMdiContainer = true;
1336 				main.Show ();
1337 
1338 				child1 = new Form ();
1339 				child1.MdiParent = main;
1340 				child1.Show ();
1341 
1342 				child2 = new Form ();
1343 				child2.MdiParent = main;
1344 				child2.WindowState = FormWindowState.Maximized;
1345 				child2.Show();
1346 
1347 				Assert.AreEqual (FormWindowState.Normal, child1.WindowState, "#1");
1348 				Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#2");
1349 
1350 			} finally {
1351 				child2.Dispose ();
1352 				child1.Dispose ();
1353 				main.Dispose ();
1354 				main.Close();
1355 			}
1356 		}
1357 
1358 		[Test]
MdiChild_WindowState4()1359 		public void MdiChild_WindowState4 ()
1360 		{
1361 			Form main = null, child1 = null, child2 = null;
1362 			try {
1363 				main = new Form ();
1364 				main.IsMdiContainer = true;
1365 				main.Show ();
1366 
1367 				child1 = new Form ();
1368 				child1.MdiParent = main;
1369 				child1.WindowState = FormWindowState.Maximized;
1370 				child1.Show ();
1371 
1372 				child2 = new Form ();
1373 				child2.MdiParent = main;
1374 				child2.WindowState = FormWindowState.Maximized;
1375 
1376 				Assert.AreEqual (FormWindowState.Maximized, child1.WindowState, "#1");
1377 				Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#2");
1378 
1379 				child2.Show();
1380 
1381 				Assert.AreEqual (FormWindowState.Normal, child1.WindowState, "#3");
1382 				Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#4");
1383 
1384 				child2.WindowState = FormWindowState.Normal;
1385 
1386 				Assert.AreEqual (FormWindowState.Normal, child1.WindowState, "#5");
1387 				Assert.AreEqual (FormWindowState.Normal, child2.WindowState, "#6");
1388 			} finally {
1389 				child2.Dispose ();
1390 				child1.Dispose ();
1391 				main.Dispose ();
1392 				main.Close();
1393 			}
1394 		}
1395 
1396 		[Test]
MdiChild_WindowState5()1397 		public void MdiChild_WindowState5 ()
1398 		{
1399 			Form main = null, child1 = null, child2 = null;
1400 			try {
1401 				main = new Form ();
1402 				main.Name = "main";
1403 				main.IsMdiContainer = true;
1404 				main.Show ();
1405 
1406 				child1 = new Form ();
1407 				child1.Name = "child1";
1408 				child1.MdiParent = main;
1409 				child1.WindowState = FormWindowState.Maximized;
1410 				child1.Show ();
1411 
1412 				child2 = new Form ();
1413 				child2.Name = "child2";
1414 				child2.MdiParent = main;
1415 				child2.WindowState = FormWindowState.Maximized;
1416 
1417 				Assert.AreEqual (FormWindowState.Maximized, child1.WindowState, "#1");
1418 				Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#2");
1419 
1420 				child2.Show();
1421 
1422 				Assert.AreEqual (FormWindowState.Normal, child1.WindowState, "#3");
1423 				Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#4");
1424 
1425 				child1.Activate ();
1426 
1427 				Assert.AreEqual (FormWindowState.Maximized, child1.WindowState, "#5");
1428 				Assert.AreEqual (FormWindowState.Normal, child2.WindowState, "#6");
1429 			} finally {
1430 				child2.Dispose ();
1431 				child1.Dispose ();
1432 				main.Dispose ();
1433 				main.Close();
1434 			}
1435 		}
1436 
1437 		[Test]
MdiChild_WindowState6()1438 		public void MdiChild_WindowState6 ()
1439 		{
1440 			Form main = null, child1 = null, child2 = null;
1441 			try {
1442 
1443 				main = new Form ();
1444 				main.Name = "main";
1445 				main.IsMdiContainer = true;
1446 				main.Show ();
1447 
1448 				child1 = new Form ();
1449 				child1.Name = "child1";
1450 				child1.MdiParent = main;
1451 				child1.WindowState = FormWindowState.Minimized;
1452 				child1.Show ();
1453 
1454 				child2 = new Form ();
1455 				child2.Name = "child2";
1456 				child2.MdiParent = main;
1457 				child2.WindowState = FormWindowState.Maximized;
1458 
1459 				Assert.AreEqual (FormWindowState.Minimized, child1.WindowState, "#1");
1460 				Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#2");
1461 
1462 				child2.Show();
1463 
1464 				Assert.AreEqual (FormWindowState.Minimized, child1.WindowState, "#3");
1465 				Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#4");
1466 
1467 				child1.Activate ();
1468 
1469 				Assert.AreEqual (FormWindowState.Maximized, child1.WindowState, "#5");
1470 				Assert.AreEqual (FormWindowState.Normal, child2.WindowState, "#6");
1471 
1472 				child2.Activate ();
1473 
1474 				Assert.AreEqual (FormWindowState.Minimized, child1.WindowState, "#7");
1475 				Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#8");
1476 			} finally {
1477 				child2.Dispose ();
1478 				child1.Dispose ();
1479 				main.Dispose ();
1480 				main.Close();
1481 			}
1482 		}
1483 
1484 		[Test] // bug 80995
ChangeClientSizeTest()1485 		public void ChangeClientSizeTest ()
1486 		{
1487 			SetUp (false, false, false);
1488 			child1.ClientSize = new Size (224, 37);
1489 			child1.MdiParent = main;
1490 			Assert.AreEqual ("{Width=224, Height=37}", child1.ClientSize.ToString (), "#01");
1491 			child1.Show ();
1492 			Assert.AreEqual ("{Width=224, Height=37}", child1.ClientSize.ToString (), "#02");
1493 			main.Show ();
1494 			Assert.AreEqual ("{Width=224, Height=37}", child1.ClientSize.ToString (), "#03");
1495 		}
1496 
1497 		private string events_fired;
1498 
1499 		[Test]
MdiClosingClosedEvent()1500 		public void MdiClosingClosedEvent ()
1501 		{
1502 			Form f = new Form ();
1503 			f.IsMdiContainer = true;
1504 
1505 			MdiChild mdi = new MdiChild ();
1506 			mdi.can_close = false;
1507 			mdi.MdiParent = f;
1508 
1509 			f.Closing += new CancelEventHandler (f_Closing);
1510 			f.Closed += new EventHandler (f_Closed);
1511 			mdi.Closing += new CancelEventHandler (mdi_Closing);
1512 			mdi.Closed += new EventHandler (mdi_Closed);
1513 
1514 			f.FormClosing += new FormClosingEventHandler (f_FormClosing);
1515 			f.FormClosed += new FormClosedEventHandler (f_FormClosed);
1516 			mdi.FormClosing += new FormClosingEventHandler (mdi_FormClosing);
1517 			mdi.FormClosed += new FormClosedEventHandler (mdi_FormClosed);
1518 
1519 			f.Show ();
1520 			mdi.Show ();
1521 
1522 			events_fired = string.Empty;
1523 
1524 			f.Close ();
1525 
1526 			Assert.AreEqual ("Child.Closing: True, Child.FormClosing: True, Parent.Closing: True, Parent.FormClosing: True, ", events_fired, "A1-2.0");
1527 
1528 			events_fired = string.Empty;
1529 			mdi.can_close = true;
1530 			f.Close ();
1531 
1532 			Assert.AreEqual ("Child.Closing: False, Child.FormClosing: False, Parent.Closing: False, Parent.FormClosing: False, Child.Closed, Child.FormClosed, Parent.Closed, Parent.FormClosed, ", events_fired, "A2-2.0");
1533 
1534 			f.Dispose ();
1535 		}
1536 
mdi_FormClosed(object sender, FormClosedEventArgs e)1537 		void mdi_FormClosed (object sender, FormClosedEventArgs e)
1538 		{
1539 			events_fired += "Child.FormClosed, ";
1540 		}
1541 
mdi_FormClosing(object sender, FormClosingEventArgs e)1542 		void mdi_FormClosing (object sender, FormClosingEventArgs e)
1543 		{
1544 			events_fired += string.Format ("Child.FormClosing: {0}, ", e.Cancel);
1545 		}
1546 
f_FormClosed(object sender, FormClosedEventArgs e)1547 		void f_FormClosed (object sender, FormClosedEventArgs e)
1548 		{
1549 			events_fired += "Parent.FormClosed, ";
1550 		}
1551 
f_FormClosing(object sender, FormClosingEventArgs e)1552 		void f_FormClosing (object sender, FormClosingEventArgs e)
1553 		{
1554 			events_fired += string.Format ("Parent.FormClosing: {0}, ", e.Cancel);
1555 		}
1556 
mdi_Closed(object sender, EventArgs e)1557 		void mdi_Closed (object sender, EventArgs e)
1558 		{
1559 			events_fired += "Child.Closed, ";
1560 		}
1561 
mdi_Closing(object sender, CancelEventArgs e)1562 		void mdi_Closing (object sender, CancelEventArgs e)
1563 		{
1564 			events_fired += string.Format ("Child.Closing: {0}, ", e.Cancel);
1565 		}
1566 
f_Closed(object sender, EventArgs e)1567 		void f_Closed (object sender, EventArgs e)
1568 		{
1569 			events_fired += "Parent.Closed, ";
1570 		}
1571 
f_Closing(object sender, CancelEventArgs e)1572 		void f_Closing (object sender, CancelEventArgs e)
1573 		{
1574 			events_fired += string.Format ("Parent.Closing: {0}, ", e.Cancel);
1575 		}
1576 
1577 		private class MdiChild : Form
1578 		{
1579 			public bool can_close = false;
1580 
MdiChild()1581 			public MdiChild ()
1582 			{
1583 				Closing += new CancelEventHandler (MdiChild_Closing);
1584 			}
1585 
MdiChild_Closing(object sender, CancelEventArgs e)1586 			void MdiChild_Closing (object sender, CancelEventArgs e)
1587 			{
1588 				e.Cancel = !can_close;
1589 			}
1590 		}
1591 	}
1592 }
1593