FlowPanelTests.cs 60 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275
  1. #if NET_2_0
  2. using System;
  3. using System.Text;
  4. using NUnit.Framework;
  5. using System.Windows.Forms;
  6. using System.Drawing;
  7. using System.Collections.Generic;
  8. namespace MonoTests.System.Windows.Forms
  9. {
  10. [TestFixture()]
  11. public class FlowPanelTests
  12. {
  13. [Test]
  14. public void TestConstruction()
  15. {
  16. FlowLayoutPanel p = new FlowLayoutPanel();
  17. Assert.AreEqual(FlowDirection.LeftToRight, p.FlowDirection, "A1");
  18. Assert.AreEqual(true, p.WrapContents, "A2");
  19. Assert.AreEqual("System.Windows.Forms.Layout.FlowLayout", p.LayoutEngine.ToString(), "A3");
  20. p.FlowDirection = FlowDirection.BottomUp;
  21. p.WrapContents = false;
  22. Assert.AreEqual (FlowDirection.BottomUp, p.FlowDirection, "A4");
  23. Assert.AreEqual (false, p.WrapContents, "A5");
  24. }
  25. [Test]
  26. public void TestExtenderProvider()
  27. {
  28. FlowLayoutPanel p = new FlowLayoutPanel ();
  29. Button b = new Button();
  30. Assert.AreEqual(false, p.GetFlowBreak(b), "B1");
  31. p.SetFlowBreak(b, true);
  32. Assert.AreEqual (true, p.GetFlowBreak (b), "B2");
  33. }
  34. #region LeftToRight Tests
  35. [Test]
  36. public void LeftToRightLayoutTest1 ()
  37. {
  38. // 2 Normal Buttons
  39. FlowLayoutPanel p = new FlowLayoutPanel ();
  40. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  41. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  42. Assert.AreEqual (new Rectangle (0, 0, 100, 100), p.Controls[0].Bounds, "C1");
  43. Assert.AreEqual (new Rectangle (100, 0, 100, 100), p.Controls[1].Bounds, "C2");
  44. }
  45. [Test]
  46. public void LeftToRightLayoutTest2 ()
  47. {
  48. // Dock Fill and Normal
  49. FlowLayoutPanel p = new FlowLayoutPanel ();
  50. p.Controls.Add (CreateButton (100, 50, false, DockStyle.Fill, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  51. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  52. Assert.AreEqual (new Rectangle (0, 0, 100, 100), p.Controls[0].Bounds, "D1");
  53. Assert.AreEqual (new Rectangle (100, 0, 100, 100), p.Controls[1].Bounds, "D2");
  54. }
  55. [Test]
  56. public void LeftToRightLayoutTest3 ()
  57. {
  58. // Anchored: Top/Bottom and Normal
  59. FlowLayoutPanel p = new FlowLayoutPanel ();
  60. p.Controls.Add (CreateButton (100, 50, false, DockStyle.None, new Padding (), AnchorStyles.Top | AnchorStyles.Bottom));
  61. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  62. Assert.AreEqual (new Rectangle (0, 0, 100, 100), p.Controls[0].Bounds, "E1");
  63. Assert.AreEqual (new Rectangle (100, 0, 100, 100), p.Controls[1].Bounds, "E2");
  64. }
  65. [Test]
  66. public void LeftToRightLayoutTest4 ()
  67. {
  68. // Anchored: Top/Bottom and Dock Fill
  69. FlowLayoutPanel p = new FlowLayoutPanel ();
  70. p.Controls.Add (CreateButton (100, 50, false, DockStyle.None, new Padding (), AnchorStyles.Top | AnchorStyles.Bottom));
  71. p.Controls.Add (CreateButton (100, 100, false, DockStyle.Fill, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  72. Assert.AreEqual (new Rectangle (0, 0, 100, 0), p.Controls[0].Bounds, "F1");
  73. Assert.AreEqual (new Rectangle (100, 0, 100, 0), p.Controls[1].Bounds, "F2");
  74. }
  75. [Test]
  76. public void LeftToRightLayoutTest5 ()
  77. {
  78. // 2 Anchored: Top/Bottom
  79. FlowLayoutPanel p = new FlowLayoutPanel ();
  80. p.Controls.Add (CreateButton (100, 50, false, DockStyle.None, new Padding (), AnchorStyles.Top | AnchorStyles.Bottom));
  81. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Top | AnchorStyles.Bottom));
  82. Assert.AreEqual (new Rectangle (0, 0, 100, 0), p.Controls[0].Bounds, "G1");
  83. Assert.AreEqual (new Rectangle (100, 0, 100, 0), p.Controls[1].Bounds, "G2");
  84. }
  85. [Test]
  86. public void LeftToRightLayoutTest6 ()
  87. {
  88. // 2 Dock Fill
  89. FlowLayoutPanel p = new FlowLayoutPanel ();
  90. p.Controls.Add (CreateButton (100, 50, false, DockStyle.Fill, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  91. p.Controls.Add (CreateButton (100, 100, false, DockStyle.Fill, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  92. Assert.AreEqual (new Rectangle (0, 0, 100, 0), p.Controls[0].Bounds, "H1");
  93. Assert.AreEqual (new Rectangle (100, 0, 100, 0), p.Controls[1].Bounds, "H2");
  94. }
  95. [Test]
  96. public void LeftToRightLayoutTest7 ()
  97. {
  98. // Dock Top
  99. FlowLayoutPanel p = new FlowLayoutPanel ();
  100. p.Controls.Add (CreateButton (100, 50, false, DockStyle.Top, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  101. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  102. Assert.AreEqual (new Rectangle (0, 0, 100, 50), p.Controls[0].Bounds, "I1");
  103. Assert.AreEqual (new Rectangle (100, 0, 100, 100), p.Controls[1].Bounds, "I2");
  104. }
  105. [Test]
  106. public void LeftToRightLayoutTest8 ()
  107. {
  108. // Dock Bottom
  109. FlowLayoutPanel p = new FlowLayoutPanel ();
  110. p.Controls.Add (CreateButton (100, 50, false, DockStyle.Bottom, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  111. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  112. Assert.AreEqual (new Rectangle (0, 50, 100, 50), p.Controls[0].Bounds, "J1");
  113. Assert.AreEqual (new Rectangle (100, 0, 100, 100), p.Controls[1].Bounds, "J2");
  114. }
  115. [Test]
  116. public void LeftToRightLayoutTest9 ()
  117. {
  118. // Anchor Bottom
  119. FlowLayoutPanel p = new FlowLayoutPanel ();
  120. p.Controls.Add (CreateButton (100, 50, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Bottom));
  121. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  122. Assert.AreEqual (new Rectangle (0, 50, 100, 50), p.Controls[0].Bounds, "K1");
  123. Assert.AreEqual (new Rectangle (100, 0, 100, 100), p.Controls[1].Bounds, "K2");
  124. }
  125. [Test]
  126. public void LeftToRightLayoutTest10 ()
  127. {
  128. // No Dock or Anchor
  129. FlowLayoutPanel p = new FlowLayoutPanel ();
  130. p.Controls.Add (CreateButton (100, 50, false, DockStyle.None, new Padding (), AnchorStyles.None));
  131. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  132. Assert.AreEqual (new Rectangle (0, 25, 100, 50), p.Controls[0].Bounds, "L1");
  133. Assert.AreEqual (new Rectangle (100, 0, 100, 100), p.Controls[1].Bounds, "L2");
  134. }
  135. [Test]
  136. public void LeftToRightLayoutTest11 ()
  137. {
  138. // WrapContents = true
  139. FlowLayoutPanel p = new FlowLayoutPanel ();
  140. p.Controls.Add (CreateButton (100, 50, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  141. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  142. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  143. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  144. Assert.AreEqual (new Rectangle (0, 0, 100, 50), p.Controls[0].Bounds, "M1");
  145. Assert.AreEqual (new Rectangle (100, 0, 100, 100), p.Controls[1].Bounds, "M2");
  146. Assert.AreEqual (new Rectangle (0, 100, 100, 100), p.Controls[2].Bounds, "M3");
  147. Assert.AreEqual (new Rectangle (100, 100, 100, 100), p.Controls[3].Bounds, "M4");
  148. }
  149. [Test]
  150. public void LeftToRightLayoutTest12 ()
  151. {
  152. // WrapContents = false
  153. FlowLayoutPanel p = new FlowLayoutPanel ();
  154. p.WrapContents = false;
  155. p.Controls.Add (CreateButton (100, 50, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  156. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  157. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  158. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  159. Assert.AreEqual (new Rectangle (0, 0, 100, 50), p.Controls[0].Bounds, "N1");
  160. Assert.AreEqual (new Rectangle (100, 0, 100, 100), p.Controls[1].Bounds, "N2");
  161. Assert.AreEqual (new Rectangle (200, 0, 100, 100), p.Controls[2].Bounds, "N3");
  162. Assert.AreEqual (new Rectangle (300, 0, 100, 100), p.Controls[3].Bounds, "N4");
  163. }
  164. [Test]
  165. public void LeftToRightLayoutTest13 ()
  166. {
  167. // SetFlowBreak 1, 3
  168. FlowLayoutPanel p = new FlowLayoutPanel ();
  169. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  170. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  171. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  172. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  173. p.SetFlowBreak (p.Controls[0], true);
  174. p.SetFlowBreak (p.Controls[2], true);
  175. Assert.AreEqual (new Rectangle (0, 0, 100, 100), p.Controls[0].Bounds, "O1");
  176. Assert.AreEqual (new Rectangle (0, 100, 100, 100), p.Controls[1].Bounds, "O2");
  177. Assert.AreEqual (new Rectangle (100, 100, 100, 100), p.Controls[2].Bounds, "O3");
  178. Assert.AreEqual (new Rectangle (0, 200, 100, 100), p.Controls[3].Bounds, "O4");
  179. }
  180. [Test]
  181. public void LeftToRightLayoutTest14 ()
  182. {
  183. // Margins
  184. FlowLayoutPanel p = new FlowLayoutPanel ();
  185. p.Controls.Add (CreateButton (50, 50, false, DockStyle.None, new Padding (1,3,5,2), AnchorStyles.Left | AnchorStyles.Top));
  186. p.Controls.Add (CreateButton (50, 50, false, DockStyle.None, new Padding (7,3,12,5), AnchorStyles.Left | AnchorStyles.Top));
  187. p.Controls.Add (CreateButton (50, 50, false, DockStyle.None, new Padding (14,7,1,3), AnchorStyles.Left | AnchorStyles.Top));
  188. p.Controls.Add (CreateButton (50, 50, false, DockStyle.None, new Padding (4), AnchorStyles.Left | AnchorStyles.Top));
  189. Assert.AreEqual (new Rectangle (1, 3, 50, 50), p.Controls[0].Bounds, "P1");
  190. Assert.AreEqual (new Rectangle (63, 3, 50, 50), p.Controls[1].Bounds, "P2");
  191. Assert.AreEqual (new Rectangle (139, 7, 50, 50), p.Controls[2].Bounds, "P3");
  192. Assert.AreEqual (new Rectangle (4, 64, 50, 50), p.Controls[3].Bounds, "P4");
  193. }
  194. [Test]
  195. public void LeftToRightLayoutTest15 ()
  196. {
  197. // Margins and Different Sizes
  198. FlowLayoutPanel p = new FlowLayoutPanel ();
  199. p.Controls.Add (CreateButton (25, 45, false, DockStyle.None, new Padding (6), AnchorStyles.Left | AnchorStyles.Top));
  200. p.Controls.Add (CreateButton (60, 20, false, DockStyle.None, new Padding (9), AnchorStyles.Left | AnchorStyles.Top));
  201. p.Controls.Add (CreateButton (15, 85, false, DockStyle.None, new Padding (2), AnchorStyles.Left | AnchorStyles.Top));
  202. p.Controls.Add (CreateButton (50, 20, false, DockStyle.None, new Padding (4), AnchorStyles.Left | AnchorStyles.Top));
  203. Assert.AreEqual (new Rectangle (6, 6, 25, 45), p.Controls[0].Bounds, "Q1");
  204. Assert.AreEqual (new Rectangle (46, 9, 60, 20), p.Controls[1].Bounds, "Q2");
  205. Assert.AreEqual (new Rectangle (117, 2, 15, 85), p.Controls[2].Bounds, "Q3");
  206. Assert.AreEqual (new Rectangle (138, 4, 50, 20), p.Controls[3].Bounds, "Q4");
  207. }
  208. [Test]
  209. public void LeftToRightLayoutTest16 ()
  210. {
  211. // Random Complex Layout 1
  212. FlowLayoutPanel p = new FlowLayoutPanel ();
  213. p.Controls.Add (CreateButton (25, 45, false, DockStyle.None, new Padding (6), AnchorStyles.Right | AnchorStyles.Top));
  214. p.Controls.Add (CreateButton (60, 20, false, DockStyle.Fill, new Padding (9), AnchorStyles.Bottom | AnchorStyles.Top));
  215. p.Controls.Add (CreateButton (15, 85, false, DockStyle.None, new Padding (2), AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Bottom));
  216. p.Controls.Add (CreateButton (50, 20, false, DockStyle.None, new Padding (4), AnchorStyles.Left | AnchorStyles.Bottom));
  217. p.Controls.Add (CreateButton (13, 22, false, DockStyle.None, new Padding (12), AnchorStyles.Left | AnchorStyles.Right));
  218. p.Controls.Add (CreateButton (73, 28, false, DockStyle.Top, new Padding (6), AnchorStyles.None));
  219. Assert.AreEqual (new Rectangle (6, 6, 25, 45), p.Controls[0].Bounds, "R1");
  220. Assert.AreEqual (new Rectangle (46, 9, 60, 39), p.Controls[1].Bounds, "R2");
  221. Assert.AreEqual (new Rectangle (117, 2, 15, 53), p.Controls[2].Bounds, "R3");
  222. Assert.AreEqual (new Rectangle (138, 33, 50, 20), p.Controls[3].Bounds, "R4");
  223. Assert.AreEqual (new Rectangle (12, 69, 13, 22), p.Controls[4].Bounds, "R5");
  224. Assert.AreEqual (new Rectangle (43, 63, 73, 28), p.Controls[5].Bounds, "R6");
  225. }
  226. [Test]
  227. public void LeftToRightLayoutTest17 ()
  228. {
  229. // Random Complex Layout 2
  230. FlowLayoutPanel p = new FlowLayoutPanel ();
  231. p.Controls.Add (CreateButton (12, 345, false, DockStyle.Bottom, new Padding (1, 2, 3, 4), AnchorStyles.Left | AnchorStyles.Top));
  232. p.Controls.Add (CreateButton (9, 44, false, DockStyle.Top, new Padding (6, 3, 2, 7), AnchorStyles.Right | AnchorStyles.Top));
  233. p.Controls.Add (CreateButton (78, 14, false, DockStyle.None, new Padding (5, 1, 2, 4), AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right));
  234. p.Controls.Add (CreateButton (21, 64, false, DockStyle.Top, new Padding (3, 3, 3, 1), AnchorStyles.None));
  235. p.Controls.Add (CreateButton (14, 14, false, DockStyle.Fill, new Padding (11, 4, 6, 3), AnchorStyles.Top | AnchorStyles.Bottom));
  236. p.Controls.Add (CreateButton (132, 6, false, DockStyle.Fill, new Padding (5, 5, 4, 5), AnchorStyles.Top | AnchorStyles.Bottom));
  237. p.SetFlowBreak (p.Controls[0], true);
  238. p.SetFlowBreak (p.Controls[2], true);
  239. Assert.AreEqual (new Rectangle (1, 2, 12, 345), p.Controls[0].Bounds, "S1");
  240. Assert.AreEqual (new Rectangle (6, 354, 9, 44), p.Controls[1].Bounds, "S2");
  241. Assert.AreEqual (new Rectangle (22, 352, 78, 49), p.Controls[2].Bounds, "S3");
  242. Assert.AreEqual (new Rectangle (3, 408, 21, 64), p.Controls[3].Bounds, "S4");
  243. Assert.AreEqual (new Rectangle (38, 409, 14, 61), p.Controls[4].Bounds, "S5");
  244. Assert.AreEqual (new Rectangle (63, 410, 132, 58), p.Controls[5].Bounds, "S6");
  245. }
  246. [Test]
  247. public void LeftToRightLayoutTest18 ()
  248. {
  249. // SetFlowBreak has no effect when WrapContents = false
  250. FlowLayoutPanel p = new FlowLayoutPanel ();
  251. p.WrapContents = false;
  252. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  253. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  254. p.SetFlowBreak(p.Controls[0], true);
  255. Assert.AreEqual (new Rectangle (0, 0, 100, 100), p.Controls[0].Bounds, "T1");
  256. Assert.AreEqual (new Rectangle (100, 0, 100, 100), p.Controls[1].Bounds, "T2");
  257. }
  258. #endregion
  259. #region RightToLeft Tests
  260. [Test]
  261. public void RightToLeftLayoutTest1 ()
  262. {
  263. // 2 Normal Buttons
  264. FlowLayoutPanel p = new FlowLayoutPanel ();
  265. p.FlowDirection = FlowDirection.RightToLeft;
  266. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  267. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  268. Assert.AreEqual (new Rectangle (100, 0, 100, 100), p.Controls[0].Bounds, "AC1");
  269. Assert.AreEqual (new Rectangle (0, 0, 100, 100), p.Controls[1].Bounds, "AC2");
  270. }
  271. [Test]
  272. public void RightToLeftLayoutTest2 ()
  273. {
  274. // Dock Fill and Normal
  275. FlowLayoutPanel p = new FlowLayoutPanel ();
  276. p.FlowDirection = FlowDirection.RightToLeft;
  277. p.Controls.Add (CreateButton (100, 50, false, DockStyle.Fill, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  278. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  279. Assert.AreEqual (new Rectangle (100, 0, 100, 100), p.Controls[0].Bounds, "AD1");
  280. Assert.AreEqual (new Rectangle (0, 0, 100, 100), p.Controls[1].Bounds, "AD2");
  281. }
  282. [Test]
  283. public void RightToLeftLayoutTest3 ()
  284. {
  285. // Anchored: Top/Bottom and Normal
  286. FlowLayoutPanel p = new FlowLayoutPanel ();
  287. p.FlowDirection = FlowDirection.RightToLeft;
  288. p.Controls.Add (CreateButton (100, 50, false, DockStyle.None, new Padding (), AnchorStyles.Top | AnchorStyles.Bottom));
  289. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  290. Assert.AreEqual (new Rectangle (100, 0, 100, 100), p.Controls[0].Bounds, "AE1");
  291. Assert.AreEqual (new Rectangle (0, 0, 100, 100), p.Controls[1].Bounds, "AE2");
  292. }
  293. [Test]
  294. public void RightToLeftLayoutTest4 ()
  295. {
  296. // Anchored: Top/Bottom and Dock Fill
  297. FlowLayoutPanel p = new FlowLayoutPanel ();
  298. p.FlowDirection = FlowDirection.RightToLeft;
  299. p.Controls.Add (CreateButton (100, 50, false, DockStyle.None, new Padding (), AnchorStyles.Top | AnchorStyles.Bottom));
  300. p.Controls.Add (CreateButton (100, 100, false, DockStyle.Fill, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  301. Assert.AreEqual (new Rectangle (100, 0, 100, 0), p.Controls[0].Bounds, "AF1");
  302. Assert.AreEqual (new Rectangle (0, 0, 100, 0), p.Controls[1].Bounds, "AF2");
  303. }
  304. [Test]
  305. public void RightToLeftLayoutTest5 ()
  306. {
  307. // 2 Anchored: Top/Bottom
  308. FlowLayoutPanel p = new FlowLayoutPanel ();
  309. p.FlowDirection = FlowDirection.RightToLeft;
  310. p.Controls.Add (CreateButton (100, 50, false, DockStyle.None, new Padding (), AnchorStyles.Top | AnchorStyles.Bottom));
  311. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Top | AnchorStyles.Bottom));
  312. Assert.AreEqual (new Rectangle (100, 0, 100, 0), p.Controls[0].Bounds, "AG1");
  313. Assert.AreEqual (new Rectangle (0, 0, 100, 0), p.Controls[1].Bounds, "AG2");
  314. }
  315. [Test]
  316. public void RightToLeftLayoutTest6 ()
  317. {
  318. // 2 Dock Fill
  319. FlowLayoutPanel p = new FlowLayoutPanel ();
  320. p.FlowDirection = FlowDirection.RightToLeft;
  321. p.Controls.Add (CreateButton (100, 50, false, DockStyle.Fill, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  322. p.Controls.Add (CreateButton (100, 100, false, DockStyle.Fill, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  323. Assert.AreEqual (new Rectangle (100, 0, 100, 0), p.Controls[0].Bounds, "AH1");
  324. Assert.AreEqual (new Rectangle (0, 0, 100, 0), p.Controls[1].Bounds, "AH2");
  325. }
  326. [Test]
  327. public void RightToLeftLayoutTest7 ()
  328. {
  329. // Dock Top
  330. FlowLayoutPanel p = new FlowLayoutPanel ();
  331. p.FlowDirection = FlowDirection.RightToLeft;
  332. p.Controls.Add (CreateButton (100, 50, false, DockStyle.Top, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  333. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  334. Assert.AreEqual (new Rectangle (100, 0, 100, 50), p.Controls[0].Bounds, "AI1");
  335. Assert.AreEqual (new Rectangle (0, 0, 100, 100), p.Controls[1].Bounds, "AI2");
  336. }
  337. [Test]
  338. public void RightToLeftLayoutTest8 ()
  339. {
  340. // Dock Bottom
  341. FlowLayoutPanel p = new FlowLayoutPanel ();
  342. p.FlowDirection = FlowDirection.RightToLeft;
  343. p.Controls.Add (CreateButton (100, 50, false, DockStyle.Bottom, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  344. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  345. Assert.AreEqual (new Rectangle (100, 50, 100, 50), p.Controls[0].Bounds, "AJ1");
  346. Assert.AreEqual (new Rectangle (0, 0, 100, 100), p.Controls[1].Bounds, "AJ2");
  347. }
  348. [Test]
  349. public void RightToLeftLayoutTest9 ()
  350. {
  351. // Anchor Bottom
  352. FlowLayoutPanel p = new FlowLayoutPanel ();
  353. p.FlowDirection = FlowDirection.RightToLeft;
  354. p.Controls.Add (CreateButton (100, 50, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Bottom));
  355. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  356. Assert.AreEqual (new Rectangle (100, 50, 100, 50), p.Controls[0].Bounds, "AK1");
  357. Assert.AreEqual (new Rectangle (0, 0, 100, 100), p.Controls[1].Bounds, "AK2");
  358. }
  359. [Test]
  360. public void RightToLeftLayoutTest10 ()
  361. {
  362. // No Dock or Anchor
  363. FlowLayoutPanel p = new FlowLayoutPanel ();
  364. p.FlowDirection = FlowDirection.RightToLeft;
  365. p.Controls.Add (CreateButton (100, 50, false, DockStyle.None, new Padding (), AnchorStyles.None));
  366. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  367. Assert.AreEqual (new Rectangle (100, 25, 100, 50), p.Controls[0].Bounds, "AL1");
  368. Assert.AreEqual (new Rectangle (0, 0, 100, 100), p.Controls[1].Bounds, "AL2");
  369. }
  370. [Test]
  371. public void RightToLeftLayoutTest11 ()
  372. {
  373. // WrapContents = true
  374. FlowLayoutPanel p = new FlowLayoutPanel ();
  375. p.FlowDirection = FlowDirection.RightToLeft;
  376. p.Controls.Add (CreateButton (100, 50, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  377. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  378. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  379. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  380. Assert.AreEqual (new Rectangle (100, 0, 100, 50), p.Controls[0].Bounds, "AM1");
  381. Assert.AreEqual (new Rectangle (0, 0, 100, 100), p.Controls[1].Bounds, "AM2");
  382. Assert.AreEqual (new Rectangle (100, 100, 100, 100), p.Controls[2].Bounds, "AM3");
  383. Assert.AreEqual (new Rectangle (0, 100, 100, 100), p.Controls[3].Bounds, "AM4");
  384. }
  385. [Test]
  386. public void RightToLeftLayoutTest12 ()
  387. {
  388. // WrapContents = false
  389. FlowLayoutPanel p = new FlowLayoutPanel ();
  390. p.WrapContents = false;
  391. p.FlowDirection = FlowDirection.RightToLeft;
  392. p.Controls.Add (CreateButton (100, 50, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  393. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  394. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  395. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  396. Assert.AreEqual (new Rectangle (100, 0, 100, 50), p.Controls[0].Bounds, "AN1");
  397. Assert.AreEqual (new Rectangle (0, 0, 100, 100), p.Controls[1].Bounds, "AN2");
  398. Assert.AreEqual (new Rectangle (-100, 0, 100, 100), p.Controls[2].Bounds, "AN3");
  399. Assert.AreEqual (new Rectangle (-200, 0, 100, 100), p.Controls[3].Bounds, "AN4");
  400. }
  401. [Test]
  402. public void RightToLeftLayoutTest13 ()
  403. {
  404. // SetFlowBreak 1, 3
  405. FlowLayoutPanel p = new FlowLayoutPanel ();
  406. p.FlowDirection = FlowDirection.RightToLeft;
  407. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  408. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  409. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  410. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  411. p.SetFlowBreak (p.Controls[0], true);
  412. p.SetFlowBreak (p.Controls[2], true);
  413. Assert.AreEqual (new Rectangle (100, 0, 100, 100), p.Controls[0].Bounds, "AO1");
  414. Assert.AreEqual (new Rectangle (100, 100, 100, 100), p.Controls[1].Bounds, "AO2");
  415. Assert.AreEqual (new Rectangle (0, 100, 100, 100), p.Controls[2].Bounds, "AO3");
  416. Assert.AreEqual (new Rectangle (100, 200, 100, 100), p.Controls[3].Bounds, "AO4");
  417. }
  418. [Test]
  419. public void RightToLeftLayoutTest14 ()
  420. {
  421. // Margins
  422. FlowLayoutPanel p = new FlowLayoutPanel ();
  423. p.FlowDirection = FlowDirection.RightToLeft;
  424. p.Controls.Add (CreateButton (50, 50, false, DockStyle.None, new Padding (1, 3, 5, 2), AnchorStyles.Left | AnchorStyles.Top));
  425. p.Controls.Add (CreateButton (50, 50, false, DockStyle.None, new Padding (7, 3, 12, 5), AnchorStyles.Left | AnchorStyles.Top));
  426. p.Controls.Add (CreateButton (50, 50, false, DockStyle.None, new Padding (14, 7, 1, 3), AnchorStyles.Left | AnchorStyles.Top));
  427. p.Controls.Add (CreateButton (50, 50, false, DockStyle.None, new Padding (4), AnchorStyles.Left | AnchorStyles.Top));
  428. Assert.AreEqual (new Rectangle (145, 3, 50, 50), p.Controls[0].Bounds, "AP1");
  429. Assert.AreEqual (new Rectangle (82, 3, 50, 50), p.Controls[1].Bounds, "AP2");
  430. Assert.AreEqual (new Rectangle (24, 7, 50, 50), p.Controls[2].Bounds, "AP3");
  431. Assert.AreEqual (new Rectangle (146, 64, 50, 50), p.Controls[3].Bounds, "AP4");
  432. }
  433. [Test]
  434. public void RightToLeftLayoutTest15 ()
  435. {
  436. // Margins and Different Sizes
  437. FlowLayoutPanel p = new FlowLayoutPanel ();
  438. p.FlowDirection = FlowDirection.RightToLeft;
  439. p.Controls.Add (CreateButton (25, 45, false, DockStyle.None, new Padding (6), AnchorStyles.Left | AnchorStyles.Top));
  440. p.Controls.Add (CreateButton (60, 20, false, DockStyle.None, new Padding (9), AnchorStyles.Left | AnchorStyles.Top));
  441. p.Controls.Add (CreateButton (15, 85, false, DockStyle.None, new Padding (2), AnchorStyles.Left | AnchorStyles.Top));
  442. p.Controls.Add (CreateButton (50, 20, false, DockStyle.None, new Padding (4), AnchorStyles.Left | AnchorStyles.Top));
  443. Assert.AreEqual (new Rectangle (169, 6, 25, 45), p.Controls[0].Bounds, "AQ1");
  444. Assert.AreEqual (new Rectangle (94, 9, 60, 20), p.Controls[1].Bounds, "AQ2");
  445. Assert.AreEqual (new Rectangle (68, 2, 15, 85), p.Controls[2].Bounds, "AQ3");
  446. Assert.AreEqual (new Rectangle (12, 4, 50, 20), p.Controls[3].Bounds, "AQ4");
  447. }
  448. [Test]
  449. public void RightToLeftLayoutTest16 ()
  450. {
  451. // Random Complex Layout 1
  452. FlowLayoutPanel p = new FlowLayoutPanel ();
  453. p.FlowDirection = FlowDirection.RightToLeft;
  454. p.Controls.Add (CreateButton (25, 45, false, DockStyle.None, new Padding (6), AnchorStyles.Right | AnchorStyles.Top));
  455. p.Controls.Add (CreateButton (60, 20, false, DockStyle.Fill, new Padding (9), AnchorStyles.Bottom | AnchorStyles.Top));
  456. p.Controls.Add (CreateButton (15, 85, false, DockStyle.None, new Padding (2), AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Bottom));
  457. p.Controls.Add (CreateButton (50, 20, false, DockStyle.None, new Padding (4), AnchorStyles.Left | AnchorStyles.Bottom));
  458. p.Controls.Add (CreateButton (13, 22, false, DockStyle.None, new Padding (12), AnchorStyles.Left | AnchorStyles.Right));
  459. p.Controls.Add (CreateButton (73, 28, false, DockStyle.Top, new Padding (6), AnchorStyles.None));
  460. Assert.AreEqual (new Rectangle (169, 6, 25, 45), p.Controls[0].Bounds, "AR1");
  461. Assert.AreEqual (new Rectangle (94, 9, 60, 39), p.Controls[1].Bounds, "AR2");
  462. Assert.AreEqual (new Rectangle (68, 2, 15, 53), p.Controls[2].Bounds, "AR3");
  463. Assert.AreEqual (new Rectangle (12, 33, 50, 20), p.Controls[3].Bounds, "AR4");
  464. Assert.AreEqual (new Rectangle (175, 69, 13, 22), p.Controls[4].Bounds, "AR5");
  465. Assert.AreEqual (new Rectangle (84, 63, 73, 28), p.Controls[5].Bounds, "AR6");
  466. }
  467. [Test]
  468. public void RightToLeftLayoutTest17 ()
  469. {
  470. // Random Complex Layout 2
  471. FlowLayoutPanel p = new FlowLayoutPanel ();
  472. p.FlowDirection = FlowDirection.RightToLeft;
  473. p.Controls.Add (CreateButton (12, 345, false, DockStyle.Bottom, new Padding (1, 2, 3, 4), AnchorStyles.Left | AnchorStyles.Top));
  474. p.Controls.Add (CreateButton (9, 44, false, DockStyle.Top, new Padding (6, 3, 2, 7), AnchorStyles.Right | AnchorStyles.Top));
  475. p.Controls.Add (CreateButton (78, 14, false, DockStyle.None, new Padding (5, 1, 2, 4), AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right));
  476. p.Controls.Add (CreateButton (21, 64, false, DockStyle.Top, new Padding (3, 3, 3, 1), AnchorStyles.None));
  477. p.Controls.Add (CreateButton (14, 14, false, DockStyle.Fill, new Padding (11, 4, 6, 3), AnchorStyles.Top | AnchorStyles.Bottom));
  478. p.Controls.Add (CreateButton (132, 6, false, DockStyle.Fill, new Padding (5, 5, 4, 5), AnchorStyles.Top | AnchorStyles.Bottom));
  479. p.SetFlowBreak (p.Controls[0], true);
  480. p.SetFlowBreak (p.Controls[2], true);
  481. Assert.AreEqual (new Rectangle (185, 2, 12, 345), p.Controls[0].Bounds, "AS1");
  482. Assert.AreEqual (new Rectangle (189, 354, 9, 44), p.Controls[1].Bounds, "AS2");
  483. Assert.AreEqual (new Rectangle (103, 352, 78, 49), p.Controls[2].Bounds, "AS3");
  484. Assert.AreEqual (new Rectangle (176, 408, 21, 64), p.Controls[3].Bounds, "AS4");
  485. Assert.AreEqual (new Rectangle (153, 409, 14, 61), p.Controls[4].Bounds, "AS5");
  486. Assert.AreEqual (new Rectangle (6, 410, 132, 58), p.Controls[5].Bounds, "AS6");
  487. }
  488. [Test]
  489. public void RightToLeftLayoutTest18 ()
  490. {
  491. // SetFlowBreak has no effect when WrapContents = false
  492. FlowLayoutPanel p = new FlowLayoutPanel ();
  493. p.WrapContents = false;
  494. p.FlowDirection = FlowDirection.RightToLeft;
  495. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  496. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  497. p.SetFlowBreak (p.Controls[0], true);
  498. Assert.AreEqual (new Rectangle (100, 0, 100, 100), p.Controls[0].Bounds, "AT1");
  499. Assert.AreEqual (new Rectangle (0, 0, 100, 100), p.Controls[1].Bounds, "AT2");
  500. }
  501. #endregion
  502. #region TopDown Tests
  503. [Test]
  504. public void TopDownLayoutTest1 ()
  505. {
  506. // 2 Normal Buttons
  507. FlowLayoutPanel p = new FlowLayoutPanel ();
  508. p.Size = new Size (100, 200);
  509. p.FlowDirection = FlowDirection.TopDown;
  510. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  511. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  512. Assert.AreEqual (new Rectangle (0, 0, 100, 100), p.Controls[0].Bounds, "BC1");
  513. Assert.AreEqual (new Rectangle (0, 100, 100, 100), p.Controls[1].Bounds, "BC2");
  514. }
  515. [Test]
  516. public void TopDownLayoutTest2 ()
  517. {
  518. // Dock Fill and Normal
  519. FlowLayoutPanel p = new FlowLayoutPanel ();
  520. p.Size = new Size (100, 200);
  521. p.FlowDirection = FlowDirection.TopDown;
  522. p.Controls.Add (CreateButton (50, 100, false, DockStyle.Fill, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  523. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  524. Assert.AreEqual (new Rectangle (0, 0, 100, 100), p.Controls[0].Bounds, "BD1");
  525. Assert.AreEqual (new Rectangle (0, 100, 100, 100), p.Controls[1].Bounds, "BD2");
  526. }
  527. [Test]
  528. public void TopDownLayoutTest3 ()
  529. {
  530. // Anchored: Left/Right and Normal
  531. FlowLayoutPanel p = new FlowLayoutPanel ();
  532. p.Size = new Size (100, 200);
  533. p.FlowDirection = FlowDirection.TopDown;
  534. p.Controls.Add (CreateButton (50, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Right));
  535. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  536. Assert.AreEqual (new Rectangle (0, 0, 100, 100), p.Controls[0].Bounds, "BE1");
  537. Assert.AreEqual (new Rectangle (0, 100, 100, 100), p.Controls[1].Bounds, "BE2");
  538. }
  539. [Test]
  540. public void TopDownLayoutTest4 ()
  541. {
  542. // Anchored: Left/Right and Dock Fill
  543. FlowLayoutPanel p = new FlowLayoutPanel ();
  544. p.Size = new Size (100, 200);
  545. p.FlowDirection = FlowDirection.TopDown;
  546. p.Controls.Add (CreateButton (50, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Right));
  547. p.Controls.Add (CreateButton (100, 100, false, DockStyle.Fill, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  548. Assert.AreEqual (new Rectangle (0, 0, 0, 100), p.Controls[0].Bounds, "BF1");
  549. Assert.AreEqual (new Rectangle (0, 100, 0, 100), p.Controls[1].Bounds, "BF2");
  550. }
  551. [Test]
  552. public void TopDownLayoutTest5 ()
  553. {
  554. // 2 Anchored: Left/Right
  555. FlowLayoutPanel p = new FlowLayoutPanel ();
  556. p.Size = new Size (100, 200);
  557. p.FlowDirection = FlowDirection.TopDown;
  558. p.Controls.Add (CreateButton (50, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Right));
  559. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Right));
  560. Assert.AreEqual (new Rectangle (0, 0, 0, 100), p.Controls[0].Bounds, "BG1");
  561. Assert.AreEqual (new Rectangle (0, 100, 0, 100), p.Controls[1].Bounds, "BG2");
  562. }
  563. [Test]
  564. public void TopDownLayoutTest6 ()
  565. {
  566. // 2 Dock Fill
  567. FlowLayoutPanel p = new FlowLayoutPanel ();
  568. p.Size = new Size (100, 200);
  569. p.FlowDirection = FlowDirection.TopDown;
  570. p.Controls.Add (CreateButton (50, 100, false, DockStyle.Fill, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  571. p.Controls.Add (CreateButton (100, 100, false, DockStyle.Fill, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  572. Assert.AreEqual (new Rectangle (0, 0, 0, 100), p.Controls[0].Bounds, "BH1");
  573. Assert.AreEqual (new Rectangle (0, 100, 0, 100), p.Controls[1].Bounds, "BH2");
  574. }
  575. [Test]
  576. public void TopDownLayoutTest7 ()
  577. {
  578. // Dock Left
  579. FlowLayoutPanel p = new FlowLayoutPanel ();
  580. p.Size = new Size (100, 200);
  581. p.FlowDirection = FlowDirection.TopDown;
  582. p.Controls.Add (CreateButton (50, 100, false, DockStyle.Left, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  583. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  584. Assert.AreEqual (new Rectangle (0, 0, 50, 100), p.Controls[0].Bounds, "BI1");
  585. Assert.AreEqual (new Rectangle (0, 100, 100, 100), p.Controls[1].Bounds, "BI2");
  586. }
  587. [Test]
  588. public void TopDownLayoutTest8 ()
  589. {
  590. // Dock Right
  591. FlowLayoutPanel p = new FlowLayoutPanel ();
  592. p.Size = new Size (100, 200);
  593. p.FlowDirection = FlowDirection.TopDown;
  594. p.Controls.Add (CreateButton (50, 100, false, DockStyle.Right, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  595. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  596. Assert.AreEqual (new Rectangle (50, 0, 50, 100), p.Controls[0].Bounds, "BJ1");
  597. Assert.AreEqual (new Rectangle (0, 100, 100, 100), p.Controls[1].Bounds, "BJ2");
  598. }
  599. [Test]
  600. public void TopDownLayoutTest9 ()
  601. {
  602. // Anchor Right
  603. FlowLayoutPanel p = new FlowLayoutPanel ();
  604. p.Size = new Size (100, 200);
  605. p.FlowDirection = FlowDirection.TopDown;
  606. p.Controls.Add (CreateButton (50, 100, false, DockStyle.None, new Padding (), AnchorStyles.Top | AnchorStyles.Right));
  607. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Top | AnchorStyles.Left));
  608. Assert.AreEqual (new Rectangle (50, 0, 50, 100), p.Controls[0].Bounds, "BK1");
  609. Assert.AreEqual (new Rectangle (0, 100, 100, 100), p.Controls[1].Bounds, "BK2");
  610. }
  611. [Test]
  612. public void TopDownLayoutTest10 ()
  613. {
  614. // No Dock or Anchor
  615. FlowLayoutPanel p = new FlowLayoutPanel ();
  616. p.Size = new Size (100, 200);
  617. p.FlowDirection = FlowDirection.TopDown;
  618. p.Controls.Add (CreateButton (50, 100, false, DockStyle.None, new Padding (), AnchorStyles.None));
  619. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  620. Assert.AreEqual (new Rectangle (25, 0, 50, 100), p.Controls[0].Bounds, "BL1");
  621. Assert.AreEqual (new Rectangle (0, 100, 100, 100), p.Controls[1].Bounds, "BL2");
  622. }
  623. [Test]
  624. public void TopDownLayoutTest11 ()
  625. {
  626. // WrapContents = true
  627. FlowLayoutPanel p = new FlowLayoutPanel ();
  628. p.Size = new Size (100, 200);
  629. p.FlowDirection = FlowDirection.TopDown;
  630. p.Controls.Add (CreateButton (50, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  631. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  632. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  633. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  634. Assert.AreEqual (new Rectangle (0, 0, 50, 100), p.Controls[0].Bounds, "BM1");
  635. Assert.AreEqual (new Rectangle (0, 100, 100, 100), p.Controls[1].Bounds, "BM2");
  636. Assert.AreEqual (new Rectangle (100, 0, 100, 100), p.Controls[2].Bounds, "BM3");
  637. Assert.AreEqual (new Rectangle (100, 100, 100, 100), p.Controls[3].Bounds, "BM4");
  638. }
  639. [Test]
  640. public void TopDownLayoutTest12 ()
  641. {
  642. // WrapContents = false
  643. FlowLayoutPanel p = new FlowLayoutPanel ();
  644. p.Size = new Size (100, 200);
  645. p.WrapContents = false;
  646. p.FlowDirection = FlowDirection.TopDown;
  647. p.Controls.Add (CreateButton (50, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  648. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  649. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  650. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  651. Assert.AreEqual (new Rectangle (0, 0, 50, 100), p.Controls[0].Bounds, "BN1");
  652. Assert.AreEqual (new Rectangle (0, 100, 100, 100), p.Controls[1].Bounds, "BN2");
  653. Assert.AreEqual (new Rectangle (0, 200, 100, 100), p.Controls[2].Bounds, "BN3");
  654. Assert.AreEqual (new Rectangle (0, 300, 100, 100), p.Controls[3].Bounds, "BN4");
  655. }
  656. [Test]
  657. public void TopDownLayoutTest13 ()
  658. {
  659. // SetFlowBreak 1, 3
  660. FlowLayoutPanel p = new FlowLayoutPanel ();
  661. p.Size = new Size (100, 200);
  662. p.FlowDirection = FlowDirection.TopDown;
  663. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  664. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  665. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  666. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  667. p.SetFlowBreak (p.Controls[0], true);
  668. p.SetFlowBreak (p.Controls[2], true);
  669. Assert.AreEqual (new Rectangle (0, 0, 100, 100), p.Controls[0].Bounds, "BO1");
  670. Assert.AreEqual (new Rectangle (100, 0, 100, 100), p.Controls[1].Bounds, "BO2");
  671. Assert.AreEqual (new Rectangle (100, 100, 100, 100), p.Controls[2].Bounds, "BO3");
  672. Assert.AreEqual (new Rectangle (200, 0, 100, 100), p.Controls[3].Bounds, "BO4");
  673. }
  674. [Test]
  675. public void TopDownLayoutTest14 ()
  676. {
  677. // Margins
  678. FlowLayoutPanel p = new FlowLayoutPanel ();
  679. p.Size = new Size (100, 200);
  680. p.FlowDirection = FlowDirection.TopDown;
  681. p.Controls.Add (CreateButton (50, 50, false, DockStyle.None, new Padding (1, 3, 5, 2), AnchorStyles.Left | AnchorStyles.Top));
  682. p.Controls.Add (CreateButton (50, 50, false, DockStyle.None, new Padding (7, 3, 12, 5), AnchorStyles.Left | AnchorStyles.Top));
  683. p.Controls.Add (CreateButton (50, 50, false, DockStyle.None, new Padding (14, 7, 1, 3), AnchorStyles.Left | AnchorStyles.Top));
  684. p.Controls.Add (CreateButton (50, 50, false, DockStyle.None, new Padding (4), AnchorStyles.Left | AnchorStyles.Top));
  685. Assert.AreEqual (new Rectangle (1, 3, 50, 50), p.Controls[0].Bounds, "BP1");
  686. Assert.AreEqual (new Rectangle (7, 58, 50, 50), p.Controls[1].Bounds, "BP2");
  687. Assert.AreEqual (new Rectangle (14, 120, 50, 50), p.Controls[2].Bounds, "BP3");
  688. Assert.AreEqual (new Rectangle (73, 4, 50, 50), p.Controls[3].Bounds, "BP4");
  689. }
  690. [Test]
  691. public void TopDownLayoutTest15 ()
  692. {
  693. // Margins and Different Sizes
  694. FlowLayoutPanel p = new FlowLayoutPanel ();
  695. p.Size = new Size (100, 200);
  696. p.FlowDirection = FlowDirection.TopDown;
  697. p.Controls.Add (CreateButton (25, 45, false, DockStyle.None, new Padding (6), AnchorStyles.Left | AnchorStyles.Top));
  698. p.Controls.Add (CreateButton (60, 20, false, DockStyle.None, new Padding (9), AnchorStyles.Left | AnchorStyles.Top));
  699. p.Controls.Add (CreateButton (15, 85, false, DockStyle.None, new Padding (2), AnchorStyles.Left | AnchorStyles.Top));
  700. p.Controls.Add (CreateButton (50, 20, false, DockStyle.None, new Padding (4), AnchorStyles.Left | AnchorStyles.Top));
  701. Assert.AreEqual (new Rectangle (6, 6, 25, 45), p.Controls[0].Bounds, "BQ1");
  702. Assert.AreEqual (new Rectangle (9, 66, 60, 20), p.Controls[1].Bounds, "BQ2");
  703. Assert.AreEqual (new Rectangle (2, 97, 15, 85), p.Controls[2].Bounds, "BQ3");
  704. Assert.AreEqual (new Rectangle (82, 4, 50, 20), p.Controls[3].Bounds, "BQ4");
  705. }
  706. [Test]
  707. public void TopDownLayoutTest16 ()
  708. {
  709. // Random Complex Layout 1
  710. FlowLayoutPanel p = new FlowLayoutPanel ();
  711. p.Size = new Size (100, 200);
  712. p.FlowDirection = FlowDirection.TopDown;
  713. p.Controls.Add (CreateButton (25, 45, false, DockStyle.None, new Padding (6), AnchorStyles.Right | AnchorStyles.Top));
  714. p.Controls.Add (CreateButton (60, 20, false, DockStyle.Fill, new Padding (9), AnchorStyles.Bottom | AnchorStyles.Top));
  715. p.Controls.Add (CreateButton (15, 85, false, DockStyle.None, new Padding (2), AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Bottom));
  716. p.Controls.Add (CreateButton (50, 20, false, DockStyle.None, new Padding (4), AnchorStyles.Left | AnchorStyles.Bottom));
  717. p.Controls.Add (CreateButton (13, 22, false, DockStyle.None, new Padding (12), AnchorStyles.Left | AnchorStyles.Right));
  718. p.Controls.Add (CreateButton (73, 28, false, DockStyle.Left, new Padding (6), AnchorStyles.None));
  719. Assert.AreEqual (new Rectangle (6, 6, 25, 45), p.Controls[0].Bounds, "BR1");
  720. Assert.AreEqual (new Rectangle (9, 66, 19, 20), p.Controls[1].Bounds, "BR2");
  721. Assert.AreEqual (new Rectangle (2, 97, 15, 85), p.Controls[2].Bounds, "BR3");
  722. Assert.AreEqual (new Rectangle (41, 4, 50, 20), p.Controls[3].Bounds, "BR4");
  723. Assert.AreEqual (new Rectangle (49, 40, 61, 22), p.Controls[4].Bounds, "BR5");
  724. Assert.AreEqual (new Rectangle (43, 80, 73, 28), p.Controls[5].Bounds, "BR6");
  725. }
  726. [Test]
  727. public void TopDownLayoutTest17 ()
  728. {
  729. // Random Complex Layout 2
  730. FlowLayoutPanel p = new FlowLayoutPanel ();
  731. p.Size = new Size (100, 200);
  732. p.FlowDirection = FlowDirection.TopDown;
  733. p.Controls.Add (CreateButton (12, 345, false, DockStyle.Right, new Padding (1, 2, 3, 4), AnchorStyles.Left | AnchorStyles.Top));
  734. p.Controls.Add (CreateButton (9, 44, false, DockStyle.Left, new Padding (6, 3, 2, 7), AnchorStyles.Right | AnchorStyles.Top));
  735. p.Controls.Add (CreateButton (78, 14, false, DockStyle.None, new Padding (5, 1, 2, 4), AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right));
  736. p.Controls.Add (CreateButton (21, 64, false, DockStyle.Left, new Padding (3, 3, 3, 1), AnchorStyles.None));
  737. p.Controls.Add (CreateButton (14, 14, false, DockStyle.Fill, new Padding (11, 4, 6, 3), AnchorStyles.Left | AnchorStyles.Right));
  738. p.Controls.Add (CreateButton (132, 6, false, DockStyle.Fill, new Padding (5, 5, 4, 5), AnchorStyles.Left | AnchorStyles.Right));
  739. p.SetFlowBreak (p.Controls[0], true);
  740. p.SetFlowBreak (p.Controls[2], true);
  741. Assert.AreEqual (new Rectangle (1, 2, 12, 345), p.Controls[0].Bounds, "BS1");
  742. Assert.AreEqual (new Rectangle (22, 3, 9, 44), p.Controls[1].Bounds, "BS2");
  743. Assert.AreEqual (new Rectangle (21, 55, 10, 14), p.Controls[2].Bounds, "BS3");
  744. Assert.AreEqual (new Rectangle (36, 3, 21, 64), p.Controls[3].Bounds, "BS4");
  745. Assert.AreEqual (new Rectangle (44, 72, 10, 14), p.Controls[4].Bounds, "BS5");
  746. Assert.AreEqual (new Rectangle (38, 94, 18, 6), p.Controls[5].Bounds, "BS6");
  747. }
  748. [Test]
  749. public void TopDownLayoutTest18 ()
  750. {
  751. // SetFlowBreak has no effect when WrapContents = false
  752. FlowLayoutPanel p = new FlowLayoutPanel ();
  753. p.Size = new Size (100, 200);
  754. p.WrapContents = false;
  755. p.FlowDirection = FlowDirection.TopDown;
  756. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  757. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  758. p.SetFlowBreak (p.Controls[0], true);
  759. Assert.AreEqual (new Rectangle (0, 0, 100, 100), p.Controls[0].Bounds, "BT1");
  760. Assert.AreEqual (new Rectangle (0, 100, 100, 100), p.Controls[1].Bounds, "BT2");
  761. }
  762. #endregion
  763. #region BottomUp Tests
  764. [Test]
  765. public void BottomUpLayoutTest1 ()
  766. {
  767. // 2 Normal Buttons
  768. FlowLayoutPanel p = new FlowLayoutPanel ();
  769. p.Size = new Size (100, 200);
  770. p.FlowDirection = FlowDirection.BottomUp;
  771. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  772. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  773. Assert.AreEqual (new Rectangle (0, 100, 100, 100), p.Controls[0].Bounds, "CC1");
  774. Assert.AreEqual (new Rectangle (0, 0, 100, 100), p.Controls[1].Bounds, "CC2");
  775. }
  776. [Test]
  777. public void BottomUpLayoutTest2 ()
  778. {
  779. // Dock Fill and Normal
  780. FlowLayoutPanel p = new FlowLayoutPanel ();
  781. p.Size = new Size (100, 200);
  782. p.FlowDirection = FlowDirection.BottomUp;
  783. p.Controls.Add (CreateButton (50, 100, false, DockStyle.Fill, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  784. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  785. Assert.AreEqual (new Rectangle (0, 100, 100, 100), p.Controls[0].Bounds, "CD1");
  786. Assert.AreEqual (new Rectangle (0, 0, 100, 100), p.Controls[1].Bounds, "CD2");
  787. }
  788. [Test]
  789. public void BottomUpLayoutTest3 ()
  790. {
  791. // Anchored: Left/Right and Normal
  792. FlowLayoutPanel p = new FlowLayoutPanel ();
  793. p.Size = new Size (100, 200);
  794. p.FlowDirection = FlowDirection.BottomUp;
  795. p.Controls.Add (CreateButton (50, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Right));
  796. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  797. Assert.AreEqual (new Rectangle (0, 100, 100, 100), p.Controls[0].Bounds, "CE1");
  798. Assert.AreEqual (new Rectangle (0, 0, 100, 100), p.Controls[1].Bounds, "CE2");
  799. }
  800. [Test]
  801. public void BottomUpLayoutTest4 ()
  802. {
  803. // Anchored: Left/Right and Dock Fill
  804. FlowLayoutPanel p = new FlowLayoutPanel ();
  805. p.Size = new Size (100, 200);
  806. p.FlowDirection = FlowDirection.BottomUp;
  807. p.Controls.Add (CreateButton (50, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Right));
  808. p.Controls.Add (CreateButton (100, 100, false, DockStyle.Fill, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  809. Assert.AreEqual (new Rectangle (0, 100, 0, 100), p.Controls[0].Bounds, "CF1");
  810. Assert.AreEqual (new Rectangle (0, 0, 0, 100), p.Controls[1].Bounds, "CF2");
  811. }
  812. [Test]
  813. public void BottomUpLayoutTest5 ()
  814. {
  815. // 2 Anchored: Left/Right
  816. FlowLayoutPanel p = new FlowLayoutPanel ();
  817. p.Size = new Size (100, 200);
  818. p.FlowDirection = FlowDirection.BottomUp;
  819. p.Controls.Add (CreateButton (50, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Right));
  820. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Right));
  821. Assert.AreEqual (new Rectangle (0, 100, 0, 100), p.Controls[0].Bounds, "CG1");
  822. Assert.AreEqual (new Rectangle (0, 0, 0, 100), p.Controls[1].Bounds, "CG2");
  823. }
  824. [Test]
  825. public void BottomUpLayoutTest6 ()
  826. {
  827. // 2 Dock Fill
  828. FlowLayoutPanel p = new FlowLayoutPanel ();
  829. p.Size = new Size (100, 200);
  830. p.FlowDirection = FlowDirection.BottomUp;
  831. p.Controls.Add (CreateButton (50, 100, false, DockStyle.Fill, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  832. p.Controls.Add (CreateButton (100, 100, false, DockStyle.Fill, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  833. Assert.AreEqual (new Rectangle (0, 100, 0, 100), p.Controls[0].Bounds, "CH1");
  834. Assert.AreEqual (new Rectangle (0, 0, 0, 100), p.Controls[1].Bounds, "CH2");
  835. }
  836. [Test]
  837. public void BottomUpLayoutTest7 ()
  838. {
  839. // Dock Left
  840. FlowLayoutPanel p = new FlowLayoutPanel ();
  841. p.Size = new Size (100, 200);
  842. p.FlowDirection = FlowDirection.BottomUp;
  843. p.Controls.Add (CreateButton (50, 100, false, DockStyle.Left, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  844. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  845. Assert.AreEqual (new Rectangle (0, 100, 50, 100), p.Controls[0].Bounds, "CI1");
  846. Assert.AreEqual (new Rectangle (0, 0, 100, 100), p.Controls[1].Bounds, "CI2");
  847. }
  848. [Test]
  849. public void BottomUpLayoutTest8 ()
  850. {
  851. // Dock Right
  852. FlowLayoutPanel p = new FlowLayoutPanel ();
  853. p.Size = new Size (100, 200);
  854. p.FlowDirection = FlowDirection.BottomUp;
  855. p.Controls.Add (CreateButton (50, 100, false, DockStyle.Right, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  856. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  857. Assert.AreEqual (new Rectangle (50, 100, 50, 100), p.Controls[0].Bounds, "CJ1");
  858. Assert.AreEqual (new Rectangle (0, 0, 100, 100), p.Controls[1].Bounds, "CJ2");
  859. }
  860. [Test]
  861. public void BottomUpLayoutTest9 ()
  862. {
  863. // Anchor Right
  864. FlowLayoutPanel p = new FlowLayoutPanel ();
  865. p.Size = new Size (100, 200);
  866. p.FlowDirection = FlowDirection.BottomUp;
  867. p.Controls.Add (CreateButton (50, 100, false, DockStyle.None, new Padding (), AnchorStyles.Top | AnchorStyles.Right));
  868. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Top | AnchorStyles.Left));
  869. Assert.AreEqual (new Rectangle (50, 100, 50, 100), p.Controls[0].Bounds, "CK1");
  870. Assert.AreEqual (new Rectangle (0, 0, 100, 100), p.Controls[1].Bounds, "CK2");
  871. }
  872. [Test]
  873. public void BottomUpLayoutTest10 ()
  874. {
  875. // No Dock or Anchor
  876. FlowLayoutPanel p = new FlowLayoutPanel ();
  877. p.Size = new Size (100, 200);
  878. p.FlowDirection = FlowDirection.BottomUp;
  879. p.Controls.Add (CreateButton (50, 100, false, DockStyle.None, new Padding (), AnchorStyles.None));
  880. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  881. Assert.AreEqual (new Rectangle (25, 100, 50, 100), p.Controls[0].Bounds, "CL1");
  882. Assert.AreEqual (new Rectangle (0, 0, 100, 100), p.Controls[1].Bounds, "CL2");
  883. }
  884. [Test]
  885. public void BottomUpLayoutTest11 ()
  886. {
  887. // WrapContents = true
  888. FlowLayoutPanel p = new FlowLayoutPanel ();
  889. p.Size = new Size (100, 200);
  890. p.FlowDirection = FlowDirection.BottomUp;
  891. p.Controls.Add (CreateButton (50, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  892. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  893. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  894. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  895. Assert.AreEqual (new Rectangle (0, 100, 50, 100), p.Controls[0].Bounds, "CM1");
  896. Assert.AreEqual (new Rectangle (0, 0, 100, 100), p.Controls[1].Bounds, "CM2");
  897. Assert.AreEqual (new Rectangle (100, 100, 100, 100), p.Controls[2].Bounds, "CM3");
  898. Assert.AreEqual (new Rectangle (100, 0, 100, 100), p.Controls[3].Bounds, "CM4");
  899. }
  900. [Test]
  901. public void BottomUpLayoutTest12 ()
  902. {
  903. // WrapContents = false
  904. FlowLayoutPanel p = new FlowLayoutPanel ();
  905. p.Size = new Size (100, 200);
  906. p.WrapContents = false;
  907. p.FlowDirection = FlowDirection.BottomUp;
  908. p.Controls.Add (CreateButton (50, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  909. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  910. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  911. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  912. Assert.AreEqual (new Rectangle (0, 100, 50, 100), p.Controls[0].Bounds, "CN1");
  913. Assert.AreEqual (new Rectangle (0, 0, 100, 100), p.Controls[1].Bounds, "CN2");
  914. Assert.AreEqual (new Rectangle (0, -100, 100, 100), p.Controls[2].Bounds, "CN3");
  915. Assert.AreEqual (new Rectangle (0, -200, 100, 100), p.Controls[3].Bounds, "CN4");
  916. }
  917. [Test]
  918. public void BottomUpLayoutTest13 ()
  919. {
  920. // SetFlowBreak 1, 3
  921. FlowLayoutPanel p = new FlowLayoutPanel ();
  922. p.Size = new Size (100, 200);
  923. p.FlowDirection = FlowDirection.BottomUp;
  924. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  925. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  926. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  927. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  928. p.SetFlowBreak (p.Controls[0], true);
  929. p.SetFlowBreak (p.Controls[2], true);
  930. Assert.AreEqual (new Rectangle (0, 100, 100, 100), p.Controls[0].Bounds, "CO1");
  931. Assert.AreEqual (new Rectangle (100, 100, 100, 100), p.Controls[1].Bounds, "CO2");
  932. Assert.AreEqual (new Rectangle (100, 0, 100, 100), p.Controls[2].Bounds, "CO3");
  933. Assert.AreEqual (new Rectangle (200, 100, 100, 100), p.Controls[3].Bounds, "CO4");
  934. }
  935. [Test]
  936. public void BottomUpLayoutTest14 ()
  937. {
  938. // Margins
  939. FlowLayoutPanel p = new FlowLayoutPanel ();
  940. p.Size = new Size (100, 200);
  941. p.FlowDirection = FlowDirection.BottomUp;
  942. p.Controls.Add (CreateButton (50, 50, false, DockStyle.None, new Padding (1, 3, 5, 2), AnchorStyles.Left | AnchorStyles.Top));
  943. p.Controls.Add (CreateButton (50, 50, false, DockStyle.None, new Padding (7, 3, 12, 5), AnchorStyles.Left | AnchorStyles.Top));
  944. p.Controls.Add (CreateButton (50, 50, false, DockStyle.None, new Padding (14, 7, 1, 3), AnchorStyles.Left | AnchorStyles.Top));
  945. p.Controls.Add (CreateButton (50, 50, false, DockStyle.None, new Padding (4), AnchorStyles.Left | AnchorStyles.Top));
  946. Assert.AreEqual (new Rectangle (1, 148, 50, 50), p.Controls[0].Bounds, "CP1");
  947. Assert.AreEqual (new Rectangle (7, 90, 50, 50), p.Controls[1].Bounds, "CP2");
  948. Assert.AreEqual (new Rectangle (14, 34, 50, 50), p.Controls[2].Bounds, "CP3");
  949. Assert.AreEqual (new Rectangle (73, 146, 50, 50), p.Controls[3].Bounds, "CP4");
  950. }
  951. [Test]
  952. public void BottomUpLayoutTest15 ()
  953. {
  954. // Margins and Different Sizes
  955. FlowLayoutPanel p = new FlowLayoutPanel ();
  956. p.Size = new Size (100, 200);
  957. p.FlowDirection = FlowDirection.BottomUp;
  958. p.Controls.Add (CreateButton (25, 45, false, DockStyle.None, new Padding (6), AnchorStyles.Left | AnchorStyles.Top));
  959. p.Controls.Add (CreateButton (60, 20, false, DockStyle.None, new Padding (9), AnchorStyles.Left | AnchorStyles.Top));
  960. p.Controls.Add (CreateButton (15, 85, false, DockStyle.None, new Padding (2), AnchorStyles.Left | AnchorStyles.Top));
  961. p.Controls.Add (CreateButton (50, 20, false, DockStyle.None, new Padding (4), AnchorStyles.Left | AnchorStyles.Top));
  962. Assert.AreEqual (new Rectangle (6, 149, 25, 45), p.Controls[0].Bounds, "CQ1");
  963. Assert.AreEqual (new Rectangle (9, 114, 60, 20), p.Controls[1].Bounds, "CQ2");
  964. Assert.AreEqual (new Rectangle (2, 18, 15, 85), p.Controls[2].Bounds, "CQ3");
  965. Assert.AreEqual (new Rectangle (82, 176, 50, 20), p.Controls[3].Bounds, "CQ4");
  966. }
  967. [Test]
  968. public void BottomUpLayoutTest16 ()
  969. {
  970. // Random Complex Layout 1
  971. FlowLayoutPanel p = new FlowLayoutPanel ();
  972. p.Size = new Size (100, 200);
  973. p.FlowDirection = FlowDirection.BottomUp;
  974. p.Controls.Add (CreateButton (25, 45, false, DockStyle.None, new Padding (6), AnchorStyles.Right | AnchorStyles.Top));
  975. p.Controls.Add (CreateButton (60, 20, false, DockStyle.Fill, new Padding (9), AnchorStyles.Bottom | AnchorStyles.Top));
  976. p.Controls.Add (CreateButton (15, 85, false, DockStyle.None, new Padding (2), AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Bottom));
  977. p.Controls.Add (CreateButton (50, 20, false, DockStyle.None, new Padding (4), AnchorStyles.Left | AnchorStyles.Bottom));
  978. p.Controls.Add (CreateButton (13, 22, false, DockStyle.None, new Padding (12), AnchorStyles.Left | AnchorStyles.Right));
  979. p.Controls.Add (CreateButton (73, 28, false, DockStyle.Left, new Padding (6), AnchorStyles.None));
  980. Assert.AreEqual (new Rectangle (6, 149, 25, 45), p.Controls[0].Bounds, "CR1");
  981. Assert.AreEqual (new Rectangle (9, 114, 19, 20), p.Controls[1].Bounds, "CR2");
  982. Assert.AreEqual (new Rectangle (2, 18, 15, 85), p.Controls[2].Bounds, "CR3");
  983. Assert.AreEqual (new Rectangle (41, 176, 50, 20), p.Controls[3].Bounds, "CR4");
  984. Assert.AreEqual (new Rectangle (49, 138, 61, 22), p.Controls[4].Bounds, "CR5");
  985. Assert.AreEqual (new Rectangle (43, 92, 73, 28), p.Controls[5].Bounds, "CR6");
  986. }
  987. [Test]
  988. public void BottomUpLayoutTest17 ()
  989. {
  990. // Random Complex Layout 2
  991. FlowLayoutPanel p = new FlowLayoutPanel ();
  992. p.Size = new Size (100, 200);
  993. p.FlowDirection = FlowDirection.BottomUp;
  994. p.Controls.Add (CreateButton (12, 345, false, DockStyle.Right, new Padding (1, 2, 3, 4), AnchorStyles.Left | AnchorStyles.Top));
  995. p.Controls.Add (CreateButton (9, 44, false, DockStyle.Left, new Padding (6, 3, 2, 7), AnchorStyles.Right | AnchorStyles.Top));
  996. p.Controls.Add (CreateButton (78, 14, false, DockStyle.None, new Padding (5, 1, 2, 4), AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right));
  997. p.Controls.Add (CreateButton (21, 64, false, DockStyle.Left, new Padding (3, 3, 3, 1), AnchorStyles.None));
  998. p.Controls.Add (CreateButton (14, 14, false, DockStyle.Fill, new Padding (11, 4, 6, 3), AnchorStyles.Left | AnchorStyles.Right));
  999. p.Controls.Add (CreateButton (132, 6, false, DockStyle.Fill, new Padding (5, 5, 4, 5), AnchorStyles.Left | AnchorStyles.Right));
  1000. p.SetFlowBreak (p.Controls[0], true);
  1001. p.SetFlowBreak (p.Controls[2], true);
  1002. Assert.AreEqual (new Rectangle (1, -149, 12, 345), p.Controls[0].Bounds, "CS1");
  1003. Assert.AreEqual (new Rectangle (22, 149, 9, 44), p.Controls[1].Bounds, "CS2");
  1004. Assert.AreEqual (new Rectangle (21, 128, 10, 14), p.Controls[2].Bounds, "CS3");
  1005. Assert.AreEqual (new Rectangle (36, 135, 21, 64), p.Controls[3].Bounds, "CS4");
  1006. Assert.AreEqual (new Rectangle (44, 115, 10, 14), p.Controls[4].Bounds, "CS5");
  1007. Assert.AreEqual (new Rectangle (38, 100, 18, 6), p.Controls[5].Bounds, "CS6");
  1008. }
  1009. [Test]
  1010. public void BottomUpLayoutTest18 ()
  1011. {
  1012. // SetFlowBreak has no effect when WrapContents = false
  1013. FlowLayoutPanel p = new FlowLayoutPanel ();
  1014. p.Size = new Size (100, 200);
  1015. p.WrapContents = false;
  1016. p.FlowDirection = FlowDirection.BottomUp;
  1017. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  1018. p.Controls.Add (CreateButton (100, 100, false, DockStyle.None, new Padding (), AnchorStyles.Left | AnchorStyles.Top));
  1019. p.SetFlowBreak (p.Controls[0], true);
  1020. Assert.AreEqual (new Rectangle (0, 100, 100, 100), p.Controls[0].Bounds, "CT1");
  1021. Assert.AreEqual (new Rectangle (0, 0, 100, 100), p.Controls[1].Bounds, "CT2");
  1022. }
  1023. #endregion
  1024. private Button CreateButton (int width, int height, bool autosize, DockStyle dock, Padding margin, AnchorStyles anchor)
  1025. {
  1026. Button b = new Button ();
  1027. b.Size = new Size(width, height);
  1028. b.AutoSize = autosize;
  1029. b.Anchor = anchor;
  1030. b.Dock = dock;
  1031. b.Margin = margin;
  1032. return b;
  1033. }
  1034. }
  1035. }
  1036. #endif