[bcl] Remove more NET_2_0 checks from class libs
[mono.git] / mcs / class / Managed.Windows.Forms / Test / System.Windows.Forms / ControlHandleTest.cs
1 // This test is designed to find exactly what conditions cause the control's
2 // Handle to be created.
3 using System;
4 using NUnit.Framework;
5 using System.Drawing;
6 using System.Windows.Forms;
7 using System.ComponentModel;
8
9 namespace MonoTests.System.Windows.Forms
10 {
11         [TestFixture]
12         public class ControlHandleTest : TestHelper
13         {
14                 [Test]
15                 public void TestConstructors ()
16                 {
17                         Control c = new Control ();
18                         Assert.IsFalse (c.IsHandleCreated, "A1");
19
20                         c = new Control ("bob");
21                         Assert.IsFalse (c.IsHandleCreated, "A2");
22
23                         c = new Control (new Control (), "bob");
24                         Assert.IsFalse (c.IsHandleCreated, "A3");
25
26                         c = new Control ("bob", 0, 0, 100, 100);
27                         Assert.IsFalse (c.IsHandleCreated, "A4");
28
29                         c = new Control (new Control (), "bob", 0, 0, 100, 100);
30                         Assert.IsFalse (c.IsHandleCreated, "A5");
31                 }
32                 
33                 [Test]
34                 public void TestPublicProperties ()
35                 {
36                         // This long, carpal-tunnel syndrome inducing test shows us that
37                         // the following properties cause the Handle to be created:
38                         // - AccessibilityObject        [get]
39                         // - Capture                    [set]
40                         // - Handle                     [get]
41                         Control c = new Control ();
42                         // A
43                         object o = c.AccessibilityObject;
44                         Assert.IsTrue (c.IsHandleCreated, "A0");
45                         c = new Control ();
46
47                         o = c.AccessibleDefaultActionDescription;
48                         c.AccessibleDefaultActionDescription = "playdoh";
49                         Assert.IsFalse (c.IsHandleCreated, "A1");
50                         o = c.AccessibleDescription;
51                         c.AccessibleDescription = "more playdoh!";
52                         Assert.IsFalse (c.IsHandleCreated, "A2");
53                         o = c.AccessibleName;
54                         c.AccessibleName = "playdoh fun factory";
55                         Assert.IsFalse (c.IsHandleCreated, "A3");
56                         o = c.AccessibleRole;
57                         c.AccessibleRole = AccessibleRole.Border;
58                         Assert.IsFalse (c.IsHandleCreated, "A4");
59                         o = c.AllowDrop;
60                         c.AllowDrop = true;
61                         Assert.IsFalse (c.IsHandleCreated, "A5");
62                         // If we don't reset the control, handle creation will fail
63                         // because AllowDrop requires STAThread, which Nunit doesn't do
64                         c = new Control();
65                         o = c.Anchor;
66                         c.Anchor = AnchorStyles.Right;
67                         Assert.IsFalse (c.IsHandleCreated, "A6");
68 #if !__MonoCS__
69                         o = c.AutoScrollOffset;
70                         c.AutoScrollOffset = new Point (40, 40);
71                         Assert.IsFalse (c.IsHandleCreated, "A7");
72 #endif
73                         o = c.AutoSize;
74                         c.AutoSize = true;
75                         Assert.IsFalse (c.IsHandleCreated, "A8");
76                 
77                         // B
78                         o = c.BackColor;
79                         c.BackColor = Color.Green;
80                         Assert.IsFalse (c.IsHandleCreated, "A9");
81                         o = c.BackgroundImage;
82                         c.BackgroundImage = new Bitmap (1, 1);
83                         Assert.IsFalse (c.IsHandleCreated, "A10");
84                         o = c.BackgroundImageLayout;
85                         c.BackgroundImageLayout = ImageLayout.Stretch;
86                         Assert.IsFalse (c.IsHandleCreated, "A11");
87                         o = c.BindingContext;
88                         c.BindingContext = new BindingContext ();
89                         Assert.IsFalse (c.IsHandleCreated, "A12");
90                         o = c.Bottom;
91                         Assert.IsFalse (c.IsHandleCreated, "A13");
92                         o = c.Bounds;
93                         c.Bounds = new Rectangle (0, 0, 12, 12);
94                         Assert.IsFalse (c.IsHandleCreated, "A14");
95                         
96                         // C
97                         o = c.CanFocus;
98                         Assert.IsFalse (c.IsHandleCreated, "A15");
99                         o = c.CanSelect;
100                         Assert.IsFalse (c.IsHandleCreated, "A16");
101                         o = c.Capture;
102                         Assert.IsFalse (c.IsHandleCreated, "A17a");
103                         c.Capture = true;
104                         Assert.IsTrue (c.IsHandleCreated, "A17b");
105                         c = new Control ();
106                         o = c.CausesValidation;
107                         c.CausesValidation = false;
108                         Assert.IsFalse (c.IsHandleCreated, "A18");
109                         o = c.ClientRectangle;
110                         Assert.IsFalse (c.IsHandleCreated, "A19");
111                         o = c.ClientSize;
112                         c.ClientSize = new Size (30, 30);
113                         Assert.IsFalse (c.IsHandleCreated, "A20");
114                         o = c.CompanyName;
115                         Assert.IsFalse (c.IsHandleCreated, "A21");
116                         o = c.Container;
117                         Assert.IsFalse (c.IsHandleCreated, "A22");
118                         o = c.ContainsFocus;
119                         Assert.IsFalse (c.IsHandleCreated, "A23");
120                         o = c.ContextMenu;
121                         c.ContextMenu = new ContextMenu ();
122                         Assert.IsFalse (c.IsHandleCreated, "A24");
123                         o = c.ContextMenuStrip;
124                         c.ContextMenuStrip = new ContextMenuStrip ();
125                         Assert.IsFalse (c.IsHandleCreated, "A25");
126                         o = c.Controls;
127                         Assert.IsFalse (c.IsHandleCreated, "A26");
128                         o = c.Created;
129                         Assert.IsFalse (c.IsHandleCreated, "A27");
130                         o = c.Cursor;
131                         c.Cursor = Cursors.Arrow;
132                         Assert.IsFalse (c.IsHandleCreated, "A28");
133                         
134                         // D
135                         o = c.DataBindings;
136                         Assert.IsFalse (c.IsHandleCreated, "A29");
137                         o = c.DisplayRectangle;
138                         Assert.IsFalse (c.IsHandleCreated, "A30");
139                         o = c.Disposing;
140                         Assert.IsFalse (c.IsHandleCreated, "A31");
141                         o = c.Dock;
142                         c.Dock = DockStyle.Fill;
143                         Assert.IsFalse (c.IsHandleCreated, "A32");
144
145                         // E-H
146                         o = c.Enabled;
147                         c.Enabled = false;
148                         Assert.IsFalse (c.IsHandleCreated, "A33");
149                         c = new Control ();  //Reset just in case enable = false affects things
150                         o = c.Focused;
151                         Assert.IsFalse (c.IsHandleCreated, "A34");
152                         o = c.Font;
153                         c.Font = new Font (c.Font, FontStyle.Bold);
154                         Assert.IsFalse (c.IsHandleCreated, "A35");
155                         o = c.ForeColor;
156                         c.ForeColor = Color.Green;
157                         Assert.IsFalse (c.IsHandleCreated, "A36");
158                         o = c.Handle;
159                         Assert.IsTrue (c.IsHandleCreated, "A37");
160                         c = new Control ();
161                         o = c.HasChildren;
162                         Assert.IsFalse (c.IsHandleCreated, "A38");
163                         o = c.Height;
164                         c.Height = 12;
165                         Assert.IsFalse (c.IsHandleCreated, "A39");
166                         
167                         // I - L
168                         o = c.ImeMode;
169                         c.ImeMode = ImeMode.On;
170                         Assert.IsFalse (c.IsHandleCreated, "A40");
171                         o = c.InvokeRequired;
172                         Assert.IsFalse (c.IsHandleCreated, "A41");
173                         o = c.IsAccessible;
174                         Assert.IsFalse (c.IsHandleCreated, "A42");
175                         o = c.IsDisposed;
176                         Assert.IsFalse (c.IsHandleCreated, "A43");
177 #if !__MonoCS__
178                         o = c.IsMirrored;
179                         Assert.IsFalse (c.IsHandleCreated, "A44");
180 #endif
181                         o = c.LayoutEngine;
182                         Assert.IsFalse (c.IsHandleCreated, "A45");
183                         o = c.Left;
184                         c.Left = 15;
185                         Assert.IsFalse (c.IsHandleCreated, "A46");
186                         o = c.Location;
187                         c.Location = new Point (20, 20);
188                         Assert.IsFalse (c.IsHandleCreated, "A47");
189
190                         // M - N
191                         o = c.Margin;
192                         c.Margin = new Padding (6);
193                         Assert.IsFalse (c.IsHandleCreated, "A48");
194                         o = c.MaximumSize;
195                         c.MaximumSize = new Size (500, 500);
196                         Assert.IsFalse (c.IsHandleCreated, "A49");
197                         o = c.MinimumSize;
198                         c.MinimumSize = new Size (100, 100);
199                         Assert.IsFalse (c.IsHandleCreated, "A50");
200                         o = c.Name;
201                         c.Name = "web";
202                         Assert.IsFalse (c.IsHandleCreated, "A51");
203                         
204                         // P - R
205                         o = c.Padding;
206                         c.Padding = new Padding (4);
207                         Assert.IsFalse (c.IsHandleCreated, "A52");
208                         o = c.Parent;
209                         c.Parent = new Control ();
210                         Assert.IsFalse (c.IsHandleCreated, "A53");
211                         o = c.PreferredSize;
212                         Assert.IsFalse (c.IsHandleCreated, "A54");
213                         o = c.ProductName;
214                         Assert.IsFalse (c.IsHandleCreated, "A55");
215                         o = c.ProductVersion;
216                         Assert.IsFalse (c.IsHandleCreated, "A56");
217                         o = c.RecreatingHandle;
218                         Assert.IsFalse (c.IsHandleCreated, "A57");
219                         o = c.Region;
220                         c.Region = new Region (new Rectangle (0, 0, 177, 177));
221                         Assert.IsFalse (c.IsHandleCreated, "A58");
222                         o = c.Right;
223                         Assert.IsFalse (c.IsHandleCreated, "A59");
224                         o = c.RightToLeft;
225                         c.RightToLeft = RightToLeft.Yes;
226                         Assert.IsFalse (c.IsHandleCreated, "A60");
227                         
228                         // S - W
229                         o = c.Site;
230                         Assert.IsFalse (c.IsHandleCreated, "A61");
231                         o = c.Size;
232                         c.Size = new Size (188, 188);
233                         Assert.IsFalse (c.IsHandleCreated, "A62");
234                         o = c.TabIndex;
235                         c.TabIndex = 5;
236                         Assert.IsFalse (c.IsHandleCreated, "A63");
237                         o = c.Tag;
238                         c.Tag = "moooooooo";
239                         Assert.IsFalse (c.IsHandleCreated, "A64");
240                         o = c.Text;
241                         c.Text = "meoooowww";
242                         Assert.IsFalse (c.IsHandleCreated, "A65");
243                         o = c.Top;
244                         c.Top = 16;
245                         Assert.IsFalse (c.IsHandleCreated, "A66");
246                         o = c.TopLevelControl;
247                         Assert.IsFalse (c.IsHandleCreated, "A67");
248 #if !__MonoCS__
249                         o = c.UseWaitCursor;
250                         c.UseWaitCursor = true;
251                         Assert.IsFalse (c.IsHandleCreated, "A68");
252 #endif
253                         o = c.Visible;
254                         c.Visible = true;
255                         Assert.IsFalse (c.IsHandleCreated, "A69");
256                         o = c.Width;
257                         c.Width = 190;
258                         Assert.IsFalse (c.IsHandleCreated, "A70");
259                         o = c.WindowTarget;
260                         Assert.IsFalse (c.IsHandleCreated, "A71");
261                         
262                         TestHelper.RemoveWarning (o);
263                 }
264                 
265                 [Test]
266                 public void TestProtectedProperties ()
267                 {
268                         // Not a surprise, but none of these cause handle creation.
269                         // Included just to absolutely certain.
270                         ProtectedPropertyControl c = new ProtectedPropertyControl ();
271
272                         object o;
273 #if !__MonoCS__
274                         o = c.PublicCanRaiseEvents;
275                         Assert.IsFalse (c.IsHandleCreated, "A1");
276 #endif
277                         o = c.PublicCreateParams;
278                         Assert.IsFalse (c.IsHandleCreated, "A2");
279                         o = c.PublicDefaultCursor;
280                         Assert.IsFalse (c.IsHandleCreated, "A3");
281                         o = c.PublicDefaultImeMode;
282                         Assert.IsFalse (c.IsHandleCreated, "A4");
283                         o = c.PublicDefaultMargin;
284                         Assert.IsFalse (c.IsHandleCreated, "A5");
285                         o = c.PublicDefaultMaximumSize;
286                         Assert.IsFalse (c.IsHandleCreated, "A6");
287                         o = c.PublicDefaultMinimumSize;
288                         Assert.IsFalse (c.IsHandleCreated, "A7");
289                         o = c.PublicDefaultPadding;
290                         Assert.IsFalse (c.IsHandleCreated, "A8");
291                         o = c.PublicDefaultSize;
292                         Assert.IsFalse (c.IsHandleCreated, "A9");
293                         o = c.PublicDoubleBuffered;
294                         c.PublicDoubleBuffered = !c.PublicDoubleBuffered;
295                         Assert.IsFalse (c.IsHandleCreated, "A10");
296                         o = c.PublicFontHeight;
297                         c.PublicFontHeight = c.PublicFontHeight + 1;
298                         Assert.IsFalse (c.IsHandleCreated, "A11");
299                         o = c.PublicRenderRightToLeft;
300                         Assert.IsFalse (c.IsHandleCreated, "A12");
301                         o = c.PublicResizeRedraw;
302                         c.PublicResizeRedraw = !c.PublicResizeRedraw;
303                         Assert.IsFalse (c.IsHandleCreated, "A13");
304 #if !__MonoCS__
305                         o = c.PublicScaleChildren;
306                         Assert.IsFalse (c.IsHandleCreated, "A14");
307 #endif
308                         o = c.PublicShowFocusCues;
309                         Assert.IsFalse (c.IsHandleCreated, "A15");
310                         o = c.PublicShowKeyboardCues;
311                         Assert.IsFalse (c.IsHandleCreated, "A16");
312                         
313                         TestHelper.RemoveWarning (o);
314                 }
315                  
316                 Control invokecontrol = new Control ();
317                 
318                 [Test]
319                 public void TestPublicMethods ()
320                 {
321                         // Public Methods that force Handle creation:
322                         // - CreateControl ()
323                         // - CreateGraphics ()
324                         // - GetChildAtPoint ()
325                         // - Invoke, BeginInvoke throws InvalidOperationException if Handle has not been created
326                         // - PointToClient ()
327                         // - PointToScreen ()
328                         // - RectangleToClient ()
329                         // - RectangleToScreen ()
330                         Control c = new Control ();
331                         
332                         c.BringToFront ();
333                         Assert.IsFalse (c.IsHandleCreated, "A1");
334                         c.Contains (new Control ());
335                         Assert.IsFalse (c.IsHandleCreated, "A2");
336                         c.CreateControl ();
337                         Assert.IsTrue (c.IsHandleCreated, "A3");
338                         c = new Control ();
339                         Graphics g = c.CreateGraphics ();
340                         g.Dispose ();
341                         Assert.IsTrue (c.IsHandleCreated, "A4");
342                         c = new Control ();
343                         c.Dispose ();
344                         Assert.IsFalse (c.IsHandleCreated, "A5");
345                         c = new Control ();
346                         //DragDropEffects d = c.DoDragDrop ("yo", DragDropEffects.None);
347                         //Assert.IsFalse (c.IsHandleCreated, "A6");
348                         //Assert.AreEqual (DragDropEffects.None, d, "A6b");
349                         //Bitmap b = new Bitmap (100, 100);
350                         //c.DrawToBitmap (b, new Rectangle (0, 0, 100, 100));
351                         //Assert.IsFalse (c.IsHandleCreated, "A7");
352                         //b.Dispose ();
353                         c.FindForm ();
354                         Assert.IsFalse (c.IsHandleCreated, "A8");
355                         c.Focus ();
356                         Assert.IsFalse (c.IsHandleCreated, "A9");
357
358                         c.GetChildAtPoint (new Point (10, 10));
359                         Assert.IsTrue (c.IsHandleCreated, "A10");
360                         c.GetContainerControl ();
361                         c = new Control ();
362                         Assert.IsFalse (c.IsHandleCreated, "A11");
363                         c.GetNextControl (new Control (), true);
364                         Assert.IsFalse (c.IsHandleCreated, "A12");
365                         c.GetPreferredSize (Size.Empty);
366                         Assert.IsFalse (c.IsHandleCreated, "A13");
367                         c.Hide ();
368                         Assert.IsFalse (c.IsHandleCreated, "A14");
369                         c.Invalidate ();
370                         Assert.IsFalse (c.IsHandleCreated, "A15");
371                         //c.Invoke (new InvokeDelegate (InvokeMethod));
372                         //Assert.IsFalse (c.IsHandleCreated, "A16");
373                         c.PerformLayout ();
374                         Assert.IsFalse (c.IsHandleCreated, "A17");
375                         c.PointToClient (new Point (100, 100));
376                         Assert.IsTrue (c.IsHandleCreated, "A18");
377                         c = new Control ();
378                         c.PointToScreen (new Point (100, 100));
379                         Assert.IsTrue (c.IsHandleCreated, "A19");
380                         c = new Control ();
381                         //c.PreProcessControlMessage   ???
382                         //c.PreProcessMessage          ???
383                         c.RectangleToClient (new Rectangle (0, 0, 100, 100));
384                         Assert.IsTrue (c.IsHandleCreated, "A20");
385                         c = new Control ();
386                         c.RectangleToScreen (new Rectangle (0, 0, 100, 100));
387                         Assert.IsTrue (c.IsHandleCreated, "A21");
388                         c = new Control ();
389                         c.Refresh ();
390                         Assert.IsFalse (c.IsHandleCreated, "A22");
391                         c.ResetBackColor ();
392                         Assert.IsFalse (c.IsHandleCreated, "A23");
393                         c.ResetBindings ();
394                         Assert.IsFalse (c.IsHandleCreated, "A24");
395                         c.ResetCursor ();
396                         Assert.IsFalse (c.IsHandleCreated, "A25");
397                         c.ResetFont ();
398                         Assert.IsFalse (c.IsHandleCreated, "A26");
399                         c.ResetForeColor ();
400                         Assert.IsFalse (c.IsHandleCreated, "A27");
401                         c.ResetImeMode ();
402                         Assert.IsFalse (c.IsHandleCreated, "A28");
403                         c.ResetRightToLeft ();
404                         Assert.IsFalse (c.IsHandleCreated, "A29");
405                         c.ResetText ();
406                         Assert.IsFalse (c.IsHandleCreated, "A30");
407                         c.SuspendLayout ();
408                         Assert.IsFalse (c.IsHandleCreated, "A31");
409                         c.ResumeLayout ();
410                         Assert.IsFalse (c.IsHandleCreated, "A32");
411                         c.Scale (new SizeF (1.5f, 1.5f));
412                         Assert.IsFalse (c.IsHandleCreated, "A33");
413                         c.Select ();
414                         Assert.IsFalse (c.IsHandleCreated, "A34");
415                         c.SelectNextControl (new Control (), true, true, true, true);
416                         Assert.IsFalse (c.IsHandleCreated, "A35");
417                         c.SetBounds (0, 0, 100, 100);
418                         Assert.IsFalse (c.IsHandleCreated, "A36");
419                         c.Update ();
420                         Assert.IsFalse (c.IsHandleCreated, "A37");
421                 }
422
423                 [Test]
424                 public void Show ()
425                 {
426                         Control c = new Control ();
427                         Assert.IsFalse (c.IsHandleCreated, "A1");
428                         c.HandleCreated += new EventHandler (HandleCreated_WriteStackTrace);
429                         c.Show ();
430                         Assert.IsFalse (c.IsHandleCreated, "A2");
431                 }
432
433                 void HandleCreated_WriteStackTrace (object sender, EventArgs e)
434                 {
435                         Console.WriteLine (Environment.StackTrace);
436                 }
437
438                 public delegate void InvokeDelegate ();
439                 public void InvokeMethod () { invokecontrol.Text = "methodinvoked"; }
440                 
441                 [Test]
442                 [ExpectedException (typeof (InvalidOperationException))]
443                 public void InvokeIOE ()
444                 {
445                         Control c = new Control ();
446                         c.Invoke (new InvokeDelegate (InvokeMethod));
447                 }
448                 
449                 private class ProtectedPropertyControl : Control
450                 {
451 #if !__MonoCS__
452                         public bool PublicCanRaiseEvents { get { return base.CanRaiseEvents; } }
453 #endif
454                         public CreateParams PublicCreateParams { get { return base.CreateParams; } }
455                         public Cursor PublicDefaultCursor { get { return base.DefaultCursor; } }
456                         public ImeMode PublicDefaultImeMode { get { return base.DefaultImeMode; } }
457                         public Padding PublicDefaultMargin { get { return base.DefaultMargin; } }
458                         public Size PublicDefaultMaximumSize { get { return base.DefaultMaximumSize; } }
459                         public Size PublicDefaultMinimumSize { get { return base.DefaultMinimumSize; } }
460                         public Padding PublicDefaultPadding { get { return base.DefaultPadding; } }
461                         public Size PublicDefaultSize { get { return base.DefaultSize; } }
462                         public bool PublicDoubleBuffered { get { return base.DoubleBuffered; } set { base.DoubleBuffered = value; } }
463                         public int PublicFontHeight { get { return base.FontHeight; } set { base.FontHeight = value; } }
464                         public bool PublicRenderRightToLeft { get { return base.RenderRightToLeft; } }
465                         public bool PublicResizeRedraw { get { return base.ResizeRedraw; } set { base.ResizeRedraw = value; } }
466 #if !__MonoCS__
467                         public bool PublicScaleChildren { get { return base.ScaleChildren; } }
468 #endif
469                         public bool PublicShowFocusCues { get { return base.ShowFocusCues; } }
470                         public bool PublicShowKeyboardCues { get { return base.ShowKeyboardCues; } }
471                 }
472                 
473                 [Test]
474                 public void TestProtectedMethods ()
475                 {
476                         // Protected Methods that force Handle creation:
477                         // - CreateAccessibilityInstance ()
478                         // - CreateHandle ()
479                         // - IsInputChar ()
480                         // - SetTopLevel ()
481                         ProtectedMethodsControl c = new ProtectedMethodsControl ();
482                         
483                         c.PublicAccessibilityNotifyClients (AccessibleEvents.Focus, 0);
484                         Assert.IsFalse (c.IsHandleCreated, "A1");
485                         c.PublicCreateAccessibilityInstance ();
486                         Assert.IsTrue (c.IsHandleCreated, "A2");
487                         c = new ProtectedMethodsControl (); 
488                         c.PublicCreateControlsInstance ();
489                         Assert.IsFalse (c.IsHandleCreated, "A3");
490                         c.PublicCreateHandle ();
491                         Assert.IsTrue (c.IsHandleCreated, "A4");
492                         c = new ProtectedMethodsControl (); 
493                         c.PublicDestroyHandle ();
494                         Assert.IsFalse (c.IsHandleCreated, "A5");
495                         c = new ProtectedMethodsControl ();
496                         c.PublicGetAccessibilityObjectById (0);
497                         Assert.IsFalse (c.IsHandleCreated, "A6");
498 #if !__MonoCS__
499                         c.PublicGetAutoSizeMode ();
500                         Assert.IsFalse (c.IsHandleCreated, "A7");
501                         c.PublicGetScaledBounds (new Rectangle (0, 0, 100, 100), new SizeF (1.5f, 1.5f), BoundsSpecified.All);
502                         Assert.IsFalse (c.IsHandleCreated, "A8");
503 #endif
504                         c.PublicGetStyle (ControlStyles.FixedHeight);
505                         Assert.IsFalse (c.IsHandleCreated, "A9");
506                         c.PublicGetTopLevel ();
507                         Assert.IsFalse (c.IsHandleCreated, "A10");
508                         c.PublicInitLayout ();
509                         Assert.IsFalse (c.IsHandleCreated, "A11");
510                         c.PublicInvokeGotFocus (c, EventArgs.Empty);
511                         Assert.IsFalse (c.IsHandleCreated, "A12");
512                         c.PublicInvokeLostFocus (c, EventArgs.Empty);
513                         Assert.IsFalse (c.IsHandleCreated, "A13");
514                         c.PublicInvokeOnClick (c, EventArgs.Empty);
515                         Assert.IsFalse (c.IsHandleCreated, "A14");
516                         c.PublicInvokePaint (c, new PaintEventArgs (Graphics.FromImage (new Bitmap (1, 1)), Rectangle.Empty));
517                         Assert.IsFalse (c.IsHandleCreated, "A15");
518                         c.PublicInvokePaintBackground (c, new PaintEventArgs (Graphics.FromImage (new Bitmap (1, 1)), Rectangle.Empty));
519                         Assert.IsFalse (c.IsHandleCreated, "A16");
520                         c.PublicIsInputChar ('c');
521                         Assert.IsTrue (c.IsHandleCreated, "A17");
522                         c = new ProtectedMethodsControl ();
523                         c.PublicIsInputKey (Keys.B);
524                         Assert.IsFalse (c.IsHandleCreated, "A18");
525                         c.PublicNotifyInvalidate (Rectangle.Empty);
526                         Assert.IsFalse (c.IsHandleCreated, "A19");
527                         Form f = new Form ();
528                         f.Controls.Add (c);
529                         c.PublicOnVisibleChanged (EventArgs.Empty);
530                         Assert.IsFalse (c.IsHandleCreated, "A20");
531                         c = new ProtectedMethodsControl ();
532                         c.PublicRaiseDragEvent (null, null);
533                         Assert.IsFalse (c.IsHandleCreated, "A21");
534                         c.PublicRaiseKeyEvent (null, null);
535                         Assert.IsFalse (c.IsHandleCreated, "A22");
536                         c.PublicRaiseMouseEvent (null, null);
537                         Assert.IsFalse (c.IsHandleCreated, "A23");
538                         c.PublicRaisePaintEvent (null, null);
539                         Assert.IsFalse (c.IsHandleCreated, "A24");
540                         c.PublicRecreateHandle ();
541                         Assert.IsFalse (c.IsHandleCreated, "A25");
542                         c.PublicResetMouseEventArgs ();
543                         Assert.IsFalse (c.IsHandleCreated, "A26");
544                         c.PublicRtlTranslateAlignment (ContentAlignment.BottomLeft);
545                         Assert.IsFalse (c.IsHandleCreated, "A27");
546                         c.PublicRtlTranslateContent (ContentAlignment.BottomLeft);
547                         Assert.IsFalse (c.IsHandleCreated, "A28");
548                         c.PublicRtlTranslateHorizontal (HorizontalAlignment.Left);
549                         Assert.IsFalse (c.IsHandleCreated, "A29");
550                         c.PublicRtlTranslateLeftRight (LeftRightAlignment.Left);
551                         Assert.IsFalse (c.IsHandleCreated, "A30");
552 #if !__MonoCS__
553                         c.PublicScaleControl (new SizeF (1.5f, 1.5f), BoundsSpecified.All);
554                         Assert.IsFalse (c.IsHandleCreated, "A31");
555 #endif
556                         c.PublicScaleCore (1.5f, 1.5f);
557                         Assert.IsFalse (c.IsHandleCreated, "A32");
558                         c.PublicSelect ();
559                         Assert.IsFalse (c.IsHandleCreated, "A33");
560 #if !__MonoCS__
561                         c.PublicSetAutoSizeMode (AutoSizeMode.GrowAndShrink);
562                         Assert.IsFalse (c.IsHandleCreated, "A34");
563 #endif
564                         c.PublicSetBoundsCore (0, 0, 100, 100, BoundsSpecified.All);
565                         Assert.IsFalse (c.IsHandleCreated, "A35");
566                         c.PublicSetClientSizeCore (122, 122);
567                         Assert.IsFalse (c.IsHandleCreated, "A36");
568                         c.PublicSetStyle (ControlStyles.FixedHeight, true);
569                         Assert.IsFalse (c.IsHandleCreated, "A37");
570                         c.PublicSetTopLevel (true);
571                         Assert.IsTrue (c.IsHandleCreated, "A38");
572                         c = new ProtectedMethodsControl ();
573                         c.PublicSetVisibleCore (true);
574                         Assert.IsFalse (c.IsHandleCreated, "A39");
575                         c.PublicSizeFromClientSize (new Size (160, 160));
576                         Assert.IsFalse (c.IsHandleCreated, "A40");
577                         c.PublicUpdateBounds ();
578                         Assert.IsFalse (c.IsHandleCreated, "A41");
579                         c.PublicUpdateBounds (1, 2, 3, 4);
580                         Assert.IsFalse (c.IsHandleCreated, "A41-b");
581                         c.PublicUpdateBounds (1, 2, 3, 4, 5, 6);
582                         Assert.IsFalse (c.IsHandleCreated, "A41-c");
583                         c.PublicUpdateStyles ();
584                         Assert.IsFalse (c.IsHandleCreated, "A42");
585                         c.PublicUpdateZOrder ();
586                         Assert.IsFalse (c.IsHandleCreated, "A43");
587                 }
588                 
589                 private class ProtectedMethodsControl : Control
590                 {
591                         public void PublicAccessibilityNotifyClients (AccessibleEvents accEvent, int childID) { base.AccessibilityNotifyClients (accEvent, childID); }
592                         public void PublicCreateAccessibilityInstance () { base.CreateAccessibilityInstance (); }
593                         public void PublicCreateControlsInstance () { base.CreateControlsInstance (); }
594                         public void PublicCreateHandle () { base.CreateHandle (); }
595                         public void PublicDestroyHandle () { base.DestroyHandle (); }
596                         public AccessibleObject PublicGetAccessibilityObjectById (int objectId) { return base.GetAccessibilityObjectById (objectId); }
597 #if !__MonoCS__
598                         public AutoSizeMode PublicGetAutoSizeMode () { return base.GetAutoSizeMode (); }
599                         public Rectangle PublicGetScaledBounds (Rectangle bounds, SizeF factor, BoundsSpecified specified) { return base.GetScaledBounds (bounds, factor, specified); }
600 #endif
601                         public bool PublicGetStyle (ControlStyles flag) { return base.GetStyle (flag); }
602                         public bool PublicGetTopLevel () { return base.GetTopLevel (); }
603                         public void PublicInitLayout () { base.InitLayout (); }
604                         public void PublicInvokeGotFocus (Control toInvoke, EventArgs e) { base.InvokeGotFocus (toInvoke, e); }
605                         public void PublicInvokeLostFocus (Control toInvoke, EventArgs e) { base.InvokeLostFocus (toInvoke, e); }
606                         public void PublicInvokeOnClick (Control toInvoke, EventArgs e) { base.InvokeOnClick (toInvoke, e); }
607                         public void PublicInvokePaint (Control c, PaintEventArgs e) { base.InvokePaint (c, e); }
608                         public void PublicInvokePaintBackground (Control c, PaintEventArgs e) { base.InvokePaintBackground (c, e); }
609                         public bool PublicIsInputChar (char charCode) { return base.IsInputChar (charCode); }
610                         public bool PublicIsInputKey (Keys keyData) { return base.IsInputKey (keyData); }
611                         public void PublicNotifyInvalidate (Rectangle invalidatedArea) { base.NotifyInvalidate (invalidatedArea); }
612                         public void PublicOnVisibleChanged (EventArgs e) { base.OnVisibleChanged (e); }
613                         public void PublicRaiseDragEvent (Object key, DragEventArgs e) { base.RaiseDragEvent (key, e); }
614                         public void PublicRaiseKeyEvent (Object key, KeyEventArgs e) { base.RaiseKeyEvent (key, e); }
615                         public void PublicRaiseMouseEvent (Object key, MouseEventArgs e) { base.RaiseMouseEvent (key, e); }
616                         public void PublicRaisePaintEvent (Object key, PaintEventArgs e) { base.RaisePaintEvent (key, e); }
617                         public void PublicRecreateHandle () { base.RecreateHandle (); }
618                         public void PublicResetMouseEventArgs () { base.ResetMouseEventArgs (); }
619                         public ContentAlignment PublicRtlTranslateAlignment (ContentAlignment align) { return base.RtlTranslateAlignment (align); }
620                         public ContentAlignment PublicRtlTranslateContent (ContentAlignment align) { return base.RtlTranslateContent (align); }
621                         public HorizontalAlignment PublicRtlTranslateHorizontal (HorizontalAlignment align) { return base.RtlTranslateHorizontal (align); }
622                         public LeftRightAlignment PublicRtlTranslateLeftRight (LeftRightAlignment align) { return base.RtlTranslateLeftRight (align); }
623 #if !__MonoCS__
624                         public void PublicScaleControl (SizeF factor, BoundsSpecified specified) { base.ScaleControl (factor, specified); }
625 #endif
626                         public void PublicScaleCore (float dx, float dy) { base.ScaleCore (dx, dy); }
627                         public void PublicSelect () { base.Select (); }
628 #if !__MonoCS__
629                         public void PublicSetAutoSizeMode (AutoSizeMode mode) { base.SetAutoSizeMode (mode); }
630 #endif
631                         public void PublicSetBoundsCore (int x, int y, int width, int height, BoundsSpecified specified) { base.SetBoundsCore (x, y, width, height, specified); }
632                         public void PublicSetClientSizeCore (int x, int y) { base.SetClientSizeCore (x, y); }
633                         public void PublicSetStyle (ControlStyles flag, bool value) { base.SetStyle (flag, value); }
634                         public void PublicSetTopLevel (bool value) { base.SetTopLevel (value); }
635                         public void PublicSetVisibleCore (bool value) { base.SetVisibleCore (value); }
636                         public Size PublicSizeFromClientSize (Size clientSize) { return base.SizeFromClientSize (clientSize); }
637                         public void PublicUpdateBounds () { base.UpdateBounds (); }
638                         public void PublicUpdateBounds (int x, int y, int width, int height) { base.UpdateBounds (x, y, width, height); }
639                         public void PublicUpdateBounds (int x, int y, int width, int height, int clientWidth, int clientHeight) { base.UpdateBounds (x, y, width, height, clientWidth, clientHeight); }
640                         public void PublicUpdateStyles () { base.UpdateStyles (); }
641                         public void PublicUpdateZOrder () { base.UpdateZOrder (); }
642                 }
643         }
644 }