2005-09-22 Chris Toshok <toshok@ximian.com>
[mono.git] / mcs / class / Managed.Windows.Forms / Test / System.Windows.Forms / ControlTest.cs
1 //\r
2 // Copyright (c) 2005 Novell, Inc.\r
3 //\r
4 // Authors:\r
5 //      Ritvik Mayank (mritvik@novell.com)\r
6 //\r
7 \r
8 using System;\r
9 using System.Windows.Forms;\r
10 using System.Drawing;\r
11 using System.Threading;\r
12 using System.Reflection;\r
13 using System.Runtime.Remoting;\r
14 \r
15 using NUnit.Framework;\r
16 \r
17 namespace MWF.MonoTest\r
18 {\r
19         [TestFixture]
20         [Ignore ("This test has to be completly reviewed")]\r
21         public class ControlTest\r
22         {\r
23                 internal static void TestAccessibility(Control c, string Default, string Description, string Name, AccessibleRole Role) {\r
24                         Assert.AreEqual(false, c.AccessibilityObject == null, "Acc1");\r
25                         Assert.AreEqual(Default, c.AccessibleDefaultActionDescription, "Acc2");\r
26                         Assert.AreEqual(Description, c.AccessibleDescription, "Acc3");\r
27                         Assert.AreEqual(Name, c.AccessibleName, "Acc4");\r
28                         Assert.AreEqual(Role, c.AccessibleRole, "Acc5");\r
29                 }\r
30 \r
31                 [Test]\r
32                 public void PubPropTest()\r
33                 {\r
34                         Control c = new Control();\r
35 \r
36                         TestAccessibility(c, null, null, null, AccessibleRole.Default);\r
37 \r
38                         // A\r
39                         Assert.AreEqual(false, c.AllowDrop , "A1");\r
40                         Assert.AreEqual(AnchorStyles.Top | AnchorStyles.Left, c.Anchor, "A2");\r
41 \r
42                         // B\r
43                         Assert.AreEqual("Control", c.BackColor.Name , "B1");\r
44                         Assert.AreEqual(null, c.BackgroundImage, "B2");\r
45                         Assert.AreEqual(null, c.BindingContext, "B3");\r
46                         Assert.AreEqual(0, c.Bottom, "B4");\r
47                         Assert.AreEqual (new Rectangle (0,0, 0, 0) , c.Bounds , "B5");\r
48 \r
49                         // C\r
50                         Assert.AreEqual(false, c.CanFocus, "C1");\r
51                         Assert.AreEqual(true, c.CanSelect, "C2");\r
52                         Assert.AreEqual(false, c.Capture, "C3");\r
53                         Assert.AreEqual(true, c.CausesValidation, "C4");\r
54                         Assert.AreEqual (new Rectangle(0, 0, 0, 0) , c.ClientRectangle , "C5");\r
55                         Assert.AreEqual (new Size(0, 0), c.ClientSize , "C6");\r
56 \r
57                         string name = c.CompanyName;\r
58                         if (!name.Equals("Mono Project, Novell, Inc.") && !name.Equals("Microsoft Corporation")) {\r
59                                 Assert.Fail("CompanyName property does not match any accepted value - C7");\r
60                         }\r
61                         Assert.AreEqual(null, c.Container, "C8");\r
62                         Assert.AreEqual(false, c.ContainsFocus, "C9");\r
63                         Assert.AreEqual(null, c.ContextMenu, "C10");\r
64                         Assert.AreEqual(0, c.Controls.Count, "C11");\r
65                         Assert.AreEqual(true, c.Created, "C12");\r
66                         Assert.AreEqual(Cursors.Default, c.Cursor, "C13");\r
67 \r
68                         // D\r
69                         Assert.AreEqual(false, c.DataBindings == null, "D1");\r
70                         Assert.AreEqual("Control", Control.DefaultBackColor.Name, "D2");\r
71                         Assert.AreEqual("ControlText", Control.DefaultForeColor.Name, "D3");\r
72                         Assert.AreEqual(FontStyle.Regular, Control.DefaultFont.Style, "D4");\r
73                         Assert.AreEqual (new Rectangle(0, 0, 0, 0), c.DisplayRectangle , "D5");\r
74                         Assert.AreEqual(false, c.Disposing, "D6");\r
75                         Assert.AreEqual(DockStyle.None, c.Dock, "D7");\r
76 \r
77                         // E\r
78                         Assert.AreEqual(true, c.Enabled, "E1");\r
79 \r
80                         // F\r
81                         Assert.AreEqual(false, c.Focused, "F1");\r
82                         Assert.AreEqual(FontStyle.Regular, c.Font.Style, "F2");\r
83                         Assert.AreEqual(SystemColors.ControlText, c.ForeColor, "F3");\r
84 \r
85                         // G\r
86 \r
87                         // H\r
88                         Assert.AreEqual (((IWin32Window)c).Handle, c.Handle, "H1");\r
89                         Assert.AreEqual(false, c.HasChildren, "H2");\r
90                         Assert.AreEqual(0, c.Height, "H3");\r
91 \r
92                         // I\r
93                         Assert.AreEqual (ImeMode.NoControl, c.ImeMode, "I1");\r
94                         Assert.AreEqual(false, c.InvokeRequired, "I2");\r
95                         Assert.AreEqual(false, c.IsAccessible, "I3");\r
96                         Assert.AreEqual(false, c.IsDisposed, "I4");\r
97                         Assert.AreEqual(true, c.IsHandleCreated, "I5");\r
98 \r
99                         // J\r
100 \r
101                         // K\r
102 \r
103                         // L\r
104                         Assert.AreEqual(0, c.Left, "L1");\r
105                         Assert.AreEqual(Point.Empty, c.Location, "L2");\r
106 \r
107                         // M\r
108                         Assert.AreEqual(Keys.None, Control.ModifierKeys, "M1");\r
109                         Assert.AreEqual(false, Control.MousePosition.IsEmpty, "M2");\r
110                         Assert.AreEqual(MouseButtons.None, Control.MouseButtons, "M3");\r
111 \r
112                         // N\r
113                         Assert.AreEqual("", c.Name, "N1");\r
114 \r
115                         // O\r
116 \r
117                         // P\r
118                         Assert.AreEqual(null, c.Parent, "P1");\r
119                         name = c.ProductName;\r
120                         if (!name.Equals("Novell Mono MWF") && !name.Equals("Microsoft (R) .NET Framework"))\r
121                                 Assert.Fail("ProductName property does not match any accepted value - P2");\r
122 \r
123                         name = c.ProductVersion;\r
124                         if (!name.Equals("1.1.4322.2032")) {\r
125                                 Assert.Fail("This test is being run against the wrong framework version.\nExpected is Net 1.1sp1. - P3");\r
126                         }\r
127 \r
128                         // R\r
129                         Assert.AreEqual(false, c.RecreatingHandle, "R1");\r
130                         Assert.AreEqual(null, c.Region, "R2");\r
131                         Assert.AreEqual(0, c.Right, "R3");\r
132                         Assert.AreEqual(RightToLeft.No, c.RightToLeft, "R4");\r
133 \r
134                         // S\r
135                         Assert.AreEqual(null, c.Site, "S1");\r
136                         Assert.AreEqual (new Size(0, 0), c.Size, "S2");\r
137 \r
138                         // T\r
139                         Assert.AreEqual(0, c.TabIndex , "T1");\r
140                         Assert.AreEqual(true, c.TabStop, "T2");\r
141                         Assert.AreEqual(null, c.Tag, "T3");\r
142                         Assert.AreEqual("", c.Text, "T4");\r
143                         Assert.AreEqual(0, c.Top, "T5");\r
144                         Assert.AreEqual(null, c.TopLevelControl, "T6");\r
145 \r
146                         // U\r
147 \r
148                         // V\r
149                         Assert.AreEqual(true, c.Visible, "V1");\r
150 \r
151                         // W\r
152                         Assert.AreEqual(0, c.Width, "W1");\r
153 \r
154                         // XYZ\r
155                 }\r
156 \r
157                 [Test]\r
158                 public void RelationTest() {\r
159                         Control c1;\r
160                         Control c2;\r
161 \r
162                         c1 = new Control();\r
163                         c2 = new Control();\r
164 \r
165                         Assert.AreEqual(true , c1.Visible , "Rel1");\r
166                         Assert.AreEqual(false, c1.Contains(c2) , "Rel2");\r
167                         Assert.AreEqual("System.Windows.Forms.Control", c1.ToString() , "Rel3");\r
168 \r
169                         c1.Controls.Add(c2);\r
170                         Assert.AreEqual(true , c2.Visible , "Rel4");\r
171                         Assert.AreEqual(true, c1.Contains(c2) , "Rel5");\r
172 \r
173                         c1.Anchor = AnchorStyles.Top;\r
174                         c1.SuspendLayout ();\r
175                         c1.Anchor = AnchorStyles.Left ;\r
176                         c1.ResumeLayout ();\r
177                         Assert.AreEqual(AnchorStyles.Left , c1.Anchor, "Rel6");\r
178 \r
179                         c1.SetBounds(10, 20, 30, 40) ;\r
180                         Assert.AreEqual(new Rectangle(10, 20, 30, 40), c1.Bounds, "Rel7");\r
181 \r
182                         Assert.AreEqual(c1, c2.Parent, "Rel8");\r
183                 }\r
184 \r
185                 private string TestControl(Control container, Control start, bool forward) {\r
186                         Control ctl;\r
187 \r
188                         ctl = container.GetNextControl(start, forward);\r
189 \r
190                         if (ctl == null) {\r
191                                 return null;\r
192                         }\r
193 \r
194                         return ctl.Text;\r
195                 }\r
196 \r
197                 [Test]\r
198                 public void TabOrder() {\r
199                         Form            form;\r
200                         Control         active;\r
201
202                         Label           label1 = new Label();           // To test non-tabstop items as well
203                         Label           label2 = new Label();
204
205                         GroupBox        group1 = new GroupBox();
206                         GroupBox        group2 = new GroupBox();
207                         GroupBox        group3 = new GroupBox();
208
209                         TextBox         text1 = new TextBox();
210
211                         RadioButton     radio11 = new RadioButton();
212                         RadioButton     radio12 = new RadioButton();
213                         RadioButton     radio13 = new RadioButton();
214                         RadioButton     radio14 = new RadioButton();
215                         RadioButton     radio21 = new RadioButton();
216                         RadioButton     radio22 = new RadioButton();
217                         RadioButton     radio23 = new RadioButton();
218                         RadioButton     radio24 = new RadioButton();
219                         RadioButton     radio31 = new RadioButton();
220                         RadioButton     radio32 = new RadioButton();
221                         RadioButton     radio33 = new RadioButton();
222                         RadioButton     radio34 = new RadioButton();
223
224                         form = new Form();
225
226                         form.ClientSize = new System.Drawing.Size (520, 520);\r
227                         Assert.AreEqual(new Size(520, 520), form.ClientSize, "Tab1");\r
228 \r
229                         form.Text = "SWF Taborder Test App Form";\r
230                         Assert.AreEqual("SWF Taborder Test App Form", form.Text, "Tab2");\r
231 \r
232                         label1.Location = new Point(10, 10);\r
233                         Assert.AreEqual(new Point(10, 10), label1.Location, "Tab3");\r
234                         label1.Text = "Label1";\r
235                         form.Controls.Add(label1);\r
236 \r
237                         label2.Location = new Point(200, 10);\r
238                         label2.Text = "Label2";\r
239                         form.Controls.Add(label2);\r
240 \r
241                         group1.Text = "Group1";\r
242                         group2.Text = "Group2";\r
243                         group3.Text = "Group3";\r
244 \r
245                         group1.Size = new Size(200, 400);\r
246                         group2.Size = new Size(200, 400);\r
247                         group3.Size = new Size(180, 180);\r
248                         Assert.AreEqual(new Size(180, 180), group3.Size, "Tab4");\r
249 \r
250                         group1.Location = new Point(10, 40);\r
251                         group2.Location = new Point(220, 40);\r
252                         group3.Location = new Point(10, 210);\r
253 \r
254                         group1.TabIndex = 30;\r
255                         Assert.AreEqual(30, group1.TabIndex, "Tab5");\r
256                         group1.TabStop = true;\r
257 \r
258                         // Don't assign, test automatic assignment\r
259                         //group2.TabIndex = 0;\r
260                         group2.TabStop = true;\r
261                         Assert.AreEqual(0, group2.TabIndex, "Tab6");\r
262 \r
263                         group3.TabIndex = 35;\r
264                         group3.TabStop = true;\r
265 \r
266                         // Test default tab index\r
267                         Assert.AreEqual(0, radio11.TabIndex, "Tab7");\r
268 \r
269                         text1.Text = "Edit Control";\r
270 \r
271                         radio11.Text = "Radio 1-1 [Tab1]";\r
272                         radio12.Text = "Radio 1-2 [Tab2]";\r
273                         radio13.Text = "Radio 1-3 [Tab3]";\r
274                         radio14.Text = "Radio 1-4 [Tab4]";\r
275 \r
276                         radio21.Text = "Radio 2-1 [Tab4]";\r
277                         radio22.Text = "Radio 2-2 [Tab3]";\r
278                         radio23.Text = "Radio 2-3 [Tab2]";\r
279                         radio24.Text = "Radio 2-4 [Tab1]";\r
280 \r
281                         radio31.Text = "Radio 3-1 [Tab1]";\r
282                         radio32.Text = "Radio 3-2 [Tab3]";\r
283                         radio33.Text = "Radio 3-3 [Tab2]";\r
284                         radio34.Text = "Radio 3-4 [Tab4]";\r
285 \r
286                         // We don't assign TabIndex for radio1X; test automatic assignment\r
287                         text1.TabStop = true;\r
288                         radio11.TabStop = true;\r
289 \r
290                         radio21.TabIndex = 4;\r
291                         radio22.TabIndex = 3;\r
292                         radio23.TabIndex = 2;\r
293                         radio24.TabIndex = 1;\r
294                         radio24.TabStop = true;\r
295 \r
296                         radio31.TabIndex = 11;\r
297                         radio31.TabStop = true;\r
298                         radio32.TabIndex = 13;\r
299                         radio33.TabIndex = 12;\r
300                         radio34.TabIndex = 14;\r
301 \r
302                         text1.Location = new Point(10, 100);\r
303 \r
304                         radio11.Location = new Point(10, 20);\r
305                         radio12.Location = new Point(10, 40);\r
306                         radio13.Location = new Point(10, 60);\r
307                         radio14.Location = new Point(10, 80);\r
308 \r
309                         radio21.Location = new Point(10, 20);\r
310                         radio22.Location = new Point(10, 40);\r
311                         radio23.Location = new Point(10, 60);\r
312                         radio24.Location = new Point(10, 80);\r
313 \r
314                         radio31.Location = new Point(10, 20);\r
315                         radio32.Location = new Point(10, 40);\r
316                         radio33.Location = new Point(10, 60);\r
317                         radio34.Location = new Point(10, 80);\r
318 \r
319                         text1.Size = new Size(150, text1.PreferredHeight);\r
320 \r
321                         radio11.Size = new Size(150, 20);\r
322                         radio12.Size = new Size(150, 20);\r
323                         radio13.Size = new Size(150, 20);\r
324                         radio14.Size = new Size(150, 20);\r
325 \r
326                         radio21.Size = new Size(150, 20);\r
327                         radio22.Size = new Size(150, 20);\r
328                         radio23.Size = new Size(150, 20);\r
329                         radio24.Size = new Size(150, 20);\r
330 \r
331                         radio31.Size = new Size(150, 20);\r
332                         radio32.Size = new Size(150, 20);\r
333                         radio33.Size = new Size(150, 20);\r
334                         radio34.Size = new Size(150, 20);\r
335 \r
336                         group1.Controls.Add(text1);\r
337 \r
338                         group1.Controls.Add(radio11);\r
339                         group1.Controls.Add(radio12);\r
340                         group1.Controls.Add(radio13);\r
341                         group1.Controls.Add(radio14);\r
342 \r
343                         group2.Controls.Add(radio21);\r
344                         group2.Controls.Add(radio22);\r
345                         group2.Controls.Add(radio23);\r
346                         group2.Controls.Add(radio24);\r
347 \r
348                         group3.Controls.Add(radio31);\r
349                         group3.Controls.Add(radio32);\r
350                         group3.Controls.Add(radio33);\r
351                         group3.Controls.Add(radio34);\r
352 \r
353                         form.Controls.Add(group1);\r
354                         form.Controls.Add(group2);\r
355                         group2.Controls.Add(group3);\r
356 \r
357                         // Perform some tests, the TabIndex stuff below will alter the outcome
358                         Assert.AreEqual(null, TestControl(group2, radio34, true), "Tab8");\r
359                         Assert.AreEqual(31, group2.TabIndex, "Tab9");\r
360
361                         // Does the taborder of containers and non-selectable things change behaviour?
362                         label1.TabIndex = 5;
363                         label2.TabIndex = 4;
364                         group1.TabIndex = 3;
365                         group2.TabIndex = 1;
366
367                         // Start verification\r
368                         Assert.AreEqual(null, TestControl(group2, radio34, true), "Tab10");\r
369                         Assert.AreEqual(radio24.Text, TestControl(group2, group2, true), "Tab11");\r
370                         Assert.AreEqual(radio31.Text, TestControl(group2, group3, true), "Tab12");\r
371                         Assert.AreEqual(null, TestControl(group1, radio14, true), "Tab13");\r
372                         Assert.AreEqual(radio23.Text, TestControl(group2, radio24, true), "Tab14");\r
373                         Assert.AreEqual(group3.Text, TestControl(group2, radio21, true), "Tab15");\r
374                         Assert.AreEqual(radio13.Text, TestControl(form, radio12, true), "Tab16");\r
375                         Assert.AreEqual(label2.Text, TestControl(form, radio14, true), "Tab17");\r
376                         Assert.AreEqual(group1.Text, TestControl(form, radio34, true), "Tab18");\r
377                         Assert.AreEqual(radio23.Text, TestControl(group2, radio24, true), "Tab19");\r
378 \r
379                         // Sanity checks\r
380                         Assert.AreEqual(null, TestControl(radio11, radio21, true), "Tab20");\r
381                         Assert.AreEqual(text1.Text, TestControl(group1, radio21, true), "Tab21");\r
382 \r
383                         Assert.AreEqual(radio14.Text, TestControl(form, label2, false), "Tab22");\r
384                         Assert.AreEqual(radio21.Text, TestControl(group2, group3, false), "Tab23");\r
385 \r
386                         Assert.AreEqual(4, radio21.TabIndex, "Tab24");\r
387                         Assert.AreEqual(1, radio11.TabIndex, "Tab25");\r
388                         Assert.AreEqual(3, radio13.TabIndex, "Tab26");\r
389                         Assert.AreEqual(35, group3.TabIndex, "Tab27");\r
390                         Assert.AreEqual(1, group2.TabIndex, "Tab28");\r
391 \r
392                         Assert.AreEqual(label1.Text, TestControl(form, form, false), "Tab29");\r
393                         Assert.AreEqual(radio14.Text, TestControl(group1, group1, false), "Tab30");\r
394                         Assert.AreEqual(radio34.Text, TestControl(group3, group3, false), "Tab31");\r
395 \r
396                         Assert.AreEqual(null, TestControl(label1, label1, false), "Tab31");\r
397                         Assert.AreEqual(null, TestControl(radio11, radio21, false), "Tab32");\r
398                 }\r
399 \r
400                 [Test]\r
401                 public void ScaleTest()\r
402                 {\r
403                         Control r1 = new Control();\r
404 \r
405                         r1.Width = 40;\r
406                         r1.Height = 20;\r
407                         r1.Scale(2);\r
408                         Assert.AreEqual(80, r1.Width, "Scale1");\r
409                         Assert.AreEqual(40, r1.Height, "Scale2");\r
410                 }\r
411 \r
412                 [Test]\r
413                 public void TextTest()\r
414                 {\r
415                         Control r1 = new Control();\r
416                         r1.Text = "Hi" ;\r
417                         Assert.AreEqual("Hi" , r1.Text , "Text1");\r
418 \r
419                         r1.ResetText();\r
420                         Assert.AreEqual("" , r1.Text , "Text2");\r
421                 }\r
422 \r
423                 [Test]\r
424                 public void PubMethodTest7()\r
425                 {\r
426                         Control r1 = new Control();\r
427                         r1.RightToLeft = RightToLeft.Yes ;\r
428                         r1.ResetRightToLeft() ;\r
429                         Assert.AreEqual(RightToLeft.No , r1.RightToLeft , "#81");\r
430                         r1.ImeMode = ImeMode.Off ;\r
431                         r1.ResetImeMode () ;\r
432                         Assert.AreEqual(ImeMode.NoControl , r1.ImeMode , "#82");\r
433                         r1.ForeColor= SystemColors.GrayText ;\r
434                         r1.ResetForeColor() ;\r
435                         Assert.AreEqual(SystemColors.ControlText , r1.ForeColor , "#83");\r
436                         //r1.Font = Font.FromHdc();\r
437                         r1.ResetFont () ;\r
438                         //Assert.AreEqual(FontFamily.GenericSansSerif , r1.Font , "#83");\r
439                         r1.Cursor = Cursors.Hand ;\r
440                         r1.ResetCursor () ;\r
441                         Assert.AreEqual(Cursors.Default , r1.Cursor , "#83");\r
442                         //r1.DataBindings = System.Windows.Forms.Binding ;\r
443                         //r1.ResetBindings() ;\r
444                         //Assert.AreEqual(ControlBindingsCollection , r1.DataBindings  , "#83");\r
445                         r1.BackColor = System.Drawing.Color.Black ;\r
446                         r1.ResetBackColor() ;\r
447                         Assert.AreEqual( SystemColors.Control , r1.BackColor  , "#84");\r
448                         r1.BackColor = System.Drawing.Color.Black ;\r
449                         r1.Refresh() ;\r
450                         Assert.AreEqual( null , r1.Region , "#85");\r
451                         Rectangle M = new Rectangle(10, 20, 30 ,40);\r
452                         r1.RectangleToScreen(M) ;\r
453                         Assert.AreEqual( null , r1.Region , "#86");\r
454 \r
455                 }\r
456 \r
457                 [Test]\r
458                 public void ScreenClientCoords()\r
459                 {\r
460                         Label l;\r
461                         Point p1;\r
462                         Point p2;\r
463                         Point p3;\r
464 \r
465                         l = new Label();\r
466                         l.Left = 10;\r
467                         l.Top  = 12;\r
468                         l.Visible = true;\r
469                         p1 = new Point (10,10);\r
470                         p2 = l.PointToScreen(p1);\r
471                         p3 = l.PointToClient(p2);\r
472 \r
473                         Assert.AreEqual (p1, p3, "SC1");\r
474                 }\r
475 \r
476                 [Test]\r
477                 public void ContainsTest ()\r
478                 {\r
479                         Control t = new Control ();\r
480                         Control s = new Control ();\r
481 \r
482                         t.Controls.Add (s);\r
483 \r
484                         Assert.AreEqual (true, t.Contains (s), "Con1");\r
485                         Assert.AreEqual (false, s.Contains (t), "Con2");\r
486                         Assert.AreEqual (false, s.Contains (null), "Con3");\r
487                         Assert.AreEqual (false, t.Contains (new Control ()), "Con4");\r
488                 }\r
489 \r
490                 [Test]\r
491                 public void CreateHandleTest ()\r
492                 {\r
493                         Control parent;\r
494                         Control child;\r
495 \r
496                         parent = null;\r
497                         child = null;\r
498 \r
499                         try {\r
500                                 parent = new Control ();\r
501                                 child = new Control ();\r
502 \r
503                                 parent.Visible = true;\r
504                                 parent.Controls.Add (child);\r
505 \r
506                                 Assert.IsFalse (parent.IsHandleCreated, "CH1");\r
507                                 Assert.IsFalse (child.IsHandleCreated, "CH2");\r
508 \r
509                                 parent.CreateControl ();\r
510                                 Assert.IsNotNull (parent.Handle, "CH3");\r
511                                 Assert.IsNotNull (child.Handle, "CH4");\r
512                                 Assert.IsTrue (parent.IsHandleCreated, "CH5");\r
513                                 Assert.IsTrue (child.IsHandleCreated, "CH6");\r
514                         } finally {\r
515                                 if (parent != null)\r
516                                         parent.Dispose ();\r
517                                 if (child != null)\r
518                                         child.Dispose ();\r
519                         }\r
520 \r
521                         // Accessing Handle Property creates the handle\r
522                         try {\r
523                                 parent = new Control ();\r
524                                 parent.Visible = true;\r
525                                 child = new Control ();\r
526                                 parent.Controls.Add (child);\r
527                                 Assert.IsFalse (parent.IsHandleCreated, "CH7");\r
528                                 Assert.IsFalse (child.IsHandleCreated, "CH8");\r
529                                 Assert.IsNotNull (parent.Handle, "CH9");\r
530                                 Assert.IsTrue (parent.IsHandleCreated, "CH10");\r
531                                 Assert.IsTrue (child.IsHandleCreated, "CH11");\r
532                         } finally {\r
533                                 if (parent != null)\r
534                                         parent.Dispose ();\r
535                                 if (child != null)\r
536                                         child.Dispose ();\r
537                         }\r
538                 }\r
539 \r
540                 [Test]\r
541                 public void CreateGraphicsTest ()\r
542                 {\r
543                         Graphics g = null;\r
544                         Pen p = null;\r
545 \r
546                         try {\r
547                                 Control c = new Control ();\r
548                                 c.SetBounds (0,0, 20, 20);\r
549                                 g = c.CreateGraphics ();\r
550                                 Assert.IsNotNull (g, "Graph1");\r
551                         } finally {\r
552                                 if (p != null)\r
553                                         p.Dispose ();\r
554                                 if (g != null)\r
555                                         g.Dispose ();\r
556                         }\r
557                 }\r
558 \r
559                 bool delegateCalled = false;\r
560                 public delegate void TestDelegate ();\r
561 \r
562                 [Test]\r
563                 [ExpectedException(typeof(System.InvalidOperationException))]\r
564                 public void InvokeException1 () {\r
565                         Control c = new Control ();\r
566                         IAsyncResult result;\r
567 \r
568                         result = c.BeginInvoke (new TestDelegate (delegate_call));\r
569                         c.EndInvoke (result);\r
570                 }\r
571 \r
572                 [Test]\r
573                 public void InvokeTest () {\r
574                         Control c = null;\r
575 \r
576                         try {\r
577                                 c = new Control ();\r
578                                 IAsyncResult result;\r
579 \r
580                                 c.CreateControl ();\r
581                                 result = c.BeginInvoke (new TestDelegate (delegate_call));\r
582                                 c.EndInvoke (result);\r
583                                 Assert.AreEqual (true, delegateCalled, "Invoke1");\r
584                         } finally {\r
585                                 if (c != null)\r
586                                         c.Dispose ();\r
587                         }\r
588                 }\r
589 \r
590                 public void delegate_call () {\r
591                         delegateCalled = true;\r
592                 }\r
593 \r
594                 [Test]\r
595                 public void FindFormTest () {\r
596                         Form f = new Form ();\r
597 \r
598                         f.Name = "form";\r
599                         Control c = null;\r
600 \r
601                         try {\r
602                                 f.Controls.Add (c = new Control ());\r
603                                 Assert.AreEqual (f.Name, c.FindForm ().Name, "Find1");\r
604 \r
605                                 f.Controls.Remove (c);\r
606 \r
607                                 GroupBox g = new GroupBox ();\r
608                                 g.Name = "box";\r
609                                 f.Controls.Add (g);\r
610                                 g.Controls.Add (c);\r
611 \r
612                                 Assert.AreEqual (f.Name, f.FindForm ().Name, "Find2");\r
613 \r
614                                 g.Controls.Remove (c);\r
615                                 Assert.IsNull(c.FindForm (), "Find3");\r
616 \r
617                         } finally {\r
618                                 if (c != null)\r
619                                         c.Dispose ();\r
620                                 if (f != null)\r
621                                         f.Dispose ();\r
622                         }\r
623                 }\r
624 \r
625                 [Test]\r
626                 public void FocusTest ()\r
627                 {\r
628                         Form f = null;\r
629                         Button c = null, d = null;\r
630 \r
631                         try {\r
632                                 f = new Form ();\r
633                                 f.Visible = true;\r
634                                 c = new Button ();\r
635                                 c.Visible = true;\r
636                                 f.Controls.Add (c);\r
637 \r
638                                 d = new Button ();\r
639                                 d.Visible = false;\r
640                                 f.Controls.Add (d);\r
641 \r
642                                 Assert.IsTrue (c.CanFocus, "Focus1");\r
643                                 Assert.IsFalse (c.Focused, "Focus2");\r
644                                 c.Focus ();\r
645                                 Assert.IsTrue (c.Focused, "Focus3");\r
646                                 d.Focus ();\r
647                                 Assert.IsFalse (d.Focused, "Focus4");\r
648 \r
649                                 d.Visible = true;\r
650                                 d.Focus ();\r
651                                 Assert.IsTrue (d.Focused, "Focus5");\r
652                                 Assert.IsFalse (c.Focused, "Focus6");\r
653 \r
654                                 c.Enabled = false;\r
655                                 Assert.IsFalse (c.Focused, "Focus7");\r
656                         } finally {\r
657                                 if (f != null)\r
658                                         f.Dispose ();\r
659                                 if (c != null)\r
660                                         c.Dispose ();\r
661                                 if (d != null)\r
662                                         d.Dispose ();\r
663                         }\r
664                 }\r
665 \r
666                 [Test]\r
667                 public void FromHandleTest ()\r
668                 {\r
669                         Control c1 = null;\r
670                         Control c2 = null;\r
671 \r
672                         try {\r
673                                 c1 = new Control ();\r
674                                 c2 = new Control ();\r
675 \r
676                                 c1.Name = "parent";\r
677                                 c2.Name = "child";\r
678                                 c1.Controls.Add(c2);\r
679 \r
680                                 // Handle\r
681                                 Assert.AreEqual (c1.Name, Control.FromHandle (c1.Handle).Name, "Handle1");\r
682                                 Assert.IsNull (Control.FromHandle (IntPtr.Zero), "Handle2");\r
683 \r
684                                 // ChildHandle\r
685                                 Assert.AreEqual (c1.Name, Control.FromChildHandle (c1.Handle).Name, "Handle3");\r
686                                 Assert.IsNull (Control.FromChildHandle (IntPtr.Zero), "Handle4");\r
687 \r
688 \r
689                         } finally {\r
690                                 if (c1 != null)\r
691                                         c1.Dispose ();\r
692 \r
693                                 if (c2 != null)\r
694                                         c2.Dispose ();\r
695                         }\r
696                 }\r
697 \r
698                 [Test]\r
699                 public void GetChildAtPointTest ()\r
700                 {\r
701                         Control c = null, d = null, e = null;\r
702 \r
703                         try {\r
704                                 c = new Control ();\r
705                                 c.Name = "c1";\r
706                                 c.SetBounds (0, 0, 100, 100);\r
707 \r
708                                 d = new Control ();\r
709                                 d.Name = "d1";\r
710                                 d.SetBounds (10, 10, 40, 40);\r
711                                 c.Controls.Add (d);\r
712 \r
713                                 e = new Control ();\r
714                                 e.Name = "e1";\r
715                                 e.SetBounds (55, 55, 10, 10);\r
716 \r
717                                 Control l = c.GetChildAtPoint (new Point (15, 15));\r
718                                 Assert.AreEqual (d.Name, l.Name, "Child1");\r
719                                 Assert.IsFalse (e.Name == l.Name, "Child2");\r
720 \r
721                                 l = c.GetChildAtPoint (new Point (57, 57));\r
722                                 Assert.IsNull (l, "Child3");\r
723 \r
724                                 l = c.GetChildAtPoint (new Point (10, 10));\r
725                                 Assert.AreEqual (d.Name, l.Name, "Child4");\r
726 \r
727                                 // GetChildAtPointSkip is not implemented and the following test is breaking for Net_2_0 profile
728 //                              #if NET_2_0\r
729 //                                      c.Controls.Add (e);\r
730 //                                      e.Visible = false;\r
731 //                                      l = c.GetChildAtPoint (new Point (57, 57), GetChildAtPointSkip.Invisible);\r
732 //                                      Assert.IsNull (l, "Child5");\r
733 \r
734 //                                      e.Visible = true;\r
735 //                                      l = c.GetChildAtPoint (new Point (57, 57), GetChildAtPointSkip.Invisible);\r
736 //                                      Assert.AreSame (e.Name, l.Name, "Child6");\r
737 //                              #endif // NET_2_0                 \r
738                         } finally {\r
739                                 if (c != null)\r
740                                         c.Dispose ();\r
741                                 if (d != null)\r
742                                         d.Dispose ();\r
743                         }\r
744                 }\r
745         }\r
746 }