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";
377 [Category ("NotWorking")]
378 public void BehaviorOverriddenDisplayRectangle ()
380 Control c = new Control ();
381 c.Anchor |= AnchorStyles.Bottom;
382 c.Size = new Size (100, 100);
384 Form f = new DisplayRectangleForm ();
386 f.ShowInTaskbar = false;
389 Assert.AreEqual (new Size (100, 100), c.Size, "A1");
394 private class DisplayRectangleForm : Form
396 public override Rectangle DisplayRectangle
398 get { return Rectangle.Empty; }
403 public void AnchoredControlWithZeroWidthAndHeight ()
405 Form f = new Form ();
406 f.ShowInTaskbar = false;
408 Control c = new Control ();
409 c.Anchor = AnchorStyles.Left | AnchorStyles.Right;
412 Assert.AreEqual (new Rectangle (0, 0, 0, 0), c.Bounds, "N1");
416 public void TestNestedControls ()
418 MainForm f = new MainForm ();
419 f.ShowInTaskbar = false;
422 Assert.AreEqual (new Rectangle (210, 212, 75, 23), f._userControl._button2.Bounds, "K1");
428 public void TestNestedControls2 ()
430 MainForm f = new MainForm ();
431 f.ShowInTaskbar = false;
436 f.Size = new Size (10, 10);
439 Assert.AreEqual (new Rectangle (210, 212, 75, 23), f._userControl._button2.Bounds, "K1");
444 private class MainForm : Form
446 public UserControl1 _userControl;
454 _userControl = new UserControl1 ();
455 _userControl.Anchor = (AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Bottom | AnchorStyles.Right);
456 _userControl.BackColor = Color.White;
457 _userControl.Location = new Point (8, 8);
458 _userControl.Size = new Size (288, 238);
459 _userControl.TabIndex = 0;
460 Controls.Add (_userControl);
464 ClientSize = new Size (304, 280);
465 Location = new Point (250, 100);
466 StartPosition = FormStartPosition.Manual;
468 ResumeLayout (false);
472 private class UserControl1 : UserControl
474 private Button _button1;
475 public Button _button2;
477 public UserControl1 ()
483 _button1 = new Button ();
484 _button1.Location = new Point (4, 4);
485 _button1.Size = new Size (75, 23);
486 _button1.TabIndex = 0;
487 _button1.Text = "Button1";
488 Controls.Add (_button1);
492 _button2 = new Button ();
493 _button2.Anchor = (AnchorStyles.Bottom | AnchorStyles.Right);
494 _button2.Location = new Point (210, 212);
495 _button2.Size = new Size (75, 23);
496 _button2.TabIndex = 1;
497 _button2.Text = "Button2";
498 Controls.Add (_button2);
502 BackColor = Color.White;
503 ClientSize = new Size (288, 238);
504 ResumeLayout (false);
510 public void TestDockFillWithPadding ()
512 Form f = new Form ();
513 f.ShowInTaskbar = false;
514 f.Padding = new Padding (15, 15, 15, 15);
516 Control c = new Control ();
517 c.Dock = DockStyle.Fill;
521 Assert.AreEqual (new Size (f.ClientSize.Width - 30, f.ClientSize.Height - 30), c.Size, "K1");
528 public void Bug82762 ()
530 if (TestHelper.RunningOnUnix)
531 Assert.Ignore ("WM Size dependent");
533 Form f = new Form ();
534 f.ShowInTaskbar = false;
536 Button b = new Button ();
537 b.Size = new Size (100, 100);
538 b.Anchor = AnchorStyles.None;
543 Assert.AreEqual (new Rectangle (0, 0, 100, 100), b.Bounds, "A1");
545 f.ClientSize = new Size (600, 600);
547 Assert.AreEqual (new Rectangle (158, 168, 100, 100), b.Bounds, "A2");
554 public void Bug82805 ()
556 Control c1 = new Control ();
557 c1.Size = new Size (100, 100);
558 Control c2 = new Control ();
559 c2.Size = new Size (100, 100);
562 c1.Anchor = AnchorStyles.Left | AnchorStyles.Right;
563 c2.Controls.Add (c1);
564 c2.Size = new Size (200, 200);
567 Assert.AreEqual (200, c1.Width, "A1");
572 public void DockedAutoSizeControls ()
574 Form f = new Form ();
575 f.ShowInTaskbar = false;
577 Button b = new Button ();
580 b.AutoSizeMode = AutoSizeMode.GrowAndShrink;
582 b.Dock = DockStyle.Left;
588 Assert.Fail ("button should be less than 200 width: actual {0}", b.Width);
596 public void NestedControls ()
598 Form f = new Form ();
599 f.ShowInTaskbar = false;
601 MyUserControl c = new MyUserControl ();
602 c.Dock = DockStyle.Fill;
603 c.Size = new Size (500, 500);
607 f.ClientSize = new Size (500, 500);
608 f.ResumeLayout (false);
612 Assert.AreEqual (new Size (600, 600), c.lv.Size, "I1");
616 private class MyUserControl : UserControl
620 public MyUserControl ()
622 lv = new ListView ();
624 lv.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;
625 lv.Size = new Size (300, 300);
628 Size = new Size (200, 200);
629 ResumeLayout (false);
635 public class DockingTests
646 form.ShowInTaskbar = false;
647 form.Size = new Size (400, 400);
648 panel = new Panel ();
649 form.Controls.Add (panel);
654 public void Cleanup ()
659 void IncrementEventCount (object o, EventArgs args)
665 public void TestDockSizeChangedEvent ()
667 panel.SizeChanged += new EventHandler (IncrementEventCount);
668 panel.Dock = DockStyle.Bottom;
669 Assert.AreEqual (1, event_count);
673 public void TestDockLocationChangedEvent ()
675 panel.LocationChanged += new EventHandler (IncrementEventCount);
676 panel.Dock = DockStyle.Bottom;
677 Assert.AreEqual (1, event_count);
681 public void TestDockFillFirst ()
683 Form f = new Form ();
684 f.ShowInTaskbar = false;
686 Panel b1 = new Panel ();
687 Panel b2 = new Panel ();
689 b1.Dock = DockStyle.Fill;
690 b2.Dock = DockStyle.Left;
696 Assert.AreEqual (new Rectangle (b2.Width, 0, f.ClientRectangle.Width - b2.Width, f.ClientRectangle.Height), b1.Bounds, "A1");
697 Assert.AreEqual (new Rectangle (0, 0, 200, f.ClientRectangle.Height), b2.Bounds, "A2");
702 public void TestDockFillLast ()
704 Form f = new Form ();
705 f.ShowInTaskbar = false;
707 Panel b1 = new Panel ();
708 Panel b2 = new Panel ();
710 b1.Dock = DockStyle.Fill;
711 b2.Dock = DockStyle.Left;
717 Assert.AreEqual (new Rectangle (0, 0, f.ClientRectangle.Width, f.ClientRectangle.Height), b1.Bounds, "B1");
718 Assert.AreEqual (new Rectangle (0, 0, 200, f.ClientRectangle.Height), b2.Bounds, "B2");
723 public void TestDockingWithCustomDisplayRectangle ()
725 MyControl mc = new MyControl ();
726 mc.Size = new Size (200, 200);
728 Control c = new Control ();
729 c.Dock = DockStyle.Fill;
733 Form f = new Form ();
734 f.ShowInTaskbar = false;
739 Assert.AreEqual (new Point (20, 20), c.Location, "A1");
740 Assert.AreEqual (new Size (160, 160), c.Size, "A2");
745 private class MyControl : Control
747 public override Rectangle DisplayRectangle {
748 get { return new Rectangle (20, 20, this.Width - 40, this.Height - 40); }
752 public void ResettingDockToNone ()
754 Form f = new Form ();
755 f.ShowInTaskbar = false;
756 f.ClientSize = new Size (300, 300);
758 Control c = new Control ();
759 c.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
765 f.ClientSize = new Size (350, 350);
767 Assert.AreEqual (new Point (50, 50), c.Location, "A1");
769 c.Dock = DockStyle.None;
770 Assert.AreEqual (new Point (50, 50), c.Location, "A2");
772 f.ClientSize = new Size (400, 400);
773 Assert.AreEqual (new Point (100, 100), c.Location, "A3");
780 public class UndockingTests
782 class TestPanel : Panel {
784 public void InvokeSetBoundsCore ()
786 SetBoundsCore (37, 37, 37, 37, BoundsSpecified.All);
789 public void InvokeUpdateBounds ()
791 UpdateBounds (37, 37, 37, 37);
802 form.ShowInTaskbar = false;
803 form.Size = new Size (400, 400);
804 panel = new TestPanel ();
805 form.Controls.Add (panel);
809 public void Cleanup ()
815 public void TestUndockDefaultLocation ()
817 Point loc = panel.Location;
818 panel.Dock = DockStyle.Bottom;
819 panel.Dock = DockStyle.None;
820 Assert.AreEqual (loc, panel.Location);
824 public void TestUndockDefaultLocationVisible ()
827 Point loc = panel.Location;
828 panel.Dock = DockStyle.Bottom;
829 panel.Dock = DockStyle.None;
830 Assert.AreEqual (loc, panel.Location);
834 public void TestUndockExplicitLeft ()
837 panel.Dock = DockStyle.Top;
838 panel.Dock = DockStyle.None;
839 Assert.AreEqual (150, panel.Left);
843 public void TestUndockExplicitTop ()
846 panel.Dock = DockStyle.Top;
847 panel.Dock = DockStyle.None;
848 Assert.AreEqual (150, panel.Top);
852 public void TestUndockExplicitLocation ()
854 panel.Location = new Point (50, 50);
855 Point loc = panel.Location;
856 panel.Dock = DockStyle.Bottom;
857 panel.Dock = DockStyle.None;
858 Assert.AreEqual (loc, panel.Location);
862 public void TestUndockExplicitLeftVisible ()
866 panel.Dock = DockStyle.Top;
867 panel.Dock = DockStyle.None;
868 Assert.AreEqual (150, panel.Left);
872 public void TestUndockExplicitTopVisible ()
876 panel.Dock = DockStyle.Top;
877 panel.Dock = DockStyle.None;
878 Assert.AreEqual (150, panel.Top);
882 public void TestUndockExplicitLocationVisible ()
885 panel.Location = new Point (50, 50);
886 Point loc = panel.Location;
887 panel.Dock = DockStyle.Bottom;
888 panel.Dock = DockStyle.None;
889 Assert.AreEqual (loc, panel.Location);
893 public void TestUndockDefaultSize ()
895 Size sz = panel.Size;
896 panel.Dock = DockStyle.Fill;
897 panel.Dock = DockStyle.None;
898 Assert.AreEqual (sz, panel.Size);
902 public void TestUndockExplicitHeight ()
905 panel.Dock = DockStyle.Left;
906 panel.Dock = DockStyle.None;
907 Assert.AreEqual (50, panel.Height);
911 public void TestUndockExplicitSize ()
913 panel.Size = new Size (50, 50);
914 Size sz = panel.Size;
915 panel.Dock = DockStyle.Fill;
916 panel.Dock = DockStyle.None;
917 Assert.AreEqual (sz, panel.Size);
921 public void TestUndockExplicitWidth ()
924 panel.Dock = DockStyle.Top;
925 panel.Dock = DockStyle.None;
926 Assert.AreEqual (50, panel.Width);
930 public void TestUndockExplicitHeightVisible ()
934 panel.Dock = DockStyle.Left;
935 panel.Dock = DockStyle.None;
936 Assert.AreEqual (50, panel.Height);
940 public void TestUndockExplicitSizeVisible ()
943 panel.Size = new Size (50, 50);
944 Size sz = panel.Size;
945 panel.Dock = DockStyle.Fill;
946 panel.Dock = DockStyle.None;
947 Assert.AreEqual (sz, panel.Size);
951 public void TestUndockExplicitWidthVisible ()
955 panel.Dock = DockStyle.Top;
956 panel.Dock = DockStyle.None;
957 Assert.AreEqual (50, panel.Width);
961 public void TestUndockSetBounds ()
963 panel.SetBounds (50, 50, 50, 50, BoundsSpecified.All);
964 panel.Dock = DockStyle.Top;
965 panel.Dock = DockStyle.None;
966 Assert.AreEqual (50, panel.Height, "Height");
967 Assert.AreEqual (50, panel.Left, "Left");
968 Assert.AreEqual (50, panel.Top, "Top");
969 Assert.AreEqual (50, panel.Width, "Width");
973 public void TestUndockSetBoundsVisible ()
976 panel.SetBounds (50, 50, 50, 50, BoundsSpecified.All);
977 panel.Dock = DockStyle.Top;
978 panel.Dock = DockStyle.None;
979 Assert.AreEqual (50, panel.Height, "Height");
980 Assert.AreEqual (50, panel.Left, "Left");
981 Assert.AreEqual (50, panel.Top, "Top");
982 Assert.AreEqual (50, panel.Width, "Width");
986 public void TestUndockSetBoundsCore ()
988 panel.InvokeSetBoundsCore ();
989 panel.Dock = DockStyle.Top;
990 panel.Dock = DockStyle.None;
991 Assert.AreEqual (37, panel.Height, "Height");
992 Assert.AreEqual (37, panel.Left, "Left");
993 Assert.AreEqual (37, panel.Top, "Top");
994 Assert.AreEqual (37, panel.Width, "Width");
998 public void TestUndockSetBoundsCoreVisible ()
1001 panel.InvokeSetBoundsCore ();
1002 panel.Dock = DockStyle.Top;
1003 panel.Dock = DockStyle.None;
1004 Assert.AreEqual (37, panel.Height, "Height");
1005 Assert.AreEqual (37, panel.Left, "Left");
1006 Assert.AreEqual (37, panel.Top, "Top");
1007 Assert.AreEqual (37, panel.Width, "Width");
1011 public void TestUndockUpdateBounds ()
1013 panel.InvokeUpdateBounds ();
1014 panel.Dock = DockStyle.Top;
1015 panel.Dock = DockStyle.None;
1016 Assert.AreEqual (37, panel.Height, "Height");
1017 Assert.AreEqual (37, panel.Left, "Left");
1018 Assert.AreEqual (37, panel.Top, "Top");
1019 Assert.AreEqual (37, panel.Width, "Width");
1023 public void TestUndockUpdateBoundsVisible ()
1026 panel.InvokeUpdateBounds ();
1027 panel.Dock = DockStyle.Top;
1028 panel.Dock = DockStyle.None;
1029 Assert.AreEqual (37, panel.Height, "Height");
1030 Assert.AreEqual (37, panel.Left, "Left");
1031 Assert.AreEqual (37, panel.Top, "Top");
1032 Assert.AreEqual (37, panel.Width, "Width");