FormTest.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475
  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. Assert.AreEqual (ImeMode.NoControl, myform.ImeMode, "#39");
  73. myform.Dispose ();
  74. }
  75. [Test]
  76. public void ActivateTest ()
  77. {
  78. Form myform = new Form ();
  79. myform.ShowInTaskbar = false;
  80. myform.Visible = true;
  81. myform.Text = "NewForm";
  82. myform.Name = "FormTest";
  83. myform.Activate ();
  84. Assert.AreEqual (true, myform.Focus (), "#40");
  85. myform.Dispose ();
  86. }
  87. [Test]
  88. public void AddOwnedFormTest ()
  89. {
  90. Form parent = new Form ();
  91. parent.ShowInTaskbar = false;
  92. parent.Text = "NewParent";
  93. Form ownedForm = new Form ();
  94. ownedForm.ShowInTaskbar = false;
  95. ownedForm.Text = "Owned Form";
  96. parent.AddOwnedForm (ownedForm);
  97. ownedForm.Show ();
  98. Assert.AreEqual ("NewParent", ownedForm.Owner.Text, "#41");
  99. ownedForm.Dispose ();
  100. parent.Dispose ();
  101. }
  102. [Test] // bug #80020
  103. [NUnit.Framework.Category ("NotWorking")]
  104. public void IsHandleCreated ()
  105. {
  106. Form main = new Form ();
  107. main.Name = "main";
  108. main.IsMdiContainer = true;
  109. main.ShowInTaskbar = false;
  110. Assert.IsFalse (main.IsHandleCreated, "#1");
  111. Form child = new Form ();
  112. child.MdiParent = main;
  113. child.WindowState = FormWindowState.Maximized;
  114. Assert.IsFalse (main.IsHandleCreated, "#2");
  115. child.Show ();
  116. Assert.IsFalse (child.IsHandleCreated, "#3");
  117. Assert.IsFalse (main.IsHandleCreated, "#4");
  118. main.Show ();
  119. Assert.IsTrue (child.IsHandleCreated, "#5");
  120. Assert.IsTrue (main.IsHandleCreated, "#6");
  121. child.Dispose ();
  122. main.Dispose ();
  123. }
  124. [Test]
  125. public void RemoveOwnedFormTest ()
  126. {
  127. Form myform = new Form ();
  128. myform.ShowInTaskbar = false;
  129. myform.Text = "NewForm";
  130. myform.Name = "FormTest";
  131. myform.RemoveOwnedForm (myform);
  132. myform.Show ();
  133. Assert.AreEqual (null, myform.Owner, "#44");
  134. myform.Dispose ();
  135. }
  136. [Test]
  137. public void SetDesktopBoundsTest ()
  138. {
  139. Form myform = new Form ();
  140. myform.ShowInTaskbar = false;
  141. myform.Visible = true;
  142. myform.Text = "NewForm";
  143. myform.Name = "FormTest";
  144. myform.SetDesktopBounds (10, 10, 200 , 200);
  145. Assert.AreEqual (200, myform.DesktopBounds.Height, "#45");
  146. myform.Dispose ();
  147. }
  148. [Test]
  149. public void SetDesktopLocationTest ()
  150. {
  151. Form myform = new Form ();
  152. myform.ShowInTaskbar = false;
  153. myform.Visible = true;
  154. myform.Text = "NewForm";
  155. myform.Name = "FormTest";
  156. myform.SetDesktopLocation (10, 10);
  157. Assert.AreEqual (10, myform.DesktopLocation.X, "#46");
  158. myform.Dispose ();
  159. }
  160. [Test]
  161. public void SetDialogResultOutOfRange ()
  162. {
  163. Form myform = new Form ();
  164. myform.ShowInTaskbar = false;
  165. try {
  166. myform.DialogResult = (DialogResult) (-1);
  167. Assert.Fail ("#48");
  168. } catch (InvalidEnumArgumentException) {
  169. }
  170. try {
  171. myform.DialogResult = (DialogResult) ((int) DialogResult.No + 1);
  172. Assert.Fail ("#49");
  173. } catch (InvalidEnumArgumentException) {
  174. }
  175. myform.Dispose ();
  176. }
  177. void myform_set_dialogresult (object sender, EventArgs e)
  178. {
  179. Form f = (Form)sender;
  180. f.DialogResult = DialogResult.OK;
  181. }
  182. void myform_close (object sender, EventArgs e)
  183. {
  184. Form f = (Form)sender;
  185. f.Close();
  186. }
  187. [Test]
  188. public void SetDialogResult ()
  189. {
  190. Form myform = new Form ();
  191. myform.ShowInTaskbar = false;
  192. myform.Visible = true;
  193. myform.DialogResult = DialogResult.Cancel;
  194. Assert.IsTrue (myform.Visible, "A1");
  195. Assert.IsFalse (myform.IsDisposed, "A2");
  196. myform.Close ();
  197. Assert.IsFalse (myform.Visible, "A3");
  198. Assert.IsTrue (myform.IsDisposed, "A4");
  199. DialogResult result;
  200. myform = new Form ();
  201. myform.ShowInTaskbar = false;
  202. myform.VisibleChanged += new EventHandler (myform_set_dialogresult);
  203. result = myform.ShowDialog ();
  204. Assert.AreEqual (result, DialogResult.OK, "A5");
  205. Assert.IsFalse (myform.Visible, "A6");
  206. Assert.IsFalse (myform.IsDisposed, "A7");
  207. myform = new Form ();
  208. myform.ShowInTaskbar = false;
  209. myform.VisibleChanged += new EventHandler (myform_close);
  210. result = myform.ShowDialog ();
  211. Assert.AreEqual (result, DialogResult.Cancel, "A8");
  212. Assert.IsFalse (myform.Visible, "A9");
  213. Assert.IsFalse (myform.IsDisposed, "A10");
  214. }
  215. [Test] // bug #80052
  216. [NUnit.Framework.Category ("NotWorking")]
  217. public void Location ()
  218. {
  219. //
  220. // CenterParent
  221. //
  222. Form formA = new Form ();
  223. formA.ShowInTaskbar = false;
  224. formA.StartPosition = FormStartPosition.CenterParent;
  225. formA.Location = new Point (151, 251);
  226. formA.Show ();
  227. Assert.AreEqual (FormStartPosition.CenterParent, formA.StartPosition, "#A1");
  228. Assert.IsFalse (formA.Location.X == 151, "#A2");
  229. Assert.IsFalse (formA.Location.Y == 251, "#A3");
  230. formA.Location = new Point (311, 221);
  231. Assert.AreEqual (FormStartPosition.CenterParent, formA.StartPosition, "#A4");
  232. Assert.AreEqual (311, formA.Location.X, "#A5");
  233. Assert.AreEqual (221, formA.Location.Y, "#A6");
  234. formA.Dispose ();
  235. //
  236. // CenterScreen
  237. //
  238. Form formB = new Form ();
  239. formB.ShowInTaskbar = false;
  240. formB.StartPosition = FormStartPosition.CenterScreen;
  241. formB.Location = new Point (151, 251);
  242. formB.Show ();
  243. Assert.AreEqual (FormStartPosition.CenterScreen, formB.StartPosition, "#B1");
  244. Assert.IsFalse (formB.Location.X == 151, "#B2");
  245. Assert.IsFalse (formB.Location.Y == 251, "#B3");
  246. formB.Location = new Point (311, 221);
  247. Assert.AreEqual (FormStartPosition.CenterScreen, formB.StartPosition, "#B4");
  248. Assert.AreEqual (311, formB.Location.X, "#B5");
  249. Assert.AreEqual (221, formB.Location.Y, "#B6");
  250. formB.Dispose ();
  251. //
  252. // Manual
  253. //
  254. Form formC = new Form ();
  255. formC.ShowInTaskbar = false;
  256. formC.StartPosition = FormStartPosition.Manual;
  257. formC.Location = new Point (151, 251);
  258. formC.Show ();
  259. Assert.AreEqual (FormStartPosition.Manual, formC.StartPosition, "#C1");
  260. Assert.AreEqual (151, formC.Location.X, "#C2");
  261. Assert.AreEqual (251, formC.Location.Y, "#C3");
  262. formC.Location = new Point (311, 221);
  263. Assert.AreEqual (FormStartPosition.Manual, formC.StartPosition, "#C4");
  264. Assert.AreEqual (311, formC.Location.X, "#C5");
  265. Assert.AreEqual (221, formC.Location.Y, "#C6");
  266. formC.Dispose ();
  267. //
  268. // WindowsDefaultBounds
  269. //
  270. Form formD = new Form ();
  271. formD.ShowInTaskbar = false;
  272. formD.StartPosition = FormStartPosition.WindowsDefaultBounds;
  273. formD.Location = new Point (151, 251);
  274. formD.Show ();
  275. Assert.AreEqual (FormStartPosition.WindowsDefaultBounds, formD.StartPosition, "#D1");
  276. Assert.IsFalse (formD.Location.X == 151, "#D2");
  277. Assert.IsFalse (formD.Location.Y == 251, "#D3");
  278. formD.Location = new Point (311, 221);
  279. Assert.AreEqual (FormStartPosition.WindowsDefaultBounds, formD.StartPosition, "#D4");
  280. Assert.AreEqual (311, formD.Location.X, "#D5");
  281. Assert.AreEqual (221, formD.Location.Y, "#D6");
  282. formD.Dispose ();
  283. //
  284. // WindowsDefaultLocation
  285. //
  286. Form formE = new Form ();
  287. formE.ShowInTaskbar = false;
  288. formE.Location = new Point (151, 251);
  289. formE.Show ();
  290. Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, formE.StartPosition, "#E1");
  291. Assert.IsFalse (formE.Location.X == 151, "#E2");
  292. Assert.IsFalse (formE.Location.Y == 251, "#E3");
  293. formE.Location = new Point (311, 221);
  294. Assert.AreEqual (FormStartPosition.WindowsDefaultLocation, formE.StartPosition, "#E4");
  295. Assert.AreEqual (311, formE.Location.X, "#E5");
  296. Assert.AreEqual (221, formE.Location.Y, "#E6");
  297. formE.Dispose ();
  298. }
  299. [Test]
  300. public void DisposeOwnerTest ()
  301. {
  302. Form f1 = new Form ();
  303. Form f2 = new Form ();
  304. f2.Owner = f1;
  305. f1.Dispose ();
  306. Assert.IsNull (f2.Owner, "1");
  307. Assert.AreEqual (0, f1.OwnedForms.Length, "2");
  308. }
  309. [Test]
  310. [ExpectedException (typeof (ObjectDisposedException))]
  311. public void AccessDisposedForm ()
  312. {
  313. Form myform = new Form ();
  314. myform.ShowInTaskbar = false;
  315. myform.Show ();
  316. myform.Close (); // this should result in the form being disposed
  317. myform.Show (); // and this line should result in the ODE being thrown
  318. }
  319. class MyForm : Form
  320. {
  321. public void DoDestroyHandle ()
  322. {
  323. DestroyHandle();
  324. }
  325. public void DoRecreateHandle ()
  326. {
  327. RecreateHandle();
  328. }
  329. }
  330. int handle_destroyed_count;
  331. void handle_destroyed (object sender, EventArgs e)
  332. {
  333. handle_destroyed_count++;
  334. }
  335. [Test]
  336. public void DestroyHandleTest ()
  337. {
  338. handle_destroyed_count = 0;
  339. MyForm f1 = new MyForm ();
  340. f1.HandleDestroyed += new EventHandler (handle_destroyed);
  341. f1.Show ();
  342. f1.DoDestroyHandle ();
  343. Assert.AreEqual (1, handle_destroyed_count, "1");
  344. f1 = new MyForm ();
  345. f1.HandleDestroyed += new EventHandler (handle_destroyed);
  346. f1.Show ();
  347. f1.DoRecreateHandle ();
  348. Assert.AreEqual (2, handle_destroyed_count, "2");
  349. }
  350. [Test]
  351. public void FormClose ()
  352. {
  353. Form myform = new Form ();
  354. myform.ShowInTaskbar = false;
  355. Assert.IsFalse (myform.Visible, "A1");
  356. Assert.IsFalse (myform.IsDisposed, "A2");
  357. myform.Close ();
  358. Assert.IsFalse (myform.Visible, "A3");
  359. Assert.IsFalse (myform.IsDisposed, "A4");
  360. myform.Show ();
  361. Assert.IsTrue (myform.Visible, "A5");
  362. Assert.IsFalse (myform.IsDisposed, "A6");
  363. myform.Close ();
  364. Assert.IsFalse (myform.Visible, "A7");
  365. Assert.IsTrue (myform.IsDisposed, "A8");
  366. }
  367. [Test]
  368. public void FormClose2 ()
  369. {
  370. WMCloseWatcher f = new WMCloseWatcher ();
  371. f.ShowInTaskbar = false;
  372. f.close_count = 0;
  373. Assert.IsFalse (f.Visible, "A1");
  374. f.Close ();
  375. Assert.AreEqual (0, f.close_count, "A2");
  376. f.Show ();
  377. f.Close ();
  378. Assert.AreEqual (1, f.close_count, "A3");
  379. }
  380. class WMCloseWatcher : Form {
  381. public int close_count;
  382. protected override void WndProc (ref Message msg) {
  383. if (msg.Msg == 0x0010 /* WM_CLOSE */) {
  384. close_count ++;
  385. }
  386. base.WndProc (ref msg);
  387. }
  388. }
  389. }
  390. }