-using System;\r
-using System.Drawing;\r
-using System.Windows.Forms;\r
-\r
-using NUnit.Framework;\r
-\r
-namespace MonoTests.System.Windows.Forms\r
-{\r
- [TestFixture]\r
- public class DefaultLayoutTest\r
- {\r
- int event_count;\r
- LayoutEventArgs most_recent_args;\r
-\r
- void p_Layout (object sender, LayoutEventArgs e)\r
- {\r
- event_count ++;\r
- most_recent_args = e;\r
- }\r
-\r
- [Test]\r
- public void AnchorLayoutEvents ()\r
- {\r
- Panel p;\r
- Button b;\r
-\r
- p = new Panel ();\r
-\r
- b = new Button ();\r
- p.Controls.Add (b);\r
-\r
- p.Layout += new LayoutEventHandler (p_Layout);\r
-\r
- /* set the button's anchor to something different */\r
- b.Anchor = AnchorStyles.Bottom;\r
- Assert.AreEqual (1, event_count, "1");\r
- Assert.AreEqual ("Anchor", most_recent_args.AffectedProperty, "2");\r
-\r
- /* reset it to something new with the panel's layout suspended */\r
- event_count = 0;\r
- p.SuspendLayout ();\r
- b.Anchor = AnchorStyles.Top;\r
- Assert.AreEqual (0, event_count, "3");\r
- p.ResumeLayout ();\r
- Assert.AreEqual (1, event_count, "4");\r
- Assert.AreEqual (null, most_recent_args.AffectedProperty, "5");\r
-\r
- /* with the anchor style set to something, resize the parent */\r
- event_count = 0;\r
- p.Size = new Size (500, 500);\r
- Assert.AreEqual (1, event_count, "6");\r
- Assert.AreEqual ("Bounds", most_recent_args.AffectedProperty, "7");\r
-\r
- /* now try it with layout suspended */\r
- event_count = 0;\r
- p.SuspendLayout ();\r
- p.Size = new Size (400, 400);\r
- Assert.AreEqual (0, event_count, "8");\r
- p.ResumeLayout ();\r
- Assert.AreEqual (1, event_count, "9");\r
- Assert.AreEqual (null, most_recent_args.AffectedProperty, "10");\r
-\r
- /* with the anchor style set to something, resize the child */\r
- event_count = 0;\r
- b.Size = new Size (100, 100);\r
- Assert.AreEqual (1, event_count, "11");\r
- Assert.AreEqual ("Bounds", most_recent_args.AffectedProperty, "12");\r
-\r
- /* and again with layout suspended */\r
- event_count = 0;\r
- p.SuspendLayout ();\r
- b.Size = new Size (200, 200);\r
- Assert.AreEqual (0, event_count, "13");\r
- p.ResumeLayout ();\r
- Assert.AreEqual (1, event_count, "14");\r
- Assert.AreEqual (null, most_recent_args.AffectedProperty, "15");\r
- }\r
-\r
- [Test]\r
- public void AnchorTopLeftTest ()\r
- {\r
- Form f = new Form ();\r
- f.ShowInTaskbar = false;\r
-\r
- f.Size = new Size (200, 200);\r
-\r
- Button b = new Button ();\r
- b.Size = new Size (100, 100);\r
- b.Anchor = AnchorStyles.Top | AnchorStyles.Left;\r
-\r
- f.Controls.Add (b);\r
-\r
- Assert.AreEqual (0, b.Left, "1");\r
- Assert.AreEqual (0, b.Top, "2");\r
- f.Size = new Size (300, 300);\r
-\r
- Assert.AreEqual (0, b.Left, "3");\r
- Assert.AreEqual (0, b.Top, "4");\r
- \r
- f.Dispose ();\r
- }\r
-\r
- [Test]\r
- public void AnchorTopRightTest ()\r
- {\r
- Form f = new Form ();\r
- f.ShowInTaskbar = false;\r
-\r
- f.Size = new Size (200, 200);\r
-\r
- Button b = new Button ();\r
- b.Size = new Size (100, 100);\r
- b.Anchor = AnchorStyles.Top | AnchorStyles.Right;\r
-\r
- f.Controls.Add (b);\r
-\r
- Assert.AreEqual (0, b.Left, "1");\r
- Assert.AreEqual (0, b.Top, "2");\r
-\r
- f.Size = new Size (300, 300);\r
-\r
- Assert.AreEqual (100, b.Left, "3");\r
- Assert.AreEqual (0, b.Top, "4");\r
- \r
- f.Dispose ();\r
- }\r
-\r
- [Test]\r
- public void AnchorLeftRightTest ()\r
- {\r
- Form f = new Form ();\r
- f.ShowInTaskbar = false;\r
-\r
- f.Size = new Size (200, 200);\r
-\r
- Button b = new Button ();\r
- b.Size = new Size (100, 100);\r
- b.Anchor = AnchorStyles.Left | AnchorStyles.Right;\r
-\r
- f.Controls.Add (b);\r
-\r
- Assert.AreEqual (0, b.Left, "1");\r
- Assert.AreEqual (100, b.Right, "2");\r
-\r
- f.Size = new Size (300, 300);\r
-\r
- Assert.AreEqual (0, b.Left, "3");\r
- Assert.AreEqual (200, b.Right, "4");\r
- \r
- f.Dispose ();\r
- }\r
-\r
- [Test]\r
- public void AnchorBottomLeftTest ()\r
- {\r
- Form f = new Form ();\r
- f.ShowInTaskbar = false;\r
-\r
- f.Size = new Size (200, 200);\r
-\r
- Button b = new Button ();\r
- b.Size = new Size (100, 100);\r
- b.Anchor = AnchorStyles.Left | AnchorStyles.Bottom;\r
-\r
- f.Controls.Add (b);\r
-\r
- Assert.AreEqual (0, b.Left, "1");\r
- Assert.AreEqual (0, b.Top, "2");\r
-\r
- f.Size = new Size (300, 300);\r
-\r
- Assert.AreEqual (0, b.Left, "3");\r
- Assert.AreEqual (100, b.Top, "4");\r
- \r
- f.Dispose ();\r
- }\r
-\r
- [Test]\r
- public void AnchorBottomRightTest ()\r
- {\r
- Form f = new Form ();\r
- f.ShowInTaskbar = false;\r
-\r
- f.Size = new Size (200, 200);\r
-\r
- Button b = new Button ();\r
- b.Size = new Size (100, 100);\r
- b.Anchor = AnchorStyles.Right | AnchorStyles.Bottom;\r
-\r
- f.Controls.Add (b);\r
-\r
- Assert.AreEqual (0, b.Left, "1");\r
- Assert.AreEqual (0, b.Top, "2");\r
-\r
- f.Size = new Size (300, 300);\r
-\r
- Assert.AreEqual (100, b.Left, "3");\r
- Assert.AreEqual (100, b.Top, "4");\r
- \r
- f.Dispose ();\r
- }\r
-\r
- [Test]\r
- public void AnchorTopBottomTest ()\r
- {\r
- Form f = new Form ();\r
- f.ShowInTaskbar = false;\r
-\r
- f.Size = new Size (200, 200);\r
-\r
- Button b = new Button ();\r
- b.Size = new Size (100, 100);\r
- b.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;\r
-\r
- f.Controls.Add (b);\r
-\r
- Assert.AreEqual (0, b.Top, "1");\r
- Assert.AreEqual (100, b.Bottom, "2");\r
-\r
- f.Size = new Size (300, 300);\r
-\r
- Assert.AreEqual (0, b.Top, "3");\r
- Assert.AreEqual (200, b.Bottom, "4");\r
- \r
- f.Dispose ();\r
- }\r
-\r
- // Unit test version of the test case in bug #80336\r
- [Test]\r
- public void AnchorSuspendLayoutTest ()\r
- {\r
- Form f = new Form ();\r
- f.ShowInTaskbar = false;\r
-\r
- f.SuspendLayout ();\r
-\r
- Button b = new Button ();\r
- b.Size = new Size (100, 100);\r
-\r
- f.Controls.Add (b);\r
-\r
- f.Size = new Size (200, 200);\r
-\r
- b.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;\r
-\r
- Assert.AreEqual (0, b.Top, "1");\r
- Assert.AreEqual (0, b.Left, "2");\r
-\r
- f.Size = new Size (300, 300);\r
-\r
- Assert.AreEqual (0, b.Top, "3");\r
- Assert.AreEqual (0, b.Left, "4");\r
-\r
- f.ResumeLayout();\r
-\r
- Assert.AreEqual (100, b.Top, "5");\r
- Assert.AreEqual (100, b.Left, "6");\r
- \r
- f.Dispose ();\r
- }\r
-\r
- // another variant of AnchorSuspendLayoutTest1, with\r
- // the SuspendLayout moved after the Anchor\r
- // assignment.\r
- [Test]\r
- public void AnchorSuspendLayoutTest2 ()\r
- {\r
- Form f = new Form ();\r
- f.ShowInTaskbar = false;\r
-\r
- Button b = new Button ();\r
- b.Size = new Size (100, 100);\r
-\r
- f.Controls.Add (b);\r
-\r
- f.Size = new Size (200, 200);\r
-\r
- b.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;\r
-\r
- Assert.AreEqual (0, b.Top, "1");\r
- Assert.AreEqual (0, b.Left, "2");\r
-\r
- f.SuspendLayout ();\r
-\r
- f.Size = new Size (300, 300);\r
-\r
- Assert.AreEqual (0, b.Top, "3");\r
- Assert.AreEqual (0, b.Left, "4");\r
-\r
- f.ResumeLayout();\r
-\r
- Assert.AreEqual (100, b.Top, "5");\r
- Assert.AreEqual (100, b.Left, "6");\r
- \r
- f.Dispose ();\r
- }\r
-\r
- // yet another variant, this time with no Suspend/Resume.\r
- [Test]\r
- public void AnchorSuspendLayoutTest3 ()\r
- {\r
- Form f = new Form ();\r
- f.ShowInTaskbar = false;\r
-\r
- Button b = new Button ();\r
- b.Size = new Size (100, 100);\r
-\r
- f.Controls.Add (b);\r
-\r
- f.Size = new Size (200, 200);\r
-\r
- b.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;\r
-\r
- Assert.AreEqual (0, b.Top, "1");\r
- Assert.AreEqual (0, b.Left, "2");\r
-\r
- f.Size = new Size (300, 300);\r
-\r
- Assert.AreEqual (100, b.Top, "5");\r
- Assert.AreEqual (100, b.Left, "6");\r
- \r
- f.Dispose ();\r
- }\r
-\r
- private string event_raised = string.Empty;\r
-\r
- [Test]\r
- public void TestAnchorDockInteraction ()\r
- {\r
- Panel p = new Panel ();\r
- p.DockChanged += new EventHandler (DockChanged_Handler);\r
-\r
- Assert.AreEqual (AnchorStyles.Top | AnchorStyles.Left, p.Anchor, "A1");\r
- Assert.AreEqual (DockStyle.None, p.Dock, "A2");\r
-\r
- p.Dock = DockStyle.Right;\r
- Assert.AreEqual (AnchorStyles.Top | AnchorStyles.Left, p.Anchor, "A3");\r
- Assert.AreEqual (DockStyle.Right, p.Dock, "A4");\r
- Assert.AreEqual ("DockStyleChanged", event_raised, "A5");\r
- event_raised = string.Empty;\r
-\r
- p.Anchor = AnchorStyles.Bottom;\r
- Assert.AreEqual (AnchorStyles.Bottom, p.Anchor, "A6");\r
- Assert.AreEqual (DockStyle.None, p.Dock, "A7");\r
- Assert.AreEqual (string.Empty, event_raised, "A8");\r
-\r
- p.Dock = DockStyle.Fill;\r
- Assert.AreEqual (AnchorStyles.Top | AnchorStyles.Left, p.Anchor, "A9");\r
- Assert.AreEqual (DockStyle.Fill, p.Dock, "A10");\r
- Assert.AreEqual ("DockStyleChanged", event_raised, "A11");\r
- event_raised = string.Empty;\r
-\r
- p.Anchor = AnchorStyles.Top | AnchorStyles.Left;\r
- Assert.AreEqual (AnchorStyles.Top | AnchorStyles.Left, p.Anchor, "A12");\r
- Assert.AreEqual (DockStyle.Fill, p.Dock, "A13");\r
- Assert.AreEqual (string.Empty, event_raised, "A14");\r
-\r
- p.Dock = DockStyle.None;\r
- Assert.AreEqual (AnchorStyles.Top | AnchorStyles.Left, p.Anchor, "A15");\r
- Assert.AreEqual (DockStyle.None, p.Dock, "A16");\r
- Assert.AreEqual ("DockStyleChanged", event_raised, "A17");\r
- event_raised = string.Empty;\r
-\r
- p.Anchor = AnchorStyles.Bottom;\r
- p.Dock = DockStyle.None;\r
- Assert.AreEqual (AnchorStyles.Bottom, p.Anchor, "A18");\r
- Assert.AreEqual (DockStyle.None, p.Dock, "A19");\r
- Assert.AreEqual (string.Empty, event_raised, "A20");\r
- }\r
-\r
- public void DockChanged_Handler (object sender, EventArgs e)\r
- {\r
- event_raised += "DockStyleChanged";\r
- }\r
-\r
- [Test] // bug #80917\r
- [Category ("NotWorking")]\r
- public void BehaviorOverriddenDisplayRectangle ()\r
- {\r
- Control c = new Control ();\r
- c.Anchor |= AnchorStyles.Bottom;\r
- c.Size = new Size (100, 100);\r
-\r
- Form f = new DisplayRectangleForm ();\r
- f.Controls.Add (c);\r
- f.ShowInTaskbar = false;\r
- f.Show ();\r
- \r
- Assert.AreEqual (new Size (100, 100), c.Size, "A1");\r
- \r
- f.Dispose ();\r
- }\r
-\r
- private class DisplayRectangleForm : Form\r
- {\r
- public override Rectangle DisplayRectangle\r
- {\r
- get { return Rectangle.Empty; }\r
- }\r
- }\r
- }\r
-\r
- [TestFixture] \r
- public class DockingTests\r
- {\r
- Form form;\r
- Panel panel;\r
-\r
- int event_count;\r
-\r
- [SetUp]\r
- public void Init ()\r
- {\r
- form = new Form ();\r
- form.ShowInTaskbar = false;\r
- form.Size = new Size (400, 400);\r
- panel = new Panel ();\r
- form.Controls.Add (panel);\r
- event_count = 0;\r
- }\r
-\r
- [TearDown]\r
- public void Cleanup ()\r
- {\r
- form.Dispose ();\r
- }\r
-\r
- void IncrementEventCount (object o, EventArgs args)\r
- {\r
- event_count++;\r
- }\r
-\r
- [Test]\r
- public void TestDockSizeChangedEvent ()\r
- {\r
- panel.SizeChanged += new EventHandler (IncrementEventCount);\r
- panel.Dock = DockStyle.Bottom;\r
- Assert.AreEqual (1, event_count);\r
- }\r
-\r
- [Test]\r
- public void TestDockLocationChangedEvent ()\r
- {\r
- panel.LocationChanged += new EventHandler (IncrementEventCount);\r
- panel.Dock = DockStyle.Bottom;\r
- Assert.AreEqual (1, event_count);\r
- }\r
-\r
- [Test]\r
- public void TestDockFillFirst ()\r
- {\r
- Form f = new Form ();\r
- f.ShowInTaskbar = false;\r
-\r
- Panel b1 = new Panel ();\r
- Panel b2 = new Panel ();\r
-\r
- b1.Dock = DockStyle.Fill;\r
- b2.Dock = DockStyle.Left;\r
-\r
- f.Controls.Add (b1);\r
- f.Controls.Add (b2);\r
-\r
- f.Show ();\r
- Assert.AreEqual (new Rectangle (b2.Width, 0, f.ClientRectangle.Width - b2.Width, f.ClientRectangle.Height), b1.Bounds, "A1");\r
- Assert.AreEqual (new Rectangle (0, 0, 200, f.ClientRectangle.Height), b2.Bounds, "A2");\r
- f.Dispose ();\r
- }\r
-\r
- [Test]\r
- public void TestDockFillLast ()\r
- {\r
- Form f = new Form ();\r
- f.ShowInTaskbar = false;\r
-\r
- Panel b1 = new Panel ();\r
- Panel b2 = new Panel ();\r
-\r
- b1.Dock = DockStyle.Fill;\r
- b2.Dock = DockStyle.Left;\r
-\r
- f.Controls.Add (b2);\r
- f.Controls.Add (b1);\r
-\r
- f.Show ();\r
- Assert.AreEqual (new Rectangle (0, 0, f.ClientRectangle.Width, f.ClientRectangle.Height), b1.Bounds, "B1");\r
- Assert.AreEqual (new Rectangle (0, 0, 200, f.ClientRectangle.Height), b2.Bounds, "B2");\r
- f.Dispose ();\r
- }\r
- }\r
-\r
- [TestFixture] \r
- public class UndockingTests\r
- {\r
- class TestPanel : Panel {\r
-\r
- public void InvokeSetBoundsCore ()\r
- {\r
- SetBoundsCore (37, 37, 37, 37, BoundsSpecified.All);\r
- }\r
-\r
- public void InvokeUpdateBounds ()\r
- {\r
- UpdateBounds (37, 37, 37, 37);\r
- }\r
- }\r
-\r
- Form form;\r
- TestPanel panel;\r
-\r
- [SetUp]\r
- public void Init ()\r
- {\r
- form = new Form ();\r
- form.ShowInTaskbar = false;\r
- form.Size = new Size (400, 400);\r
- panel = new TestPanel ();\r
- form.Controls.Add (panel);\r
- }\r
-\r
- [TearDown]\r
- public void Cleanup ()\r
- {\r
- form.Dispose ();\r
- }\r
-\r
- [Test]\r
- public void TestUndockDefaultLocation ()\r
- {\r
- Point loc = panel.Location;\r
- panel.Dock = DockStyle.Bottom;\r
- panel.Dock = DockStyle.None;\r
- Assert.AreEqual (loc, panel.Location);\r
- }\r
-\r
- [Test]\r
- public void TestUndockDefaultLocationVisible ()\r
- {\r
- form.Show ();\r
- Point loc = panel.Location;\r
- panel.Dock = DockStyle.Bottom;\r
- panel.Dock = DockStyle.None;\r
- Assert.AreEqual (loc, panel.Location);\r
- }\r
-\r
- [Test]\r
- public void TestUndockExplicitLeft ()\r
- {\r
- panel.Left = 150;\r
- panel.Dock = DockStyle.Top;\r
- panel.Dock = DockStyle.None;\r
- Assert.AreEqual (150, panel.Left);\r
- }\r
-\r
- [Test]\r
- public void TestUndockExplicitTop ()\r
- {\r
- panel.Top = 150;\r
- panel.Dock = DockStyle.Top;\r
- panel.Dock = DockStyle.None;\r
- Assert.AreEqual (150, panel.Top);\r
- }\r
-\r
- [Test]\r
- public void TestUndockExplicitLocation ()\r
- {\r
- panel.Location = new Point (50, 50);\r
- Point loc = panel.Location;\r
- panel.Dock = DockStyle.Bottom;\r
- panel.Dock = DockStyle.None;\r
- Assert.AreEqual (loc, panel.Location);\r
- }\r
-\r
- [Test]\r
- public void TestUndockExplicitLeftVisible ()\r
- {\r
- form.Show ();\r
- panel.Left = 150;\r
- panel.Dock = DockStyle.Top;\r
- panel.Dock = DockStyle.None;\r
- Assert.AreEqual (150, panel.Left);\r
- }\r
-\r
- [Test]\r
- public void TestUndockExplicitTopVisible ()\r
- {\r
- form.Show ();\r
- panel.Top = 150;\r
- panel.Dock = DockStyle.Top;\r
- panel.Dock = DockStyle.None;\r
- Assert.AreEqual (150, panel.Top);\r
- }\r
-\r
- [Test]\r
- public void TestUndockExplicitLocationVisible ()\r
- {\r
- form.Show ();\r
- panel.Location = new Point (50, 50);\r
- Point loc = panel.Location;\r
- panel.Dock = DockStyle.Bottom;\r
- panel.Dock = DockStyle.None;\r
- Assert.AreEqual (loc, panel.Location);\r
- }\r
-\r
- [Test]\r
- [Category ("NotWorking")]\r
- public void TestUndockDefaultSize ()\r
- {\r
- Size sz = panel.Size;\r
- panel.Dock = DockStyle.Fill;\r
- panel.Dock = DockStyle.None;\r
- Assert.AreEqual (sz, panel.Size);\r
- }\r
-\r
- [Test]\r
- public void TestUndockExplicitHeight ()\r
- {\r
- panel.Height = 50;\r
- panel.Dock = DockStyle.Left;\r
- panel.Dock = DockStyle.None;\r
- Assert.AreEqual (50, panel.Height);\r
- }\r
-\r
- [Test]\r
- [Category ("NotWorking")]\r
- public void TestUndockExplicitSize ()\r
- {\r
- panel.Size = new Size (50, 50);\r
- Size sz = panel.Size;\r
- panel.Dock = DockStyle.Fill;\r
- panel.Dock = DockStyle.None;\r
- Assert.AreEqual (sz, panel.Size);\r
- }\r
-\r
- [Test]\r
- public void TestUndockExplicitWidth ()\r
- {\r
- panel.Width = 50;\r
- panel.Dock = DockStyle.Top;\r
- panel.Dock = DockStyle.None;\r
- Assert.AreEqual (50, panel.Width);\r
- }\r
-\r
- [Test]\r
- public void TestUndockExplicitHeightVisible ()\r
- {\r
- form.Show ();\r
- panel.Height = 50;\r
- panel.Dock = DockStyle.Left;\r
- panel.Dock = DockStyle.None;\r
- Assert.AreEqual (50, panel.Height);\r
- }\r
-\r
- [Test]\r
- [Category ("NotWorking")]\r
- public void TestUndockExplicitSizeVisible ()\r
- {\r
- form.Show ();\r
- panel.Size = new Size (50, 50);\r
- Size sz = panel.Size;\r
- panel.Dock = DockStyle.Fill;\r
- panel.Dock = DockStyle.None;\r
- Assert.AreEqual (sz, panel.Size);\r
- }\r
-\r
- [Test]\r
- public void TestUndockExplicitWidthVisible ()\r
- {\r
- form.Show ();\r
- panel.Width = 50;\r
- panel.Dock = DockStyle.Top;\r
- panel.Dock = DockStyle.None;\r
- Assert.AreEqual (50, panel.Width);\r
- }\r
-\r
- [Test]\r
- public void TestUndockSetBounds ()\r
- {\r
- panel.SetBounds (50, 50, 50, 50, BoundsSpecified.All);\r
- panel.Dock = DockStyle.Top;\r
- panel.Dock = DockStyle.None;\r
- Assert.AreEqual (50, panel.Height, "Height");\r
- Assert.AreEqual (50, panel.Left, "Left");\r
- Assert.AreEqual (50, panel.Top, "Top");\r
- Assert.AreEqual (50, panel.Width, "Width");\r
- }\r
-\r
- [Test]\r
- public void TestUndockSetBoundsVisible ()\r
- {\r
- form.Show ();\r
- panel.SetBounds (50, 50, 50, 50, BoundsSpecified.All);\r
- panel.Dock = DockStyle.Top;\r
- panel.Dock = DockStyle.None;\r
- Assert.AreEqual (50, panel.Height, "Height");\r
- Assert.AreEqual (50, panel.Left, "Left");\r
- Assert.AreEqual (50, panel.Top, "Top");\r
- Assert.AreEqual (50, panel.Width, "Width");\r
- }\r
-\r
- [Test]\r
- public void TestUndockSetBoundsCore ()\r
- {\r
- panel.InvokeSetBoundsCore ();\r
- panel.Dock = DockStyle.Top;\r
- panel.Dock = DockStyle.None;\r
- Assert.AreEqual (37, panel.Height, "Height");\r
- Assert.AreEqual (37, panel.Left, "Left");\r
- Assert.AreEqual (37, panel.Top, "Top");\r
- Assert.AreEqual (37, panel.Width, "Width");\r
- }\r
-\r
- [Test]\r
- public void TestUndockSetBoundsCoreVisible ()\r
- {\r
- form.Show ();\r
- panel.InvokeSetBoundsCore ();\r
- panel.Dock = DockStyle.Top;\r
- panel.Dock = DockStyle.None;\r
- Assert.AreEqual (37, panel.Height, "Height");\r
- Assert.AreEqual (37, panel.Left, "Left");\r
- Assert.AreEqual (37, panel.Top, "Top");\r
- Assert.AreEqual (37, panel.Width, "Width");\r
- }\r
-\r
- [Test]\r
- public void TestUndockUpdateBounds ()\r
- {\r
- panel.InvokeUpdateBounds ();\r
- panel.Dock = DockStyle.Top;\r
- panel.Dock = DockStyle.None;\r
- Assert.AreEqual (37, panel.Height, "Height");\r
- Assert.AreEqual (37, panel.Left, "Left");\r
- Assert.AreEqual (37, panel.Top, "Top");\r
- Assert.AreEqual (37, panel.Width, "Width");\r
- }\r
-\r
- [Test]\r
- public void TestUndockUpdateBoundsVisible ()\r
- {\r
- form.Show ();\r
- panel.InvokeUpdateBounds ();\r
- panel.Dock = DockStyle.Top;\r
- panel.Dock = DockStyle.None;\r
- Assert.AreEqual (37, panel.Height, "Height");\r
- Assert.AreEqual (37, panel.Left, "Left");\r
- Assert.AreEqual (37, panel.Top, "Top");\r
- Assert.AreEqual (37, panel.Width, "Width");\r
- }\r
- }\r
-}\r
+using System;
+using System.Drawing;
+using System.Windows.Forms;
+
+using NUnit.Framework;
+#if NET_2_0
+using System.Collections.Generic;
+#endif
+namespace MonoTests.System.Windows.Forms
+{
+ [TestFixture]
+ public class DefaultLayoutTest : TestHelper
+ {
+ int event_count;
+ LayoutEventArgs most_recent_args;
+
+ void p_Layout (object sender, LayoutEventArgs e)
+ {
+ event_count ++;
+ most_recent_args = e;
+ }
+
+ [Test]
+ public void AnchorLayoutEvents ()
+ {
+ Panel p;
+ Button b;
+
+ p = new Panel ();
+
+ b = new Button ();
+ p.Controls.Add (b);
+
+ p.Layout += new LayoutEventHandler (p_Layout);
+
+ /* set the button's anchor to something different */
+ b.Anchor = AnchorStyles.Bottom;
+ Assert.AreEqual (1, event_count, "1");
+ Assert.AreEqual ("Anchor", most_recent_args.AffectedProperty, "2");
+
+ /* reset it to something new with the panel's layout suspended */
+ event_count = 0;
+ p.SuspendLayout ();
+ b.Anchor = AnchorStyles.Top;
+ Assert.AreEqual (0, event_count, "3");
+ p.ResumeLayout ();
+ Assert.AreEqual (1, event_count, "4");
+ Assert.AreEqual (null, most_recent_args.AffectedProperty, "5");
+
+ /* with the anchor style set to something, resize the parent */
+ event_count = 0;
+ p.Size = new Size (500, 500);
+ Assert.AreEqual (1, event_count, "6");
+ Assert.AreEqual ("Bounds", most_recent_args.AffectedProperty, "7");
+
+ /* now try it with layout suspended */
+ event_count = 0;
+ p.SuspendLayout ();
+ p.Size = new Size (400, 400);
+ Assert.AreEqual (0, event_count, "8");
+ p.ResumeLayout ();
+ Assert.AreEqual (1, event_count, "9");
+ Assert.AreEqual (null, most_recent_args.AffectedProperty, "10");
+
+ /* with the anchor style set to something, resize the child */
+ event_count = 0;
+ b.Size = new Size (100, 100);
+ Assert.AreEqual (1, event_count, "11");
+ Assert.AreEqual ("Bounds", most_recent_args.AffectedProperty, "12");
+
+ /* and again with layout suspended */
+ event_count = 0;
+ p.SuspendLayout ();
+ b.Size = new Size (200, 200);
+ Assert.AreEqual (0, event_count, "13");
+ p.ResumeLayout ();
+ Assert.AreEqual (1, event_count, "14");
+ Assert.AreEqual (null, most_recent_args.AffectedProperty, "15");
+ }
+
+ [Test]
+ public void AnchorTopLeftTest ()
+ {
+ Form f = new Form ();
+ f.ShowInTaskbar = false;
+
+ f.Size = new Size (200, 200);
+
+ Button b = new Button ();
+ b.Size = new Size (100, 100);
+ b.Anchor = AnchorStyles.Top | AnchorStyles.Left;
+
+ f.Controls.Add (b);
+
+ Assert.AreEqual (0, b.Left, "1");
+ Assert.AreEqual (0, b.Top, "2");
+ f.Size = new Size (300, 300);
+
+ Assert.AreEqual (0, b.Left, "3");
+ Assert.AreEqual (0, b.Top, "4");
+
+ f.Dispose ();
+ }
+
+ [Test]
+ public void AnchorTopRightTest ()
+ {
+ Form f = new Form ();
+ f.ShowInTaskbar = false;
+
+ f.Size = new Size (200, 200);
+
+ Button b = new Button ();
+ b.Size = new Size (100, 100);
+ b.Anchor = AnchorStyles.Top | AnchorStyles.Right;
+
+ f.Controls.Add (b);
+
+ Assert.AreEqual (0, b.Left, "1");
+ Assert.AreEqual (0, b.Top, "2");
+
+ f.Size = new Size (300, 300);
+
+ Assert.AreEqual (100, b.Left, "3");
+ Assert.AreEqual (0, b.Top, "4");
+
+ f.Dispose ();
+ }
+
+ [Test]
+ public void AnchorLeftRightTest ()
+ {
+ Form f = new Form ();
+ f.ShowInTaskbar = false;
+
+ f.Size = new Size (200, 200);
+
+ Button b = new Button ();
+ b.Size = new Size (100, 100);
+ b.Anchor = AnchorStyles.Left | AnchorStyles.Right;
+
+ f.Controls.Add (b);
+
+ Assert.AreEqual (0, b.Left, "1");
+ Assert.AreEqual (100, b.Right, "2");
+
+ f.Size = new Size (300, 300);
+
+ Assert.AreEqual (0, b.Left, "3");
+ Assert.AreEqual (200, b.Right, "4");
+
+ f.Dispose ();
+ }
+
+ [Test]
+ public void AnchorBottomLeftTest ()
+ {
+ Form f = new Form ();
+ f.ShowInTaskbar = false;
+
+ f.Size = new Size (200, 200);
+
+ Button b = new Button ();
+ b.Size = new Size (100, 100);
+ b.Anchor = AnchorStyles.Left | AnchorStyles.Bottom;
+
+ f.Controls.Add (b);
+
+ Assert.AreEqual (0, b.Left, "1");
+ Assert.AreEqual (0, b.Top, "2");
+
+ f.Size = new Size (300, 300);
+
+ Assert.AreEqual (0, b.Left, "3");
+ Assert.AreEqual (100, b.Top, "4");
+
+ f.Dispose ();
+ }
+
+ [Test]
+ public void AnchorBottomRightTest ()
+ {
+ Form f = new Form ();
+ f.ShowInTaskbar = false;
+
+ f.Size = new Size (200, 200);
+
+ Button b = new Button ();
+ b.Size = new Size (100, 100);
+ b.Anchor = AnchorStyles.Right | AnchorStyles.Bottom;
+
+ f.Controls.Add (b);
+
+ Assert.AreEqual (0, b.Left, "1");
+ Assert.AreEqual (0, b.Top, "2");
+
+ f.Size = new Size (300, 300);
+
+ Assert.AreEqual (100, b.Left, "3");
+ Assert.AreEqual (100, b.Top, "4");
+
+ f.Dispose ();
+ }
+
+ [Test]
+ public void AnchorTopBottomTest ()
+ {
+ Form f = new Form ();
+ f.ShowInTaskbar = false;
+
+ f.Size = new Size (200, 200);
+
+ Button b = new Button ();
+ b.Size = new Size (100, 100);
+ b.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
+
+ f.Controls.Add (b);
+
+ Assert.AreEqual (0, b.Top, "1");
+ Assert.AreEqual (100, b.Bottom, "2");
+
+ f.Size = new Size (300, 300);
+
+ Assert.AreEqual (0, b.Top, "3");
+ Assert.AreEqual (200, b.Bottom, "4");
+
+ f.Dispose ();
+ }
+
+ // Unit test version of the test case in bug #80336
+ [Test]
+ public void AnchorSuspendLayoutTest ()
+ {
+ Form f = new Form ();
+ f.ShowInTaskbar = false;
+
+ f.SuspendLayout ();
+
+ Button b = new Button ();
+ b.Size = new Size (100, 100);
+
+ f.Controls.Add (b);
+
+ f.Size = new Size (200, 200);
+
+ b.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
+
+ Assert.AreEqual (0, b.Top, "1");
+ Assert.AreEqual (0, b.Left, "2");
+
+ f.Size = new Size (300, 300);
+
+ Assert.AreEqual (0, b.Top, "3");
+ Assert.AreEqual (0, b.Left, "4");
+
+ f.ResumeLayout();
+
+ Assert.AreEqual (100, b.Top, "5");
+ Assert.AreEqual (100, b.Left, "6");
+
+ f.Dispose ();
+ }
+
+ // another variant of AnchorSuspendLayoutTest1, with
+ // the SuspendLayout moved after the Anchor
+ // assignment.
+ [Test]
+ public void AnchorSuspendLayoutTest2 ()
+ {
+ Form f = new Form ();
+ f.ShowInTaskbar = false;
+
+ Button b = new Button ();
+ b.Size = new Size (100, 100);
+
+ f.Controls.Add (b);
+
+ f.Size = new Size (200, 200);
+
+ b.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
+
+ Assert.AreEqual (0, b.Top, "1");
+ Assert.AreEqual (0, b.Left, "2");
+
+ f.SuspendLayout ();
+
+ f.Size = new Size (300, 300);
+
+ Assert.AreEqual (0, b.Top, "3");
+ Assert.AreEqual (0, b.Left, "4");
+
+ f.ResumeLayout();
+
+ Assert.AreEqual (100, b.Top, "5");
+ Assert.AreEqual (100, b.Left, "6");
+
+ f.Dispose ();
+ }
+
+ // yet another variant, this time with no Suspend/Resume.
+ [Test]
+ public void AnchorSuspendLayoutTest3 ()
+ {
+ Form f = new Form ();
+ f.ShowInTaskbar = false;
+
+ Button b = new Button ();
+ b.Size = new Size (100, 100);
+
+ f.Controls.Add (b);
+
+ f.Size = new Size (200, 200);
+
+ b.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
+
+ Assert.AreEqual (0, b.Top, "1");
+ Assert.AreEqual (0, b.Left, "2");
+
+ f.Size = new Size (300, 300);
+
+ Assert.AreEqual (100, b.Top, "5");
+ Assert.AreEqual (100, b.Left, "6");
+
+ f.Dispose ();
+ }
+
+ private string event_raised = string.Empty;
+
+ [Test]
+ public void TestAnchorDockInteraction ()
+ {
+ Panel p = new Panel ();
+ p.DockChanged += new EventHandler (DockChanged_Handler);
+
+ Assert.AreEqual (AnchorStyles.Top | AnchorStyles.Left, p.Anchor, "A1");
+ Assert.AreEqual (DockStyle.None, p.Dock, "A2");
+
+ p.Dock = DockStyle.Right;
+ Assert.AreEqual (AnchorStyles.Top | AnchorStyles.Left, p.Anchor, "A3");
+ Assert.AreEqual (DockStyle.Right, p.Dock, "A4");
+ Assert.AreEqual ("DockStyleChanged", event_raised, "A5");
+ event_raised = string.Empty;
+
+ p.Anchor = AnchorStyles.Bottom;
+ Assert.AreEqual (AnchorStyles.Bottom, p.Anchor, "A6");
+ Assert.AreEqual (DockStyle.None, p.Dock, "A7");
+ Assert.AreEqual (string.Empty, event_raised, "A8");
+
+ p.Dock = DockStyle.Fill;
+ Assert.AreEqual (AnchorStyles.Top | AnchorStyles.Left, p.Anchor, "A9");
+ Assert.AreEqual (DockStyle.Fill, p.Dock, "A10");
+ Assert.AreEqual ("DockStyleChanged", event_raised, "A11");
+ event_raised = string.Empty;
+
+ p.Anchor = AnchorStyles.Top | AnchorStyles.Left;
+ Assert.AreEqual (AnchorStyles.Top | AnchorStyles.Left, p.Anchor, "A12");
+ Assert.AreEqual (DockStyle.Fill, p.Dock, "A13");
+ Assert.AreEqual (string.Empty, event_raised, "A14");
+
+ p.Dock = DockStyle.None;
+ Assert.AreEqual (AnchorStyles.Top | AnchorStyles.Left, p.Anchor, "A15");
+ Assert.AreEqual (DockStyle.None, p.Dock, "A16");
+ Assert.AreEqual ("DockStyleChanged", event_raised, "A17");
+ event_raised = string.Empty;
+
+ p.Anchor = AnchorStyles.Bottom;
+ p.Dock = DockStyle.None;
+ Assert.AreEqual (AnchorStyles.Bottom, p.Anchor, "A18");
+ Assert.AreEqual (DockStyle.None, p.Dock, "A19");
+ Assert.AreEqual (string.Empty, event_raised, "A20");
+ }
+
+ public void DockChanged_Handler (object sender, EventArgs e)
+ {
+ event_raised += "DockStyleChanged";
+ }
+
+ [Test] // bug #80917
+ [Category ("NotWorking")]
+ public void BehaviorOverriddenDisplayRectangle ()
+ {
+ Control c = new Control ();
+ c.Anchor |= AnchorStyles.Bottom;
+ c.Size = new Size (100, 100);
+
+ Form f = new DisplayRectangleForm ();
+ f.Controls.Add (c);
+ f.ShowInTaskbar = false;
+ f.Show ();
+
+ Assert.AreEqual (new Size (100, 100), c.Size, "A1");
+
+ f.Dispose ();
+ }
+
+ private class DisplayRectangleForm : Form
+ {
+ public override Rectangle DisplayRectangle
+ {
+ get { return Rectangle.Empty; }
+ }
+ }
+
+ [Test] // bug 80912
+ public void AnchoredControlWithZeroWidthAndHeight ()
+ {
+ Form f = new Form ();
+ f.ShowInTaskbar = false;
+
+ Control c = new Control ();
+ c.Anchor = AnchorStyles.Left | AnchorStyles.Right;
+ f.Controls.Add (c);
+
+ Assert.AreEqual (new Rectangle (0, 0, 0, 0), c.Bounds, "N1");
+ }
+
+ [Test] // bug 81694
+ public void TestNestedControls ()
+ {
+ MainForm f = new MainForm ();
+ f.ShowInTaskbar = false;
+
+ f.Show ();
+ Assert.AreEqual (new Rectangle (210, 212, 75, 23), f._userControl._button2.Bounds, "K1");
+
+ f.Dispose ();
+ }
+
+ [Test] // bug 81695
+ public void TestNestedControls2 ()
+ {
+ MainForm f = new MainForm ();
+ f.ShowInTaskbar = false;
+
+ f.Show ();
+
+ Size s = f.Size;
+ f.Size = new Size (10, 10);
+ f.Size = s;
+
+ Assert.AreEqual (new Rectangle (210, 212, 75, 23), f._userControl._button2.Bounds, "K1");
+
+ f.Dispose ();
+ }
+
+ private class MainForm : Form
+ {
+ public UserControl1 _userControl;
+
+ public MainForm ()
+ {
+ SuspendLayout ();
+ //
+ // _userControl
+ //
+ _userControl = new UserControl1 ();
+ _userControl.Anchor = (AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Bottom | AnchorStyles.Right);
+ _userControl.BackColor = Color.White;
+ _userControl.Location = new Point (8, 8);
+ _userControl.Size = new Size (288, 238);
+ _userControl.TabIndex = 0;
+ Controls.Add (_userControl);
+ //
+ // MainForm
+ //
+ ClientSize = new Size (304, 280);
+ Location = new Point (250, 100);
+ StartPosition = FormStartPosition.Manual;
+ Text = "bug #81694";
+ ResumeLayout (false);
+ }
+ }
+
+ private class UserControl1 : UserControl
+ {
+ private Button _button1;
+ public Button _button2;
+
+ public UserControl1 ()
+ {
+ SuspendLayout ();
+ //
+ // _button1
+ //
+ _button1 = new Button ();
+ _button1.Location = new Point (4, 4);
+ _button1.Size = new Size (75, 23);
+ _button1.TabIndex = 0;
+ _button1.Text = "Button1";
+ Controls.Add (_button1);
+ //
+ // _button2
+ //
+ _button2 = new Button ();
+ _button2.Anchor = (AnchorStyles.Bottom | AnchorStyles.Right);
+ _button2.Location = new Point (210, 212);
+ _button2.Size = new Size (75, 23);
+ _button2.TabIndex = 1;
+ _button2.Text = "Button2";
+ Controls.Add (_button2);
+ //
+ // UserControl1
+ //
+ BackColor = Color.White;
+ ClientSize = new Size (288, 238);
+ ResumeLayout (false);
+ }
+ }
+
+#if NET_2_0
+ [Test]
+ public void TestDockFillWithPadding ()
+ {
+ Form f = new Form ();
+ f.ShowInTaskbar = false;
+ f.Padding = new Padding (15, 15, 15, 15);
+
+ Control c = new Control ();
+ c.Dock = DockStyle.Fill;
+ f.Controls.Add (c);
+
+ f.Show ();
+ Assert.AreEqual (new Size (f.ClientSize.Width - 30, f.ClientSize.Height - 30), c.Size, "K1");
+
+ f.Dispose ();
+ }
+#endif
+
+ [Test]
+ public void Bug82762 ()
+ {
+ if (TestHelper.RunningOnUnix)
+ Assert.Ignore ("WM Size dependent");
+
+ Form f = new Form ();
+ f.ShowInTaskbar = false;
+
+ Button b = new Button ();
+ b.Size = new Size (100, 100);
+ b.Anchor = AnchorStyles.None;
+ f.Controls.Add (b);
+
+ f.Show ();
+
+ Assert.AreEqual (new Rectangle (0, 0, 100, 100), b.Bounds, "A1");
+
+ f.ClientSize = new Size (600, 600);
+
+ Assert.AreEqual (new Rectangle (158, 168, 100, 100), b.Bounds, "A2");
+
+ f.Close ();
+ f.Dispose ();
+ }
+
+ [Test]
+ public void Bug82805 ()
+ {
+ Control c1 = new Control ();
+ c1.Size = new Size (100, 100);
+ Control c2 = new Control ();
+ c2.Size = new Size (100, 100);
+
+ c2.SuspendLayout ();
+ c1.Anchor = AnchorStyles.Left | AnchorStyles.Right;
+ c2.Controls.Add (c1);
+ c2.Size = new Size (200, 200);
+ c2.ResumeLayout ();
+
+ Assert.AreEqual (200, c1.Width, "A1");
+ }
+
+#if NET_2_0
+ [Test]
+ public void DockedAutoSizeControls ()
+ {
+ Form f = new Form ();
+ f.ShowInTaskbar = false;
+
+ Button b = new Button ();
+ b.Text = "Yo";
+ b.AutoSize = true;
+ b.AutoSizeMode = AutoSizeMode.GrowAndShrink;
+ b.Width = 200;
+ b.Dock = DockStyle.Left;
+ f.Controls.Add (b);
+
+ f.Show ();
+
+ if (b.Width >= 200)
+ Assert.Fail ("button should be less than 200 width: actual {0}", b.Width);
+
+ f.Close ();
+ f.Dispose ();
+ }
+#endif
+
+ [Test] // bug #81199
+ public void NestedControls ()
+ {
+ Form f = new Form ();
+ f.ShowInTaskbar = false;
+
+ MyUserControl c = new MyUserControl ();
+ c.Dock = DockStyle.Fill;
+ c.Size = new Size (500, 500);
+
+ f.SuspendLayout ();
+ f.Controls.Add (c);
+ f.ClientSize = new Size (500, 500);
+ f.ResumeLayout (false);
+
+ f.Show ();
+
+ Assert.AreEqual (new Size (600, 600), c.lv.Size, "I1");
+ f.Close ();
+ }
+
+ private class MyUserControl : UserControl
+ {
+ public ListView lv;
+
+ public MyUserControl ()
+ {
+ lv = new ListView ();
+ SuspendLayout ();
+ lv.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;
+ lv.Size = new Size (300, 300);
+
+ Controls.Add (lv);
+ Size = new Size (200, 200);
+ ResumeLayout (false);
+ }
+ }
+ }
+
+ [TestFixture]
+ public class DockingTests : TestHelper
+ {
+ Form form;
+ Panel panel;
+
+ int event_count;
+
+ [SetUp]
+ protected override void SetUp () {
+ form = new Form ();
+ form.ShowInTaskbar = false;
+ form.Size = new Size (400, 400);
+ panel = new Panel ();
+ form.Controls.Add (panel);
+ event_count = 0;
+ base.SetUp ();
+ }
+
+ [TearDown]
+ protected override void TearDown () {
+ form.Dispose ();
+ base.TearDown ();
+ }
+
+ void IncrementEventCount (object o, EventArgs args)
+ {
+ event_count++;
+ }
+
+ [Test]
+ public void TestDockSizeChangedEvent ()
+ {
+ panel.SizeChanged += new EventHandler (IncrementEventCount);
+ panel.Dock = DockStyle.Bottom;
+ Assert.AreEqual (1, event_count);
+ }
+
+ [Test]
+ public void TestDockLocationChangedEvent ()
+ {
+ panel.LocationChanged += new EventHandler (IncrementEventCount);
+ panel.Dock = DockStyle.Bottom;
+ Assert.AreEqual (1, event_count);
+ }
+
+ [Test]
+ public void TestDockFillFirst ()
+ {
+ Form f = new Form ();
+ f.ShowInTaskbar = false;
+
+ Panel b1 = new Panel ();
+ Panel b2 = new Panel ();
+
+ b1.Dock = DockStyle.Fill;
+ b2.Dock = DockStyle.Left;
+
+ f.Controls.Add (b1);
+ f.Controls.Add (b2);
+
+ f.Show ();
+ Assert.AreEqual (new Rectangle (b2.Width, 0, f.ClientRectangle.Width - b2.Width, f.ClientRectangle.Height), b1.Bounds, "A1");
+ Assert.AreEqual (new Rectangle (0, 0, 200, f.ClientRectangle.Height), b2.Bounds, "A2");
+ f.Dispose ();
+ }
+
+ [Test]
+ public void TestDockFillLast ()
+ {
+ Form f = new Form ();
+ f.ShowInTaskbar = false;
+
+ Panel b1 = new Panel ();
+ Panel b2 = new Panel ();
+
+ b1.Dock = DockStyle.Fill;
+ b2.Dock = DockStyle.Left;
+
+ f.Controls.Add (b2);
+ f.Controls.Add (b1);
+
+ f.Show ();
+ Assert.AreEqual (new Rectangle (0, 0, f.ClientRectangle.Width, f.ClientRectangle.Height), b1.Bounds, "B1");
+ Assert.AreEqual (new Rectangle (0, 0, 200, f.ClientRectangle.Height), b2.Bounds, "B2");
+ f.Dispose ();
+ }
+
+ [Test] // bug #81397
+ public void TestDockingWithCustomDisplayRectangle ()
+ {
+ MyControl mc = new MyControl ();
+ mc.Size = new Size (200, 200);
+
+ Control c = new Control ();
+ c.Dock = DockStyle.Fill;
+
+ mc.Controls.Add (c);
+
+ Form f = new Form ();
+ f.ShowInTaskbar = false;
+
+ f.Controls.Add (mc);
+ f.Show ();
+
+ Assert.AreEqual (new Point (20, 20), c.Location, "A1");
+ Assert.AreEqual (new Size (160, 160), c.Size, "A2");
+
+ f.Dispose ();
+ }
+
+ private class MyControl : Control
+ {
+ public override Rectangle DisplayRectangle {
+ get { return new Rectangle (20, 20, this.Width - 40, this.Height - 40); }
+ }
+ }
+
+#if NET_2_0
+ [Test]
+ public void DockingPreferredSize ()
+ {
+ Form f = new Form ();
+ f.ShowInTaskbar = false;
+ f.ClientSize = new Size (300, 300);
+
+ C1 c1 = new C1 ();
+ c1.Size = new Size (100, 100);
+ c1.Dock = DockStyle.Left;
+
+ f.Controls.Add (c1);
+ f.Show ();
+
+ Assert.AreEqual (new Size (100, 300), c1.Size, "A1");
+
+ f.Controls.Clear ();
+ C2 c2 = new C2 ();
+ c2.Size = new Size (100, 100);
+ c2.Dock = DockStyle.Left;
+
+ f.Controls.Add (c2);
+ Assert.AreEqual (new Size (100, 300), c1.Size, "A2");
+
+ f.Dispose ();
+ }
+
+ private class C1 : Panel
+ {
+ public override Size GetPreferredSize (Size proposedSize)
+ {
+ Console.WriteLine ("HOYO!");
+ return new Size (200, 200);
+ }
+ }
+
+ private class C2 : Panel
+ {
+ public override Size GetPreferredSize (Size proposedSize)
+ {
+ return Size.Empty;
+ }
+ }
+#endif
+
+ [Test]
+ public void ResettingDockToNone ()
+ {
+ Form f = new Form ();
+ f.ShowInTaskbar = false;
+ f.ClientSize = new Size (300, 300);
+
+ Control c = new Control ();
+ c.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
+
+ f.Controls.Add (c);
+
+ f.Show ();
+
+ f.ClientSize = new Size (350, 350);
+
+ Assert.IsTrue (c.Left > 0, string.Format ("A1: c.Left ({0}) must be greater than 0", c.Left));
+ Assert.IsTrue (c.Top > 0, string.Format ("A2: c.Top ({0}) must be greater than 0", c.Top));
+
+ c.Dock = DockStyle.None;
+ Assert.IsTrue (c.Left > 0, string.Format ("A3: c.Left ({0}) must be greater than 0", c.Left));
+ Assert.IsTrue (c.Top > 0, string.Format ("A4: c.Top ({0}) must be greater than 0", c.Top));
+
+ f.ClientSize = new Size (400, 400);
+ Assert.IsTrue (c.Left > 70, string.Format ("A5: c.Left ({0}) must be greater than 70", c.Left));
+ Assert.IsTrue (c.Top > 70, string.Format ("A6: c.Top ({0}) must be greater than 70", c.Top));
+
+ f.Dispose ();
+ }
+ }
+
+ [TestFixture]
+ public class UndockingTests : TestHelper
+ {
+ class TestPanel : Panel {
+
+ public void InvokeSetBoundsCore ()
+ {
+ SetBoundsCore (37, 37, 37, 37, BoundsSpecified.All);
+ }
+
+ public void InvokeUpdateBounds ()
+ {
+ UpdateBounds (37, 37, 37, 37);
+ }
+ }
+
+ Form form;
+ TestPanel panel;
+
+ [SetUp]
+ protected override void SetUp () {
+ form = new Form ();
+ form.ShowInTaskbar = false;
+ form.Size = new Size (400, 400);
+ panel = new TestPanel ();
+ form.Controls.Add (panel);
+ base.SetUp ();
+ }
+
+ [TearDown]
+ protected override void TearDown ()
+ {
+ form.Dispose ();
+ base.TearDown ();
+ }
+
+ [Test]
+ public void TestUndockDefaultLocation ()
+ {
+ Point loc = panel.Location;
+ panel.Dock = DockStyle.Bottom;
+ panel.Dock = DockStyle.None;
+ Assert.AreEqual (loc, panel.Location);
+ }
+
+ [Test]
+ public void TestUndockDefaultLocationVisible ()
+ {
+ form.Show ();
+ Point loc = panel.Location;
+ panel.Dock = DockStyle.Bottom;
+ panel.Dock = DockStyle.None;
+ Assert.AreEqual (loc, panel.Location);
+ }
+
+ [Test]
+ public void TestUndockExplicitLeft ()
+ {
+ panel.Left = 150;
+ panel.Dock = DockStyle.Top;
+ panel.Dock = DockStyle.None;
+ Assert.AreEqual (150, panel.Left);
+ }
+
+ [Test]
+ public void TestUndockExplicitTop ()
+ {
+ panel.Top = 150;
+ panel.Dock = DockStyle.Top;
+ panel.Dock = DockStyle.None;
+ Assert.AreEqual (150, panel.Top);
+ }
+
+ [Test]
+ public void TestUndockExplicitLocation ()
+ {
+ panel.Location = new Point (50, 50);
+ Point loc = panel.Location;
+ panel.Dock = DockStyle.Bottom;
+ panel.Dock = DockStyle.None;
+ Assert.AreEqual (loc, panel.Location);
+ }
+
+ [Test]
+ public void TestUndockExplicitLeftVisible ()
+ {
+ form.Show ();
+ panel.Left = 150;
+ panel.Dock = DockStyle.Top;
+ panel.Dock = DockStyle.None;
+ Assert.AreEqual (150, panel.Left);
+ }
+
+ [Test]
+ public void TestUndockExplicitTopVisible ()
+ {
+ form.Show ();
+ panel.Top = 150;
+ panel.Dock = DockStyle.Top;
+ panel.Dock = DockStyle.None;
+ Assert.AreEqual (150, panel.Top);
+ }
+
+ [Test]
+ public void TestUndockExplicitLocationVisible ()
+ {
+ form.Show ();
+ panel.Location = new Point (50, 50);
+ Point loc = panel.Location;
+ panel.Dock = DockStyle.Bottom;
+ panel.Dock = DockStyle.None;
+ Assert.AreEqual (loc, panel.Location);
+ }
+
+ [Test]
+ public void TestUndockDefaultSize ()
+ {
+ Size sz = panel.Size;
+ panel.Dock = DockStyle.Fill;
+ panel.Dock = DockStyle.None;
+ Assert.AreEqual (sz, panel.Size);
+ }
+
+ [Test]
+ public void TestUndockExplicitHeight ()
+ {
+ panel.Height = 50;
+ panel.Dock = DockStyle.Left;
+ panel.Dock = DockStyle.None;
+ Assert.AreEqual (50, panel.Height);
+ }
+
+ [Test]
+ public void TestUndockExplicitSize ()
+ {
+ panel.Size = new Size (50, 50);
+ Size sz = panel.Size;
+ panel.Dock = DockStyle.Fill;
+ panel.Dock = DockStyle.None;
+ Assert.AreEqual (sz, panel.Size);
+ }
+
+ [Test]
+ public void TestUndockExplicitWidth ()
+ {
+ panel.Width = 50;
+ panel.Dock = DockStyle.Top;
+ panel.Dock = DockStyle.None;
+ Assert.AreEqual (50, panel.Width);
+ }
+
+ [Test]
+ public void TestUndockExplicitHeightVisible ()
+ {
+ form.Show ();
+ panel.Height = 50;
+ panel.Dock = DockStyle.Left;
+ panel.Dock = DockStyle.None;
+ Assert.AreEqual (50, panel.Height);
+ }
+
+ [Test]
+ public void TestUndockExplicitSizeVisible ()
+ {
+ form.Show ();
+ panel.Size = new Size (50, 50);
+ Size sz = panel.Size;
+ panel.Dock = DockStyle.Fill;
+ panel.Dock = DockStyle.None;
+ Assert.AreEqual (sz, panel.Size);
+ }
+
+ [Test]
+ public void TestUndockExplicitWidthVisible ()
+ {
+ form.Show ();
+ panel.Width = 50;
+ panel.Dock = DockStyle.Top;
+ panel.Dock = DockStyle.None;
+ Assert.AreEqual (50, panel.Width);
+ }
+
+ [Test]
+ public void TestUndockSetBounds ()
+ {
+ panel.SetBounds (50, 50, 50, 50, BoundsSpecified.All);
+ panel.Dock = DockStyle.Top;
+ panel.Dock = DockStyle.None;
+ Assert.AreEqual (50, panel.Height, "Height");
+ Assert.AreEqual (50, panel.Left, "Left");
+ Assert.AreEqual (50, panel.Top, "Top");
+ Assert.AreEqual (50, panel.Width, "Width");
+ }
+
+ [Test]
+ public void TestUndockSetBoundsVisible ()
+ {
+ form.Show ();
+ panel.SetBounds (50, 50, 50, 50, BoundsSpecified.All);
+ panel.Dock = DockStyle.Top;
+ panel.Dock = DockStyle.None;
+ Assert.AreEqual (50, panel.Height, "Height");
+ Assert.AreEqual (50, panel.Left, "Left");
+ Assert.AreEqual (50, panel.Top, "Top");
+ Assert.AreEqual (50, panel.Width, "Width");
+ }
+
+ [Test]
+ public void TestUndockSetBoundsCore ()
+ {
+ panel.InvokeSetBoundsCore ();
+ panel.Dock = DockStyle.Top;
+ panel.Dock = DockStyle.None;
+ Assert.AreEqual (37, panel.Height, "Height");
+ Assert.AreEqual (37, panel.Left, "Left");
+ Assert.AreEqual (37, panel.Top, "Top");
+ Assert.AreEqual (37, panel.Width, "Width");
+ }
+
+ [Test]
+ public void TestUndockSetBoundsCoreVisible ()
+ {
+ form.Show ();
+ panel.InvokeSetBoundsCore ();
+ panel.Dock = DockStyle.Top;
+ panel.Dock = DockStyle.None;
+ Assert.AreEqual (37, panel.Height, "Height");
+ Assert.AreEqual (37, panel.Left, "Left");
+ Assert.AreEqual (37, panel.Top, "Top");
+ Assert.AreEqual (37, panel.Width, "Width");
+ }
+
+ [Test]
+ public void TestUndockUpdateBounds ()
+ {
+ panel.InvokeUpdateBounds ();
+ panel.Dock = DockStyle.Top;
+ panel.Dock = DockStyle.None;
+ Assert.AreEqual (37, panel.Height, "Height");
+ Assert.AreEqual (37, panel.Left, "Left");
+ Assert.AreEqual (37, panel.Top, "Top");
+ Assert.AreEqual (37, panel.Width, "Width");
+ }
+
+ [Test]
+ public void TestUndockUpdateBoundsVisible ()
+ {
+ form.Show ();
+ panel.InvokeUpdateBounds ();
+ panel.Dock = DockStyle.Top;
+ panel.Dock = DockStyle.None;
+ Assert.AreEqual (37, panel.Height, "Height");
+ Assert.AreEqual (37, panel.Left, "Left");
+ Assert.AreEqual (37, panel.Top, "Top");
+ Assert.AreEqual (37, panel.Width, "Width");
+ }
+
+#if NET_2_0
+ [Test]
+ public void AutoSizeGrowOnlyControls_ShrinkWhenDocked ()
+ {
+ // For most controls that are AutoSized and support the
+ // AutoSizeMode property, if they are set to GrowOnly,
+ // they should not shrink. However, they will shrink
+ // even in GrowOnly mode if they are docked.
+ // Button is one exception to this rule.
+ Form f = new Form ();
+ f.ClientSize = new Size (300, 300);
+ f.ShowInTaskbar = false;
+ f.Show ();
+
+ List<Type> types = new List<Type> ();
+ types.Add (typeof (TableLayoutPanel));
+ types.Add (typeof (FlowLayoutPanel));
+ types.Add (typeof (ToolStripContentPanel));
+ types.Add (typeof (Panel));
+ types.Add (typeof (GroupBox));
+ types.Add (typeof (UserControl));
+ foreach (Type t in types) {
+ Control c = t.GetConstructor (Type.EmptyTypes).Invoke (null) as Control;
+ c.AutoSize = true;
+ t.GetProperty ("AutoSizeMode").SetValue (c, AutoSizeMode.GrowOnly, null);
+ c.Bounds = new Rectangle (5, 5, 100, 100);
+ f.Controls.Add (c);
+ Assert.AreEqual (100, c.Height, "1 " + t.Name);
+ c.Dock = DockStyle.Top;
+ Assert.IsFalse (100 == c.Height, "2 " + t.Name);
+ f.Controls.Remove (c);
+ c.Dispose ();
+ }
+
+ f.Dispose ();
+ }
+
+ [Test]
+ public void AutoSizeGrowOnlyButtons_DoNotShrinkWhenDocked ()
+ {
+ // For most controls that are AutoSized and support the
+ // AutoSizeMode property, if they are set to GrowOnly,
+ // they should not shrink. However, they will shrink
+ // even in GrowOnly mode if they are docked.
+ // Button is one exception to this rule.
+ Form f = new Form ();
+ f.ClientSize = new Size (300, 300);
+ f.ShowInTaskbar = false;
+ f.Show ();
+
+ List<Type> types = new List<Type> ();
+ types.Add (typeof (Button));
+ foreach (Type t in types) {
+ Control c = t.GetConstructor (Type.EmptyTypes).Invoke (null) as Control;
+ c.AutoSize = true;
+ t.GetProperty ("AutoSizeMode").SetValue (c, AutoSizeMode.GrowOnly, null);
+ c.Bounds = new Rectangle (5, 5, 100, 100);
+ f.Controls.Add (c);
+ Assert.AreEqual (100, c.Height, "1 " + t.Name);
+ c.Dock = DockStyle.Top;
+ Assert.AreEqual (100, c.Height, "2 " + t.Name);
+ f.Controls.Remove (c);
+ c.Dispose ();
+ }
+
+ f.Dispose ();
+ }
+
+ [Test]
+ public void AnchoredAutoSizedControls_SizeInCorrectDirection ()
+ {
+ Form f = new Form ();
+ f.ClientSize = new Size (300, 300);
+ f.ShowInTaskbar = false;
+
+ Panel p1 = new Panel ();
+ p1.Bounds = new Rectangle (150, 150, 0, 0);
+ p1.Anchor = AnchorStyles.Top | AnchorStyles.Left;
+ p1.AutoSize = true;
+ f.Controls.Add (p1);
+
+ Panel p2 = new Panel ();
+ p2.Bounds = new Rectangle (150, 150, 0, 0);
+ p2.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
+ p2.AutoSize = true;
+ f.Controls.Add (p2);
+
+ Panel p3 = new Panel ();
+ p3.Bounds = new Rectangle (150, 150, 0, 0);
+ p3.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Bottom | AnchorStyles.Right;
+ p3.AutoSize = true;
+ f.Controls.Add (p3);
+
+ Panel p4 = new Panel ();
+ p4.Bounds = new Rectangle (150, 150, 0, 0);
+ p4.Anchor = AnchorStyles.None;
+ p4.AutoSize = true;
+ f.Controls.Add (p4);
+
+ f.Show ();
+ // cause the panels to grow
+ p1.Controls.Add (new TextBox ());
+ p2.Controls.Add (new TextBox ());
+ p3.Controls.Add (new TextBox ());
+ p4.Controls.Add (new TextBox ());
+ f.PerformLayout ();
+
+ Assert.AreEqual (150, p1.Top, "1");
+ Assert.AreEqual (150, p1.Left, "2");
+ Assert.AreEqual (150, p2.Bottom, "3");
+ Assert.AreEqual (150, p2.Right, "4");
+ Assert.AreEqual (150, p3.Top, "5");
+ Assert.AreEqual (150, p3.Left, "6");
+ Assert.AreEqual (150, p4.Top, "7");
+ Assert.AreEqual (150, p4.Left, "8");
+
+ f.Dispose ();
+ }
+#endif
+ }
+}