DefaultLayoutTest.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572
  1. using System;
  2. using System.Drawing;
  3. using System.Windows.Forms;
  4. using NUnit.Framework;
  5. namespace MonoTests.System.Windows.Forms
  6. {
  7. [TestFixture]
  8. public class DefaultLayoutTest
  9. {
  10. int event_count;
  11. LayoutEventArgs most_recent_args;
  12. void p_Layout (object sender, LayoutEventArgs e)
  13. {
  14. event_count ++;
  15. most_recent_args = e;
  16. }
  17. [Test]
  18. public void AnchorLayoutEvents ()
  19. {
  20. Panel p;
  21. Button b;
  22. p = new Panel ();
  23. b = new Button ();
  24. p.Controls.Add (b);
  25. p.Layout += new LayoutEventHandler (p_Layout);
  26. /* set the button's anchor to something different */
  27. b.Anchor = AnchorStyles.Bottom;
  28. Assert.AreEqual (1, event_count, "1");
  29. Assert.AreEqual ("Anchor", most_recent_args.AffectedProperty, "2");
  30. /* reset it to something new with the panel's layout suspended */
  31. event_count = 0;
  32. p.SuspendLayout ();
  33. b.Anchor = AnchorStyles.Top;
  34. Assert.AreEqual (0, event_count, "3");
  35. p.ResumeLayout ();
  36. Assert.AreEqual (1, event_count, "4");
  37. Assert.AreEqual (null, most_recent_args.AffectedProperty, "5");
  38. /* with the anchor style set to something, resize the parent */
  39. event_count = 0;
  40. p.Size = new Size (500, 500);
  41. Assert.AreEqual (1, event_count, "6");
  42. Assert.AreEqual ("Bounds", most_recent_args.AffectedProperty, "7");
  43. /* now try it with layout suspended */
  44. event_count = 0;
  45. p.SuspendLayout ();
  46. p.Size = new Size (400, 400);
  47. Assert.AreEqual (0, event_count, "8");
  48. p.ResumeLayout ();
  49. Assert.AreEqual (1, event_count, "9");
  50. Assert.AreEqual (null, most_recent_args.AffectedProperty, "10");
  51. /* with the anchor style set to something, resize the child */
  52. event_count = 0;
  53. b.Size = new Size (100, 100);
  54. Assert.AreEqual (1, event_count, "11");
  55. Assert.AreEqual ("Bounds", most_recent_args.AffectedProperty, "12");
  56. /* and again with layout suspended */
  57. event_count = 0;
  58. p.SuspendLayout ();
  59. b.Size = new Size (200, 200);
  60. Assert.AreEqual (0, event_count, "13");
  61. p.ResumeLayout ();
  62. Assert.AreEqual (1, event_count, "14");
  63. Assert.AreEqual (null, most_recent_args.AffectedProperty, "15");
  64. }
  65. [Test]
  66. public void AnchorTopLeftTest ()
  67. {
  68. Form f = new Form ();
  69. f.ShowInTaskbar = false;
  70. f.Size = new Size (200, 200);
  71. Button b = new Button ();
  72. b.Size = new Size (100, 100);
  73. b.Anchor = AnchorStyles.Top | AnchorStyles.Left;
  74. f.Controls.Add (b);
  75. Assert.AreEqual (0, b.Left, "1");
  76. Assert.AreEqual (0, b.Top, "2");
  77. f.Size = new Size (300, 300);
  78. Assert.AreEqual (0, b.Left, "3");
  79. Assert.AreEqual (0, b.Top, "4");
  80. f.Dispose ();
  81. }
  82. [Test]
  83. public void AnchorTopRightTest ()
  84. {
  85. Form f = new Form ();
  86. f.ShowInTaskbar = false;
  87. f.Size = new Size (200, 200);
  88. Button b = new Button ();
  89. b.Size = new Size (100, 100);
  90. b.Anchor = AnchorStyles.Top | AnchorStyles.Right;
  91. f.Controls.Add (b);
  92. Assert.AreEqual (0, b.Left, "1");
  93. Assert.AreEqual (0, b.Top, "2");
  94. f.Size = new Size (300, 300);
  95. Assert.AreEqual (100, b.Left, "3");
  96. Assert.AreEqual (0, b.Top, "4");
  97. f.Dispose ();
  98. }
  99. [Test]
  100. public void AnchorLeftRightTest ()
  101. {
  102. Form f = new Form ();
  103. f.ShowInTaskbar = false;
  104. f.Size = new Size (200, 200);
  105. Button b = new Button ();
  106. b.Size = new Size (100, 100);
  107. b.Anchor = AnchorStyles.Left | AnchorStyles.Right;
  108. f.Controls.Add (b);
  109. Assert.AreEqual (0, b.Left, "1");
  110. Assert.AreEqual (100, b.Right, "2");
  111. f.Size = new Size (300, 300);
  112. Assert.AreEqual (0, b.Left, "3");
  113. Assert.AreEqual (200, b.Right, "4");
  114. f.Dispose ();
  115. }
  116. [Test]
  117. public void AnchorBottomLeftTest ()
  118. {
  119. Form f = new Form ();
  120. f.ShowInTaskbar = false;
  121. f.Size = new Size (200, 200);
  122. Button b = new Button ();
  123. b.Size = new Size (100, 100);
  124. b.Anchor = AnchorStyles.Left | AnchorStyles.Bottom;
  125. f.Controls.Add (b);
  126. Assert.AreEqual (0, b.Left, "1");
  127. Assert.AreEqual (0, b.Top, "2");
  128. f.Size = new Size (300, 300);
  129. Assert.AreEqual (0, b.Left, "3");
  130. Assert.AreEqual (100, b.Top, "4");
  131. f.Dispose ();
  132. }
  133. [Test]
  134. public void AnchorBottomRightTest ()
  135. {
  136. Form f = new Form ();
  137. f.ShowInTaskbar = false;
  138. f.Size = new Size (200, 200);
  139. Button b = new Button ();
  140. b.Size = new Size (100, 100);
  141. b.Anchor = AnchorStyles.Right | AnchorStyles.Bottom;
  142. f.Controls.Add (b);
  143. Assert.AreEqual (0, b.Left, "1");
  144. Assert.AreEqual (0, b.Top, "2");
  145. f.Size = new Size (300, 300);
  146. Assert.AreEqual (100, b.Left, "3");
  147. Assert.AreEqual (100, b.Top, "4");
  148. f.Dispose ();
  149. }
  150. [Test]
  151. public void AnchorTopBottomTest ()
  152. {
  153. Form f = new Form ();
  154. f.ShowInTaskbar = false;
  155. f.Size = new Size (200, 200);
  156. Button b = new Button ();
  157. b.Size = new Size (100, 100);
  158. b.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
  159. f.Controls.Add (b);
  160. Assert.AreEqual (0, b.Top, "1");
  161. Assert.AreEqual (100, b.Bottom, "2");
  162. f.Size = new Size (300, 300);
  163. Assert.AreEqual (0, b.Top, "3");
  164. Assert.AreEqual (200, b.Bottom, "4");
  165. f.Dispose ();
  166. }
  167. // Unit test version of the test case in bug #80336
  168. [Test]
  169. [Category ("NotWorking")]
  170. public void AnchorSuspendLayoutTest ()
  171. {
  172. Form f = new Form ();
  173. f.ShowInTaskbar = false;
  174. f.SuspendLayout ();
  175. Button b = new Button ();
  176. b.Size = new Size (100, 100);
  177. f.Controls.Add (b);
  178. f.Size = new Size (200, 200);
  179. b.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
  180. Assert.AreEqual (0, b.Top, "1");
  181. Assert.AreEqual (0, b.Left, "2");
  182. f.Size = new Size (300, 300);
  183. Assert.AreEqual (0, b.Top, "3");
  184. Assert.AreEqual (0, b.Left, "4");
  185. f.ResumeLayout();
  186. Assert.AreEqual (100, b.Top, "5");
  187. Assert.AreEqual (100, b.Left, "6");
  188. f.Dispose ();
  189. }
  190. }
  191. [TestFixture]
  192. public class DockingTests
  193. {
  194. Form form;
  195. Panel panel;
  196. int event_count;
  197. [SetUp]
  198. public void Init ()
  199. {
  200. form = new Form ();
  201. form.ShowInTaskbar = false;
  202. form.Size = new Size (400, 400);
  203. panel = new Panel ();
  204. form.Controls.Add (panel);
  205. event_count = 0;
  206. }
  207. [TearDown]
  208. public void Cleanup ()
  209. {
  210. form.Dispose ();
  211. }
  212. void IncrementEventCount (object o, EventArgs args)
  213. {
  214. event_count++;
  215. }
  216. [Test]
  217. public void TestDockSizeChangedEvent ()
  218. {
  219. panel.SizeChanged += new EventHandler (IncrementEventCount);
  220. panel.Dock = DockStyle.Bottom;
  221. Assert.AreEqual (1, event_count);
  222. }
  223. [Test]
  224. public void TestDockLocationChangedEvent ()
  225. {
  226. panel.LocationChanged += new EventHandler (IncrementEventCount);
  227. panel.Dock = DockStyle.Bottom;
  228. Assert.AreEqual (1, event_count);
  229. }
  230. }
  231. [TestFixture]
  232. public class UndockingTests
  233. {
  234. class TestPanel : Panel {
  235. public void InvokeSetBoundsCore ()
  236. {
  237. SetBoundsCore (37, 37, 37, 37, BoundsSpecified.All);
  238. }
  239. public void InvokeUpdateBounds ()
  240. {
  241. UpdateBounds (37, 37, 37, 37);
  242. }
  243. }
  244. Form form;
  245. TestPanel panel;
  246. [SetUp]
  247. public void Init ()
  248. {
  249. form = new Form ();
  250. form.ShowInTaskbar = false;
  251. form.Size = new Size (400, 400);
  252. panel = new TestPanel ();
  253. form.Controls.Add (panel);
  254. }
  255. [TearDown]
  256. public void Cleanup ()
  257. {
  258. form.Dispose ();
  259. }
  260. [Test]
  261. public void TestUndockDefaultLocation ()
  262. {
  263. Point loc = panel.Location;
  264. panel.Dock = DockStyle.Bottom;
  265. panel.Dock = DockStyle.None;
  266. Assert.AreEqual (loc, panel.Location);
  267. }
  268. [Test]
  269. public void TestUndockDefaultLocationVisible ()
  270. {
  271. form.Show ();
  272. Point loc = panel.Location;
  273. panel.Dock = DockStyle.Bottom;
  274. panel.Dock = DockStyle.None;
  275. Assert.AreEqual (loc, panel.Location);
  276. }
  277. [Test]
  278. public void TestUndockExplicitLeft ()
  279. {
  280. panel.Left = 150;
  281. panel.Dock = DockStyle.Top;
  282. panel.Dock = DockStyle.None;
  283. Assert.AreEqual (150, panel.Left);
  284. }
  285. [Test]
  286. public void TestUndockExplicitTop ()
  287. {
  288. panel.Top = 150;
  289. panel.Dock = DockStyle.Top;
  290. panel.Dock = DockStyle.None;
  291. Assert.AreEqual (150, panel.Top);
  292. }
  293. [Test]
  294. public void TestUndockExplicitLocation ()
  295. {
  296. panel.Location = new Point (50, 50);
  297. Point loc = panel.Location;
  298. panel.Dock = DockStyle.Bottom;
  299. panel.Dock = DockStyle.None;
  300. Assert.AreEqual (loc, panel.Location);
  301. }
  302. [Test]
  303. public void TestUndockExplicitLeftVisible ()
  304. {
  305. form.Show ();
  306. panel.Left = 150;
  307. panel.Dock = DockStyle.Top;
  308. panel.Dock = DockStyle.None;
  309. Assert.AreEqual (150, panel.Left);
  310. }
  311. [Test]
  312. public void TestUndockExplicitTopVisible ()
  313. {
  314. form.Show ();
  315. panel.Top = 150;
  316. panel.Dock = DockStyle.Top;
  317. panel.Dock = DockStyle.None;
  318. Assert.AreEqual (150, panel.Top);
  319. }
  320. [Test]
  321. public void TestUndockExplicitLocationVisible ()
  322. {
  323. form.Show ();
  324. panel.Location = new Point (50, 50);
  325. Point loc = panel.Location;
  326. panel.Dock = DockStyle.Bottom;
  327. panel.Dock = DockStyle.None;
  328. Assert.AreEqual (loc, panel.Location);
  329. }
  330. [Test]
  331. [Category ("NotWorking")]
  332. public void TestUndockDefaultSize ()
  333. {
  334. Size sz = panel.Size;
  335. panel.Dock = DockStyle.Fill;
  336. panel.Dock = DockStyle.None;
  337. Assert.AreEqual (sz, panel.Size);
  338. }
  339. [Test]
  340. public void TestUndockExplicitHeight ()
  341. {
  342. panel.Height = 50;
  343. panel.Dock = DockStyle.Left;
  344. panel.Dock = DockStyle.None;
  345. Assert.AreEqual (50, panel.Height);
  346. }
  347. [Test]
  348. [Category ("NotWorking")]
  349. public void TestUndockExplicitSize ()
  350. {
  351. panel.Size = new Size (50, 50);
  352. Size sz = panel.Size;
  353. panel.Dock = DockStyle.Fill;
  354. panel.Dock = DockStyle.None;
  355. Assert.AreEqual (sz, panel.Size);
  356. }
  357. [Test]
  358. public void TestUndockExplicitWidth ()
  359. {
  360. panel.Width = 50;
  361. panel.Dock = DockStyle.Top;
  362. panel.Dock = DockStyle.None;
  363. Assert.AreEqual (50, panel.Width);
  364. }
  365. [Test]
  366. public void TestUndockExplicitHeightVisible ()
  367. {
  368. form.Show ();
  369. panel.Height = 50;
  370. panel.Dock = DockStyle.Left;
  371. panel.Dock = DockStyle.None;
  372. Assert.AreEqual (50, panel.Height);
  373. }
  374. [Test]
  375. [Category ("NotWorking")]
  376. public void TestUndockExplicitSizeVisible ()
  377. {
  378. form.Show ();
  379. panel.Size = new Size (50, 50);
  380. Size sz = panel.Size;
  381. panel.Dock = DockStyle.Fill;
  382. panel.Dock = DockStyle.None;
  383. Assert.AreEqual (sz, panel.Size);
  384. }
  385. [Test]
  386. public void TestUndockExplicitWidthVisible ()
  387. {
  388. form.Show ();
  389. panel.Width = 50;
  390. panel.Dock = DockStyle.Top;
  391. panel.Dock = DockStyle.None;
  392. Assert.AreEqual (50, panel.Width);
  393. }
  394. [Test]
  395. public void TestUndockSetBounds ()
  396. {
  397. panel.SetBounds (50, 50, 50, 50, BoundsSpecified.All);
  398. panel.Dock = DockStyle.Top;
  399. panel.Dock = DockStyle.None;
  400. Assert.AreEqual (50, panel.Height, "Height");
  401. Assert.AreEqual (50, panel.Left, "Left");
  402. Assert.AreEqual (50, panel.Top, "Top");
  403. Assert.AreEqual (50, panel.Width, "Width");
  404. }
  405. [Test]
  406. public void TestUndockSetBoundsVisible ()
  407. {
  408. form.Show ();
  409. panel.SetBounds (50, 50, 50, 50, BoundsSpecified.All);
  410. panel.Dock = DockStyle.Top;
  411. panel.Dock = DockStyle.None;
  412. Assert.AreEqual (50, panel.Height, "Height");
  413. Assert.AreEqual (50, panel.Left, "Left");
  414. Assert.AreEqual (50, panel.Top, "Top");
  415. Assert.AreEqual (50, panel.Width, "Width");
  416. }
  417. [Test]
  418. public void TestUndockSetBoundsCore ()
  419. {
  420. panel.InvokeSetBoundsCore ();
  421. panel.Dock = DockStyle.Top;
  422. panel.Dock = DockStyle.None;
  423. Assert.AreEqual (37, panel.Height, "Height");
  424. Assert.AreEqual (37, panel.Left, "Left");
  425. Assert.AreEqual (37, panel.Top, "Top");
  426. Assert.AreEqual (37, panel.Width, "Width");
  427. }
  428. [Test]
  429. public void TestUndockSetBoundsCoreVisible ()
  430. {
  431. form.Show ();
  432. panel.InvokeSetBoundsCore ();
  433. panel.Dock = DockStyle.Top;
  434. panel.Dock = DockStyle.None;
  435. Assert.AreEqual (37, panel.Height, "Height");
  436. Assert.AreEqual (37, panel.Left, "Left");
  437. Assert.AreEqual (37, panel.Top, "Top");
  438. Assert.AreEqual (37, panel.Width, "Width");
  439. }
  440. [Test]
  441. public void TestUndockUpdateBounds ()
  442. {
  443. panel.InvokeUpdateBounds ();
  444. panel.Dock = DockStyle.Top;
  445. panel.Dock = DockStyle.None;
  446. Assert.AreEqual (37, panel.Height, "Height");
  447. Assert.AreEqual (37, panel.Left, "Left");
  448. Assert.AreEqual (37, panel.Top, "Top");
  449. Assert.AreEqual (37, panel.Width, "Width");
  450. }
  451. [Test]
  452. public void TestUndockUpdateBoundsVisible ()
  453. {
  454. form.Show ();
  455. panel.InvokeUpdateBounds ();
  456. panel.Dock = DockStyle.Top;
  457. panel.Dock = DockStyle.None;
  458. Assert.AreEqual (37, panel.Height, "Height");
  459. Assert.AreEqual (37, panel.Left, "Left");
  460. Assert.AreEqual (37, panel.Top, "Top");
  461. Assert.AreEqual (37, panel.Width, "Width");
  462. }
  463. }
  464. }