3 using System.Windows.Forms;
7 namespace MonoTests.System.Windows.Forms
10 public class DefaultLayoutTest
13 LayoutEventArgs most_recent_args;
15 void p_Layout (object sender, LayoutEventArgs e)
22 public void AnchorLayoutEvents ()
32 p.Layout += new LayoutEventHandler (p_Layout);
34 /* set the button's anchor to something different */
35 b.Anchor = AnchorStyles.Bottom;
36 Assert.AreEqual (1, event_count, "1");
37 Assert.AreEqual ("Anchor", most_recent_args.AffectedProperty, "2");
39 /* reset it to something new with the panel's layout suspended */
42 b.Anchor = AnchorStyles.Top;
43 Assert.AreEqual (0, event_count, "3");
45 Assert.AreEqual (1, event_count, "4");
46 Assert.AreEqual (null, most_recent_args.AffectedProperty, "5");
48 /* with the anchor style set to something, resize the parent */
50 p.Size = new Size (500, 500);
51 Assert.AreEqual (1, event_count, "6");
52 Assert.AreEqual ("Bounds", most_recent_args.AffectedProperty, "7");
54 /* now try it with layout suspended */
57 p.Size = new Size (400, 400);
58 Assert.AreEqual (0, event_count, "8");
60 Assert.AreEqual (1, event_count, "9");
61 Assert.AreEqual (null, most_recent_args.AffectedProperty, "10");
63 /* with the anchor style set to something, resize the child */
65 b.Size = new Size (100, 100);
66 Assert.AreEqual (1, event_count, "11");
67 Assert.AreEqual ("Bounds", most_recent_args.AffectedProperty, "12");
69 /* and again with layout suspended */
72 b.Size = new Size (200, 200);
73 Assert.AreEqual (0, event_count, "13");
75 Assert.AreEqual (1, event_count, "14");
76 Assert.AreEqual (null, most_recent_args.AffectedProperty, "15");
80 public void AnchorTopLeftTest ()
83 f.ShowInTaskbar = false;
85 f.Size = new Size (200, 200);
87 Button b = new Button ();
88 b.Size = new Size (100, 100);
89 b.Anchor = AnchorStyles.Top | AnchorStyles.Left;
93 Assert.AreEqual (0, b.Left, "1");
94 Assert.AreEqual (0, b.Top, "2");
95 f.Size = new Size (300, 300);
97 Assert.AreEqual (0, b.Left, "3");
98 Assert.AreEqual (0, b.Top, "4");
104 public void AnchorTopRightTest ()
106 Form f = new Form ();
107 f.ShowInTaskbar = false;
109 f.Size = new Size (200, 200);
111 Button b = new Button ();
112 b.Size = new Size (100, 100);
113 b.Anchor = AnchorStyles.Top | AnchorStyles.Right;
117 Assert.AreEqual (0, b.Left, "1");
118 Assert.AreEqual (0, b.Top, "2");
120 f.Size = new Size (300, 300);
122 Assert.AreEqual (100, b.Left, "3");
123 Assert.AreEqual (0, b.Top, "4");
129 public void AnchorLeftRightTest ()
131 Form f = new Form ();
132 f.ShowInTaskbar = false;
134 f.Size = new Size (200, 200);
136 Button b = new Button ();
137 b.Size = new Size (100, 100);
138 b.Anchor = AnchorStyles.Left | AnchorStyles.Right;
142 Assert.AreEqual (0, b.Left, "1");
143 Assert.AreEqual (100, b.Right, "2");
145 f.Size = new Size (300, 300);
147 Assert.AreEqual (0, b.Left, "3");
148 Assert.AreEqual (200, b.Right, "4");
154 public void AnchorBottomLeftTest ()
156 Form f = new Form ();
157 f.ShowInTaskbar = false;
159 f.Size = new Size (200, 200);
161 Button b = new Button ();
162 b.Size = new Size (100, 100);
163 b.Anchor = AnchorStyles.Left | AnchorStyles.Bottom;
167 Assert.AreEqual (0, b.Left, "1");
168 Assert.AreEqual (0, b.Top, "2");
170 f.Size = new Size (300, 300);
172 Assert.AreEqual (0, b.Left, "3");
173 Assert.AreEqual (100, b.Top, "4");
179 public void AnchorBottomRightTest ()
181 Form f = new Form ();
182 f.ShowInTaskbar = false;
184 f.Size = new Size (200, 200);
186 Button b = new Button ();
187 b.Size = new Size (100, 100);
188 b.Anchor = AnchorStyles.Right | AnchorStyles.Bottom;
192 Assert.AreEqual (0, b.Left, "1");
193 Assert.AreEqual (0, b.Top, "2");
195 f.Size = new Size (300, 300);
197 Assert.AreEqual (100, b.Left, "3");
198 Assert.AreEqual (100, b.Top, "4");
204 public void AnchorTopBottomTest ()
206 Form f = new Form ();
207 f.ShowInTaskbar = false;
209 f.Size = new Size (200, 200);
211 Button b = new Button ();
212 b.Size = new Size (100, 100);
213 b.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
217 Assert.AreEqual (0, b.Top, "1");
218 Assert.AreEqual (100, b.Bottom, "2");
220 f.Size = new Size (300, 300);
222 Assert.AreEqual (0, b.Top, "3");
223 Assert.AreEqual (200, b.Bottom, "4");
228 // Unit test version of the test case in bug #80336
230 public void AnchorSuspendLayoutTest ()
232 Form f = new Form ();
233 f.ShowInTaskbar = false;
237 Button b = new Button ();
238 b.Size = new Size (100, 100);
242 f.Size = new Size (200, 200);
244 b.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
246 Assert.AreEqual (0, b.Top, "1");
247 Assert.AreEqual (0, b.Left, "2");
249 f.Size = new Size (300, 300);
251 Assert.AreEqual (0, b.Top, "3");
252 Assert.AreEqual (0, b.Left, "4");
256 Assert.AreEqual (100, b.Top, "5");
257 Assert.AreEqual (100, b.Left, "6");
262 // another variant of AnchorSuspendLayoutTest1, with
263 // the SuspendLayout moved after the Anchor
266 public void AnchorSuspendLayoutTest2 ()
268 Form f = new Form ();
269 f.ShowInTaskbar = false;
271 Button b = new Button ();
272 b.Size = new Size (100, 100);
276 f.Size = new Size (200, 200);
278 b.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
280 Assert.AreEqual (0, b.Top, "1");
281 Assert.AreEqual (0, b.Left, "2");
285 f.Size = new Size (300, 300);
287 Assert.AreEqual (0, b.Top, "3");
288 Assert.AreEqual (0, b.Left, "4");
292 Assert.AreEqual (100, b.Top, "5");
293 Assert.AreEqual (100, b.Left, "6");
298 // yet another variant, this time with no Suspend/Resume.
300 public void AnchorSuspendLayoutTest3 ()
302 Form f = new Form ();
303 f.ShowInTaskbar = false;
305 Button b = new Button ();
306 b.Size = new Size (100, 100);
310 f.Size = new Size (200, 200);
312 b.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
314 Assert.AreEqual (0, b.Top, "1");
315 Assert.AreEqual (0, b.Left, "2");
317 f.Size = new Size (300, 300);
319 Assert.AreEqual (100, b.Top, "5");
320 Assert.AreEqual (100, b.Left, "6");
325 private string event_raised = string.Empty;
328 public void TestAnchorDockInteraction ()
330 Panel p = new Panel ();
331 p.DockChanged += new EventHandler (DockChanged_Handler);
333 Assert.AreEqual (AnchorStyles.Top | AnchorStyles.Left, p.Anchor, "A1");
334 Assert.AreEqual (DockStyle.None, p.Dock, "A2");
336 p.Dock = DockStyle.Right;
337 Assert.AreEqual (AnchorStyles.Top | AnchorStyles.Left, p.Anchor, "A3");
338 Assert.AreEqual (DockStyle.Right, p.Dock, "A4");
339 Assert.AreEqual ("DockStyleChanged", event_raised, "A5");
340 event_raised = string.Empty;
342 p.Anchor = AnchorStyles.Bottom;
343 Assert.AreEqual (AnchorStyles.Bottom, p.Anchor, "A6");
344 Assert.AreEqual (DockStyle.None, p.Dock, "A7");
345 Assert.AreEqual (string.Empty, event_raised, "A8");
347 p.Dock = DockStyle.Fill;
348 Assert.AreEqual (AnchorStyles.Top | AnchorStyles.Left, p.Anchor, "A9");
349 Assert.AreEqual (DockStyle.Fill, p.Dock, "A10");
350 Assert.AreEqual ("DockStyleChanged", event_raised, "A11");
351 event_raised = string.Empty;
353 p.Anchor = AnchorStyles.Top | AnchorStyles.Left;
354 Assert.AreEqual (AnchorStyles.Top | AnchorStyles.Left, p.Anchor, "A12");
355 Assert.AreEqual (DockStyle.Fill, p.Dock, "A13");
356 Assert.AreEqual (string.Empty, event_raised, "A14");
358 p.Dock = DockStyle.None;
359 Assert.AreEqual (AnchorStyles.Top | AnchorStyles.Left, p.Anchor, "A15");
360 Assert.AreEqual (DockStyle.None, p.Dock, "A16");
361 Assert.AreEqual ("DockStyleChanged", event_raised, "A17");
362 event_raised = string.Empty;
364 p.Anchor = AnchorStyles.Bottom;
365 p.Dock = DockStyle.None;
366 Assert.AreEqual (AnchorStyles.Bottom, p.Anchor, "A18");
367 Assert.AreEqual (DockStyle.None, p.Dock, "A19");
368 Assert.AreEqual (string.Empty, event_raised, "A20");
371 public void DockChanged_Handler (object sender, EventArgs e)
373 event_raised += "DockStyleChanged";
376 [Test] // bug #80917
\r
377 public void BehaviorOverriddenDisplayRectangle ()
\r
379 Control c = new Control ();
\r
380 c.Anchor |= AnchorStyles.Bottom;
\r
381 c.Size = new Size (100, 100);
\r
383 Form f = new DisplayRectangleForm ();
\r
384 f.Controls.Add (c);
\r
385 f.ShowInTaskbar = false;
\r
388 Assert.AreEqual (new Size (100, 100), c.Size, "A1");
\r
393 private class DisplayRectangleForm : Form
\r
395 public override Rectangle DisplayRectangle
\r
397 get { return Rectangle.Empty; }
\r
403 public class DockingTests
414 form.ShowInTaskbar = false;
415 form.Size = new Size (400, 400);
416 panel = new Panel ();
417 form.Controls.Add (panel);
422 public void Cleanup ()
427 void IncrementEventCount (object o, EventArgs args)
433 public void TestDockSizeChangedEvent ()
435 panel.SizeChanged += new EventHandler (IncrementEventCount);
436 panel.Dock = DockStyle.Bottom;
437 Assert.AreEqual (1, event_count);
441 public void TestDockLocationChangedEvent ()
443 panel.LocationChanged += new EventHandler (IncrementEventCount);
444 panel.Dock = DockStyle.Bottom;
445 Assert.AreEqual (1, event_count);
449 public void TestDockFillFirst ()
451 Form f = new Form ();
\r
452 f.ShowInTaskbar = false;
\r
454 Panel b1 = new Panel ();
455 Panel b2 = new Panel ();
457 b1.Dock = DockStyle.Fill;
458 b2.Dock = DockStyle.Left;
464 Assert.AreEqual (new Rectangle (b2.Width, 0, f.ClientRectangle.Width - b2.Width, f.ClientRectangle.Height), b1.Bounds, "A1");
465 Assert.AreEqual (new Rectangle (0, 0, 200, f.ClientRectangle.Height), b2.Bounds, "A2");
470 public void TestDockFillLast ()
472 Form f = new Form ();
\r
473 f.ShowInTaskbar = false;
\r
475 Panel b1 = new Panel ();
476 Panel b2 = new Panel ();
478 b1.Dock = DockStyle.Fill;
479 b2.Dock = DockStyle.Left;
485 Assert.AreEqual (new Rectangle (0, 0, f.ClientRectangle.Width, f.ClientRectangle.Height), b1.Bounds, "B1");
486 Assert.AreEqual (new Rectangle (0, 0, 200, f.ClientRectangle.Height), b2.Bounds, "B2");
492 public class UndockingTests
494 class TestPanel : Panel {
496 public void InvokeSetBoundsCore ()
498 SetBoundsCore (37, 37, 37, 37, BoundsSpecified.All);
501 public void InvokeUpdateBounds ()
503 UpdateBounds (37, 37, 37, 37);
514 form.ShowInTaskbar = false;
515 form.Size = new Size (400, 400);
516 panel = new TestPanel ();
517 form.Controls.Add (panel);
521 public void Cleanup ()
527 public void TestUndockDefaultLocation ()
529 Point loc = panel.Location;
530 panel.Dock = DockStyle.Bottom;
531 panel.Dock = DockStyle.None;
532 Assert.AreEqual (loc, panel.Location);
536 public void TestUndockDefaultLocationVisible ()
539 Point loc = panel.Location;
540 panel.Dock = DockStyle.Bottom;
541 panel.Dock = DockStyle.None;
542 Assert.AreEqual (loc, panel.Location);
546 public void TestUndockExplicitLeft ()
549 panel.Dock = DockStyle.Top;
550 panel.Dock = DockStyle.None;
551 Assert.AreEqual (150, panel.Left);
555 public void TestUndockExplicitTop ()
558 panel.Dock = DockStyle.Top;
559 panel.Dock = DockStyle.None;
560 Assert.AreEqual (150, panel.Top);
564 public void TestUndockExplicitLocation ()
566 panel.Location = new Point (50, 50);
567 Point loc = panel.Location;
568 panel.Dock = DockStyle.Bottom;
569 panel.Dock = DockStyle.None;
570 Assert.AreEqual (loc, panel.Location);
574 public void TestUndockExplicitLeftVisible ()
578 panel.Dock = DockStyle.Top;
579 panel.Dock = DockStyle.None;
580 Assert.AreEqual (150, panel.Left);
584 public void TestUndockExplicitTopVisible ()
588 panel.Dock = DockStyle.Top;
589 panel.Dock = DockStyle.None;
590 Assert.AreEqual (150, panel.Top);
594 public void TestUndockExplicitLocationVisible ()
597 panel.Location = new Point (50, 50);
598 Point loc = panel.Location;
599 panel.Dock = DockStyle.Bottom;
600 panel.Dock = DockStyle.None;
601 Assert.AreEqual (loc, panel.Location);
605 [Category ("NotWorking")]
606 public void TestUndockDefaultSize ()
608 Size sz = panel.Size;
609 panel.Dock = DockStyle.Fill;
610 panel.Dock = DockStyle.None;
611 Assert.AreEqual (sz, panel.Size);
615 public void TestUndockExplicitHeight ()
618 panel.Dock = DockStyle.Left;
619 panel.Dock = DockStyle.None;
620 Assert.AreEqual (50, panel.Height);
624 [Category ("NotWorking")]
625 public void TestUndockExplicitSize ()
627 panel.Size = new Size (50, 50);
628 Size sz = panel.Size;
629 panel.Dock = DockStyle.Fill;
630 panel.Dock = DockStyle.None;
631 Assert.AreEqual (sz, panel.Size);
635 public void TestUndockExplicitWidth ()
638 panel.Dock = DockStyle.Top;
639 panel.Dock = DockStyle.None;
640 Assert.AreEqual (50, panel.Width);
644 public void TestUndockExplicitHeightVisible ()
648 panel.Dock = DockStyle.Left;
649 panel.Dock = DockStyle.None;
650 Assert.AreEqual (50, panel.Height);
654 [Category ("NotWorking")]
655 public void TestUndockExplicitSizeVisible ()
658 panel.Size = new Size (50, 50);
659 Size sz = panel.Size;
660 panel.Dock = DockStyle.Fill;
661 panel.Dock = DockStyle.None;
662 Assert.AreEqual (sz, panel.Size);
666 public void TestUndockExplicitWidthVisible ()
670 panel.Dock = DockStyle.Top;
671 panel.Dock = DockStyle.None;
672 Assert.AreEqual (50, panel.Width);
676 public void TestUndockSetBounds ()
678 panel.SetBounds (50, 50, 50, 50, BoundsSpecified.All);
679 panel.Dock = DockStyle.Top;
680 panel.Dock = DockStyle.None;
681 Assert.AreEqual (50, panel.Height, "Height");
682 Assert.AreEqual (50, panel.Left, "Left");
683 Assert.AreEqual (50, panel.Top, "Top");
684 Assert.AreEqual (50, panel.Width, "Width");
688 public void TestUndockSetBoundsVisible ()
691 panel.SetBounds (50, 50, 50, 50, BoundsSpecified.All);
692 panel.Dock = DockStyle.Top;
693 panel.Dock = DockStyle.None;
694 Assert.AreEqual (50, panel.Height, "Height");
695 Assert.AreEqual (50, panel.Left, "Left");
696 Assert.AreEqual (50, panel.Top, "Top");
697 Assert.AreEqual (50, panel.Width, "Width");
701 public void TestUndockSetBoundsCore ()
703 panel.InvokeSetBoundsCore ();
704 panel.Dock = DockStyle.Top;
705 panel.Dock = DockStyle.None;
706 Assert.AreEqual (37, panel.Height, "Height");
707 Assert.AreEqual (37, panel.Left, "Left");
708 Assert.AreEqual (37, panel.Top, "Top");
709 Assert.AreEqual (37, panel.Width, "Width");
713 public void TestUndockSetBoundsCoreVisible ()
716 panel.InvokeSetBoundsCore ();
717 panel.Dock = DockStyle.Top;
718 panel.Dock = DockStyle.None;
719 Assert.AreEqual (37, panel.Height, "Height");
720 Assert.AreEqual (37, panel.Left, "Left");
721 Assert.AreEqual (37, panel.Top, "Top");
722 Assert.AreEqual (37, panel.Width, "Width");
726 public void TestUndockUpdateBounds ()
728 panel.InvokeUpdateBounds ();
729 panel.Dock = DockStyle.Top;
730 panel.Dock = DockStyle.None;
731 Assert.AreEqual (37, panel.Height, "Height");
732 Assert.AreEqual (37, panel.Left, "Left");
733 Assert.AreEqual (37, panel.Top, "Top");
734 Assert.AreEqual (37, panel.Width, "Width");
738 public void TestUndockUpdateBoundsVisible ()
741 panel.InvokeUpdateBounds ();
742 panel.Dock = DockStyle.Top;
743 panel.Dock = DockStyle.None;
744 Assert.AreEqual (37, panel.Height, "Height");
745 Assert.AreEqual (37, panel.Left, "Left");
746 Assert.AreEqual (37, panel.Top, "Top");
747 Assert.AreEqual (37, panel.Width, "Width");