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