Fix a few CRLF issues
[mono.git] / mcs / class / Managed.Windows.Forms / Test / System.Windows.Forms / DefaultLayoutTest.cs
index 6a0338b393c0991ed3095ede45de7f19ab46f413..8387ff3812d8cbc2e4044a8a20f11988307c1d7c 100644 (file)
-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
+       }
+}