X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FManaged.Windows.Forms%2FTest%2FSystem.Windows.Forms%2FFormTest.cs;h=1f9a92dc4719571674dfac359f8afc6474eed073;hb=9530c5256847039bb3af8aa7e5cb10d4ea5f5051;hp=46671da833484c3d41c4eec2a01de17b7c3005af;hpb=4eb352bcb3ef7a71dc9ab62c5cd2d5e7598619f7;p=mono.git diff --git a/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/FormTest.cs b/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/FormTest.cs index 46671da8334..1f9a92dc471 100644 --- a/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/FormTest.cs +++ b/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/FormTest.cs @@ -12,463 +12,2988 @@ using System.ComponentModel; using System.Drawing; using System.Reflection; using System.Windows.Forms; +using System.Collections; using NUnit.Framework; +using CategoryAttribute = NUnit.Framework.CategoryAttribute; + namespace MonoTests.System.Windows.Forms { [TestFixture] public class FormTest { [Test] - public void FormPropertyTest () + public void AcceptButton () { - Form myform = new Form (); - myform.Visible = true; - myform.Text = "NewForm"; - myform.Name = "FormTest"; - Assert.IsNull (myform.AcceptButton, "#1"); - Assert.IsNull (myform.ActiveMdiChild, "#2"); - Assert.IsFalse (myform.AutoScale, "#3"); - Assert.IsNull (myform.CancelButton, "#6"); - Assert.IsTrue (myform.ControlBox, "#9"); - Assert.IsTrue (myform.DesktopBounds.X > 0, "#10a"); - Assert.IsTrue (myform.DesktopBounds.Y > 0, "#10b"); - Assert.AreEqual (300, myform.DesktopBounds.Height, "#10c"); - Assert.AreEqual (300, myform.DesktopBounds.Width, "#10d"); - Assert.IsTrue (myform.DesktopLocation.X > 0, "#11a"); - Assert.IsTrue (myform.DesktopLocation.Y > 0, "#11b"); - Assert.AreEqual (DialogResult.None, myform.DialogResult, "#12"); - Assert.AreEqual (FormBorderStyle.Sizable, myform.FormBorderStyle, "#13"); - Assert.IsFalse (myform.HelpButton, "#14"); - Assert.AreEqual ("System.Drawing.Icon", myform.Icon.GetType ().ToString (), "#15"); - Assert.IsFalse (myform.IsMdiChild, "#16"); - Assert.IsFalse (myform.IsMdiContainer, "#17"); - Assert.IsFalse (myform.KeyPreview, "#18"); - Assert.IsTrue (myform.MaximizeBox, "#19"); - Assert.AreEqual (0, myform.MaximumSize.Height, "#20a"); - Assert.AreEqual (0, myform.MaximumSize.Width, "#20b"); - Assert.AreEqual (0, myform.MdiChildren.Length, "#21a"); - Assert.AreEqual (1, myform.MdiChildren.Rank, "#21b"); - Assert.IsFalse (myform.MdiChildren.IsSynchronized, "#21c"); - Assert.IsNull (myform.MdiParent, "#22"); - Assert.IsNull (myform.Menu, "#23"); - Assert.IsNull (myform.MergedMenu, "#24"); - Assert.IsTrue (myform.MinimizeBox, "#25"); - Assert.AreEqual (0, myform.MinimumSize.Height, "#26a"); - Assert.AreEqual (0, myform.MinimumSize.Width, "#26b"); - Assert.IsTrue (myform.MinimumSize.IsEmpty, "#26c"); - Assert.IsFalse (myform.Modal, "#27"); - Assert.AreEqual (1, myform.Opacity, "#28"); - Assert.AreEqual (0, myform.OwnedForms.Length, "#29a"); - Assert.AreEqual (1, myform.OwnedForms.Rank, "#29b"); - Assert.IsNull (myform.Owner, "#30"); - Assert.IsTrue (myform.ShowInTaskbar, "#31"); - Assert.AreEqual (300, myform.Size.Height, "#32a"); - Assert.AreEqual (300, myform.Size.Width, "#32b"); - Assert.AreEqual (SizeGripStyle.Auto, myform.SizeGripStyle, "#33"); - Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, myform.StartPosition, "#34"); - Assert.IsTrue (myform.TopLevel, "#35"); - Assert.IsFalse (myform.TopMost, "#36"); - Assert.AreEqual (Color.Empty, myform.TransparencyKey, "#37"); - Assert.AreEqual (FormWindowState.Normal, myform.WindowState, "#38"); - myform.Dispose (); + Form form = new Form (); + Assert.IsNull (form.AcceptButton, "#A"); + + MockButton buttonA = new MockButton (true); + Assert.IsFalse (buttonA.IsDefaultButton, "#B1"); + form.AcceptButton = buttonA; + Assert.IsNotNull (form.AcceptButton, "#B2"); + Assert.AreSame (buttonA, form.AcceptButton, "#B3"); + Assert.IsTrue (buttonA.IsDefaultButton, "#B4"); + + form.AcceptButton = null; + Assert.IsNull (form.AcceptButton, "#C1"); + Assert.IsFalse (buttonA.IsDefaultButton, "#C2"); + + ButtonControl buttonB = new ButtonControl (); + Assert.IsFalse (buttonB.IsDefaultButton, "#D1"); + form.AcceptButton = buttonB; + Assert.IsNotNull (form.AcceptButton, "#D2"); + Assert.AreSame (buttonB, form.AcceptButton, "#D3"); + Assert.IsFalse (buttonA.IsDefaultButton, "#D4"); + Assert.IsTrue (buttonB.IsDefaultButton, "#D5"); + + MockButton buttonC = new MockButton (false); + Assert.IsFalse (buttonC.IsDefaultButton, "#E1"); + form.AcceptButton = buttonC; + Assert.IsNotNull (form.AcceptButton, "#E2"); + Assert.AreSame (buttonC, form.AcceptButton, "#E3"); + Assert.IsFalse (buttonC.IsDefaultButton, "#E4"); + Assert.IsFalse (buttonA.IsDefaultButton, "#E5"); + Assert.IsFalse (buttonB.IsDefaultButton, "#E6"); + } + + [Test] + public void bug_82358 () + { + //Console.WriteLine ("Starting bug_82358"); + int sizeable_factor; + int title_bar; + int tool_bar; + int tool_border; + int d3; + int d2; + + // WinXP, default theme + sizeable_factor = 2; + title_bar = 26; + tool_bar = 18; + tool_border = 6; + d3 = 10; + d2 = 6; + + // WinXP, Win32 theme: + sizeable_factor = 2; + title_bar = 19; + tool_bar = 16; + tool_border = 6; + d3 = 10; + d2 = 6; + + + Size size = new Size (200, 200); + + // Universal theme?? + using (Form f = new Form ()) { + f.FormBorderStyle = FormBorderStyle.FixedSingle; + f.Visible = true; + d2 = f.Size.Width - f.ClientSize.Width; + title_bar = f.Size.Height - f.ClientSize.Height - d2; + } + using (Form f = new Form ()) { + f.FormBorderStyle = FormBorderStyle.Sizable; + f.Visible = true; + sizeable_factor = f.Size.Width - f.ClientSize.Width - d2; + } + using (Form f = new Form ()) { + f.ClientSize = size; + f.FormBorderStyle = FormBorderStyle.FixedToolWindow; + //f.Visible = true; + tool_border = f.Size.Width - f.ClientSize.Width; + tool_bar = f.Size.Height - f.ClientSize.Height - tool_border; + } + using (Form f = new Form ()) { + f.FormBorderStyle = FormBorderStyle.Fixed3D; + f.Visible = true; + d3 = f.Size.Width - f.ClientSize.Width; + } + + FormBorderStyle style; + + + //Console.WriteLine ("Universal theme says: d2={0}, d3={1}, title_bar={2}, sizeable_factor={3}, tool_border={4}, tool_bar={5}", d2, d3, title_bar, sizeable_factor, tool_border, tool_bar); + + // Changing client size, then FormBorderStyle. + using (Form f = new Form ()) { + style = FormBorderStyle.FixedToolWindow; + //Console.WriteLine ("Created form, size: {0}, clientsize: {1}", f.Size, f.ClientSize); + f.ClientSize = size; + //Console.WriteLine ("Changed ClientSize, size: {0}, clientsize: {1}", f.Size, f.ClientSize); + f.FormBorderStyle = style; + //Console.WriteLine ("Changed FormBorderStyle, size: {0}, clientsize: {1}", f.Size, f.ClientSize); + Assert.AreEqual (size.ToString (), f.ClientSize.ToString (), style.ToString () + "-A1"); + Assert.AreEqual (new Size (size.Width + tool_border, size.Height + tool_border + tool_bar).ToString (), f.Size.ToString (), style.ToString () + "-A2"); + f.Visible = true; + //Console.WriteLine ("Made visible, size: {0}, clientsize: {1}", f.Size, f.ClientSize); + Assert.AreEqual (size.ToString (), f.ClientSize.ToString (), style.ToString () + "-A3"); + Assert.AreEqual (new Size (size.Width + tool_border, size.Height + tool_border + tool_bar).ToString (), f.Size.ToString (), style.ToString () + "-A4"); + } + + using (Form f = new Form ()) { + style = FormBorderStyle.SizableToolWindow; + f.ClientSize = size; + f.FormBorderStyle = style; + Assert.AreEqual (size.ToString (), f.ClientSize.ToString (), style.ToString () + "-A1"); + Assert.AreEqual (new Size (size.Width + tool_border + sizeable_factor, size.Height + tool_border + tool_bar + sizeable_factor).ToString (), f.Size.ToString (), style.ToString () + "-A2"); + f.Visible = true; + Assert.AreEqual (size.ToString (), f.ClientSize.ToString (), style.ToString () + "-A3"); + Assert.AreEqual (new Size (size.Width + tool_border + sizeable_factor, size.Height + tool_border + tool_bar + sizeable_factor).ToString (), f.Size.ToString (), style.ToString () + "-A4"); + } + + using (Form f = new Form ()) { + style = FormBorderStyle.Fixed3D; + f.ClientSize = size; + f.FormBorderStyle = style; + Assert.AreEqual (size.ToString (), f.ClientSize.ToString (), style.ToString () + "-A1"); + Assert.AreEqual (new Size (size.Width + d3, size.Height + title_bar + d3).ToString () , f.Size.ToString (), style.ToString () + "-A2"); + f.Visible = true; + Assert.AreEqual (size.ToString (), f.ClientSize.ToString (), style.ToString () + "-A3"); + Assert.AreEqual (new Size (size.Width + d3, size.Height + title_bar + d3).ToString (), f.Size.ToString (), style.ToString () + "-A4"); + } + + using (Form f = new Form ()) { + style = FormBorderStyle.FixedDialog; + f.ClientSize = size; + f.FormBorderStyle = style; + Assert.AreEqual (size.ToString (), f.ClientSize.ToString (), style.ToString () + "-A1"); + Assert.AreEqual (new Size (size.Width + d2, size.Height + title_bar + d2).ToString (), f.Size.ToString (), style.ToString () + "-A2"); + f.Visible = true; + Assert.AreEqual (size.ToString (), f.ClientSize.ToString (), style.ToString () + "-A3"); + Assert.AreEqual (new Size (size.Width + d2, size.Height + title_bar + d2).ToString (), f.Size.ToString (), style.ToString () + "-A4"); + + } + + using (Form f = new Form ()) { + style = FormBorderStyle.FixedSingle; + f.ClientSize = size; + f.FormBorderStyle = style; + Assert.AreEqual (size.ToString (), f.ClientSize.ToString (), style.ToString () + "-A1"); + Assert.AreEqual (new Size (size.Width + d2, size.Height + title_bar + d2).ToString (), f.Size.ToString (), style.ToString () + "-A2"); + f.Visible = true; + Assert.AreEqual (size.ToString (), f.ClientSize.ToString (), style.ToString () + "-A3"); + Assert.AreEqual (new Size (size.Width + d2, size.Height + title_bar + d2).ToString (), f.Size.ToString (), style.ToString () + "-A4"); + } + + using (Form f = new Form ()) { + style = FormBorderStyle.None; + f.ClientSize = size; + f.FormBorderStyle = style; + Assert.AreEqual (size.ToString (), f.ClientSize.ToString (), style.ToString () + "-A1"); + Assert.AreEqual (size.ToString (), f.Size.ToString (), style.ToString () + "-A2"); + f.Visible = true; + Assert.AreEqual (size.ToString (), f.ClientSize.ToString (), style.ToString () + "-A3"); + Assert.AreEqual (size.ToString (), f.Size.ToString (), style.ToString () + "-A4"); + } + + using (Form f = new Form ()) { + style = FormBorderStyle.Sizable; + f.ClientSize = size; + f.FormBorderStyle = style; + Assert.AreEqual (size.ToString (), f.ClientSize.ToString (), style.ToString () + "-A1"); + Assert.AreEqual (new Size (size.Width + d2 + sizeable_factor, size.Height + title_bar + d2 + sizeable_factor).ToString (), f.Size.ToString (), style.ToString () + "-A2"); + f.Visible = true; + Assert.AreEqual (size.ToString (), f.ClientSize.ToString (), style.ToString () + "-A3"); + Assert.AreEqual (new Size (size.Width + d2 + sizeable_factor, size.Height + title_bar + d2 + sizeable_factor).ToString (), f.Size.ToString (), style.ToString () + "-A4"); + } + + + // Changing size, then FormBorderStyle. + using (Form f = new Form ()) { + style = FormBorderStyle.FixedToolWindow; + f.Size = size; + f.FormBorderStyle = style; + Assert.AreEqual (size.ToString (), f.Size.ToString (), style.ToString () + "-B1"); + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor, size.Height - title_bar - d2 - sizeable_factor).ToString (), f.ClientSize.ToString (), style.ToString () + "-B2"); + f.Visible = true; + Assert.AreEqual (size.ToString (), f.Size.ToString (), style.ToString () + "-B3"); + Assert.AreEqual (new Size (size.Width - tool_border, size.Height - tool_border - tool_bar).ToString (), f.ClientSize.ToString (), style.ToString () + "-B4"); + } + + using (Form f = new Form ()) { + style = FormBorderStyle.SizableToolWindow; + f.Size = size; + f.FormBorderStyle = style; + Assert.AreEqual (size.ToString (), f.Size.ToString (), style.ToString () + "-B1"); + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor, size.Height - title_bar - d2 - sizeable_factor).ToString (), f.ClientSize.ToString (), style.ToString () + "-B2"); + f.Visible = true; + Assert.AreEqual (size.ToString (), f.Size.ToString (), style.ToString () + "-B3"); + Assert.AreEqual (new Size (size.Width - tool_border - sizeable_factor, size.Height - tool_border - tool_bar - sizeable_factor).ToString (), f.ClientSize.ToString (), style.ToString () + "-B4"); + } + + using (Form f = new Form ()) { + style = FormBorderStyle.Fixed3D; + f.Size = size; + f.FormBorderStyle = style; + Assert.AreEqual (size.ToString (), f.Size.ToString (), style.ToString () + "-B1"); + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor, size.Height - title_bar - d2 - sizeable_factor).ToString (), f.ClientSize.ToString (), style.ToString () + "-B2"); + f.Visible = true; + Assert.AreEqual (size.ToString (), f.Size.ToString (), style.ToString () + "-B3"); + Assert.AreEqual (new Size (size.Width - d3, size.Height - title_bar - d3).ToString (), f.ClientSize.ToString (), style.ToString () + "-B4"); + } + + using (Form f = new Form ()) { + style = FormBorderStyle.FixedDialog; + f.Size = size; + f.FormBorderStyle = style; + Assert.AreEqual (size.ToString (), f.Size.ToString (), style.ToString () + "-B1"); + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor, size.Height - title_bar - d2 - sizeable_factor).ToString (), f.ClientSize.ToString (), style.ToString () + "-B2"); + f.Visible = true; + Assert.AreEqual (size.ToString (), f.Size.ToString (), style.ToString () + "-B3"); + Assert.AreEqual (new Size (size.Width - d2, size.Height - title_bar - d2).ToString (), f.ClientSize.ToString (), style.ToString () + "-B4"); + + } + + using (Form f = new Form ()) { + style = FormBorderStyle.FixedSingle; + f.Size = size; + f.FormBorderStyle = style; + Assert.AreEqual (size.ToString (), f.Size.ToString (), style.ToString () + "-B1"); + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor, size.Height - title_bar - d2 - sizeable_factor).ToString (), f.ClientSize.ToString (), style.ToString () + "-B2"); + f.Visible = true; + Assert.AreEqual (size.ToString (), f.Size.ToString (), style.ToString () + "-B3"); + Assert.AreEqual (new Size (size.Width - d2, size.Height - title_bar - d2).ToString (), f.ClientSize.ToString (), style.ToString () + "-B4"); + } + + using (Form f = new Form ()) { + style = FormBorderStyle.None; + f.Size = size; + f.FormBorderStyle = style; + Assert.AreEqual (size.ToString (), f.Size.ToString (), style.ToString () + "-B1"); + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor, size.Height - title_bar - d2 - sizeable_factor).ToString (), f.ClientSize.ToString (), style.ToString () + "-B2"); + f.Visible = true; + Assert.AreEqual (size.ToString (), f.Size.ToString (), style.ToString () + "-B3"); + Assert.AreEqual (size.ToString (), f.ClientSize.ToString (), style.ToString () + "-B4"); + } + + using (Form f = new Form ()) { + style = FormBorderStyle.Sizable; + f.Size = size; + f.FormBorderStyle = style; + Assert.AreEqual (size.ToString (), f.Size.ToString (), style.ToString () + "-B1"); + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor, size.Height - title_bar - d2 - sizeable_factor).ToString (), f.ClientSize.ToString (), style.ToString () + "-B2"); + f.Visible = true; + Assert.AreEqual (size.ToString (), f.Size.ToString (), style.ToString () + "-B3"); + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor, size.Height - title_bar - d2 - sizeable_factor).ToString (), f.ClientSize.ToString (), style.ToString () + "-B4"); + } + + + + // Changing FormBorderStyle, then client size + using (Form f = new Form ()) { + style = FormBorderStyle.FixedToolWindow; + f.FormBorderStyle = style; + f.ClientSize = size; + Assert.AreEqual (size.ToString (), f.ClientSize.ToString (), style.ToString () + "-C1"); + Assert.AreEqual (new Size (size.Width + tool_border, size.Height + tool_border + tool_bar).ToString (), f.Size.ToString (), style.ToString () + "-C2"); + f.Visible = true; + Assert.AreEqual (size.ToString (), f.ClientSize.ToString (), style.ToString () + "-C3"); + Assert.AreEqual (new Size (size.Width + tool_border, size.Height + tool_border + tool_bar).ToString (), f.Size.ToString (), style.ToString () + "-C4"); + } + + using (Form f = new Form ()) { + style = FormBorderStyle.SizableToolWindow; + f.FormBorderStyle = style; + f.ClientSize = size; + Assert.AreEqual (size.ToString (), f.ClientSize.ToString (), style.ToString () + "-C1"); + Assert.AreEqual (new Size (size.Width + tool_border + sizeable_factor, size.Height + tool_border + tool_bar + sizeable_factor).ToString (), f.Size.ToString (), style.ToString () + "-C2"); + f.Visible = true; + Assert.AreEqual (size.ToString (), f.ClientSize.ToString (), style.ToString () + "-C3"); + Assert.AreEqual (new Size (size.Width + tool_border + sizeable_factor, size.Height + tool_border + tool_bar + sizeable_factor).ToString (), f.Size.ToString (), style.ToString () + "-C4"); + } + + using (Form f = new Form ()) { + style = FormBorderStyle.Fixed3D; + f.FormBorderStyle = style; + f.ClientSize = size; + Assert.AreEqual (size.ToString (), f.ClientSize.ToString (), style.ToString () + "-C1"); + Assert.AreEqual (new Size (size.Width + d3, size.Height + title_bar + d3).ToString (), f.Size.ToString (), style.ToString () + "-C2"); + f.Visible = true; + Assert.AreEqual (size.ToString (), f.ClientSize.ToString (), style.ToString () + "-C3"); + Assert.AreEqual (new Size (size.Width + d3, size.Height + title_bar + d3).ToString (), f.Size.ToString (), style.ToString () + "-C4"); + } + + using (Form f = new Form ()) { + style = FormBorderStyle.FixedDialog; + f.FormBorderStyle = style; + f.ClientSize = size; + Assert.AreEqual (size.ToString (), f.ClientSize.ToString (), style.ToString () + "-C1"); + Assert.AreEqual (new Size (size.Width + d2, size.Height + title_bar + d2).ToString (), f.Size.ToString (), style.ToString () + "-C2"); + f.Visible = true; + Assert.AreEqual (size.ToString (), f.ClientSize.ToString (), style.ToString () + "-C3"); + Assert.AreEqual (new Size (size.Width + d2, size.Height + title_bar + d2).ToString (), f.Size.ToString (), style.ToString () + "-C4"); + + } + + using (Form f = new Form ()) { + style = FormBorderStyle.FixedSingle; + f.FormBorderStyle = style; + f.ClientSize = size; + Assert.AreEqual (size.ToString (), f.ClientSize.ToString (), style.ToString () + "-C1"); + Assert.AreEqual (new Size (size.Width + d2, size.Height + title_bar + d2).ToString (), f.Size.ToString (), style.ToString () + "-C2"); + f.Visible = true; + Assert.AreEqual (size.ToString (), f.ClientSize.ToString (), style.ToString () + "-C3"); + Assert.AreEqual (new Size (size.Width + d2, size.Height + title_bar + d2).ToString (), f.Size.ToString (), style.ToString () + "-C4"); + } + + using (Form f = new Form ()) { + style = FormBorderStyle.None; + f.FormBorderStyle = style; + f.ClientSize = size; + Assert.AreEqual (size.ToString (), f.ClientSize.ToString (), style.ToString () + "-C1"); + Assert.AreEqual (size.ToString (), f.Size.ToString (), style.ToString () + "-C2"); + f.Visible = true; + Assert.AreEqual (size.ToString (), f.ClientSize.ToString (), style.ToString () + "-C3"); + Assert.AreEqual (size.ToString (), f.Size.ToString (), style.ToString () + "-C4"); + } + + using (Form f = new Form ()) { + style = FormBorderStyle.Sizable; + f.FormBorderStyle = style; + f.ClientSize = size; + Assert.AreEqual (size.ToString (), f.ClientSize.ToString (), style.ToString () + "-C1"); + Assert.AreEqual (new Size (size.Width + d2 + sizeable_factor, size.Height + title_bar + d2 + sizeable_factor).ToString (), f.Size.ToString (), style.ToString () + "-C2"); + f.Visible = true; + Assert.AreEqual (size.ToString (), f.ClientSize.ToString (), style.ToString () + "-C3"); + Assert.AreEqual (new Size (size.Width + d2 + sizeable_factor, size.Height + title_bar + d2 + sizeable_factor).ToString (), f.Size.ToString (), style.ToString () + "-C4"); + } + + + // Changing FormBorderStyle, then size + using (Form f = new Form ()) { + style = FormBorderStyle.FixedToolWindow; + f.FormBorderStyle = style; + f.Size = size; + Assert.AreEqual (size.ToString (), f.Size.ToString (), style.ToString () + "-D1"); + Assert.AreEqual (new Size (size.Width - tool_border, size.Height - tool_border - tool_bar).ToString (), f.ClientSize.ToString (), style.ToString () + "-D2"); + f.Visible = true; + Assert.AreEqual (size.ToString (), f.Size.ToString (), style.ToString () + "-D3"); + Assert.AreEqual (new Size (size.Width - tool_border, size.Height - tool_border - tool_bar).ToString (), f.ClientSize.ToString (), style.ToString () + "-D4"); + } + + using (Form f = new Form ()) { + style = FormBorderStyle.SizableToolWindow; + f.FormBorderStyle = style; + f.Size = size; + Assert.AreEqual (size.ToString (), f.Size.ToString (), style.ToString () + "-D1"); + Assert.AreEqual (new Size (size.Width - tool_border - sizeable_factor, size.Height - tool_border - tool_bar - sizeable_factor).ToString (), f.ClientSize.ToString (), style.ToString () + "-D2"); + f.Visible = true; + Assert.AreEqual (size.ToString (), f.Size.ToString (), style.ToString () + "-D3"); + Assert.AreEqual (new Size (size.Width - tool_border - sizeable_factor, size.Height - tool_border - tool_bar - sizeable_factor).ToString (), f.ClientSize.ToString (), style.ToString () + "-D4"); + } + + using (Form f = new Form ()) { + style = FormBorderStyle.Fixed3D; + f.FormBorderStyle = style; + f.Size = size; + Assert.AreEqual (size.ToString (), f.Size.ToString (), style.ToString () + "-D1"); + Assert.AreEqual (new Size (size.Width - d3, size.Height - title_bar - d3).ToString (), f.ClientSize.ToString (), style.ToString () + "-D2"); + f.Visible = true; + Assert.AreEqual (size.ToString (), f.Size.ToString (), style.ToString () + "-D3"); + Assert.AreEqual (new Size (size.Width - d3, size.Height - title_bar - d3).ToString (), f.ClientSize.ToString (), style.ToString () + "-D4"); + } + + using (Form f = new Form ()) { + style = FormBorderStyle.FixedDialog; + f.FormBorderStyle = style; + f.Size = size; + Assert.AreEqual (size.ToString (), f.Size.ToString (), style.ToString () + "-D1"); + Assert.AreEqual (new Size (size.Width - d2, size.Height - title_bar - d2).ToString (), f.ClientSize.ToString (), style.ToString () + "-D2"); + f.Visible = true; + Assert.AreEqual (size.ToString (), f.Size.ToString (), style.ToString () + "-D3"); + Assert.AreEqual (new Size (size.Width - d2, size.Height - title_bar - d2).ToString (), f.ClientSize.ToString (), style.ToString () + "-D4"); + + } + + using (Form f = new Form ()) { + style = FormBorderStyle.FixedSingle; + f.FormBorderStyle = style; + f.Size = size; + Assert.AreEqual (size.ToString (), f.Size.ToString (), style.ToString () + "-D1"); + Assert.AreEqual (new Size (size.Width - d2, size.Height - title_bar - d2).ToString (), f.ClientSize.ToString (), style.ToString () + "-D2"); + f.Visible = true; + Assert.AreEqual (size.ToString (), f.Size.ToString (), style.ToString () + "-D3"); + Assert.AreEqual (new Size (size.Width - d2, size.Height - title_bar - d2).ToString (), f.ClientSize.ToString (), style.ToString () + "-D4"); + } + + using (Form f = new Form ()) { + style = FormBorderStyle.None; + f.FormBorderStyle = style; + f.Size = size; + Assert.AreEqual (size.ToString (), f.ClientSize.ToString (), style.ToString () + "-D1"); + Assert.AreEqual (size.ToString (), f.Size.ToString (), style.ToString () + "-D2"); + f.Visible = true; + Assert.AreEqual (size.ToString (), f.ClientSize.ToString (), style.ToString () + "-D3"); + Assert.AreEqual (size.ToString (), f.Size.ToString (), style.ToString () + "-D4"); + } + + using (Form f = new Form ()) { + style = FormBorderStyle.Sizable; + f.FormBorderStyle = style; + f.Size = size; + Assert.AreEqual (size.ToString (), f.Size.ToString (), style.ToString () + "-D1"); + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor, size.Height - title_bar - d2 - sizeable_factor).ToString (), f.ClientSize.ToString (), style.ToString () + "-D2"); + f.Visible = true; + Assert.AreEqual (size.ToString (), f.Size.ToString (), style.ToString () + "-D3"); + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor, size.Height - title_bar - d2 - sizeable_factor).ToString (), f.ClientSize.ToString (), style.ToString () + "-D4"); + } + + + + // Set clientsize, then change size, then FormBorderStyle. + using (Form f = new Form ()) { + style = FormBorderStyle.FixedToolWindow; + f.ClientSize = f.ClientSize; + f.Size = size; + f.FormBorderStyle = style; + // Here we subtract the Sizable borders (default) then add FixedToolWindow's border. + // Note how now the sizes doesn't change when creating the handle. + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor + tool_border, size.Height - title_bar - d2 - sizeable_factor + tool_border + tool_bar).ToString (), f.Size.ToString (), style.ToString () + "-E1"); + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor, size.Height - title_bar - d2 - sizeable_factor).ToString (), f.ClientSize.ToString (), style.ToString () + "-E2"); + f.Visible = true; + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor + tool_border, size.Height - title_bar - d2 - sizeable_factor + tool_border + tool_bar).ToString (), f.Size.ToString (), style.ToString () + "-E3"); + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor, size.Height - title_bar - d2 - sizeable_factor).ToString (), f.ClientSize.ToString (), style.ToString () + "-E4"); + } + + using (Form f = new Form ()) { + style = FormBorderStyle.SizableToolWindow; + f.ClientSize = f.ClientSize; + f.Size = size; + f.FormBorderStyle = style; + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor + tool_border + sizeable_factor, size.Height - title_bar - d2 - sizeable_factor + tool_border + tool_bar + sizeable_factor).ToString (), f.Size.ToString (), style.ToString () + "-E1"); + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor, size.Height - title_bar - d2 - sizeable_factor).ToString (), f.ClientSize.ToString (), style.ToString () + "-E2"); + f.Visible = true; + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor + tool_border + sizeable_factor, size.Height - title_bar - d2 - sizeable_factor + tool_border + tool_bar + sizeable_factor).ToString (), f.Size.ToString (), style.ToString () + "-E3"); + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor, size.Height - title_bar - d2 - sizeable_factor).ToString (), f.ClientSize.ToString (), style.ToString () + "-E4"); + } + + using (Form f = new Form ()) { + style = FormBorderStyle.Fixed3D; + f.ClientSize = f.ClientSize; + f.Size = size; + f.FormBorderStyle = style; + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor + d3, size.Height - title_bar - d2 - sizeable_factor + title_bar + d3).ToString (), f.Size.ToString (), style.ToString () + "-E1"); + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor, size.Height - title_bar - d2 - sizeable_factor).ToString (), f.ClientSize.ToString (), style.ToString () + "-E2"); + f.Visible = true; + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor + d3, size.Height - title_bar - d2 - sizeable_factor + title_bar + d3).ToString (), f.Size.ToString (), style.ToString () + "-E3"); + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor, size.Height - title_bar - d2 - sizeable_factor).ToString (), f.ClientSize.ToString (), style.ToString () + "-E4"); + } + + using (Form f = new Form ()) { + style = FormBorderStyle.FixedDialog; + f.ClientSize = f.ClientSize; + f.Size = size; + f.FormBorderStyle = style; + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor + d2, size.Height - title_bar - d2 - sizeable_factor + title_bar + d2).ToString (), f.Size.ToString (), style.ToString () + "-E1"); + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor, size.Height - title_bar - d2 - sizeable_factor).ToString (), f.ClientSize.ToString (), style.ToString () + "-E2"); + f.Visible = true; + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor + d2, size.Height - title_bar - d2 - sizeable_factor + title_bar + d2).ToString (), f.Size.ToString (), style.ToString () + "-E3"); + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor, size.Height - title_bar - d2 - sizeable_factor).ToString (), f.ClientSize.ToString (), style.ToString () + "-E4"); + + } + + using (Form f = new Form ()) { + style = FormBorderStyle.FixedSingle; + f.ClientSize = f.ClientSize; + f.Size = size; + f.FormBorderStyle = style; + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor + d2, size.Height - title_bar - d2 - sizeable_factor + title_bar + d2).ToString (), f.Size.ToString (), style.ToString () + "-E1"); + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor, size.Height - title_bar - d2 - sizeable_factor).ToString (), f.ClientSize.ToString (), style.ToString () + "-E2"); + f.Visible = true; + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor + d2, size.Height - title_bar - d2 - sizeable_factor + title_bar + d2).ToString (), f.Size.ToString (), style.ToString () + "-E3"); + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor, size.Height - title_bar - d2 - sizeable_factor).ToString (), f.ClientSize.ToString (), style.ToString () + "-E4"); + } + + using (Form f = new Form ()) { + style = FormBorderStyle.None; + f.ClientSize = f.ClientSize; + f.Size = size; + f.FormBorderStyle = style; + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor, size.Height - title_bar - d2 - sizeable_factor).ToString (), f.Size.ToString (), style.ToString () + "-E1"); + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor, size.Height - title_bar - d2 - sizeable_factor).ToString (), f.ClientSize.ToString (), style.ToString () + "-E2"); + f.Visible = true; + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor, size.Height - title_bar - d2 - sizeable_factor).ToString (), f.Size.ToString (), style.ToString () + "-E3"); + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor, size.Height - title_bar - d2 - sizeable_factor).ToString (), f.ClientSize.ToString (), style.ToString () + "-E4"); + } + + using (Form f = new Form ()) { + style = FormBorderStyle.Sizable; + f.ClientSize = f.ClientSize; + f.Size = size; + f.FormBorderStyle = style; + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor + d2 + sizeable_factor, size.Height - title_bar - d2 - sizeable_factor + d2 + sizeable_factor + title_bar).ToString (), f.Size.ToString (), style.ToString () + "-E1"); + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor, size.Height - title_bar - d2 - sizeable_factor).ToString (), f.ClientSize.ToString (), style.ToString () + "-E2"); + f.Visible = true; + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor + d2 + sizeable_factor, size.Height - title_bar - d2 - sizeable_factor + d2 + sizeable_factor + title_bar).ToString (), f.Size.ToString (), style.ToString () + "-E3"); + Assert.AreEqual (new Size (size.Width - d2 - sizeable_factor, size.Height - title_bar - d2 - sizeable_factor).ToString (), f.ClientSize.ToString (), style.ToString () + "-E4"); + } + + + + + } + + [Test] // bug 81969 + public void StartPositionClosedForm () + { + using (Form form = new Form ()) { + form.StartPosition = FormStartPosition.CenterParent; + form.Load += new EventHandler (CenterDisposedForm_Load); + form.Show (); + } + + using (Form form = new Form ()) { + form.StartPosition = FormStartPosition.CenterScreen; + form.Load += new EventHandler (CenterDisposedForm_Load); + form.Show (); + } + + + using (Form form = new Form ()) { + form.StartPosition = FormStartPosition.Manual; + form.Load += new EventHandler (CenterDisposedForm_Load); + form.Show (); + } + + + using (Form form = new Form ()) { + form.StartPosition = FormStartPosition.WindowsDefaultBounds; + form.Load += new EventHandler (CenterDisposedForm_Load); + form.Show (); + } + + using (Form form = new Form ()) { + form.StartPosition = FormStartPosition.WindowsDefaultLocation; + form.Load += new EventHandler (CenterDisposedForm_Load); + form.Show (); + } + } + + + [Test] + [ExpectedException (typeof (ObjectDisposedException))] + public void CenterToParentDisposedForm () + { + using (FormHandleTest.ProtectedMethodsForm form = new FormHandleTest.ProtectedMethodsForm ()) { + form.Dispose (); + form.PublicCenterToParent (); + } + } + + [Test] + [ExpectedException (typeof (ObjectDisposedException))] + public void CenterToScreenDisposedForm () + { + using (FormHandleTest.ProtectedMethodsForm form = new FormHandleTest.ProtectedMethodsForm ()) { + form.Dispose (); + form.PublicCenterToScreen (); + } + } + + [Test] + public void SetStartPositionDisposedForm () + { + using (FormHandleTest.ProtectedMethodsForm form = new FormHandleTest.ProtectedMethodsForm ()) { + form.Dispose (); + form.StartPosition = FormStartPosition.WindowsDefaultLocation; + } + } + + private void CenterDisposedForm_Load (object sender, EventArgs e) + { + ((Form) sender).Close (); + } + + [Test] + public void ShowDialogCloseTest () + { + using (TimeBombedForm f = new TimeBombedForm ()) { + EventLogger log = new EventLogger (f); + f.timer.Interval = 1000; + f.VisibleChanged += new EventHandler (Form_VisibleChanged1); + f.ShowDialog (); + + Assert.AreEqual ("VisibleChanged", f.Reason, "#00"); + Assert.AreEqual (1, log.CountEvents ("Closing"), "#01"); +#if NET_2_0 + Assert.AreEqual (1, log.CountEvents ("FormClosing"), "#02"); +#endif + Assert.AreEqual (1, log.CountEvents ("HandleDestroyed"), "#03"); + + Assert.AreEqual (0, log.CountEvents ("Closed"), "#04"); +#if NET_2_0 + Assert.AreEqual (0, log.CountEvents ("FormClosed"), "#05"); +#endif + Assert.AreEqual (0, log.CountEvents ("Disposed"), "#06"); + } + + using (TimeBombedForm f = new TimeBombedForm ()) { + EventLogger log = new EventLogger (f); + f.ShowDialog (); + + Assert.AreEqual ("Bombed", f.Reason, "#A0"); + Assert.AreEqual (1, log.CountEvents ("Closing"), "#A1"); +#if NET_2_0 + Assert.AreEqual (1, log.CountEvents ("FormClosing"), "#A2"); +#endif + Assert.AreEqual (1, log.CountEvents ("HandleDestroyed"), "#A3"); + + Assert.AreEqual (1, log.CountEvents ("Closed"), "#A4"); +#if NET_2_0 + Assert.AreEqual (1, log.CountEvents ("FormClosed"), "#A5"); +#endif + Assert.AreEqual (0, log.CountEvents ("Disposed"), "#A6"); + } + + + using (TimeBombedForm f = new TimeBombedForm ()) { + EventLogger log = new EventLogger (f); + f.VisibleChanged += new EventHandler (Form_VisibleChanged2); + f.ShowDialog (); + + Assert.AreEqual ("VisibleChanged", f.Reason, "#B0"); +#if NET_2_0 + Assert.AreEqual (1, log.CountEvents ("Closing"), "#B1"); + Assert.AreEqual (1, log.CountEvents ("FormClosing"), "#B2"); +#endif + Assert.AreEqual (1, log.CountEvents ("HandleDestroyed"), "#B3"); + +#if NET_2_0 + Assert.AreEqual (1, log.CountEvents ("Closed"), "#B4"); + Assert.AreEqual (1, log.CountEvents ("FormClosed"), "#B5"); +#endif + Assert.AreEqual (0, log.CountEvents ("Disposed"), "#B6"); + } + + + using (TimeBombedForm f = new TimeBombedForm ()) { + EventLogger log = new EventLogger (f); + f.DialogResult = DialogResult.None; + f.ShowDialog (); + + Assert.AreEqual ("Bombed", f.Reason, "#C0"); + Assert.AreEqual (1, log.CountEvents ("Closing"), "#C1"); +#if NET_2_0 + Assert.AreEqual (1, log.CountEvents ("FormClosing"), "#C2"); +#endif + Assert.AreEqual (1, log.CountEvents ("HandleDestroyed"), "#C3"); + + Assert.AreEqual (1, log.CountEvents ("Closed"), "#C4"); +#if NET_2_0 + Assert.AreEqual (1, log.CountEvents ("FormClosed"), "#C5"); +#endif + Assert.AreEqual (0, log.CountEvents ("Disposed"), "#C6"); + + Assert.AreEqual (DialogResult.Cancel, f.DialogResult, "#C7"); + } + } + + void Form_VisibleChanged1 (object sender, EventArgs e) + { + TimeBombedForm f = (TimeBombedForm) sender; + f.Reason = "VisibleChanged"; + f.Visible = false; + } + + void Form_VisibleChanged2 (object sender, EventArgs e) + { + TimeBombedForm f = (TimeBombedForm) sender; + f.Reason = "VisibleChanged"; + f.Visible = false; + f.DialogResult = DialogResult.OK; + Assert.IsFalse (f.Visible); + } + + [Test] + public void DialogOwnerTest () + { + using (Form first = new Form ()) { + using (TimeBombedForm second = new TimeBombedForm ()) { + first.Show (); + second.Load += new EventHandler (second_Load); + second.ShowDialog (); + } + } + } + + void second_Load (object sender, EventArgs e) + { + Form second = (Form) sender; + Assert.IsNull (second.Owner, "#1"); + } + + [Test] + [Category ("NotWorking")] + public void FormStartupPositionChangeTest () + { + using (Form frm = new Form ()) + { + frm.ShowInTaskbar = false; + frm.StartPosition = FormStartPosition.Manual; + frm.Location = new Point (0, 0); + frm.Show (); + + // On X there seem to be pending messages in the queue aren't processed + // before Show returns, so process them. Otherwise the Location returns + // something like (5,23) + Application.DoEvents (); + + Assert.AreEqual ("{X=0,Y=0}", frm.Location.ToString (), "#01"); + + frm.StartPosition = FormStartPosition.CenterParent; + Assert.AreEqual ("{X=0,Y=0}", frm.Location.ToString (), "#02"); + + frm.StartPosition = FormStartPosition.CenterScreen; + Assert.AreEqual ("{X=0,Y=0}", frm.Location.ToString (), "#03"); + + frm.StartPosition = FormStartPosition.Manual; + Assert.AreEqual ("{X=0,Y=0}", frm.Location.ToString (), "#04"); + + frm.StartPosition = FormStartPosition.WindowsDefaultBounds; + Assert.AreEqual ("{X=0,Y=0}", frm.Location.ToString (), "#05"); + + frm.StartPosition = FormStartPosition.WindowsDefaultLocation; + Assert.AreEqual ("{X=0,Y=0}", frm.Location.ToString (), "#06"); + } + } + + [Test] + public void FormStartupPositionTest () + { + CreateParams cp; + + using (Form frm = new Form ()) + { + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$01"); + Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#01"); + + frm.StartPosition = FormStartPosition.CenterParent; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.CenterParent, frm.StartPosition, "$01"); + Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#02"); + + frm.StartPosition = FormStartPosition.CenterScreen; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.CenterScreen, frm.StartPosition, "$01"); + Assert.AreEqual (new Point (Screen.PrimaryScreen.WorkingArea.Width / 2 - frm.Width / 2, Screen.PrimaryScreen.WorkingArea.Height / 2 - frm.Height / 2).ToString (), new Point (cp.X, cp.Y).ToString (), "#03"); + + frm.StartPosition = FormStartPosition.Manual; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.Manual, frm.StartPosition, "$01"); + Assert.AreEqual (new Point (0, 0).ToString (), new Point (cp.X, cp.Y).ToString (), "#04"); + + frm.StartPosition = FormStartPosition.WindowsDefaultBounds; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.WindowsDefaultBounds, frm.StartPosition, "$01"); + Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#05"); + + frm.StartPosition = FormStartPosition.WindowsDefaultLocation; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$01"); + Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#06"); + + } + + + using (Form frm = new Form ()) { + frm.Location = new Point (23, 45); + + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$A1"); + Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#A1"); + + frm.StartPosition = FormStartPosition.CenterParent; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.CenterParent, frm.StartPosition, "$A2"); + Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#A2"); + + frm.StartPosition = FormStartPosition.CenterScreen; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.CenterScreen, frm.StartPosition, "$A3"); + Assert.AreEqual (new Point (Screen.PrimaryScreen.WorkingArea.Width / 2 - frm.Width / 2, Screen.PrimaryScreen.WorkingArea.Height / 2 - frm.Height / 2).ToString (), new Point (cp.X, cp.Y).ToString (), "#A3"); + + frm.StartPosition = FormStartPosition.Manual; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.Manual, frm.StartPosition, "$A4"); + Assert.AreEqual (new Point (23, 45).ToString (), new Point (cp.X, cp.Y).ToString (), "#A4"); + + frm.StartPosition = FormStartPosition.WindowsDefaultBounds; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.WindowsDefaultBounds, frm.StartPosition, "$A5"); + Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#A5"); + + frm.StartPosition = FormStartPosition.WindowsDefaultLocation; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$A6"); + Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#A6"); + } + } + + [Test] + public void MdiFormStartupPositionTest () + { + CreateParams cp; + using (Form Main = new Form ()) { + Main.IsMdiContainer = true; + Main.ShowInTaskbar = false; + Main.Show (); + + using (Form frm = new Form ()) { + frm.MdiParent = Main; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$01"); + Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#01"); + + frm.StartPosition = FormStartPosition.CenterParent; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.CenterParent, frm.StartPosition, "$01"); + Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#02"); + + frm.StartPosition = FormStartPosition.CenterScreen; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.CenterScreen, frm.StartPosition, "$01"); + Assert.AreEqual (new Point (0, 0).ToString (), new Point (cp.X, cp.Y).ToString (), "#03"); + + frm.StartPosition = FormStartPosition.Manual; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.Manual, frm.StartPosition, "$01"); + Assert.AreEqual (new Point (0, 0).ToString (), new Point (cp.X, cp.Y).ToString (), "#04"); + + frm.StartPosition = FormStartPosition.WindowsDefaultBounds; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.WindowsDefaultBounds, frm.StartPosition, "$01"); + Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#05"); + + frm.StartPosition = FormStartPosition.WindowsDefaultLocation; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$01"); + Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#06"); + frm.Show (); + } + + using (Form frm = new Form ()) { + frm.MdiParent = Main; + frm.Location = new Point (23, 45); + + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$A1"); + Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#A1"); + + frm.StartPosition = FormStartPosition.CenterParent; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.CenterParent, frm.StartPosition, "$A2"); + Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#A2"); + + frm.StartPosition = FormStartPosition.CenterScreen; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.CenterScreen, frm.StartPosition, "$A3"); + Assert.AreEqual (new Point (0, 0).ToString (), new Point (cp.X, cp.Y).ToString (), "#A3"); + + frm.StartPosition = FormStartPosition.Manual; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.Manual, frm.StartPosition, "$A4"); + Assert.AreEqual (new Point (23, 45).ToString (), new Point (cp.X, cp.Y).ToString (), "#A4"); + + frm.StartPosition = FormStartPosition.WindowsDefaultBounds; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.WindowsDefaultBounds, frm.StartPosition, "$A5"); + Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#A5"); + + frm.StartPosition = FormStartPosition.WindowsDefaultLocation; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$A6"); + Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#A6"); + + frm.Show (); + } + + using (Form frm = new Form ()) { + frm.MdiParent = Main; + frm.Location = new Point (34, 56); + + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$B1"); + Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#B1"); + + frm.StartPosition = FormStartPosition.CenterParent; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.CenterParent, frm.StartPosition, "$B2"); + Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#B2"); + + frm.StartPosition = FormStartPosition.CenterScreen; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.CenterScreen, frm.StartPosition, "$B3"); + Assert.AreEqual (new Point (0, 0).ToString (), new Point (cp.X, cp.Y).ToString (), "#B3"); + + frm.StartPosition = FormStartPosition.Manual; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.Manual, frm.StartPosition, "$B4"); + Assert.AreEqual (new Point (34, 56).ToString (), new Point (cp.X, cp.Y).ToString (), "#B4"); + + frm.StartPosition = FormStartPosition.WindowsDefaultBounds; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.WindowsDefaultBounds, frm.StartPosition, "$B5"); + Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#B5"); + + frm.StartPosition = FormStartPosition.WindowsDefaultLocation; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$B6"); + Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#B6"); + + frm.Show (); + } + + Main.Size = new Size (600, 600); + using (Form frm = new Form ()) { + frm.MdiParent = Main; + frm.Location = new Point (34, 56); + + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$C1"); + Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#C1"); + + frm.StartPosition = FormStartPosition.CenterParent; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.CenterParent, frm.StartPosition, "$C2"); + Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#C2"); + + frm.StartPosition = FormStartPosition.CenterScreen; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.CenterScreen, frm.StartPosition, "$C3"); + Assert.AreEqual (new Point (Main.Controls [0].ClientSize.Width / 2 - frm.Width / 2, Main.Controls [0].ClientSize.Height / 2 - frm.Height / 2).ToString (), new Point (cp.X, cp.Y).ToString (), "#C3"); + + frm.StartPosition = FormStartPosition.Manual; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.Manual, frm.StartPosition, "$C4"); + Assert.AreEqual (new Point (34, 56).ToString (), new Point (cp.X, cp.Y).ToString (), "#C4"); + + frm.StartPosition = FormStartPosition.WindowsDefaultBounds; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.WindowsDefaultBounds, frm.StartPosition, "$C5"); + Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#C5"); + + frm.StartPosition = FormStartPosition.WindowsDefaultLocation; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$C6"); + Assert.AreEqual (new Point (int.MinValue, int.MinValue).ToString (), new Point (cp.X, cp.Y).ToString (), "#C6"); + + frm.Show (); + } + } + } + + [Test] + public void ParentedFormStartupPositionTest () + { + CreateParams cp; + using (Form Main = new Form ()) { + Main.ShowInTaskbar = false; + Main.Show (); + + using (Form frm = new Form ()) { + frm.TopLevel = false; + Main.Controls.Add (frm); + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$01"); + Assert.AreEqual (new Point (0, 0).ToString (), new Point (cp.X, cp.Y).ToString (), "#01"); + + frm.StartPosition = FormStartPosition.CenterParent; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.CenterParent, frm.StartPosition, "$02"); + Assert.AreEqual (new Point (0, 0).ToString (), new Point (cp.X, cp.Y).ToString (), "#02"); + + frm.StartPosition = FormStartPosition.CenterScreen; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.CenterScreen, frm.StartPosition, "$03"); + Assert.AreEqual (new Point (0, 0).ToString (), new Point (cp.X, cp.Y).ToString (), "#03"); + + frm.StartPosition = FormStartPosition.Manual; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.Manual, frm.StartPosition, "$04"); + Assert.AreEqual (new Point (0, 0).ToString (), new Point (cp.X, cp.Y).ToString (), "#04"); + + frm.StartPosition = FormStartPosition.WindowsDefaultBounds; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.WindowsDefaultBounds, frm.StartPosition, "$05"); + Assert.AreEqual (new Point (0, 0).ToString (), new Point (cp.X, cp.Y).ToString (), "#05"); + + frm.StartPosition = FormStartPosition.WindowsDefaultLocation; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$06"); + Assert.AreEqual (new Point (0, 0).ToString (), new Point (cp.X, cp.Y).ToString (), "#06"); + frm.Show (); + } + + using (Form frm = new Form ()) { + frm.TopLevel = false; + Main.Controls.Add (frm); + frm.Location = new Point (23, 45); + + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$A1"); + Assert.AreEqual (new Point (23, 45).ToString (), new Point (cp.X, cp.Y).ToString (), "#A1"); + + frm.StartPosition = FormStartPosition.CenterParent; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.CenterParent, frm.StartPosition, "$A2"); + Assert.AreEqual (new Point (23, 45).ToString (), new Point (cp.X, cp.Y).ToString (), "#A2"); + + frm.StartPosition = FormStartPosition.CenterScreen; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.CenterScreen, frm.StartPosition, "$A3"); + Assert.AreEqual (new Point (23, 45).ToString (), new Point (cp.X, cp.Y).ToString (), "#A3"); + + frm.StartPosition = FormStartPosition.Manual; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.Manual, frm.StartPosition, "$A4"); + Assert.AreEqual (new Point (23, 45).ToString (), new Point (cp.X, cp.Y).ToString (), "#A4"); + + frm.StartPosition = FormStartPosition.WindowsDefaultBounds; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.WindowsDefaultBounds, frm.StartPosition, "$A5"); + Assert.AreEqual (new Point (23, 45).ToString (), new Point (cp.X, cp.Y).ToString (), "#A5"); + + frm.StartPosition = FormStartPosition.WindowsDefaultLocation; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$A6"); + Assert.AreEqual (new Point (23, 45).ToString (), new Point (cp.X, cp.Y).ToString (), "#A6"); + + frm.Show (); + } + + using (Form frm = new Form ()) { + frm.TopLevel = false; + Main.Controls.Add (frm); + frm.Location = new Point (34, 56); + + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$B1"); + Assert.AreEqual (new Point (34, 56).ToString (), new Point (cp.X, cp.Y).ToString (), "#B1"); + + frm.StartPosition = FormStartPosition.CenterParent; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.CenterParent, frm.StartPosition, "$B2"); + Assert.AreEqual (new Point (34, 56).ToString (), new Point (cp.X, cp.Y).ToString (), "#B2"); + + frm.StartPosition = FormStartPosition.CenterScreen; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.CenterScreen, frm.StartPosition, "$B3"); + Assert.AreEqual (new Point (34, 56).ToString (), new Point (cp.X, cp.Y).ToString (), "#B3"); + + frm.StartPosition = FormStartPosition.Manual; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.Manual, frm.StartPosition, "$B4"); + Assert.AreEqual (new Point (34, 56).ToString (), new Point (cp.X, cp.Y).ToString (), "#B4"); + + frm.StartPosition = FormStartPosition.WindowsDefaultBounds; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.WindowsDefaultBounds, frm.StartPosition, "$B5"); + Assert.AreEqual (new Point (34, 56).ToString (), new Point (cp.X, cp.Y).ToString (), "#B5"); + + frm.StartPosition = FormStartPosition.WindowsDefaultLocation; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$B6"); + Assert.AreEqual (new Point (34, 56).ToString (), new Point (cp.X, cp.Y).ToString (), "#B6"); + + frm.Show (); + } + + Main.Size = new Size (600, 600); + using (Form frm = new Form ()) { + frm.TopLevel = false; + Main.Controls.Add (frm); + frm.Location = new Point (34, 56); + + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$C1"); + Assert.AreEqual (new Point (34, 56).ToString (), new Point (cp.X, cp.Y).ToString (), "#C1"); + + frm.StartPosition = FormStartPosition.CenterParent; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.CenterParent, frm.StartPosition, "$C2"); + Assert.AreEqual (new Point (34, 56).ToString (), new Point (cp.X, cp.Y).ToString (), "#C2"); + + frm.StartPosition = FormStartPosition.CenterScreen; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.CenterScreen, frm.StartPosition, "$C3"); + Assert.AreEqual (new Point (34, 56).ToString (), new Point (cp.X, cp.Y).ToString (), "#C3"); + + frm.StartPosition = FormStartPosition.Manual; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.Manual, frm.StartPosition, "$C4"); + Assert.AreEqual (new Point (34, 56).ToString (), new Point (cp.X, cp.Y).ToString (), "#C4"); + + frm.StartPosition = FormStartPosition.WindowsDefaultBounds; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.WindowsDefaultBounds, frm.StartPosition, "$C5"); + Assert.AreEqual (new Point (34, 56).ToString (), new Point (cp.X, cp.Y).ToString (), "#C5"); + + frm.StartPosition = FormStartPosition.WindowsDefaultLocation; + cp = TestHelper.GetCreateParams (frm); + Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, frm.StartPosition, "$C6"); + Assert.AreEqual (new Point (34, 56).ToString (), new Point (cp.X, cp.Y).ToString (), "#C6"); + + frm.Show (); + } + } + } + + [Test] + public void UnparentForm () + { + Form f1 = new Form (); + f1.Show (); + + Form f2 = new Form (); + f2.TopLevel = false; + f2.Parent = f1; + Assert.AreSame (f1, f2.Parent, "#1"); + f2.Show (); + f2.Parent = null; + Assert.IsNull (f2.Parent, "#2"); + } + + [Test] // bug #80791 + public void ClientSizeTest () + { + Form form = new Form (); + Assert.IsFalse (form.ClientSize == form.Size); + } + + [Test] // bug #80574 + [Category ("NotWorking")] + public void FormBorderStyleTest () + { + Form form = new Form (); + Rectangle boundsBeforeBorderStyleChange = form.Bounds; + Rectangle clientRectangleBeforeBorderStyleChange = form.ClientRectangle; + form.FormBorderStyle = FormBorderStyle.None; + Assert.AreEqual (form.Bounds, boundsBeforeBorderStyleChange, "#A1"); + Assert.AreEqual (form.ClientRectangle, clientRectangleBeforeBorderStyleChange, "#A2"); + + form.Visible = true; + form.FormBorderStyle = FormBorderStyle.Sizable; + boundsBeforeBorderStyleChange = form.Bounds; + clientRectangleBeforeBorderStyleChange = form.ClientRectangle; + form.FormBorderStyle = FormBorderStyle.None; + Assert.IsFalse (form.Bounds == boundsBeforeBorderStyleChange, "#B1"); + Assert.AreEqual (form.ClientRectangle, clientRectangleBeforeBorderStyleChange, "#B2"); + + form.Visible = false; + form.FormBorderStyle = FormBorderStyle.Sizable; + boundsBeforeBorderStyleChange = form.Bounds; + clientRectangleBeforeBorderStyleChange = form.ClientRectangle; + form.FormBorderStyle = FormBorderStyle.None; + Assert.IsFalse (form.Bounds == boundsBeforeBorderStyleChange, "#C1"); + Assert.AreEqual (form.ClientRectangle, clientRectangleBeforeBorderStyleChange, "#C2"); + } + + [Test] + [Category ("NotWorking")] + public void MaximizedParentedFormTest () + { + using (Form Main = new Form ()) { + Form Child = new Form (); + Child.TopLevel = false; + Main.Controls.Add (Child); + Main.ShowInTaskbar = false; + Main.Show (); + + Child.WindowState = FormWindowState.Maximized; + Child.Visible = true; + // The exact negative value depends on the border with, but it should always be < 0. + Assert.IsTrue (Child.Location.X < 0 && Child.Location.Y < 0, "#A1"); + } + } + [Test] + [Category ("NotWorking")] + public void ParentedFormEventTest () + { + + using (Form Main = new Form ()) { + Form Child = new Form (); + Child.TopLevel = false; + Child.Visible = true; + Main.ShowInTaskbar = false; + Main.Show (); + + EventLogger log = new EventLogger (Child); + Assert.AreEqual (true, Child.Visible, "#A0"); + Main.Controls.Add (Child); + Assert.AreEqual (true, Child.Visible, "#B0"); + Assert.AreEqual ("ParentChanged;BindingContextChanged;Layout;VisibleChanged;BindingContextChanged;BindingContextChanged", log.EventsJoined (), "#B1"); + } + } + [Test] + [NUnit.Framework.Category ("NotWorking")] + public void FormCreateParamsStyleTest () + { + Form frm; + + using (frm = new Form ()) { + Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles) TestHelper.GetCreateParams (frm).Style), "#01-Style"); + Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles) TestHelper.GetCreateParams (frm).ExStyle), "#01-ExStyle"); + } + + using (frm = new Form ()) { + frm.AllowDrop = !frm.AllowDrop; + Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#02-Style"); + Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#02-ExStyle"); + } + + using (frm = new Form ()) { + frm.AllowTransparency = !frm.AllowTransparency; + Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#03-Style"); + Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW | WindowExStyles.WS_EX_LAYERED, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#03-ExStyle"); + } + + using (frm = new Form ()) { + frm.Opacity = 0.50; + Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#04-Style"); + Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW | WindowExStyles.WS_EX_LAYERED, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#04-ExStyle"); + } + + using (frm = new Form ()) { + frm.TransparencyKey = Color.Cyan; + Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#05-Style"); + Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW | WindowExStyles.WS_EX_LAYERED, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#05-ExStyle"); + } + + using (frm = new Form ()) { + frm.CausesValidation = !frm.CausesValidation; + Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#06-Style"); + Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#06-ExStyle"); + } + + using (frm = new Form ()) { + frm.ControlBox = !frm.ControlBox; + Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TABSTOP | WindowStyles.WS_GROUP | WindowStyles.WS_THICKFRAME | WindowStyles.WS_BORDER | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#07-Style"); + Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#07-ExStyle"); + } + + using (frm = new Form ()) { + frm.Enabled = true; + Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#08-Style"); + Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#08-ExStyle"); + } + + using (frm = new Form ()) { + frm.FormBorderStyle = FormBorderStyle.Fixed3D; + Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TABSTOP | WindowStyles.WS_GROUP | WindowStyles.WS_SYSMENU | WindowStyles.WS_CAPTION | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#10-Style"); + Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CLIENTEDGE | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#10-ExStyle"); + } + + using (frm = new Form ()) { + frm.FormBorderStyle = FormBorderStyle.FixedDialog; + Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TABSTOP | WindowStyles.WS_GROUP | WindowStyles.WS_SYSMENU | WindowStyles.WS_CAPTION | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#11-Style"); + Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_DLGMODALFRAME | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#11-ExStyle"); + } + + using (frm = new Form ()) { + frm.FormBorderStyle = FormBorderStyle.FixedSingle; + Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TABSTOP | WindowStyles.WS_GROUP | WindowStyles.WS_SYSMENU | WindowStyles.WS_CAPTION | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#12-Style"); + Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#12-ExStyle"); + } + + using (frm = new Form ()) { + frm.FormBorderStyle = FormBorderStyle.FixedToolWindow; + Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TABSTOP | WindowStyles.WS_GROUP | WindowStyles.WS_SYSMENU | WindowStyles.WS_CAPTION | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#13-Style"); + Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_TOOLWINDOW | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#13-ExStyle"); + } + + using (frm = new Form ()) { + frm.FormBorderStyle = FormBorderStyle.None; + Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TABSTOP | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#14-Style"); + Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#14-ExStyle"); + } + + using (frm = new Form ()) { + frm.FormBorderStyle = FormBorderStyle.Sizable; + Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#15-Style"); + Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#15-ExStyle"); + } + + using (frm = new Form ()) { + frm.FormBorderStyle = FormBorderStyle.SizableToolWindow; + Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#16-Style"); + Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_TOOLWINDOW | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#16-ExStyle"); + } + + using (frm = new Form ()) { + frm.HelpButton = !frm.HelpButton; + Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#17-Style"); + Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#17-ExStyle"); + } + + using (frm = new Form ()) { + frm.Icon = null; + Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#18-Style"); + Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#18-ExStyle"); + } + + using (frm = new Form ()) { + frm.Icon = SystemIcons.Asterisk; + Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#19-Style"); + Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#19-ExStyle"); + } + + using (frm = new Form ()) { + frm.IsMdiContainer = !frm.IsMdiContainer; + Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#20-Style"); + Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#20-ExStyle"); + } + + using (frm = new Form ()) { + frm.MaximizeBox = !frm.MaximizeBox; + Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_GROUP | WindowStyles.WS_THICKFRAME | WindowStyles.WS_SYSMENU | WindowStyles.WS_CAPTION | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#21-Style"); + Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#21-ExStyle"); + } + + using (frm = new Form ()) { + frm.MinimizeBox = !frm.MinimizeBox; + Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TABSTOP | WindowStyles.WS_THICKFRAME | WindowStyles.WS_SYSMENU | WindowStyles.WS_CAPTION | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#22-Style"); + Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#22-ExStyle"); + } +#if NET_2_0 + using (frm = new Form ()) { + frm.ShowIcon = !frm.ShowIcon; + Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#23-Style"); + Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_DLGMODALFRAME | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#23-ExStyle"); + } +#endif + using (frm = new Form ()) { + frm.ShowInTaskbar = !frm.ShowInTaskbar; + Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#24-Style"); + Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#24-ExStyle"); + } + + + using (frm = new Form ()) { + frm.TabStop = !frm.TabStop; + Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#25-Style"); + Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#25-ExStyle"); + } + + using (frm = new Form ()) { + frm.TopLevel = !frm.TopLevel; + Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN | WindowStyles.WS_CLIPSIBLINGS | WindowStyles.WS_CHILD, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#26-Style"); + Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#26-ExStyle"); + } + + using (frm = new Form ()) { + frm.Visible = !frm.Visible; + Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TILEDWINDOW | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#27-Style"); + Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#27-ExStyle"); + } + + using (frm = new Form ()) { + frm.ControlBox = false; + frm.Text = ""; + Assert.AreEqual (WindowStyles.WS_TILED | WindowStyles.WS_TABSTOP | WindowStyles.WS_GROUP | WindowStyles.WS_THICKFRAME | WindowStyles.WS_BORDER | WindowStyles.WS_CLIPCHILDREN, ((WindowStyles)TestHelper.GetCreateParams (frm).Style), "#28-Style"); + Assert.AreEqual (WindowExStyles.WS_EX_LEFT | WindowExStyles.WS_EX_RIGHTSCROLLBAR | WindowExStyles.WS_EX_CONTROLPARENT | WindowExStyles.WS_EX_APPWINDOW, ((WindowExStyles)TestHelper.GetCreateParams (frm).ExStyle), "#28-ExStyle"); + } + } + + [Test] + public void FormParentedTest () + { + using (Form frm = new Form ()) { + using (Form frm2 = new Form ()) { + frm2.TopLevel = false; + frm.ShowInTaskbar = false; + frm2.ShowInTaskbar = false; + frm2.Visible = true; + frm.Visible = true; + + EventLogger log = new EventLogger (frm); + EventLogger log2 = new EventLogger (frm2); + + frm.Controls.Add (frm2); + + Assert.IsTrue (log2.EventRaised ("ParentChanged"), "#C1"); + Assert.IsTrue (log.EventRaised ("ControlAdded"), "#P1"); + Assert.AreSame (frm, frm2.Parent, "#02"); + } + } + } + + [Test] + public void FormPropertyTest () + { + Form myform = new Form (); + myform.Visible = true; + myform.Text = "NewForm"; + myform.Name = "FormTest"; + Assert.IsNull (myform.ActiveMdiChild, "#2"); + Assert.IsFalse (myform.AutoScale, "#3"); + Assert.IsNull (myform.CancelButton, "#6"); + Assert.IsTrue (myform.ControlBox, "#9"); + Assert.IsTrue (myform.DesktopBounds.X > 0, "#10a"); + Assert.IsTrue (myform.DesktopBounds.Y > 0, "#10b"); + Assert.AreEqual (300, myform.DesktopBounds.Height, "#10c"); + Assert.AreEqual (300, myform.DesktopBounds.Width, "#10d"); + Assert.IsTrue (myform.DesktopLocation.X > 0, "#11a"); + Assert.IsTrue (myform.DesktopLocation.Y > 0, "#11b"); + Assert.AreEqual (DialogResult.None, myform.DialogResult, "#12"); + Assert.AreEqual (FormBorderStyle.Sizable, myform.FormBorderStyle, "#13"); + Assert.IsFalse (myform.HelpButton, "#14"); + Assert.AreEqual ("System.Drawing.Icon", myform.Icon.GetType ().ToString (), "#15"); + Assert.IsFalse (myform.IsMdiChild, "#16"); + Assert.IsFalse (myform.IsMdiContainer, "#17"); + Assert.IsFalse (myform.KeyPreview, "#18"); + Assert.IsTrue (myform.MaximizeBox, "#19"); + Assert.AreEqual (0, myform.MaximumSize.Height, "#20a"); + Assert.AreEqual (0, myform.MaximumSize.Width, "#20b"); + Assert.AreEqual (0, myform.MdiChildren.Length, "#21a"); + Assert.AreEqual (1, myform.MdiChildren.Rank, "#21b"); + Assert.IsFalse (myform.MdiChildren.IsSynchronized, "#21c"); + Assert.IsNull (myform.MdiParent, "#22"); + Assert.IsNull (myform.Menu, "#23"); + Assert.IsNull (myform.MergedMenu, "#24"); + Assert.IsTrue (myform.MinimizeBox, "#25"); + Assert.AreEqual (0, myform.MinimumSize.Height, "#26a"); + Assert.AreEqual (0, myform.MinimumSize.Width, "#26b"); + Assert.IsTrue (myform.MinimumSize.IsEmpty, "#26c"); + Assert.IsFalse (myform.Modal, "#27"); + Assert.AreEqual (1, myform.Opacity, "#28"); + Assert.AreEqual (0, myform.OwnedForms.Length, "#29a"); + Assert.AreEqual (1, myform.OwnedForms.Rank, "#29b"); + Assert.IsNull (myform.Owner, "#30"); + Assert.IsTrue (myform.ShowInTaskbar, "#31"); + Assert.AreEqual (300, myform.Size.Height, "#32a"); + Assert.AreEqual (300, myform.Size.Width, "#32b"); + Assert.AreEqual (SizeGripStyle.Auto, myform.SizeGripStyle, "#33"); + Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, myform.StartPosition, "#34"); + Assert.IsTrue (myform.TopLevel, "#35"); + Assert.IsFalse (myform.TopMost, "#36"); + Assert.AreEqual (Color.Empty, myform.TransparencyKey, "#37"); + Assert.AreEqual (FormWindowState.Normal, myform.WindowState, "#38"); + Assert.AreEqual (ImeMode.NoControl, myform.ImeMode, "#39"); + myform.Dispose (); + } + + [Test] + [Category ("NotWorking")] + public void ActivateTest () + { + Form myform = new Form (); + myform.ShowInTaskbar = false; + myform.Visible = true; + myform.Text = "NewForm"; + myform.Name = "FormTest"; + myform.Activate (); + Assert.AreEqual (true, myform.Focus (), "#40"); + myform.Dispose (); + } + + [Test] + public void AddOwnedFormTest () + { + Form parent = new Form (); + parent.ShowInTaskbar = false; + parent.Text = "NewParent"; + Form ownedForm = new Form (); + ownedForm.ShowInTaskbar = false; + ownedForm.Text = "Owned Form"; + parent.AddOwnedForm (ownedForm); + ownedForm.Show (); + Assert.AreEqual ("NewParent", ownedForm.Owner.Text, "#41"); + ownedForm.Dispose (); + parent.Dispose (); + } + + [Test] // bug #80020 + public void IsHandleCreated () + { + Form main = new Form (); + main.Name = "main"; + main.IsMdiContainer = true; + main.ShowInTaskbar = false; + Assert.IsFalse (main.IsHandleCreated, "#1"); + + Form child = new Form (); + child.MdiParent = main; + child.WindowState = FormWindowState.Maximized; + Assert.IsFalse (main.IsHandleCreated, "#2"); + + child.Show (); + Assert.IsFalse (child.IsHandleCreated, "#3"); + Assert.IsFalse (main.IsHandleCreated, "#4"); + + main.Show (); + Assert.IsTrue (child.IsHandleCreated, "#5"); + Assert.IsTrue (main.IsHandleCreated, "#6"); + + child.Dispose (); + main.Dispose (); + } + + [Test] + public void RemoveOwnedFormTest () + { + Form myform = new Form (); + myform.ShowInTaskbar = false; + myform.Text = "NewForm"; + myform.Name = "FormTest"; + myform.RemoveOwnedForm (myform); + myform.Show (); + Assert.AreEqual (null, myform.Owner, "#44"); + myform.Dispose (); + } + + [Test] + public void SetDesktopBoundsTest () + { + Form myform = new Form (); + myform.ShowInTaskbar = false; + myform.Visible = true; + myform.Text = "NewForm"; + myform.Name = "FormTest"; + myform.SetDesktopBounds (10, 10, 200 , 200); + Assert.AreEqual (200, myform.DesktopBounds.Height, "#45"); + myform.Dispose (); + } + + [Test] + public void SetDesktopLocationTest () + { + Form myform = new Form (); + myform.ShowInTaskbar = false; + myform.Visible = true; + myform.Text = "NewForm"; + myform.Name = "FormTest"; + myform.SetDesktopLocation (10, 10); + Assert.AreEqual (10, myform.DesktopLocation.X, "#46"); + myform.Dispose (); + } + + [Test] + public void SetDialogResultOutOfRange () + { + Form myform = new Form (); + myform.ShowInTaskbar = false; + try { + myform.DialogResult = (DialogResult) (-1); + Assert.Fail ("#48"); + } catch (InvalidEnumArgumentException) { + } + + try { + myform.DialogResult = (DialogResult) ((int) DialogResult.No + 1); + Assert.Fail ("#49"); + } catch (InvalidEnumArgumentException) { + } + myform.Dispose (); + } + + void myform_set_dialogresult (object sender, EventArgs e) + { + Form f = (Form)sender; + + f.DialogResult = DialogResult.OK; + } + + void myform_close (object sender, EventArgs e) + { + Form f = (Form)sender; + + f.Close(); + } + + [Test] + public void SetDialogResult () + { + Form myform = new Form (); + myform.ShowInTaskbar = false; + myform.Visible = true; + + myform.DialogResult = DialogResult.Cancel; + + Assert.IsTrue (myform.Visible, "A1"); + Assert.IsFalse (myform.IsDisposed, "A2"); + + myform.Close (); + + Assert.IsFalse (myform.Visible, "A3"); + Assert.IsTrue (myform.IsDisposed, "A4"); + + DialogResult result; + + myform = new Form (); + myform.ShowInTaskbar = false; + myform.VisibleChanged += new EventHandler (myform_set_dialogresult); + result = myform.ShowDialog (); + + Assert.AreEqual (result, DialogResult.OK, "A5"); + Assert.IsFalse (myform.Visible, "A6"); + Assert.IsFalse (myform.IsDisposed, "A7"); + myform.Dispose (); + + myform = new Form (); + myform.ShowInTaskbar = false; + myform.VisibleChanged += new EventHandler (myform_close); + result = myform.ShowDialog (); + + Assert.AreEqual (result, DialogResult.Cancel, "A8"); + Assert.IsFalse (myform.Visible, "A9"); + Assert.IsFalse (myform.IsDisposed, "A10"); + + myform.Dispose (); + } + + [Test] + public void ShowDialog_Child () + { + Form main = new Form (); + main.IsMdiContainer = true; + Form child = new Form (); + child.MdiParent = main; + try { + child.ShowDialog (); + Assert.Fail ("#1"); + } catch (InvalidOperationException ex) { + // Forms that are not top level forms cannot be displayed as a + // modal dialog. Remove the form from any parent form before + // calling ShowDialog. + Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2"); + Assert.IsNull (ex.InnerException, "#3"); + Assert.IsNotNull (ex.Message, "#4"); + } + Assert.IsNull (child.Owner, "#5"); + child.Dispose (); + main.Dispose (); + } + + [Test] + public void ShowDialog_Disabled () + { + Form form = new Form (); + form.Enabled = false; + try { + form.ShowDialog (); + Assert.Fail ("#A1"); + } catch (InvalidOperationException ex) { + // Forms that are not enabled cannot be displayed as a modal + // dialog. Set the form's enabled property to true before + // calling ShowDialog. + Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#A2"); + Assert.IsNull (ex.InnerException, "#A3"); + Assert.IsNotNull (ex.Message, "#A4"); + } + Assert.IsNull (form.Owner, "#A5"); + form.Dispose (); + + Form main = new Form (); + form = new Form (); + form.Owner = main; + form.Enabled = false; + try { + form.ShowDialog (); + Assert.Fail ("#B1"); + } catch (InvalidOperationException) { + } + Assert.IsNotNull (form.Owner, "#B2"); + Assert.AreSame (main, form.Owner, "#B3"); + form.Dispose (); + main.Dispose (); + } + + [Test] + [Category ("NotWorking")] + public void ShowDialog_Owner_Circular () + { + Form main = new Form (); + Form child = new Form (); + child.Owner = main; + try { + main.ShowDialog (child); + Assert.Fail ("#1"); + } catch (ArgumentException ex) { + // A circular control reference has been made. A control cannot + // be owned or parented to itself + Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2"); + Assert.IsNull (ex.InnerException, "#3"); + Assert.IsNotNull (ex.Message, "#4"); + Assert.IsNull (ex.ParamName, "#5"); + } + Assert.IsNull (main.Owner, "#6"); + main.Dispose (); + child.Dispose (); + } + + [Test] // bug #80773 + public void ShowDialog_Owner_Self () + { + Form form = new Form (); + try { + form.ShowDialog (form); + Assert.Fail ("#A1"); + } catch (ArgumentException ex) { + // Forms cannot own themselves or their owners + Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2"); + Assert.IsNull (ex.InnerException, "#A3"); + Assert.IsNotNull (ex.Message, "#A4"); + Assert.IsNotNull (ex.ParamName, "#A5"); + Assert.AreEqual ("owner", ex.ParamName, "#A6"); + } + Assert.IsNull (form.Owner, "#A7"); + form.Dispose (); + + Form main = new Form (); + form = new Form (); + form.Owner = main; + try { + form.ShowDialog (form); + Assert.Fail ("#B1"); + } catch (ArgumentException) { + } + Assert.IsNotNull (form.Owner); + Assert.AreSame (main, form.Owner, "#B2"); + form.Dispose (); + main.Dispose (); + } + + [Test] + public void ShowDialog_Visible () + { + Form form = new Form (); + form.ShowInTaskbar = false; + form.Visible = true; + try { + form.ShowDialog (); + Assert.Fail ("#A1"); + } catch (InvalidOperationException ex) { + // Forms that are already visible cannot be displayed as a modal + // dialog. Set the form's visible property to false before + // calling ShowDialog. + Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#A2"); + Assert.IsNull (ex.InnerException, "#A3"); + Assert.IsNotNull (ex.Message, "#A4"); + } + Assert.IsNull (form.Owner, "#A5"); + form.Dispose (); + + Form main = new Form (); + form = new Form (); + form.Owner = main; + form.Visible = true; + try { + form.ShowDialog (); + Assert.Fail ("#B1"); + } catch (InvalidOperationException) { + } + Assert.IsNotNull (form.Owner, "#B2"); + Assert.AreSame (main, form.Owner, "#B3"); + form.Dispose (); + main.Dispose (); + } + + [Test] // bug #80604 + public void VisibleOnLoad () + { + MockForm form = new MockForm (); + form.CloseOnLoad = true; + Application.Run (form); + Assert.IsTrue (form.VisibleOnLoad, "#1"); + form.Dispose (); + + form = new MockForm (); + form.ShowInTaskbar = false; + form.Show (); + Assert.IsTrue (form.VisibleOnLoad, "#2"); + form.Dispose (); + } + + [Test] // bug #80052 + [Category ("NotWorking")] + public void Location () + { + // + // CenterParent + // + + Form formA = new Form (); + formA.ShowInTaskbar = false; + formA.StartPosition = FormStartPosition.CenterParent; + formA.Location = new Point (151, 251); + formA.Show (); + + Assert.AreEqual (FormStartPosition.CenterParent, formA.StartPosition, "#A1"); + Assert.IsFalse (formA.Location.X == 151, "#A2"); + Assert.IsFalse (formA.Location.Y == 251, "#A3"); + + formA.Location = new Point (311, 221); + + Assert.AreEqual (FormStartPosition.CenterParent, formA.StartPosition, "#A4"); + Assert.AreEqual (311, formA.Location.X, "#A5"); + Assert.AreEqual (221, formA.Location.Y, "#A6"); + + formA.Dispose (); + + // + // CenterScreen + // + + Form formB = new Form (); + formB.ShowInTaskbar = false; + formB.StartPosition = FormStartPosition.CenterScreen; + formB.Location = new Point (151, 251); + formB.Show (); + + Assert.AreEqual (FormStartPosition.CenterScreen, formB.StartPosition, "#B1"); + Assert.IsFalse (formB.Location.X == 151, "#B2"); + Assert.IsFalse (formB.Location.Y == 251, "#B3"); + + formB.Location = new Point (311, 221); + + Assert.AreEqual (FormStartPosition.CenterScreen, formB.StartPosition, "#B4"); + Assert.AreEqual (311, formB.Location.X, "#B5"); + Assert.AreEqual (221, formB.Location.Y, "#B6"); + + formB.Dispose (); + + // + // Manual + // + + Form formC = new Form (); + formC.ShowInTaskbar = false; + formC.StartPosition = FormStartPosition.Manual; + formC.Location = new Point (151, 251); + formC.Show (); + + Assert.AreEqual (FormStartPosition.Manual, formC.StartPosition, "#C1"); + Assert.AreEqual (151, formC.Location.X, "#C2"); + Assert.AreEqual (251, formC.Location.Y, "#C3"); + + formC.Location = new Point (311, 221); + + Assert.AreEqual (FormStartPosition.Manual, formC.StartPosition, "#C4"); + Assert.AreEqual (311, formC.Location.X, "#C5"); + Assert.AreEqual (221, formC.Location.Y, "#C6"); + + formC.Dispose (); + + // + // WindowsDefaultBounds + // + + Form formD = new Form (); + formD.ShowInTaskbar = false; + formD.StartPosition = FormStartPosition.WindowsDefaultBounds; + formD.Location = new Point (151, 251); + formD.Show (); + + Assert.AreEqual (FormStartPosition.WindowsDefaultBounds, formD.StartPosition, "#D1"); + Assert.IsFalse (formD.Location.X == 151, "#D2"); + Assert.IsFalse (formD.Location.Y == 251, "#D3"); + + formD.Location = new Point (311, 221); + + Assert.AreEqual (FormStartPosition.WindowsDefaultBounds, formD.StartPosition, "#D4"); + Assert.AreEqual (311, formD.Location.X, "#D5"); + Assert.AreEqual (221, formD.Location.Y, "#D6"); + + formD.Dispose (); + + // + // WindowsDefaultLocation + // + + Form formE = new Form (); + formE.ShowInTaskbar = false; + formE.Location = new Point (151, 251); + formE.Show (); + + Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, formE.StartPosition, "#E1"); + Assert.IsFalse (formE.Location.X == 151, "#E2"); + Assert.IsFalse (formE.Location.Y == 251, "#E3"); + + formE.Location = new Point (311, 221); + + Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, formE.StartPosition, "#E4"); + Assert.AreEqual (311, formE.Location.X, "#E5"); + Assert.AreEqual (221, formE.Location.Y, "#E6"); + + formE.Dispose (); + } + + [Test] + public void Opacity () + { + Form frm; + using (frm = new Form ()) { + Assert.AreEqual (1.0f, frm.Opacity, "#01-opacity"); + frm.Opacity = 0.50; + Assert.AreEqual (0.50f, frm.Opacity, "#02-opacity"); + frm.Opacity = -0.1f; + Assert.AreEqual (0, frm.Opacity, "#03-opacity"); + frm.Opacity = 1.1f; + Assert.AreEqual (1, frm.Opacity, "#04-opacity"); + } + } + + [Test] + public void DisposeOwnerTest () + { + Form f1 = new Form (); + Form f2 = new Form (); + + f2.Owner = f1; + + f1.Dispose (); + + Assert.IsNull (f2.Owner, "1"); + Assert.AreEqual (0, f1.OwnedForms.Length, "2"); + } + + [Test] + [ExpectedException (typeof (ObjectDisposedException))] + public void AccessDisposedForm () + { + Form myform = new Form (); + myform.ShowInTaskbar = false; + + myform.Show (); + myform.Close (); // this should result in the form being disposed + myform.Show (); // and this line should result in the ODE being thrown + } + + class MyForm : Form + { + public void DoDestroyHandle () + { + DestroyHandle(); + } + public void DoRecreateHandle () + { + RecreateHandle(); + } + } + + int handle_destroyed_count; + void handle_destroyed (object sender, EventArgs e) + { + handle_destroyed_count++; } [Test] - public void ActivateTest () + public void DestroyHandleTest () + { + handle_destroyed_count = 0; + + MyForm f1 = new MyForm (); + f1.HandleDestroyed += new EventHandler (handle_destroyed); + f1.Show (); + f1.DoDestroyHandle (); + Assert.AreEqual (1, handle_destroyed_count, "1"); + + MyForm f2 = new MyForm (); + f2.HandleDestroyed += new EventHandler (handle_destroyed); + f2.Show (); + f2.DoRecreateHandle (); + Assert.AreEqual (2, handle_destroyed_count, "2"); + + f1.Dispose (); + f2.Dispose (); + } + + [Test] + public void FormClose () { Form myform = new Form (); myform.ShowInTaskbar = false; - myform.Visible = true; - myform.Text = "NewForm"; - myform.Name = "FormTest"; - myform.Activate (); - Assert.AreEqual (true, myform.Focus (), "#40"); - myform.Dispose (); + + Assert.IsFalse (myform.Visible, "A1"); + Assert.IsFalse (myform.IsDisposed, "A2"); + + myform.Close (); +#if NET_2_0 + Assert.IsTrue (myform.IsDisposed, "A3"); +#else + Assert.IsFalse (myform.Visible, "A4"); + Assert.IsFalse (myform.IsDisposed, "A5"); + + myform.Show (); + + Assert.IsTrue (myform.Visible, "A6"); + Assert.IsFalse (myform.IsDisposed, "A7"); + + myform.Close (); + + Assert.IsFalse (myform.Visible, "A8"); + Assert.IsTrue (myform.IsDisposed, "A9"); +#endif } [Test] - public void AddOwnedFormTest () + public void FormClose2 () { - Form parent = new Form (); - parent.ShowInTaskbar = false; - parent.Text = "NewParent"; - Form ownedForm = new Form (); - ownedForm.ShowInTaskbar = false; - ownedForm.Text = "Owned Form"; - parent.AddOwnedForm (ownedForm); - ownedForm.Show (); - Assert.AreEqual ("NewParent", ownedForm.Owner.Text, "#41"); - ownedForm.Dispose (); - parent.Dispose (); + WMCloseWatcher f = new WMCloseWatcher (); + f.ShowInTaskbar = false; + + f.close_count = 0; + Assert.IsFalse (f.Visible, "A1"); + f.Close (); + Assert.AreEqual (0, f.close_count, "A2"); +#if NET_2_0 + Assert.IsTrue (f.IsDisposed, "A3"); +#else + f.Show (); + f.Close (); + Assert.AreEqual (1, f.close_count, "A4"); +#endif } - [Test] // bug #80020 - [NUnit.Framework.Category ("NotWorking")] - public void IsHandleCreated () + class WMCloseWatcher : Form { + public int close_count; + + protected override void WndProc (ref Message msg) { + if (msg.Msg == 0x0010 /* WM_CLOSE */) { + close_count ++; + } + + base.WndProc (ref msg); + } + } + + class SwallowOnActivated : Form { + protected override void OnActivated (EventArgs e) + { + // do nothing + } + + protected override void OnCreateControl () { + base.OnCreateControl (); + } + } + + class EnterTest : Button { + protected override void OnEnter (EventArgs e) + { + on_enter = true; + base.OnEnter (e); + } + + public bool on_enter; + } + + [Test] + public void OnActivateEventHandlingTest1 () { - Form main = new Form (); - main.Name = "main"; - main.IsMdiContainer = true; - main.ShowInTaskbar = false; - Assert.IsFalse (main.IsHandleCreated, "#1"); + if (TestHelper.RunningOnUnix) { + Assert.Ignore ("Relies on form.Show() synchronously generating WM_ACTIVATE"); + } - Form child = new Form (); - child.MdiParent = main; - child.WindowState = FormWindowState.Maximized; - Assert.IsFalse (main.IsHandleCreated, "#2"); + SwallowOnActivated f = new SwallowOnActivated (); - child.Show (); - Assert.IsFalse (child.IsHandleCreated, "#3"); - Assert.IsFalse (main.IsHandleCreated, "#4"); + f.ShowInTaskbar = false; - main.Show (); - Assert.IsTrue (child.IsHandleCreated, "#5"); - Assert.IsTrue (main.IsHandleCreated, "#6"); + EnterTest c = new EnterTest (); + f.Controls.Add (c); - child.Dispose (); - main.Dispose (); + f.Show (); + + Assert.IsTrue (c.on_enter, "1"); + + f.Dispose (); + } + +#if NET_2_0 + [Test] + public void FormClosingEvents () + { + // Standard Close + Form f = new Form (); + string events = string.Empty; + + f.Closing += new CancelEventHandler (delegate (Object obj, CancelEventArgs e) { events += ("Closing;"); }); + f.FormClosing += new FormClosingEventHandler (delegate (Object obj, FormClosingEventArgs e) { events += string.Format ("FormClosing [Reason:{0} - Cancel:{1}]", e.CloseReason, e.Cancel); }); + + f.Show (); + f.Close (); + + Assert.AreEqual ("Closing;FormClosing [Reason:UserClosing - Cancel:False]", events, "A1"); } [Test] - public void RemoveOwnedFormTest () + public void FormClosingEventsCancel () { - Form myform = new Form (); - myform.ShowInTaskbar = false; - myform.Text = "NewForm"; - myform.Name = "FormTest"; - myform.RemoveOwnedForm (myform); - myform.Show (); - Assert.AreEqual (null, myform.Owner, "#44"); - myform.Dispose (); + // Shows that setting Cancel in Closing flows through to FormClosing + Form f = new Form (); + string events = string.Empty; + + f.Closing += new CancelEventHandler (delegate (Object obj, CancelEventArgs e) { events += ("Closing;"); e.Cancel = true; }); + f.FormClosing += new FormClosingEventHandler (delegate (Object obj, FormClosingEventArgs e) { events += string.Format("FormClosing [Reason:{0} - Cancel:{1}]", e.CloseReason, e.Cancel); e.Cancel = false; }); + + f.Show (); + f.Close (); + + Assert.AreEqual ("Closing;FormClosing [Reason:UserClosing - Cancel:True]", events, "A1"); } [Test] - public void SetDesktopBoundsTest () + public void FormClosedEvents () { - Form myform = new Form (); - myform.ShowInTaskbar = false; - myform.Visible = true; - myform.Text = "NewForm"; - myform.Name = "FormTest"; - myform.SetDesktopBounds (10, 10, 200 , 200); - Assert.AreEqual (200, myform.DesktopBounds.Height, "#45"); - myform.Dispose (); + // Standard Closed + Form f = new Form (); + string events = string.Empty; + + f.Closed += new EventHandler (delegate (Object obj, EventArgs e) { events += ("Closed;"); }); + f.FormClosed += new FormClosedEventHandler (delegate (Object obj, FormClosedEventArgs e) { events += string.Format ("FormClosed [Reason:{0}]", e.CloseReason); }); + + f.Show (); + f.Close (); + + Assert.AreEqual ("Closed;FormClosed [Reason:UserClosing]", events, "A1"); } [Test] - public void SetDesktopLocationTest () + public void ShowWithOwner () { - Form myform = new Form (); - myform.ShowInTaskbar = false; - myform.Visible = true; - myform.Text = "NewForm"; - myform.Name = "FormTest"; - myform.SetDesktopLocation (10, 10); - Assert.AreEqual (10, myform.DesktopLocation.X, "#46"); - myform.Dispose (); + Form f = new Form (); + Button b = new Button (); + f.Controls.Add (b); + + Form f2 = new Form (); + + f2.Show (f); + + Assert.AreSame (f, f2.Owner, "A1"); + f2.Close (); + + f2 = new Form (); + + f2.Show (b); + Assert.AreSame (f, f2.Owner, "A2"); + f2.Close (); + + Button b2 = new Button (); + f2 = new Form (); + + f2.Show (b2); + Assert.AreEqual (null, f2.Owner, "A3"); + f2.Close (); + + f2 = new Form (); + f2.Show (null); + Assert.AreEqual (null, f2.Owner, "A4"); + f2.Close (); + + f.Dispose (); } [Test] - public void SetDialogResultOutOfRange () + [ExpectedException (typeof (InvalidOperationException))] + public void ShowWithOwnerIOE () { - Form myform = new Form (); - myform.ShowInTaskbar = false; - try { - myform.DialogResult = (DialogResult) (-1); - Assert.Fail ("#48"); - } catch (InvalidEnumArgumentException) { + using (Form f = new Form ()) { + f.Show (f); } + } + + [Test] // Bug #79959, #80574, #80791 + [Category ("NotWorking")] + public void BehaviorResizeOnBorderStyleChanged () + { + // Marked NotWorking because the ClientSize is dependent on the WM. + // The values below match XP Luna to make sure our behavior is the same. + Form f = new Form (); + f.ShowInTaskbar = false; + f.Show (); - try { - myform.DialogResult = (DialogResult) ((int) DialogResult.No + 1); - Assert.Fail ("#49"); - } catch (InvalidEnumArgumentException) { - } - myform.Dispose (); + Assert.AreEqual (true, f.IsHandleCreated, "A0"); + + Assert.AreEqual (new Size (300, 300), f.Size, "A1"); + Assert.AreEqual (new Size (292, 266), f.ClientSize, "A2"); + + f.FormBorderStyle = FormBorderStyle.Fixed3D; + Assert.AreEqual (new Size (302, 302), f.Size, "A3"); + Assert.AreEqual (new Size (292, 266), f.ClientSize, "A4"); + + f.FormBorderStyle = FormBorderStyle.FixedDialog; + Assert.AreEqual (new Size (298, 298), f.Size, "A5"); + Assert.AreEqual (new Size (292, 266), f.ClientSize, "A6"); + + f.FormBorderStyle = FormBorderStyle.FixedSingle; + Assert.AreEqual (new Size (298, 298), f.Size, "A7"); + Assert.AreEqual (new Size (292, 266), f.ClientSize, "A8"); + + f.FormBorderStyle = FormBorderStyle.FixedToolWindow; + Assert.AreEqual (new Size (298, 290), f.Size, "A9"); + Assert.AreEqual (new Size (292, 266), f.ClientSize, "A0"); + + f.FormBorderStyle = FormBorderStyle.None; + Assert.AreEqual (new Size (292, 266), f.Size, "A11"); + Assert.AreEqual (new Size (292, 266), f.ClientSize, "A12"); + + f.FormBorderStyle = FormBorderStyle.SizableToolWindow; + Assert.AreEqual (new Size (300, 292), f.Size, "A13"); + Assert.AreEqual (new Size (292, 266), f.ClientSize, "A14"); + + f.FormBorderStyle = FormBorderStyle.Sizable; + Assert.AreEqual (new Size (300, 300), f.Size, "A15"); + Assert.AreEqual (new Size (292, 266), f.ClientSize, "A16"); + + f.Close (); } - void myform_set_dialogresult (object sender, EventArgs e) + [Test] // Bug #80574, #80791 + [Category ("NotWorking")] + public void BehaviorResizeOnBorderStyleChangedNotVisible () { - Form f = (Form)sender; + // Marked NotWorking because the ClientSize is dependent on the WM. + // The values below match XP Luna to make sure our behavior is the same. + Form f = new Form (); + f.ShowInTaskbar = false; - f.DialogResult = DialogResult.OK; + Assert.AreEqual (false, f.IsHandleCreated, "A0"); + + Assert.AreEqual (new Size (300, 300), f.Size, "A1"); + Assert.AreEqual (new Size (292, 266), f.ClientSize, "A2"); + + f.FormBorderStyle = FormBorderStyle.Fixed3D; + Assert.AreEqual (new Size (300, 300), f.Size, "A3"); + Assert.AreEqual (new Size (292, 266), f.ClientSize, "A4"); + + f.FormBorderStyle = FormBorderStyle.FixedDialog; + Assert.AreEqual (new Size (300, 300), f.Size, "A5"); + Assert.AreEqual (new Size (292, 266), f.ClientSize, "A6"); + + f.FormBorderStyle = FormBorderStyle.FixedSingle; + Assert.AreEqual (new Size (300, 300), f.Size, "A7"); + Assert.AreEqual (new Size (292, 266), f.ClientSize, "A8"); + + f.FormBorderStyle = FormBorderStyle.FixedToolWindow; + Assert.AreEqual (new Size (300, 300), f.Size, "A9"); + Assert.AreEqual (new Size (292, 266), f.ClientSize, "A0"); + + f.FormBorderStyle = FormBorderStyle.None; + Assert.AreEqual (new Size (300, 300), f.Size, "A11"); + Assert.AreEqual (new Size (292, 266), f.ClientSize, "A12"); + + f.FormBorderStyle = FormBorderStyle.SizableToolWindow; + Assert.AreEqual (new Size (300, 300), f.Size, "A13"); + Assert.AreEqual (new Size (292, 266), f.ClientSize, "A14"); + + f.FormBorderStyle = FormBorderStyle.Sizable; + Assert.AreEqual (new Size (300, 300), f.Size, "A15"); + Assert.AreEqual (new Size (292, 266), f.ClientSize, "A16"); } - void myform_close (object sender, EventArgs e) + [Test] // Bug #80574, #80791 + [Category ("NotWorking")] + public void MoreBehaviorResizeOnBorderStyleChangedNotVisible () { - Form f = (Form)sender; + // Marked NotWorking because the ClientSize is dependent on the WM. + // The values below match XP Luna to make sure our behavior is the same. + Form f = new Form (); + f.ShowInTaskbar = false; - f.Close(); - } + f.Show (); + f.Hide (); - [Test] - public void SetDialogResult () + Assert.AreEqual (true, f.IsHandleCreated, "A0"); + + f.FormBorderStyle = FormBorderStyle.Sizable; + Assert.AreEqual (new Size (300, 300), f.Size, "A1"); + Assert.AreEqual (new Size (292, 266), f.ClientSize, "A2"); + f.FormBorderStyle = FormBorderStyle.None; + Assert.AreEqual (new Size (292, 266), f.Size, "A3"); + Assert.AreEqual (new Size (292, 266), f.ClientSize, "A4"); + } +#endif + + [Test] // Bug #81582 + [Category ("NotWorking")] + public void GotFocusWithoutCallingOnLoadBase () { - Form myform = new Form (); - myform.ShowInTaskbar = false; - myform.Visible = true; + NoOnLoadBaseForm f = new NoOnLoadBaseForm (); + f.Show (); + Assert.AreEqual (true, f.got_focus_called, "H1"); + f.Dispose (); + } - myform.DialogResult = DialogResult.Cancel; + private class NoOnLoadBaseForm : Form + { + public bool got_focus_called = false; - Assert.IsTrue (myform.Visible, "A1"); - Assert.IsFalse (myform.IsDisposed, "A2"); + public NoOnLoadBaseForm () + { + TreeView tv = new TreeView (); + tv.GotFocus += new EventHandler (tv_GotFocus); + Controls.Add (tv); + } - myform.Close (); + void tv_GotFocus (object sender, EventArgs e) + { + got_focus_called = true; + } - Assert.IsFalse (myform.Visible, "A3"); - Assert.IsTrue (myform.IsDisposed, "A4"); + protected override void OnLoad (EventArgs e) + { + } + } - DialogResult result; + [Test] // bug #339641 + public void ChildFocused () + { + if (TestHelper.RunningOnUnix) { + Assert.Ignore ("Relies on form.Show() synchronously generating WM_ACTIVATE"); + } + using (Form f = new TimeBombedForm ()) { + TreeView tv = new TreeView (); + EventLogger log = new EventLogger (tv); + tv.GotFocus += new EventHandler (tv_GotFocus); + f.Activated += new EventHandler (f_Activated); + f.Controls.Add (tv); + f.Show (); + Assert.IsTrue (log.EventRaised ("GotFocus"), "#01"); + } + } - myform = new Form (); - myform.ShowInTaskbar = false; - myform.VisibleChanged += new EventHandler (myform_set_dialogresult); - result = myform.ShowDialog (); + void f_Activated (object sender, EventArgs e) + { + //Console.WriteLine (" ACTIVATED"); + //Console.WriteLine (Environment.StackTrace); + } - Assert.AreEqual (result, DialogResult.OK, "A5"); - Assert.IsFalse (myform.Visible, "A6"); - Assert.IsFalse (myform.IsDisposed, "A7"); + void tv_GotFocus (object sender, EventArgs e) + { + //Console.WriteLine (Environment.StackTrace); + } - myform = new Form (); - myform.ShowInTaskbar = false; - myform.VisibleChanged += new EventHandler (myform_close); - result = myform.ShowDialog (); + [Test] // bug #80773 + public void DontSetOwnerOnShowDialogException () + { + Form f = new Form (); + f.ShowInTaskbar = false; + + try { f.ShowDialog (f); } + catch { } + + Assert.AreEqual (null, f.Owner, "H1"); - Assert.AreEqual (result, DialogResult.Cancel, "A8"); - Assert.IsFalse (myform.Visible, "A9"); - Assert.IsFalse (myform.IsDisposed, "A10"); + f.Dispose (); } - [Test] // bug #80052 - [NUnit.Framework.Category ("NotWorking")] - public void Location () + [Test] + public void MinimumWindowSize () { - // - // CenterParent - // + Form f = new Form (); + f.ShowInTaskbar = false; + f.Show (); + + f.Size = new Size (0, 0); + Assert.AreEqual (SystemInformation.MinimumWindowSize, f.Size); - Form formA = new Form (); - formA.ShowInTaskbar = false; - formA.StartPosition = FormStartPosition.CenterParent; - formA.Location = new Point (151, 251); - formA.Show (); + f.Dispose (); + } - Assert.AreEqual (FormStartPosition.CenterParent, formA.StartPosition, "#A1"); - Assert.IsFalse (formA.Location.X == 151, "#A2"); - Assert.IsFalse (formA.Location.Y == 251, "#A3"); + [Test] + public void Bug82470 () + { + Form f = new Form (); + f.Load += new EventHandler (Form_LoadAndHide); + f.Show (); + + Assert.AreEqual (true, f.Visible, "A1"); + + f.Dispose (); + } - formA.Location = new Point (311, 221); + private void Form_LoadAndHide (object sender, EventArgs e) + { + ((Form)sender).Visible = false; + } + +#if NET_2_0 + [Test] + public void AutoSizeGrowOnly () + { + Form f = new Form (); + f.ShowInTaskbar = false; + f.AutoSize = true; - Assert.AreEqual (FormStartPosition.CenterParent, formA.StartPosition, "#A4"); - Assert.AreEqual (311, formA.Location.X, "#A5"); - Assert.AreEqual (221, formA.Location.Y, "#A6"); + Button b = new Button (); + b.Size = new Size (200, 200); + b.Location = new Point (200, 200); + f.Controls.Add (b); - formA.Dispose (); + f.Show (); - // - // CenterScreen - // + Assert.AreEqual (new Size (403, 403), f.ClientSize, "A1"); + + f.Controls.Remove (b); + Assert.AreEqual (new Size (403, 403), f.ClientSize, "A2"); + + f.Dispose (); + } - Form formB = new Form (); - formB.ShowInTaskbar = false; - formB.StartPosition = FormStartPosition.CenterScreen; - formB.Location = new Point (151, 251); - formB.Show (); + [Test] + public void AutoSizeReset () + { + Form f = new Form (); + f.ShowInTaskbar = false; - Assert.AreEqual (FormStartPosition.CenterScreen, formB.StartPosition, "#B1"); - Assert.IsFalse (formB.Location.X == 151, "#B2"); - Assert.IsFalse (formB.Location.Y == 251, "#B3"); + Button b = new Button (); + b.Size = new Size (200, 200); + b.Location = new Point (200, 200); + f.Controls.Add (b); - formB.Location = new Point (311, 221); + f.Show (); - Assert.AreEqual (FormStartPosition.CenterScreen, formB.StartPosition, "#B4"); - Assert.AreEqual (311, formB.Location.X, "#B5"); - Assert.AreEqual (221, formB.Location.Y, "#B6"); + Size start_size = f.ClientSize; - formB.Dispose (); + f.AutoSize = true; + Assert.AreEqual (new Size (403, 403), f.ClientSize, "A1"); - // - // Manual - // + f.AutoSize = false; + Assert.AreEqual (start_size, f.ClientSize, "A2"); + f.Close (); + } - Form formC = new Form (); - formC.ShowInTaskbar = false; - formC.StartPosition = FormStartPosition.Manual; - formC.Location = new Point (151, 251); - formC.Show (); + [Test] + public void AutoSizeGrowAndShrink () + { + Form f = new Form (); + f.ShowInTaskbar = false; + f.AutoSize = true; + f.AutoSizeMode = AutoSizeMode.GrowAndShrink; - Assert.AreEqual (FormStartPosition.Manual, formC.StartPosition, "#C1"); - Assert.AreEqual (151, formC.Location.X, "#C2"); - Assert.AreEqual (251, formC.Location.Y, "#C3"); + f.Show (); - formC.Location = new Point (311, 221); + // Make sure form shrunk + Assert.IsTrue (f.ClientSize.Width < 150, "A1"); + Assert.IsTrue (f.ClientSize.Height < 150, "A1-2"); - Assert.AreEqual (FormStartPosition.Manual, formC.StartPosition, "#C4"); - Assert.AreEqual (311, formC.Location.X, "#C5"); - Assert.AreEqual (221, formC.Location.Y, "#C6"); + Button b = new Button (); + b.Size = new Size (200, 200); + b.Location = new Point (0, 0); + f.Controls.Add (b); - formC.Dispose (); + Assert.AreEqual (new Size (203, 203), f.ClientSize, "A2"); + f.Dispose (); + } - // - // WindowsDefaultBounds - // + [Test] + public void GetScaledBoundsTest () + { + if (TestHelper.RunningOnUnix) + Assert.Ignore ("Depends on WM decoration sizes, values correspond to windows"); - Form formD = new Form (); - formD.ShowInTaskbar = false; - formD.StartPosition = FormStartPosition.WindowsDefaultBounds; - formD.Location = new Point (151, 251); - formD.Show (); + ScaleForm c = new ScaleForm (); - Assert.AreEqual (FormStartPosition.WindowsDefaultBounds, formD.StartPosition, "#D1"); - Assert.IsFalse (formD.Location.X == 151, "#D2"); - Assert.IsFalse (formD.Location.Y == 251, "#D3"); + Rectangle r = new Rectangle (100, 200, 300, 400); - formD.Location = new Point (311, 221); + Assert.AreEqual (new Rectangle (100, 200, 584, 218), c.PublicGetScaledBounds (r, new SizeF (2f, .5f), BoundsSpecified.All), "A1"); + Assert.AreEqual (new Rectangle (100, 200, 300, 400), c.PublicGetScaledBounds (r, new SizeF (2f, .5f), BoundsSpecified.Location), "A2"); + Assert.AreEqual (new Rectangle (100, 200, 584, 218), c.PublicGetScaledBounds (r, new SizeF (2f, .5f), BoundsSpecified.Size), "A3"); + Assert.AreEqual (new Rectangle (100, 200, 300, 218), c.PublicGetScaledBounds (r, new SizeF (2f, .5f), BoundsSpecified.Height), "A4"); + Assert.AreEqual (new Rectangle (100, 200, 300, 400), c.PublicGetScaledBounds (r, new SizeF (2f, .5f), BoundsSpecified.X), "A5"); + Assert.AreEqual (new Rectangle (100, 200, 300, 400), c.PublicGetScaledBounds (r, new SizeF (2f, .5f), BoundsSpecified.None), "A6"); - Assert.AreEqual (FormStartPosition.WindowsDefaultBounds, formD.StartPosition, "#D4"); - Assert.AreEqual (311, formD.Location.X, "#D5"); - Assert.AreEqual (221, formD.Location.Y, "#D6"); + Assert.AreEqual (new Rectangle (100, 200, 300, 400), c.PublicGetScaledBounds (r, new SizeF (1f, 1f), BoundsSpecified.All), "A6-2"); + Assert.AreEqual (new Rectangle (100, 200, 584, 764), c.PublicGetScaledBounds (r, new SizeF (2f, 2f), BoundsSpecified.All), "A7"); + Assert.AreEqual (new Rectangle (100, 200, 868, 1128), c.PublicGetScaledBounds (r, new SizeF (3f, 3f), BoundsSpecified.All), "A8"); + Assert.AreEqual (new Rectangle (100, 200, 1152, 1492), c.PublicGetScaledBounds (r, new SizeF (4f, 4f), BoundsSpecified.All), "A9"); + Assert.AreEqual (new Rectangle (100, 200, 158, 218), c.PublicGetScaledBounds (r, new SizeF (.5f, .5f), BoundsSpecified.All), "A10"); + } - formD.Dispose (); + [Test] + public void MethodScaleControl () + { + if (TestHelper.RunningOnUnix) + Assert.Ignore ("Depends on WM decoration sizes, values correspond to windows"); + + ScaleForm f = new ScaleForm (); + f.Location = new Point (5, 10); - // - // WindowsDefaultLocation - // + Assert.AreEqual (new Rectangle (5, 10, 300, 300), f.Bounds, "A1"); - Form formE = new Form (); - formE.ShowInTaskbar = false; - formE.Location = new Point (151, 251); - formE.Show (); + f.PublicScaleControl (new SizeF (2.0f, 2.0f), BoundsSpecified.All); + Assert.AreEqual (new Rectangle (5, 10, 584, 564), f.Bounds, "A2"); - Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, formE.StartPosition, "#E1"); - Assert.IsFalse (formE.Location.X == 151, "#E2"); - Assert.IsFalse (formE.Location.Y == 251, "#E3"); + f.PublicScaleControl (new SizeF (.5f, .5f), BoundsSpecified.Location); + Assert.AreEqual (new Rectangle (5, 10, 584, 564), f.Bounds, "A3"); - formE.Location = new Point (311, 221); + f.PublicScaleControl (new SizeF (.5f, .5f), BoundsSpecified.Size); + Assert.AreEqual (new Rectangle (5, 10, 300, 300), f.Bounds, "A4"); - Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, formE.StartPosition, "#E4"); - Assert.AreEqual (311, formE.Location.X, "#E5"); - Assert.AreEqual (221, formE.Location.Y, "#E6"); + f.PublicScaleControl (new SizeF (2.5f, 2.5f), BoundsSpecified.Size); + Assert.AreEqual (new Rectangle (5, 10, 726, 696), f.Bounds, "A5"); - formE.Dispose (); + f.PublicScaleControl (new SizeF (.3f, .3f), BoundsSpecified.Size); + Assert.AreEqual (new Rectangle (5, 10, 229, 234), f.Bounds, "A6"); + + f.Dispose (); } - [Test] - public void DisposeOwnerTest () + private class ScaleForm : Form { - Form f1 = new Form (); - Form f2 = new Form (); - - f2.Owner = f1; + public Rectangle PublicGetScaledBounds (Rectangle bounds, SizeF factor, BoundsSpecified specified) + { + return base.GetScaledBounds (bounds, factor, specified); + } - f1.Dispose (); + public void PublicScaleControl (SizeF factor, BoundsSpecified specified) + { + base.ScaleControl (factor, specified); + } + } +#endif + [Test] + public void Bug325436 () + { + Form f = new Form (); + f.ShowInTaskbar = false; + f.ClientSize = new Size (320, 40); + f.ControlBox = false; + f.FormBorderStyle = FormBorderStyle.None; + f.MaximizeBox = false; + f.MinimizeBox = false; + + f.Show (); + Assert.AreEqual (new Size (320, 40), f.ClientSize, "A1"); + f.Dispose (); - Assert.IsNull (f2.Owner, "1"); - Assert.AreEqual (0, f1.OwnedForms.Length, "2"); + f = new Form (); + f.ShowInTaskbar = false; + f.ControlBox = false; + f.FormBorderStyle = FormBorderStyle.None; + f.MaximizeBox = false; + f.MinimizeBox = false; + f.ClientSize = new Size(320, 40); + + f.Show (); + Assert.AreEqual (new Size (320, 40), f.ClientSize, "A2"); + f.Dispose (); } +#if NET_2_0 + #region PreferredSize [Test] - [ExpectedException (typeof (ObjectDisposedException))] - public void AccessDisposedForm () + public void PreferredSize () { - Form myform = new Form (); - myform.ShowInTaskbar = false; + PreferredSizeForm form = new PreferredSizeForm (); + form.AutoSize = true; + Control control = new Control (); + form.Controls.Add (control); + control.Size = new Size (500, 500); + form.Test (); + form.Controls.Clear (); + form.Test2 (); - myform.Show (); - myform.Close (); // this should result in the form being disposed - myform.Show (); // and this line should result in the ODE being thrown } - class MyForm : Form + private class PreferredSizeForm : Form { - public void DoDestroyHandle () + public void Test () { - DestroyHandle(); + Assert.AreEqual (SizeFromClientSize (new Size (503, 503)), PreferredSize, "1"); } - public void DoRecreateHandle () + + public void Test2 () { - RecreateHandle(); + Assert.AreEqual (SizeFromClientSize (new Size (0, 0)), PreferredSize, "1"); } } - - int handle_destroyed_count; - void handle_destroyed (object sender, EventArgs e) + #endregion +#endif + private class MockForm : Form { - handle_destroyed_count++; + public bool CloseOnLoad { + get { return _closeOnLoad; } + set { _closeOnLoad = value; } + } + + public bool VisibleOnLoad { + get { return _visibleOnLoad; } + } + + protected override void OnLoad(EventArgs e) { + base.OnLoad(e); + _visibleOnLoad = Visible; + if (CloseOnLoad) + Close (); + } + + private bool _closeOnLoad; + private bool _visibleOnLoad; } - [Test] - public void DestroyHandleTest () + private class MockButton : Button { - handle_destroyed_count = 0; + public MockButton (bool notify) + { + _notify = notify; + } - MyForm f1 = new MyForm (); - f1.HandleDestroyed += new EventHandler (handle_destroyed); - f1.Show (); - f1.DoDestroyHandle (); - Assert.AreEqual (1, handle_destroyed_count, "1"); + public bool Notify { + get { return _notify; } + set { _notify = value; } + } - f1 = new MyForm (); - f1.HandleDestroyed += new EventHandler (handle_destroyed); - f1.Show (); - f1.DoRecreateHandle (); - Assert.AreEqual (2, handle_destroyed_count, "2"); + public bool IsDefaultButton + { + get { return base.IsDefault; } + set { base.IsDefault = value; } + } + + public override void NotifyDefault (bool value) + { + if (Notify) + base.NotifyDefault (value); + } + + private bool _notify; } - [Test] - public void FormClose () + private class ButtonControl : IButtonControl { - Form myform = new Form (); - myform.ShowInTaskbar = false; + public DialogResult DialogResult { + get { return _dialogResult; } + set { _dialogResult = value; } + } - Assert.IsFalse (myform.Visible, "A1"); - Assert.IsFalse (myform.IsDisposed, "A2"); + public bool IsDefaultButton { + get { return _isDefault; } + } - myform.Close (); + public void NotifyDefault (bool value) + { + _isDefault = value; + } - Assert.IsFalse (myform.Visible, "A3"); - Assert.IsFalse (myform.IsDisposed, "A4"); + public void PerformClick () + { + } - myform.Show (); + private bool _isDefault; + private DialogResult _dialogResult = DialogResult.None; + } + +#if NET_2_0 + [Test] + public void RestoreBounds () + { + Form f = new Form (); + f.Show (); + + Assert.AreEqual (new Size (300, 300), f.RestoreBounds.Size, "A1"); + + // Move the form + f.Location = new Point (0, 0); + Assert.AreEqual (new Rectangle (0, 0, 300, 300), f.RestoreBounds, "A2"); + + // Resize the form + f.Size = new Size (250, 250); + Assert.AreEqual (new Rectangle (0, 0, 250, 250), f.RestoreBounds, "A3"); + + // Minimize the form + f.WindowState = FormWindowState.Minimized; + Assert.AreEqual (new Rectangle (0, 0, 250, 250), f.RestoreBounds, "A4"); + + // Move the form (while minimized) + f.Location = new Point (10, 10); + Assert.AreEqual (new Rectangle (10, 10, 250, 250), f.RestoreBounds, "A5"); + + // Resize the form (while minimized) + f.Size = new Size (275, 275); + Assert.AreEqual (new Rectangle (10, 10, 275, 275), f.RestoreBounds, "A6"); + + // Maximize the form + f.WindowState = FormWindowState.Maximized; + Assert.AreEqual (new Rectangle (10, 10, 275, 275), f.RestoreBounds, "A7"); + + // Move the form (while maximized) + f.Location = new Point (20, 20); + Assert.AreEqual (new Rectangle (20, 20, 275, 275), f.RestoreBounds, "A8"); + + // Resize the form (while maximized) + f.Size = new Size (285, 285); + Assert.AreEqual (new Rectangle (20, 20, 285, 285), f.RestoreBounds, "A9"); + + f.Dispose (); + } + + [Test] // Bug 353827 + public void AutoScaleModeTest () + { + Form f = new Form (); + + // AutoScale starts off true + Assert.AreEqual (true, f.AutoScale, "A1"); + + // Setting AutoScaleMode turns AutoScale off + f.AutoScaleMode = AutoScaleMode.Font; + Assert.AreEqual (false, f.AutoScale, "A2"); + Assert.AreEqual (AutoScaleMode.Font, f.AutoScaleMode, "A3"); + + // Changing Font resets AutoScaleBaseSize.. + f.Font = new Font ("Arial", 10); + Assert.AreEqual (RoundSizeF (Form.GetAutoScaleSize (f.Font)), f.AutoScaleBaseSize, "A4"); + + f.Font = new Font ("Arial", 12); + Assert.AreEqual (RoundSizeF (Form.GetAutoScaleSize (f.Font)), f.AutoScaleBaseSize, "A5"); + + // ..Until AutoScaleBaseSize is explicitly set + f.AutoScaleBaseSize = new Size (5, 13); + Assert.AreEqual (new Size (5, 13), f.AutoScaleBaseSize, "A6"); + + f.Font = new Font ("Arial", 14F); + Assert.IsTrue (RoundSizeF (Form.GetAutoScaleSize (f.Font)) != f.AutoScaleBaseSize, "A5"); + + f.Dispose (); + } + + private Size RoundSizeF (SizeF sizef) + { + return new Size ((int)Math.Round (sizef.Width), (int)Math.Round (sizef.Height)); + } + + [Test] // Bug 354669 + public void AutoScaleDetails () + { + ProtectedForm f = new ProtectedForm (); + f.Show (); + + f.SuspendLayout (); + + // First AutoScaleMode shouldn't reset AutoScaleDimensions + f.AutoScaleDimensions = new SizeF (3F, 3F); + f.AutoScaleMode = AutoScaleMode.Font; + Assert.AreEqual (new SizeF (3F, 3F), f.AutoScaleDimensions, "A1"); + + // Subsequent calls will reset it to 0, 0 + f.AutoScaleMode = AutoScaleMode.Dpi; + Assert.AreEqual (SizeF.Empty, f.AutoScaleDimensions, "A2"); + + f.ResumeLayout (); + + // CurrentAutoScaleDimensions should be nonzero + Assert.IsFalse (f.CurrentAutoScaleDimensions == SizeF.Empty, "A3"); + + // AutoScaleDimensions and CurrentAutoScaleDimensions should match after ResumeLayout + Assert.AreEqual (f.AutoScaleDimensions, f.CurrentAutoScaleDimensions, "A4"); + + // CurrentAutoScaleDimensions should match AutoScaleDimensions for AutoScaleMode.None + f.SuspendLayout (); + f.AutoScaleMode = AutoScaleMode.None; + f.AutoScaleDimensions = new SizeF (5F, 5F); + + Assert.AreEqual (new SizeF (5F, 5F), f.AutoScaleDimensions, "A5"); + Assert.AreEqual (f.AutoScaleDimensions, f.CurrentAutoScaleDimensions, "A6"); + + // ResumeLayout changes nothing + f.ResumeLayout (); + + Assert.AreEqual (new SizeF (5F, 5F), f.AutoScaleDimensions, "A7"); + Assert.AreEqual (f.AutoScaleDimensions, f.CurrentAutoScaleDimensions, "A8"); + + // AutoScaleFactor should be ~2,2 if PerformAutoScale hasn't run + f.ClientSize = new Size (150, 150); + f.SuspendLayout (); + f.AutoScaleMode = AutoScaleMode.Dpi; + f.AutoScaleDimensions = new SizeF (f.CurrentAutoScaleDimensions.Width / 2F, f.CurrentAutoScaleDimensions.Height / 2F); + f.ClientSize = new Size (200, 200); + + Assert.AreEqual (new Size (2, 2), RoundSizeF (f.GetPublicAutoScaleFactor ()), "A9"); + + // AutoScaleFactor should be 1 after ResumeLayout + f.ResumeLayout (); + + Assert.AreEqual (new SizeF (1F, 1F), f.GetPublicAutoScaleFactor (), "A10"); + Assert.AreEqual (new Size (400, 400), f.ClientSize, "A11"); + + // PerformAutoScale happens immediately when layout not suspended + f.ClientSize = new Size (125, 125); + f.AutoScaleDimensions = new SizeF (f.CurrentAutoScaleDimensions.Width / 2F, f.CurrentAutoScaleDimensions.Height / 2F); + Assert.AreEqual (new Size (250, 250), f.ClientSize, "A12"); + + f.Dispose (); + } + + private class ProtectedForm : Form + { + public SizeF GetPublicAutoScaleFactor () + { + return AutoScaleFactor; + } + } + + [Test] // Bug #355703 + public void AutoScaleSticks () + { + Form f = new Form (); - Assert.IsTrue (myform.Visible, "A5"); - Assert.IsFalse (myform.IsDisposed, "A6"); + f.AutoScale = false; + Assert.AreEqual (false, f.AutoScale, "A1"); - myform.Close (); + f.AutoScale = true; + Assert.AreEqual (true, f.AutoScale, "A2"); + + f.AutoScaleMode = AutoScaleMode.None; + Assert.AreEqual (false, f.AutoScale, "A3"); + } +#endif - Assert.IsFalse (myform.Visible, "A7"); - Assert.IsTrue (myform.IsDisposed, "A8"); + [Test] // Bug #359098 + public void AutoScaleBounds () + { + AutoScaleForm a = new AutoScaleForm (false); + a.Show (); + Assert.AreEqual (new Size (213, 121), a.ClientSize, "A0"); + Assert.AreEqual (new Rectangle ( 5, 107, 132, 9), new Rectangle (a.hScrollBar1.Location, a.hScrollBar1.Size), "A1"); + Assert.AreEqual (new Rectangle (151, 74, 60, 44), new Rectangle (a.treeView1.Location, a.treeView1.Size), "A2"); + Assert.AreEqual (new Rectangle (197, 21, 9, 39), new Rectangle (a.vScrollBar1.Location, a.vScrollBar1.Size), "A3"); + Assert.AreEqual (new Rectangle (139, 21, 54, 49), new Rectangle (a.listView1.Location, a.listView1.Size), "A4"); + Assert.AreEqual (new Rectangle ( 70, 5, 65, 37), new Rectangle (a.textBox2.Location, a.textBox2.Size), "A5"); + Assert.AreEqual (new Rectangle (139, 5, 70, 0), new Rectangle (a.comboBox1.Location, new Size (a.comboBox1.Width, 0)), "A6"); + Assert.AreEqual (new Rectangle ( 5, 77, 43, 13), new Rectangle (a.button2.Location, a.button2.Size), "A7"); + Assert.AreEqual (new Rectangle ( 70, 44, 65, 37), new Rectangle (a.richTextBox1.Location, a.richTextBox1.Size), "A8"); + Assert.AreEqual (new Rectangle ( 53, 86, 21, 7), new Rectangle (a.label1.Location,a.label1.Size), "A9"); + Assert.AreEqual (new Rectangle ( 65, 84, 58, 0), new Rectangle (a.textBox1.Location, new Size (a.textBox1.Width, 0)), "A10"); + Assert.AreEqual (new Rectangle ( 5, 63, 43, 13), new Rectangle (a.button1.Location, a.button1.Size), "A11"); + Assert.AreEqual (new Rectangle ( 5, 5, 60, 47), new Rectangle (a.listBox1.Location, a.listBox1.Size), "A12"); + a.Dispose (); + +#if NET_2_0 + a = new AutoScaleForm (true); + a.Show (); + Assert.AreEqual (new Size (184, 104), a.ClientSize, "B0"); + Assert.AreEqual (new Rectangle ( 4, 92, 114, 16), new Rectangle (a.hScrollBar1.Location, a.hScrollBar1.ClientSize), "B1"); + Assert.AreEqual (new Rectangle (130, 64, 50, 36), new Rectangle (a.treeView1.Location, a.treeView1.ClientSize), "B2"); + Assert.AreEqual (new Rectangle (170, 18, 16, 34), new Rectangle (a.vScrollBar1.Location, a.vScrollBar1.ClientSize), "B3"); + Assert.AreEqual (new Rectangle (120, 18, 44, 40), new Rectangle (a.listView1.Location, a.listView1.ClientSize), "B4"); + Assert.AreEqual (new Rectangle ( 60, 4, 54, 30), new Rectangle (a.textBox2.Location, a.textBox2.ClientSize), "B5"); + Assert.AreEqual (new Rectangle (120, 4, 62, 0), new Rectangle (a.comboBox1.Location, new Size (a.comboBox1.ClientSize.Width, 0)), "B6"); + Assert.AreEqual (new Rectangle ( 4, 66, 38, 12), new Rectangle (a.button2.Location, a.button2.ClientSize), "B7"); + Assert.AreEqual (new Rectangle ( 60, 38, 54, 30), new Rectangle (a.richTextBox1.Location, a.richTextBox1.ClientSize), "B8"); + Assert.AreEqual (new Rectangle ( 46, 74, 18, 6), new Rectangle (a.label1.Location,a.label1.ClientSize), "B9"); + Assert.AreEqual (new Rectangle ( 56, 72, 48, 0), new Rectangle (a.textBox1.Location, new Size (a.textBox1.ClientSize.Width, 0)), "B10"); + Assert.AreEqual (new Rectangle ( 4, 54, 38, 12), new Rectangle (a.button1.Location, a.button1.ClientSize), "B11"); + Assert.AreEqual (new Rectangle ( 4, 4, 50, 39), new Rectangle (a.listBox1.Location, a.listBox1.ClientSize), "B12"); + a.Dispose (); +#endif } [Test] - public void FormClose2 () + public void SettingIconToNull () { - WMCloseWatcher f = new WMCloseWatcher (); - f.ShowInTaskbar = false; - - f.close_count = 0; - Assert.IsFalse (f.Visible, "A1"); - f.Close (); - Assert.AreEqual (0, f.close_count, "A2"); + Form form = new Form (); + Assert.IsNotNull (form.Icon, "1"); + form.Icon = null; + Assert.IsNotNull (form.Icon, "2"); + } + [Test] + [Category ("NotWorking")] + public void MinimizedWindowSize () + { + Form form = new Form (); + form.WindowState = FormWindowState.Minimized; + form.Show (); + Assert.AreEqual (SystemInformation.MinimizedWindowSize, form.Size, "1"); + form.Close (); + form = new Form (); + form.Show (); + form.WindowState = FormWindowState.Minimized; + Assert.AreEqual (SystemInformation.MinimizedWindowSize, form.Size, "2"); + form.Close (); + } + } - f.Show (); - f.Close (); - Assert.AreEqual (1, f.close_count, "A3"); + public class TimeBombedForm : Form + { + public Timer timer; + public bool CloseOnPaint; + public string Reason; + public TimeBombedForm () + { + timer = new Timer (); + timer.Interval = 500; + timer.Tick += new EventHandler (timer_Tick); + timer.Start (); } - class WMCloseWatcher : Form { - public int close_count; + void timer_Tick (object sender, EventArgs e) + { + Reason = "Bombed"; + Close (); + } - protected override void WndProc (ref Message msg) { - if (msg.Msg == 0x0010 /* WM_CLOSE */) { - close_count ++; - } + protected override void OnPaint (PaintEventArgs pevent) + { + base.OnPaint (pevent); + if (CloseOnPaint) { + Reason = "OnPaint"; + Close (); + } + } + } - base.WndProc (ref msg); + public class AutoScaleForm : Form + { + public ListBox listBox1 = new ListBox (); + public ComboBox comboBox1 = new ComboBox (); + public Button button1 = new Button (); + public Button button2 = new Button (); + public Label label1 = new Label (); + public TextBox textBox1 = new TextBox (); + public TextBox textBox2 = new TextBox (); + public RichTextBox richTextBox1 = new RichTextBox (); + public ListView listView1 = new ListView (); + public TreeView treeView1 = new TreeView (); + public VScrollBar vScrollBar1 = new VScrollBar (); + public HScrollBar hScrollBar1 = new HScrollBar (); + + public AutoScaleForm (bool use_new_auto_scale) + { + ShowInTaskbar = false; + + SuspendLayout (); + + listBox1.IntegralHeight = false; + listBox1.SetBounds (8, 8, 104, 82); + comboBox1.SetBounds (240, 8, 121, 21); + button1.SetBounds (8, 108, 75, 23); + button2.SetBounds (8, 132, 75, 23); + label1.SetBounds (92, 148, 35, 13); + textBox1.SetBounds (112, 144, 100, 20); + textBox2.Multiline = true; + textBox2.SetBounds (120, 8, 112, 64); + richTextBox1.SetBounds (120, 76, 112, 64); + listView1.SetBounds (240, 36, 92, 84); + treeView1.SetBounds (260, 128, 104, 76); + vScrollBar1.SetBounds (340, 36, 16, 68); + hScrollBar1.SetBounds (8, 184, 228, 16); + + ClientSize = new Size (368, 209); + + Controls.AddRange ( new Control [] { listBox1, comboBox1, button1, button2, label1, textBox1, + textBox2, richTextBox1, listView1, treeView1, vScrollBar1, hScrollBar1 } ); + + if (use_new_auto_scale) { +#if NET_2_0 + AutoScaleMode = AutoScaleMode.Dpi; + SizeF s = CurrentAutoScaleDimensions; + AutoScaleDimensions = new SizeF (s.Width * 2, s.Height * 2); +#endif } + else { + AutoScale = true; + SizeF s = Form.GetAutoScaleSize (Font); + AutoScaleBaseSize = new Size ((int)Math.Round (s.Width) * 2, (int)s.Height * 2); + } + + ResumeLayout (false); + PerformLayout (); } } }