FormTest.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474
  1. //
  2. // FormTest.cs: Test cases for Form.
  3. //
  4. // Author:
  5. // Ritvik Mayank ([email protected])
  6. //
  7. // (C) 2005 Novell, Inc. (http://www.novell.com)
  8. //
  9. using System;
  10. using System.ComponentModel;
  11. using System.Drawing;
  12. using System.Reflection;
  13. using System.Windows.Forms;
  14. using NUnit.Framework;
  15. namespace MonoTests.System.Windows.Forms
  16. {
  17. [TestFixture]
  18. public class FormTest
  19. {
  20. [Test]
  21. public void FormPropertyTest ()
  22. {
  23. Form myform = new Form ();
  24. myform.Visible = true;
  25. myform.Text = "NewForm";
  26. myform.Name = "FormTest";
  27. Assert.IsNull (myform.AcceptButton, "#1");
  28. Assert.IsNull (myform.ActiveMdiChild, "#2");
  29. Assert.IsFalse (myform.AutoScale, "#3");
  30. Assert.IsNull (myform.CancelButton, "#6");
  31. Assert.IsTrue (myform.ControlBox, "#9");
  32. Assert.IsTrue (myform.DesktopBounds.X > 0, "#10a");
  33. Assert.IsTrue (myform.DesktopBounds.Y > 0, "#10b");
  34. Assert.AreEqual (300, myform.DesktopBounds.Height, "#10c");
  35. Assert.AreEqual (300, myform.DesktopBounds.Width, "#10d");
  36. Assert.IsTrue (myform.DesktopLocation.X > 0, "#11a");
  37. Assert.IsTrue (myform.DesktopLocation.Y > 0, "#11b");
  38. Assert.AreEqual (DialogResult.None, myform.DialogResult, "#12");
  39. Assert.AreEqual (FormBorderStyle.Sizable, myform.FormBorderStyle, "#13");
  40. Assert.IsFalse (myform.HelpButton, "#14");
  41. Assert.AreEqual ("System.Drawing.Icon", myform.Icon.GetType ().ToString (), "#15");
  42. Assert.IsFalse (myform.IsMdiChild, "#16");
  43. Assert.IsFalse (myform.IsMdiContainer, "#17");
  44. Assert.IsFalse (myform.KeyPreview, "#18");
  45. Assert.IsTrue (myform.MaximizeBox, "#19");
  46. Assert.AreEqual (0, myform.MaximumSize.Height, "#20a");
  47. Assert.AreEqual (0, myform.MaximumSize.Width, "#20b");
  48. Assert.AreEqual (0, myform.MdiChildren.Length, "#21a");
  49. Assert.AreEqual (1, myform.MdiChildren.Rank, "#21b");
  50. Assert.IsFalse (myform.MdiChildren.IsSynchronized, "#21c");
  51. Assert.IsNull (myform.MdiParent, "#22");
  52. Assert.IsNull (myform.Menu, "#23");
  53. Assert.IsNull (myform.MergedMenu, "#24");
  54. Assert.IsTrue (myform.MinimizeBox, "#25");
  55. Assert.AreEqual (0, myform.MinimumSize.Height, "#26a");
  56. Assert.AreEqual (0, myform.MinimumSize.Width, "#26b");
  57. Assert.IsTrue (myform.MinimumSize.IsEmpty, "#26c");
  58. Assert.IsFalse (myform.Modal, "#27");
  59. Assert.AreEqual (1, myform.Opacity, "#28");
  60. Assert.AreEqual (0, myform.OwnedForms.Length, "#29a");
  61. Assert.AreEqual (1, myform.OwnedForms.Rank, "#29b");
  62. Assert.IsNull (myform.Owner, "#30");
  63. Assert.IsTrue (myform.ShowInTaskbar, "#31");
  64. Assert.AreEqual (300, myform.Size.Height, "#32a");
  65. Assert.AreEqual (300, myform.Size.Width, "#32b");
  66. Assert.AreEqual (SizeGripStyle.Auto, myform.SizeGripStyle, "#33");
  67. Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, myform.StartPosition, "#34");
  68. Assert.IsTrue (myform.TopLevel, "#35");
  69. Assert.IsFalse (myform.TopMost, "#36");
  70. Assert.AreEqual (Color.Empty, myform.TransparencyKey, "#37");
  71. Assert.AreEqual (FormWindowState.Normal, myform.WindowState, "#38");
  72. myform.Dispose ();
  73. }
  74. [Test]
  75. public void ActivateTest ()
  76. {
  77. Form myform = new Form ();
  78. myform.ShowInTaskbar = false;
  79. myform.Visible = true;
  80. myform.Text = "NewForm";
  81. myform.Name = "FormTest";
  82. myform.Activate ();
  83. Assert.AreEqual (true, myform.Focus (), "#40");
  84. myform.Dispose ();
  85. }
  86. [Test]
  87. public void AddOwnedFormTest ()
  88. {
  89. Form parent = new Form ();
  90. parent.ShowInTaskbar = false;
  91. parent.Text = "NewParent";
  92. Form ownedForm = new Form ();
  93. ownedForm.ShowInTaskbar = false;
  94. ownedForm.Text = "Owned Form";
  95. parent.AddOwnedForm (ownedForm);
  96. ownedForm.Show ();
  97. Assert.AreEqual ("NewParent", ownedForm.Owner.Text, "#41");
  98. ownedForm.Dispose ();
  99. parent.Dispose ();
  100. }
  101. [Test] // bug #80020
  102. [NUnit.Framework.Category ("NotWorking")]
  103. public void IsHandleCreated ()
  104. {
  105. Form main = new Form ();
  106. main.Name = "main";
  107. main.IsMdiContainer = true;
  108. main.ShowInTaskbar = false;
  109. Assert.IsFalse (main.IsHandleCreated, "#1");
  110. Form child = new Form ();
  111. child.MdiParent = main;
  112. child.WindowState = FormWindowState.Maximized;
  113. Assert.IsFalse (main.IsHandleCreated, "#2");
  114. child.Show ();
  115. Assert.IsFalse (child.IsHandleCreated, "#3");
  116. Assert.IsFalse (main.IsHandleCreated, "#4");
  117. main.Show ();
  118. Assert.IsTrue (child.IsHandleCreated, "#5");
  119. Assert.IsTrue (main.IsHandleCreated, "#6");
  120. child.Dispose ();
  121. main.Dispose ();
  122. }
  123. [Test]
  124. public void RemoveOwnedFormTest ()
  125. {
  126. Form myform = new Form ();
  127. myform.ShowInTaskbar = false;
  128. myform.Text = "NewForm";
  129. myform.Name = "FormTest";
  130. myform.RemoveOwnedForm (myform);
  131. myform.Show ();
  132. Assert.AreEqual (null, myform.Owner, "#44");
  133. myform.Dispose ();
  134. }
  135. [Test]
  136. public void SetDesktopBoundsTest ()
  137. {
  138. Form myform = new Form ();
  139. myform.ShowInTaskbar = false;
  140. myform.Visible = true;
  141. myform.Text = "NewForm";
  142. myform.Name = "FormTest";
  143. myform.SetDesktopBounds (10, 10, 200 , 200);
  144. Assert.AreEqual (200, myform.DesktopBounds.Height, "#45");
  145. myform.Dispose ();
  146. }
  147. [Test]
  148. public void SetDesktopLocationTest ()
  149. {
  150. Form myform = new Form ();
  151. myform.ShowInTaskbar = false;
  152. myform.Visible = true;
  153. myform.Text = "NewForm";
  154. myform.Name = "FormTest";
  155. myform.SetDesktopLocation (10, 10);
  156. Assert.AreEqual (10, myform.DesktopLocation.X, "#46");
  157. myform.Dispose ();
  158. }
  159. [Test]
  160. public void SetDialogResultOutOfRange ()
  161. {
  162. Form myform = new Form ();
  163. myform.ShowInTaskbar = false;
  164. try {
  165. myform.DialogResult = (DialogResult) (-1);
  166. Assert.Fail ("#48");
  167. } catch (InvalidEnumArgumentException) {
  168. }
  169. try {
  170. myform.DialogResult = (DialogResult) ((int) DialogResult.No + 1);
  171. Assert.Fail ("#49");
  172. } catch (InvalidEnumArgumentException) {
  173. }
  174. myform.Dispose ();
  175. }
  176. void myform_set_dialogresult (object sender, EventArgs e)
  177. {
  178. Form f = (Form)sender;
  179. f.DialogResult = DialogResult.OK;
  180. }
  181. void myform_close (object sender, EventArgs e)
  182. {
  183. Form f = (Form)sender;
  184. f.Close();
  185. }
  186. [Test]
  187. public void SetDialogResult ()
  188. {
  189. Form myform = new Form ();
  190. myform.ShowInTaskbar = false;
  191. myform.Visible = true;
  192. myform.DialogResult = DialogResult.Cancel;
  193. Assert.IsTrue (myform.Visible, "A1");
  194. Assert.IsFalse (myform.IsDisposed, "A2");
  195. myform.Close ();
  196. Assert.IsFalse (myform.Visible, "A3");
  197. Assert.IsTrue (myform.IsDisposed, "A4");
  198. DialogResult result;
  199. myform = new Form ();
  200. myform.ShowInTaskbar = false;
  201. myform.VisibleChanged += new EventHandler (myform_set_dialogresult);
  202. result = myform.ShowDialog ();
  203. Assert.AreEqual (result, DialogResult.OK, "A5");
  204. Assert.IsFalse (myform.Visible, "A6");
  205. Assert.IsFalse (myform.IsDisposed, "A7");
  206. myform = new Form ();
  207. myform.ShowInTaskbar = false;
  208. myform.VisibleChanged += new EventHandler (myform_close);
  209. result = myform.ShowDialog ();
  210. Assert.AreEqual (result, DialogResult.Cancel, "A8");
  211. Assert.IsFalse (myform.Visible, "A9");
  212. Assert.IsFalse (myform.IsDisposed, "A10");
  213. }
  214. [Test] // bug #80052
  215. [NUnit.Framework.Category ("NotWorking")]
  216. public void Location ()
  217. {
  218. //
  219. // CenterParent
  220. //
  221. Form formA = new Form ();
  222. formA.ShowInTaskbar = false;
  223. formA.StartPosition = FormStartPosition.CenterParent;
  224. formA.Location = new Point (151, 251);
  225. formA.Show ();
  226. Assert.AreEqual (FormStartPosition.CenterParent, formA.StartPosition, "#A1");
  227. Assert.IsFalse (formA.Location.X == 151, "#A2");
  228. Assert.IsFalse (formA.Location.Y == 251, "#A3");
  229. formA.Location = new Point (311, 221);
  230. Assert.AreEqual (FormStartPosition.CenterParent, formA.StartPosition, "#A4");
  231. Assert.AreEqual (311, formA.Location.X, "#A5");
  232. Assert.AreEqual (221, formA.Location.Y, "#A6");
  233. formA.Dispose ();
  234. //
  235. // CenterScreen
  236. //
  237. Form formB = new Form ();
  238. formB.ShowInTaskbar = false;
  239. formB.StartPosition = FormStartPosition.CenterScreen;
  240. formB.Location = new Point (151, 251);
  241. formB.Show ();
  242. Assert.AreEqual (FormStartPosition.CenterScreen, formB.StartPosition, "#B1");
  243. Assert.IsFalse (formB.Location.X == 151, "#B2");
  244. Assert.IsFalse (formB.Location.Y == 251, "#B3");
  245. formB.Location = new Point (311, 221);
  246. Assert.AreEqual (FormStartPosition.CenterScreen, formB.StartPosition, "#B4");
  247. Assert.AreEqual (311, formB.Location.X, "#B5");
  248. Assert.AreEqual (221, formB.Location.Y, "#B6");
  249. formB.Dispose ();
  250. //
  251. // Manual
  252. //
  253. Form formC = new Form ();
  254. formC.ShowInTaskbar = false;
  255. formC.StartPosition = FormStartPosition.Manual;
  256. formC.Location = new Point (151, 251);
  257. formC.Show ();
  258. Assert.AreEqual (FormStartPosition.Manual, formC.StartPosition, "#C1");
  259. Assert.AreEqual (151, formC.Location.X, "#C2");
  260. Assert.AreEqual (251, formC.Location.Y, "#C3");
  261. formC.Location = new Point (311, 221);
  262. Assert.AreEqual (FormStartPosition.Manual, formC.StartPosition, "#C4");
  263. Assert.AreEqual (311, formC.Location.X, "#C5");
  264. Assert.AreEqual (221, formC.Location.Y, "#C6");
  265. formC.Dispose ();
  266. //
  267. // WindowsDefaultBounds
  268. //
  269. Form formD = new Form ();
  270. formD.ShowInTaskbar = false;
  271. formD.StartPosition = FormStartPosition.WindowsDefaultBounds;
  272. formD.Location = new Point (151, 251);
  273. formD.Show ();
  274. Assert.AreEqual (FormStartPosition.WindowsDefaultBounds, formD.StartPosition, "#D1");
  275. Assert.IsFalse (formD.Location.X == 151, "#D2");
  276. Assert.IsFalse (formD.Location.Y == 251, "#D3");
  277. formD.Location = new Point (311, 221);
  278. Assert.AreEqual (FormStartPosition.WindowsDefaultBounds, formD.StartPosition, "#D4");
  279. Assert.AreEqual (311, formD.Location.X, "#D5");
  280. Assert.AreEqual (221, formD.Location.Y, "#D6");
  281. formD.Dispose ();
  282. //
  283. // WindowsDefaultLocation
  284. //
  285. Form formE = new Form ();
  286. formE.ShowInTaskbar = false;
  287. formE.Location = new Point (151, 251);
  288. formE.Show ();
  289. Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, formE.StartPosition, "#E1");
  290. Assert.IsFalse (formE.Location.X == 151, "#E2");
  291. Assert.IsFalse (formE.Location.Y == 251, "#E3");
  292. formE.Location = new Point (311, 221);
  293. Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, formE.StartPosition, "#E4");
  294. Assert.AreEqual (311, formE.Location.X, "#E5");
  295. Assert.AreEqual (221, formE.Location.Y, "#E6");
  296. formE.Dispose ();
  297. }
  298. [Test]
  299. public void DisposeOwnerTest ()
  300. {
  301. Form f1 = new Form ();
  302. Form f2 = new Form ();
  303. f2.Owner = f1;
  304. f1.Dispose ();
  305. Assert.IsNull (f2.Owner, "1");
  306. Assert.AreEqual (0, f1.OwnedForms.Length, "2");
  307. }
  308. [Test]
  309. [ExpectedException (typeof (ObjectDisposedException))]
  310. public void AccessDisposedForm ()
  311. {
  312. Form myform = new Form ();
  313. myform.ShowInTaskbar = false;
  314. myform.Show ();
  315. myform.Close (); // this should result in the form being disposed
  316. myform.Show (); // and this line should result in the ODE being thrown
  317. }
  318. class MyForm : Form
  319. {
  320. public void DoDestroyHandle ()
  321. {
  322. DestroyHandle();
  323. }
  324. public void DoRecreateHandle ()
  325. {
  326. RecreateHandle();
  327. }
  328. }
  329. int handle_destroyed_count;
  330. void handle_destroyed (object sender, EventArgs e)
  331. {
  332. handle_destroyed_count++;
  333. }
  334. [Test]
  335. public void DestroyHandleTest ()
  336. {
  337. handle_destroyed_count = 0;
  338. MyForm f1 = new MyForm ();
  339. f1.HandleDestroyed += new EventHandler (handle_destroyed);
  340. f1.Show ();
  341. f1.DoDestroyHandle ();
  342. Assert.AreEqual (1, handle_destroyed_count, "1");
  343. f1 = new MyForm ();
  344. f1.HandleDestroyed += new EventHandler (handle_destroyed);
  345. f1.Show ();
  346. f1.DoRecreateHandle ();
  347. Assert.AreEqual (2, handle_destroyed_count, "2");
  348. }
  349. [Test]
  350. public void FormClose ()
  351. {
  352. Form myform = new Form ();
  353. myform.ShowInTaskbar = false;
  354. Assert.IsFalse (myform.Visible, "A1");
  355. Assert.IsFalse (myform.IsDisposed, "A2");
  356. myform.Close ();
  357. Assert.IsFalse (myform.Visible, "A3");
  358. Assert.IsFalse (myform.IsDisposed, "A4");
  359. myform.Show ();
  360. Assert.IsTrue (myform.Visible, "A5");
  361. Assert.IsFalse (myform.IsDisposed, "A6");
  362. myform.Close ();
  363. Assert.IsFalse (myform.Visible, "A7");
  364. Assert.IsTrue (myform.IsDisposed, "A8");
  365. }
  366. [Test]
  367. public void FormClose2 ()
  368. {
  369. WMCloseWatcher f = new WMCloseWatcher ();
  370. f.ShowInTaskbar = false;
  371. f.close_count = 0;
  372. Assert.IsFalse (f.Visible, "A1");
  373. f.Close ();
  374. Assert.AreEqual (0, f.close_count, "A2");
  375. f.Show ();
  376. f.Close ();
  377. Assert.AreEqual (1, f.close_count, "A3");
  378. }
  379. class WMCloseWatcher : Form {
  380. public int close_count;
  381. protected override void WndProc (ref Message msg) {
  382. if (msg.Msg == 0x0010 /* WM_CLOSE */) {
  383. close_count ++;
  384. }
  385. base.WndProc (ref msg);
  386. }
  387. }
  388. }
  389. }