2 using System.Drawing;
\r
3 using System.Windows.Forms;
\r
5 using NUnit.Framework;
\r
7 namespace MonoTests.System.Windows.Forms
\r
10 public class DefaultLayoutTest
\r
13 LayoutEventArgs most_recent_args;
\r
15 void p_Layout (object sender, LayoutEventArgs e)
\r
18 most_recent_args = e;
\r
22 public void AnchorLayoutEvents ()
\r
32 p.Layout += new LayoutEventHandler (p_Layout);
\r
34 /* set the button's anchor to something different */
\r
35 b.Anchor = AnchorStyles.Bottom;
\r
36 Assert.AreEqual (1, event_count, "1");
\r
37 Assert.AreEqual ("Anchor", most_recent_args.AffectedProperty, "2");
\r
39 /* reset it to something new with the panel's layout suspended */
\r
42 b.Anchor = AnchorStyles.Top;
\r
43 Assert.AreEqual (0, event_count, "3");
\r
45 Assert.AreEqual (1, event_count, "4");
\r
46 Assert.AreEqual (null, most_recent_args.AffectedProperty, "5");
\r
48 /* with the anchor style set to something, resize the parent */
\r
50 p.Size = new Size (500, 500);
\r
51 Assert.AreEqual (1, event_count, "6");
\r
52 Assert.AreEqual ("Bounds", most_recent_args.AffectedProperty, "7");
\r
54 /* now try it with layout suspended */
\r
57 p.Size = new Size (400, 400);
\r
58 Assert.AreEqual (0, event_count, "8");
\r
60 Assert.AreEqual (1, event_count, "9");
\r
61 Assert.AreEqual (null, most_recent_args.AffectedProperty, "10");
\r
63 /* with the anchor style set to something, resize the child */
\r
65 b.Size = new Size (100, 100);
\r
66 Assert.AreEqual (1, event_count, "11");
\r
67 Assert.AreEqual ("Bounds", most_recent_args.AffectedProperty, "12");
\r
69 /* and again with layout suspended */
\r
72 b.Size = new Size (200, 200);
\r
73 Assert.AreEqual (0, event_count, "13");
\r
75 Assert.AreEqual (1, event_count, "14");
\r
76 Assert.AreEqual (null, most_recent_args.AffectedProperty, "15");
\r
80 public void AnchorTopLeftTest ()
\r
82 Form f = new Form ();
\r
83 f.ShowInTaskbar = false;
\r
85 f.Size = new Size (200, 200);
\r
87 Button b = new Button ();
\r
88 b.Size = new Size (100, 100);
\r
89 b.Anchor = AnchorStyles.Top | AnchorStyles.Left;
\r
93 Assert.AreEqual (0, b.Left, "1");
\r
94 Assert.AreEqual (0, b.Top, "2");
\r
95 f.Size = new Size (300, 300);
\r
97 Assert.AreEqual (0, b.Left, "3");
\r
98 Assert.AreEqual (0, b.Top, "4");
\r
104 public void AnchorTopRightTest ()
\r
106 Form f = new Form ();
\r
107 f.ShowInTaskbar = false;
\r
109 f.Size = new Size (200, 200);
\r
111 Button b = new Button ();
\r
112 b.Size = new Size (100, 100);
\r
113 b.Anchor = AnchorStyles.Top | AnchorStyles.Right;
\r
115 f.Controls.Add (b);
\r
117 Assert.AreEqual (0, b.Left, "1");
\r
118 Assert.AreEqual (0, b.Top, "2");
\r
120 f.Size = new Size (300, 300);
\r
122 Assert.AreEqual (100, b.Left, "3");
\r
123 Assert.AreEqual (0, b.Top, "4");
\r
129 public void AnchorLeftRightTest ()
\r
131 Form f = new Form ();
\r
132 f.ShowInTaskbar = false;
\r
134 f.Size = new Size (200, 200);
\r
136 Button b = new Button ();
\r
137 b.Size = new Size (100, 100);
\r
138 b.Anchor = AnchorStyles.Left | AnchorStyles.Right;
\r
140 f.Controls.Add (b);
\r
142 Assert.AreEqual (0, b.Left, "1");
\r
143 Assert.AreEqual (100, b.Right, "2");
\r
145 f.Size = new Size (300, 300);
\r
147 Assert.AreEqual (0, b.Left, "3");
\r
148 Assert.AreEqual (200, b.Right, "4");
\r
154 public void AnchorBottomLeftTest ()
\r
156 Form f = new Form ();
\r
157 f.ShowInTaskbar = false;
\r
159 f.Size = new Size (200, 200);
\r
161 Button b = new Button ();
\r
162 b.Size = new Size (100, 100);
\r
163 b.Anchor = AnchorStyles.Left | AnchorStyles.Bottom;
\r
165 f.Controls.Add (b);
\r
167 Assert.AreEqual (0, b.Left, "1");
\r
168 Assert.AreEqual (0, b.Top, "2");
\r
170 f.Size = new Size (300, 300);
\r
172 Assert.AreEqual (0, b.Left, "3");
\r
173 Assert.AreEqual (100, b.Top, "4");
\r
179 public void AnchorBottomRightTest ()
\r
181 Form f = new Form ();
\r
182 f.ShowInTaskbar = false;
\r
184 f.Size = new Size (200, 200);
\r
186 Button b = new Button ();
\r
187 b.Size = new Size (100, 100);
\r
188 b.Anchor = AnchorStyles.Right | AnchorStyles.Bottom;
\r
190 f.Controls.Add (b);
\r
192 Assert.AreEqual (0, b.Left, "1");
\r
193 Assert.AreEqual (0, b.Top, "2");
\r
195 f.Size = new Size (300, 300);
\r
197 Assert.AreEqual (100, b.Left, "3");
\r
198 Assert.AreEqual (100, b.Top, "4");
\r
204 public void AnchorTopBottomTest ()
\r
206 Form f = new Form ();
\r
207 f.ShowInTaskbar = false;
\r
209 f.Size = new Size (200, 200);
\r
211 Button b = new Button ();
\r
212 b.Size = new Size (100, 100);
\r
213 b.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
\r
215 f.Controls.Add (b);
\r
217 Assert.AreEqual (0, b.Top, "1");
\r
218 Assert.AreEqual (100, b.Bottom, "2");
\r
220 f.Size = new Size (300, 300);
\r
222 Assert.AreEqual (0, b.Top, "3");
\r
223 Assert.AreEqual (200, b.Bottom, "4");
\r
228 // Unit test version of the test case in bug #80336
\r
230 public void AnchorSuspendLayoutTest ()
\r
232 Form f = new Form ();
\r
233 f.ShowInTaskbar = false;
\r
235 f.SuspendLayout ();
\r
237 Button b = new Button ();
\r
238 b.Size = new Size (100, 100);
\r
240 f.Controls.Add (b);
\r
242 f.Size = new Size (200, 200);
\r
244 b.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
\r
246 Assert.AreEqual (0, b.Top, "1");
\r
247 Assert.AreEqual (0, b.Left, "2");
\r
249 f.Size = new Size (300, 300);
\r
251 Assert.AreEqual (0, b.Top, "3");
\r
252 Assert.AreEqual (0, b.Left, "4");
\r
256 Assert.AreEqual (100, b.Top, "5");
\r
257 Assert.AreEqual (100, b.Left, "6");
\r
262 // another variant of AnchorSuspendLayoutTest1, with
\r
263 // the SuspendLayout moved after the Anchor
\r
266 public void AnchorSuspendLayoutTest2 ()
\r
268 Form f = new Form ();
\r
269 f.ShowInTaskbar = false;
\r
271 Button b = new Button ();
\r
272 b.Size = new Size (100, 100);
\r
274 f.Controls.Add (b);
\r
276 f.Size = new Size (200, 200);
\r
278 b.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
\r
280 Assert.AreEqual (0, b.Top, "1");
\r
281 Assert.AreEqual (0, b.Left, "2");
\r
283 f.SuspendLayout ();
\r
285 f.Size = new Size (300, 300);
\r
287 Assert.AreEqual (0, b.Top, "3");
\r
288 Assert.AreEqual (0, b.Left, "4");
\r
292 Assert.AreEqual (100, b.Top, "5");
\r
293 Assert.AreEqual (100, b.Left, "6");
\r
298 // yet another variant, this time with no Suspend/Resume.
\r
300 public void AnchorSuspendLayoutTest3 ()
\r
302 Form f = new Form ();
\r
303 f.ShowInTaskbar = false;
\r
305 Button b = new Button ();
\r
306 b.Size = new Size (100, 100);
\r
308 f.Controls.Add (b);
\r
310 f.Size = new Size (200, 200);
\r
312 b.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
\r
314 Assert.AreEqual (0, b.Top, "1");
\r
315 Assert.AreEqual (0, b.Left, "2");
\r
317 f.Size = new Size (300, 300);
\r
319 Assert.AreEqual (100, b.Top, "5");
\r
320 Assert.AreEqual (100, b.Left, "6");
\r
325 private string event_raised = string.Empty;
\r
328 public void TestAnchorDockInteraction ()
\r
330 Panel p = new Panel ();
\r
331 p.DockChanged += new EventHandler (DockChanged_Handler);
\r
333 Assert.AreEqual (AnchorStyles.Top | AnchorStyles.Left, p.Anchor, "A1");
\r
334 Assert.AreEqual (DockStyle.None, p.Dock, "A2");
\r
336 p.Dock = DockStyle.Right;
\r
337 Assert.AreEqual (AnchorStyles.Top | AnchorStyles.Left, p.Anchor, "A3");
\r
338 Assert.AreEqual (DockStyle.Right, p.Dock, "A4");
\r
339 Assert.AreEqual ("DockStyleChanged", event_raised, "A5");
\r
340 event_raised = string.Empty;
\r
342 p.Anchor = AnchorStyles.Bottom;
\r
343 Assert.AreEqual (AnchorStyles.Bottom, p.Anchor, "A6");
\r
344 Assert.AreEqual (DockStyle.None, p.Dock, "A7");
\r
345 Assert.AreEqual (string.Empty, event_raised, "A8");
\r
347 p.Dock = DockStyle.Fill;
\r
348 Assert.AreEqual (AnchorStyles.Top | AnchorStyles.Left, p.Anchor, "A9");
\r
349 Assert.AreEqual (DockStyle.Fill, p.Dock, "A10");
\r
350 Assert.AreEqual ("DockStyleChanged", event_raised, "A11");
\r
351 event_raised = string.Empty;
\r
353 p.Anchor = AnchorStyles.Top | AnchorStyles.Left;
\r
354 Assert.AreEqual (AnchorStyles.Top | AnchorStyles.Left, p.Anchor, "A12");
\r
355 Assert.AreEqual (DockStyle.Fill, p.Dock, "A13");
\r
356 Assert.AreEqual (string.Empty, event_raised, "A14");
\r
358 p.Dock = DockStyle.None;
\r
359 Assert.AreEqual (AnchorStyles.Top | AnchorStyles.Left, p.Anchor, "A15");
\r
360 Assert.AreEqual (DockStyle.None, p.Dock, "A16");
\r
361 Assert.AreEqual ("DockStyleChanged", event_raised, "A17");
\r
362 event_raised = string.Empty;
\r
364 p.Anchor = AnchorStyles.Bottom;
\r
365 p.Dock = DockStyle.None;
\r
366 Assert.AreEqual (AnchorStyles.Bottom, p.Anchor, "A18");
\r
367 Assert.AreEqual (DockStyle.None, p.Dock, "A19");
\r
368 Assert.AreEqual (string.Empty, event_raised, "A20");
\r
371 public void DockChanged_Handler (object sender, EventArgs e)
\r
373 event_raised += "DockStyleChanged";
\r
376 [Test] // bug #80917
\r
377 [Category ("NotWorking")]
\r
378 public void BehaviorOverriddenDisplayRectangle ()
\r
380 Control c = new Control ();
\r
381 c.Anchor |= AnchorStyles.Bottom;
\r
382 c.Size = new Size (100, 100);
\r
384 Form f = new DisplayRectangleForm ();
\r
385 f.Controls.Add (c);
\r
386 f.ShowInTaskbar = false;
\r
389 Assert.AreEqual (new Size (100, 100), c.Size, "A1");
\r
394 private class DisplayRectangleForm : Form
\r
396 public override Rectangle DisplayRectangle
\r
398 get { return Rectangle.Empty; }
\r
404 public class DockingTests
\r
412 public void Init ()
\r
414 form = new Form ();
\r
415 form.ShowInTaskbar = false;
\r
416 form.Size = new Size (400, 400);
\r
417 panel = new Panel ();
\r
418 form.Controls.Add (panel);
\r
423 public void Cleanup ()
\r
428 void IncrementEventCount (object o, EventArgs args)
\r
434 public void TestDockSizeChangedEvent ()
\r
436 panel.SizeChanged += new EventHandler (IncrementEventCount);
\r
437 panel.Dock = DockStyle.Bottom;
\r
438 Assert.AreEqual (1, event_count);
\r
442 public void TestDockLocationChangedEvent ()
\r
444 panel.LocationChanged += new EventHandler (IncrementEventCount);
\r
445 panel.Dock = DockStyle.Bottom;
\r
446 Assert.AreEqual (1, event_count);
\r
450 public void TestDockFillFirst ()
\r
452 Form f = new Form ();
\r
453 f.ShowInTaskbar = false;
\r
455 Panel b1 = new Panel ();
\r
456 Panel b2 = new Panel ();
\r
458 b1.Dock = DockStyle.Fill;
\r
459 b2.Dock = DockStyle.Left;
\r
461 f.Controls.Add (b1);
\r
462 f.Controls.Add (b2);
\r
465 Assert.AreEqual (new Rectangle (b2.Width, 0, f.ClientRectangle.Width - b2.Width, f.ClientRectangle.Height), b1.Bounds, "A1");
\r
466 Assert.AreEqual (new Rectangle (0, 0, 200, f.ClientRectangle.Height), b2.Bounds, "A2");
\r
471 public void TestDockFillLast ()
\r
473 Form f = new Form ();
\r
474 f.ShowInTaskbar = false;
\r
476 Panel b1 = new Panel ();
\r
477 Panel b2 = new Panel ();
\r
479 b1.Dock = DockStyle.Fill;
\r
480 b2.Dock = DockStyle.Left;
\r
482 f.Controls.Add (b2);
\r
483 f.Controls.Add (b1);
\r
486 Assert.AreEqual (new Rectangle (0, 0, f.ClientRectangle.Width, f.ClientRectangle.Height), b1.Bounds, "B1");
\r
487 Assert.AreEqual (new Rectangle (0, 0, 200, f.ClientRectangle.Height), b2.Bounds, "B2");
\r
493 public class UndockingTests
\r
495 class TestPanel : Panel {
\r
497 public void InvokeSetBoundsCore ()
\r
499 SetBoundsCore (37, 37, 37, 37, BoundsSpecified.All);
\r
502 public void InvokeUpdateBounds ()
\r
504 UpdateBounds (37, 37, 37, 37);
\r
512 public void Init ()
\r
514 form = new Form ();
\r
515 form.ShowInTaskbar = false;
\r
516 form.Size = new Size (400, 400);
\r
517 panel = new TestPanel ();
\r
518 form.Controls.Add (panel);
\r
522 public void Cleanup ()
\r
528 public void TestUndockDefaultLocation ()
\r
530 Point loc = panel.Location;
\r
531 panel.Dock = DockStyle.Bottom;
\r
532 panel.Dock = DockStyle.None;
\r
533 Assert.AreEqual (loc, panel.Location);
\r
537 public void TestUndockDefaultLocationVisible ()
\r
540 Point loc = panel.Location;
\r
541 panel.Dock = DockStyle.Bottom;
\r
542 panel.Dock = DockStyle.None;
\r
543 Assert.AreEqual (loc, panel.Location);
\r
547 public void TestUndockExplicitLeft ()
\r
550 panel.Dock = DockStyle.Top;
\r
551 panel.Dock = DockStyle.None;
\r
552 Assert.AreEqual (150, panel.Left);
\r
556 public void TestUndockExplicitTop ()
\r
559 panel.Dock = DockStyle.Top;
\r
560 panel.Dock = DockStyle.None;
\r
561 Assert.AreEqual (150, panel.Top);
\r
565 public void TestUndockExplicitLocation ()
\r
567 panel.Location = new Point (50, 50);
\r
568 Point loc = panel.Location;
\r
569 panel.Dock = DockStyle.Bottom;
\r
570 panel.Dock = DockStyle.None;
\r
571 Assert.AreEqual (loc, panel.Location);
\r
575 public void TestUndockExplicitLeftVisible ()
\r
579 panel.Dock = DockStyle.Top;
\r
580 panel.Dock = DockStyle.None;
\r
581 Assert.AreEqual (150, panel.Left);
\r
585 public void TestUndockExplicitTopVisible ()
\r
589 panel.Dock = DockStyle.Top;
\r
590 panel.Dock = DockStyle.None;
\r
591 Assert.AreEqual (150, panel.Top);
\r
595 public void TestUndockExplicitLocationVisible ()
\r
598 panel.Location = new Point (50, 50);
\r
599 Point loc = panel.Location;
\r
600 panel.Dock = DockStyle.Bottom;
\r
601 panel.Dock = DockStyle.None;
\r
602 Assert.AreEqual (loc, panel.Location);
\r
606 [Category ("NotWorking")]
\r
607 public void TestUndockDefaultSize ()
\r
609 Size sz = panel.Size;
\r
610 panel.Dock = DockStyle.Fill;
\r
611 panel.Dock = DockStyle.None;
\r
612 Assert.AreEqual (sz, panel.Size);
\r
616 public void TestUndockExplicitHeight ()
\r
619 panel.Dock = DockStyle.Left;
\r
620 panel.Dock = DockStyle.None;
\r
621 Assert.AreEqual (50, panel.Height);
\r
625 [Category ("NotWorking")]
\r
626 public void TestUndockExplicitSize ()
\r
628 panel.Size = new Size (50, 50);
\r
629 Size sz = panel.Size;
\r
630 panel.Dock = DockStyle.Fill;
\r
631 panel.Dock = DockStyle.None;
\r
632 Assert.AreEqual (sz, panel.Size);
\r
636 public void TestUndockExplicitWidth ()
\r
639 panel.Dock = DockStyle.Top;
\r
640 panel.Dock = DockStyle.None;
\r
641 Assert.AreEqual (50, panel.Width);
\r
645 public void TestUndockExplicitHeightVisible ()
\r
649 panel.Dock = DockStyle.Left;
\r
650 panel.Dock = DockStyle.None;
\r
651 Assert.AreEqual (50, panel.Height);
\r
655 [Category ("NotWorking")]
\r
656 public void TestUndockExplicitSizeVisible ()
\r
659 panel.Size = new Size (50, 50);
\r
660 Size sz = panel.Size;
\r
661 panel.Dock = DockStyle.Fill;
\r
662 panel.Dock = DockStyle.None;
\r
663 Assert.AreEqual (sz, panel.Size);
\r
667 public void TestUndockExplicitWidthVisible ()
\r
671 panel.Dock = DockStyle.Top;
\r
672 panel.Dock = DockStyle.None;
\r
673 Assert.AreEqual (50, panel.Width);
\r
677 public void TestUndockSetBounds ()
\r
679 panel.SetBounds (50, 50, 50, 50, BoundsSpecified.All);
\r
680 panel.Dock = DockStyle.Top;
\r
681 panel.Dock = DockStyle.None;
\r
682 Assert.AreEqual (50, panel.Height, "Height");
\r
683 Assert.AreEqual (50, panel.Left, "Left");
\r
684 Assert.AreEqual (50, panel.Top, "Top");
\r
685 Assert.AreEqual (50, panel.Width, "Width");
\r
689 public void TestUndockSetBoundsVisible ()
\r
692 panel.SetBounds (50, 50, 50, 50, BoundsSpecified.All);
\r
693 panel.Dock = DockStyle.Top;
\r
694 panel.Dock = DockStyle.None;
\r
695 Assert.AreEqual (50, panel.Height, "Height");
\r
696 Assert.AreEqual (50, panel.Left, "Left");
\r
697 Assert.AreEqual (50, panel.Top, "Top");
\r
698 Assert.AreEqual (50, panel.Width, "Width");
\r
702 public void TestUndockSetBoundsCore ()
\r
704 panel.InvokeSetBoundsCore ();
\r
705 panel.Dock = DockStyle.Top;
\r
706 panel.Dock = DockStyle.None;
\r
707 Assert.AreEqual (37, panel.Height, "Height");
\r
708 Assert.AreEqual (37, panel.Left, "Left");
\r
709 Assert.AreEqual (37, panel.Top, "Top");
\r
710 Assert.AreEqual (37, panel.Width, "Width");
\r
714 public void TestUndockSetBoundsCoreVisible ()
\r
717 panel.InvokeSetBoundsCore ();
\r
718 panel.Dock = DockStyle.Top;
\r
719 panel.Dock = DockStyle.None;
\r
720 Assert.AreEqual (37, panel.Height, "Height");
\r
721 Assert.AreEqual (37, panel.Left, "Left");
\r
722 Assert.AreEqual (37, panel.Top, "Top");
\r
723 Assert.AreEqual (37, panel.Width, "Width");
\r
727 public void TestUndockUpdateBounds ()
\r
729 panel.InvokeUpdateBounds ();
\r
730 panel.Dock = DockStyle.Top;
\r
731 panel.Dock = DockStyle.None;
\r
732 Assert.AreEqual (37, panel.Height, "Height");
\r
733 Assert.AreEqual (37, panel.Left, "Left");
\r
734 Assert.AreEqual (37, panel.Top, "Top");
\r
735 Assert.AreEqual (37, panel.Width, "Width");
\r
739 public void TestUndockUpdateBoundsVisible ()
\r
742 panel.InvokeUpdateBounds ();
\r
743 panel.Dock = DockStyle.Top;
\r
744 panel.Dock = DockStyle.None;
\r
745 Assert.AreEqual (37, panel.Height, "Height");
\r
746 Assert.AreEqual (37, panel.Left, "Left");
\r
747 Assert.AreEqual (37, panel.Top, "Top");
\r
748 Assert.AreEqual (37, panel.Width, "Width");
\r