[bcl] Remove more NET_2_0 checks from class libs
[mono.git] / mcs / class / Managed.Windows.Forms / Test / System.Windows.Forms / LabelTest.cs
1 //
2 // Copyright (c) 2005 Novell, Inc.
3 //
4 // Authors:
5 //      Hisham Mardam Bey (hisham.mardambey@gmail.com)
6 //
7 //
8
9 using System;
10 using NUnit.Framework;
11 using System.Windows.Forms;
12 using System.Drawing;
13 using System.Collections;
14
15 namespace MonoTests.System.Windows.Forms
16 {
17    [TestFixture]
18    public class LabelTest : TestHelper
19    {
20                 [Test]
21                 public void LabelAccessibility ()
22                 {
23                         Label l = new Label ();
24                         Assert.IsNotNull (l.AccessibilityObject, "1");
25                 }
26
27                 [Test]
28                 public void PreferredWidth ()
29                 {
30                         Label l = new Label();
31
32                         // preferred width is 0 by default
33                         Assert.AreEqual (0, l.PreferredWidth, "2");
34
35                         // and after text is changed it's something else
36                         l.Text = "hi";
37                         Assert.IsTrue (l.PreferredWidth > 0, "3");
38
39                         // now add it to a form and see
40                         Form f = new Form ();
41                         f.ShowInTaskbar = false;
42                         l.Text = "";
43
44                         f.Controls.Add (l);
45                         f.Show ();
46                         Assert.AreEqual (0, l.PreferredWidth, "4");
47
48                         l.Text = "hi";
49                         Assert.IsTrue (l.PreferredWidth > 0, "5");
50
51                         f.Dispose ();
52                 }
53
54                 [Test]
55                 public void PreferredHeight ()
56                 {
57                         Label l = new Label();
58                         Assert.AreEqual (l.PreferredHeight, (l.Font.Height + 3), "#1");
59                         
60                         l.BorderStyle = BorderStyle.None;
61                         Assert.AreEqual (l.PreferredHeight, (l.Font.Height + 3), "#2");
62                         
63                         l.BorderStyle = BorderStyle.FixedSingle;
64                         Assert.AreEqual (l.PreferredHeight, (l.Font.Height + 6), "#3");
65                         
66                         l.BorderStyle = BorderStyle.Fixed3D;
67                         Assert.AreEqual (l.PreferredHeight, (l.Font.Height + 6), "#4");
68
69                         l.UseCompatibleTextRendering = false;
70                         
71                         l.BorderStyle = BorderStyle.None;
72                         Assert.AreEqual (l.PreferredHeight, (l.Font.Height), "#5");
73                         
74                         l.BorderStyle = BorderStyle.FixedSingle;
75                         Assert.AreEqual (l.PreferredHeight, (l.Font.Height), "#6");
76                         
77                         l.BorderStyle = BorderStyle.Fixed3D;
78                         Assert.AreEqual (l.PreferredHeight, (l.Font.Height), "#7");
79                 }
80                 
81                 [Test]
82                 public void SizesTest ()
83                 {
84                         Form myform = new Form ();
85                         Label l1 = new Label (); l1.Text = "Test";
86                         Label l2 = new Label (); l2.Text = "Test";
87                         Label l3 = new Label (); l3.Text = "Test three";
88                         Label l4 = new Label (); l4.Text = String.Format ("Test four{0}with line breaks", Environment.NewLine);
89                         myform.Controls.Add (l1);
90                         myform.Controls.Add (l2);
91                         myform.Controls.Add (l3);
92                         myform.Controls.Add (l4);
93                         myform.Show ();
94                         
95                         l2.Font = new Font (l1.Font.FontFamily, l1.Font.Size + 5, l1.Font.Style);
96                         
97                         // Height: autosize = false
98                         Assert.AreEqual (l1.Height, l2.Height, "#1");
99                         Assert.AreEqual (l1.Height, l3.Height, "#2");
100                         Assert.AreEqual (l1.Height, l4.Height, "#3");
101                         
102                         // Width: autosize = false                      
103                         Assert.AreEqual (l1.Width, l2.Width, "#4");
104                         Assert.AreEqual (l1.Width, l3.Width, "#5");
105                         Assert.AreEqual (l1.Width, l4.Width, "#6");
106                         
107                         l1.AutoSize = true; 
108                         l2.AutoSize = true;
109                         l3.AutoSize = true;
110                         l4.AutoSize = true;
111                         
112                         // Height: autosize = false
113                         Assert.IsFalse (l1.Height.Equals (l2.Height), "#7");
114                         Assert.IsTrue (l1.Height.Equals (l3.Height), "#8");
115                         Assert.IsTrue ((l4.Height > l1.Height), "#9");
116                         
117                         // Width: autosize = false
118                         Assert.IsFalse (l1.Width.Equals (l2.Width), "#10");
119                         Assert.IsFalse (l1.Width.Equals (l3.Width), "#11");
120                         
121                         myform.Dispose();
122                 }
123
124                 [Test]
125                 public void StyleTest ()
126                 {
127                         Label l = new Label ();
128                         
129                         Assert.IsFalse (TestHelper.IsStyleSet (l, WindowStyles.WS_BORDER), "#1");
130                         Assert.IsFalse (TestHelper.IsExStyleSet (l, WindowExStyles.WS_EX_CLIENTEDGE), "#2");
131                         Assert.IsFalse (TestHelper.IsExStyleSet (l, WindowExStyles.WS_EX_STATICEDGE), "#3");
132                         
133                         l.BorderStyle = BorderStyle.None;
134
135                         Assert.IsFalse (TestHelper.IsStyleSet (l, WindowStyles.WS_BORDER), "#4");
136                         Assert.IsFalse (TestHelper.IsExStyleSet (l, WindowExStyles.WS_EX_CLIENTEDGE), "#5");
137                         Assert.IsFalse (TestHelper.IsExStyleSet (l, WindowExStyles.WS_EX_STATICEDGE), "#6");
138                         
139                         l.BorderStyle = BorderStyle.FixedSingle;
140
141                         Assert.IsTrue (TestHelper.IsStyleSet (l, WindowStyles.WS_BORDER), "#7");
142                         Assert.IsFalse (TestHelper.IsExStyleSet (l, WindowExStyles.WS_EX_CLIENTEDGE), "#8");
143                         Assert.IsFalse (TestHelper.IsExStyleSet (l, WindowExStyles.WS_EX_STATICEDGE), "#9");
144
145                         l.BorderStyle = BorderStyle.Fixed3D;
146                         
147                         Assert.IsFalse (TestHelper.IsStyleSet (l, WindowStyles.WS_BORDER), "#10");
148                         Assert.IsFalse (TestHelper.IsExStyleSet (l, WindowExStyles.WS_EX_CLIENTEDGE), "#11");
149                         Assert.IsTrue (TestHelper.IsExStyleSet (l, WindowExStyles.WS_EX_STATICEDGE), "#12");
150                 }
151
152                 [Test]
153                 public void BoundsTest ()
154                 {
155                         Label l = new Label ();
156
157                         Assert.AreEqual (new Rectangle (0,0,100,23), l.Bounds, "1");
158                         Assert.AreEqual (new Rectangle (0,0,100,23), l.ClientRectangle, "2");
159                         Assert.AreEqual (new Size (100,23), l.ClientSize, "3");
160                 }
161
162                 [Test]
163                 public void PubPropTest ()
164                 {
165                         Label l = new Label ();
166
167                         Assert.IsFalse (l.AutoSize, "#3");
168                         
169                         Assert.AreEqual ("Control", l.BackColor.Name  , "#6");
170                         Assert.IsNull (l.BackgroundImage, "#8");
171                         Assert.AreEqual (BorderStyle.None , l.BorderStyle, "#9");               
172                         
173                         Assert.IsNull (l.Container, "#19");
174                         Assert.IsFalse (l.ContainsFocus, "#20");
175                         Assert.IsNull (l.ContextMenu, "#21");
176                         Assert.IsFalse (l.Created, "#23");
177                         Assert.AreEqual (Cursors.Default , l.Cursor, "#24");
178                         
179                         Assert.IsNotNull (l.DataBindings, "#25");
180                         Assert.AreEqual (DockStyle.None, l.Dock, "#28");
181                         
182                         Assert.IsTrue (l.Enabled, "#29");
183                         
184                         Assert.AreEqual (FlatStyle.Standard, l.FlatStyle, "#30");
185                         Assert.IsFalse (l.Focused, "#31");
186                         Assert.AreEqual (FontFamily.GenericSansSerif, l.Font.FontFamily, "#32");
187                         Assert.AreEqual (SystemColors.ControlText, l.ForeColor, "#33");
188                         
189                         Assert.IsFalse (l.HasChildren, "#35");
190                         
191                         Assert.IsNull   (l.Image, "#37");
192                         Assert.AreEqual (ContentAlignment.MiddleCenter, l.ImageAlign, "#38");
193                         Assert.AreEqual (-1, l.ImageIndex, "#39");
194                         Assert.IsNull   (l.ImageList, "#40");
195                         Assert.IsFalse  (l.InvokeRequired, "#42");
196                         Assert.IsFalse  (l.IsAccessible, "#43");
197                         Assert.IsFalse  (l.IsDisposed, "#44");
198                         
199                         Assert.IsNull (l.Parent, "#49");
200
201                         Assert.IsFalse (l.RecreatingHandle, "#54");
202                         Assert.IsNull (l.Region, "#55");
203                         Assert.AreEqual (RightToLeft.No, l.RightToLeft, "#57");
204                         
205                         Assert.IsNull (l.Site, "#58");
206                         
207                         Assert.AreEqual (0, l.TabIndex, "#60");
208                         Assert.IsNull (l.Tag, "#61");
209                         Assert.AreEqual ("", l.Text, "#62");
210                         Assert.AreEqual (ContentAlignment.TopLeft, l.TextAlign, "#63");
211                         Assert.IsNull (l.TopLevelControl, "#65");
212                         
213                         Assert.IsTrue (l.UseMnemonic, "#66");
214                         
215                         Assert.IsTrue (l.Visible, "#67");
216                 }
217
218                 [Test]
219                 public void LabelEqualsTest () {
220                         Label s1 = new Label ();
221                         Label s2 = new Label ();
222                         s1.Text = "abc";
223                         s2.Text = "abc";
224                         Assert.IsFalse (s1.Equals (s2), "#69");
225                         Assert.IsTrue (s1.Equals (s1), "#70");
226                 }
227                 
228                 [Test]
229                 public void LabelScaleTest () {
230                         Label r1 = new Label ();
231                         r1.Width = 40;
232                         r1.Height = 20 ;
233                         r1.Scale (2);
234                         Assert.AreEqual (80, r1.Width, "#71");
235                         Assert.AreEqual (40, r1.Height, "#72");
236
237                 }               
238
239            [Test]
240            public void ToStringTest ()
241            {
242                    Label l = new Label ();
243
244                    l.Text = "My Label";
245
246                    Assert.AreEqual ("System.Windows.Forms.Label, Text: My Label", l.ToString (), "T1");
247            }
248            
249         [Test]
250         public void AutoSizeExplicitSize ()
251         {
252                 Form f = new Form ();
253                 f.ShowInTaskbar = false;
254                 
255                 Label l = new Label ();
256                 l.Size = new Size (5, 5);
257                 l.AutoSize = true;
258                 l.Text = "My Label";
259
260                 f.Controls.Add (l);
261                 
262                 Size s = l.Size;
263
264                 l.Width = 10;
265                 Assert.AreEqual (s, l.Size, "A1");
266
267                 l.Height = 10;
268                 Assert.AreEqual (s, l.Size, "A2");
269         }
270            
271         [Test]
272         public void LabelMargin ()
273         {
274                 Assert.AreEqual (new Padding (3, 0, 3, 0), new Label ().Margin, "A1");
275         }
276
277            [Test]
278            public void BehaviorImageList ()
279            {
280                    // Basically, this shows that whichever of [Image|ImageIndex|ImageKey]
281                    // is set last resets the others to their default state
282                    Label b = new Label ();
283
284                    Bitmap i1 = new Bitmap (16, 16);
285                    i1.SetPixel (0, 0, Color.Blue);
286                    Bitmap i2 = new Bitmap (16, 16);
287                    i2.SetPixel (0, 0, Color.Red);
288                    Bitmap i3 = new Bitmap (16, 16);
289                    i3.SetPixel (0, 0, Color.Green);
290
291                    Assert.AreEqual (null, b.Image, "D1");
292                    Assert.AreEqual (-1, b.ImageIndex, "D2");
293                    Assert.AreEqual (string.Empty, b.ImageKey, "D3");
294
295                    ImageList il = new ImageList ();
296                    il.Images.Add ("i2", i2);
297                    il.Images.Add ("i3", i3);
298
299                    b.ImageList = il;
300
301                    b.ImageKey = "i3";
302                    Assert.AreEqual (-1, b.ImageIndex, "D4");
303                    Assert.AreEqual ("i3", b.ImageKey, "D5");
304                    Assert.AreEqual (i3.GetPixel (0, 0), (b.Image as Bitmap).GetPixel (0, 0), "D6");
305
306                    b.ImageIndex = 0;
307                    Assert.AreEqual (0, b.ImageIndex, "D7");
308                    Assert.AreEqual (string.Empty, b.ImageKey, "D8");
309                    Assert.AreEqual (i2.GetPixel (0, 0), (b.Image as Bitmap).GetPixel (0, 0), "D9");
310
311                    // Also, Image is not cached, changing the underlying ImageList image is reflected
312                    il.Images[0] = i1;
313                    Assert.AreEqual (i1.GetPixel (0, 0), (b.Image as Bitmap).GetPixel (0, 0), "D16");
314
315                    // Note: setting Image resets ImageList to null
316                    b.Image = i1;
317                    Assert.AreEqual (-1, b.ImageIndex, "D10");
318                    Assert.AreEqual (string.Empty, b.ImageKey, "D11");
319                    Assert.AreEqual (i1.GetPixel (0, 0), (b.Image as Bitmap).GetPixel (0, 0), "D12");
320                    Assert.AreEqual (null, b.ImageList, "D12-2");
321
322                    b.Image = null;
323                    Assert.AreEqual (null, b.Image, "D13");
324                    Assert.AreEqual (-1, b.ImageIndex, "D14");
325                    Assert.AreEqual (string.Empty, b.ImageKey, "D15");
326            }
327    }
328
329    [TestFixture]
330    public class LabelEventTest : TestHelper
331    {
332            static bool eventhandled = false;
333            public void Label_EventHandler (object sender,EventArgs e)
334            {
335                    eventhandled = true;
336            }
337
338            public void Label_KeyDownEventHandler (object sender, KeyEventArgs e)
339            {
340                    eventhandled = true;
341            }
342
343            [Ignore ("AutoSize moved to Control in 2.0, Label.AutoSize needs to be reworked a bit.")]
344            [Test]
345            public void AutoSizeChangedChangedTest ()
346              {
347                      Form myform = new Form ();
348                      myform.ShowInTaskbar = false;
349                      myform.Visible = true;
350                      Label l = new Label ();
351                      l.Visible = true;
352                      myform.Controls.Add (l);
353                      l.AutoSizeChanged += new EventHandler (Label_EventHandler);
354                      l.AutoSize = true;
355                      Assert.AreEqual (true, eventhandled, "B4");
356                      eventhandled = false;
357                      myform.Dispose();
358              }
359
360            [Test]
361            public void BackgroundImageChangedTest ()
362              {
363                      Form myform = new Form ();
364                      myform.ShowInTaskbar = false;
365                      myform.Visible = true;
366                      Label l = new Label ();
367                      l.Visible = true;
368                      myform.Controls.Add (l);
369                      l.BackgroundImageChanged += new EventHandler (Label_EventHandler);
370                      l.BackgroundImage = Image.FromFile ("Test/System.Windows.Forms/bitmaps/a.png");
371                      Assert.AreEqual (true, eventhandled, "B4");
372                      eventhandled = false;
373                      myform.Dispose();
374              }
375
376            [Test]
377            public void ImeModeChangedTest ()
378              {
379                      Form myform = new Form ();
380                      myform.ShowInTaskbar = false;
381                      myform.Visible = true;
382                      Label l = new Label ();
383                      l.Visible = true;
384                      myform.Controls.Add (l);
385                      l.ImeModeChanged += new EventHandler (Label_EventHandler);
386                      l.ImeMode = ImeMode.Katakana;
387                      Assert.AreEqual (true, eventhandled, "I16");
388                      eventhandled = false;
389                      myform.Dispose();
390              }
391
392            [Test]
393            public void KeyDownTest ()
394              {
395                      Form myform = new Form ();
396                      myform.ShowInTaskbar = false;
397                      myform.Visible = true;
398                      MyLabel l = new MyLabel ();
399                      l.Visible = true;
400                      myform.Controls.Add (l);
401                      l.KeyDown += new KeyEventHandler (Label_KeyDownEventHandler);
402                      l.KeyPressA ();
403
404                      Assert.AreEqual (true, eventhandled, "K1");
405                      eventhandled = false;
406                      myform.Dispose();
407              }
408
409            [Test]
410            public void TabStopChangedTest ()
411              {
412                      Form myform = new Form ();
413                      myform.ShowInTaskbar = false;
414                      myform.Visible = true;
415                      Label l = new Label ();
416                      l.Visible = true;
417                      myform.Controls.Add (l);
418                      l.TabStopChanged += new EventHandler (Label_EventHandler);
419                      l.TabStop = true;
420                      Assert.AreEqual (true, eventhandled, "T3");
421                      eventhandled = false;
422                      myform.Dispose();
423              }
424
425            [Test]
426            public void TextAlignChangedTest ()
427              {
428                      Form myform = new Form ();
429                      myform.ShowInTaskbar = false;
430                      myform.Visible = true;
431                      Label l = new Label ();
432                      l.Visible = true;
433                      myform.Controls.Add (l);
434                      l.TextAlignChanged += new EventHandler (Label_EventHandler);
435                      l.TextAlign = ContentAlignment.TopRight;
436                      Assert.AreEqual (true, eventhandled, "T4");
437                      eventhandled = false;
438                      myform.Dispose();
439              }
440    }
441
442 public class MyLabelInvalidate : MyLabel
443    {
444            //protected ArrayList results = new ArrayList ();
445     public MyLabelInvalidate () : base ()
446            {}
447
448            protected override void OnInvalidated (InvalidateEventArgs e)
449            {
450                    base.OnInvalidated (e);
451                    string res = (string)results [results.Count - 1];
452                    results [results.Count - 1 ] = string.Concat (res, "," + e.InvalidRect.ToString ());
453                    //results.Add ("OnInvalidate," + e.InvalidRect.ToString ());
454            }
455
456            //public ArrayList Results {
457            //   get {   return results; }
458            //}
459
460    }
461
462 public class MyLabel : Label
463    {
464            protected ArrayList results = new ArrayList ();
465     public MyLabel () : base ()
466            {    }
467
468            protected override void OnAutoSizeChanged (EventArgs e)
469            {
470                    results.Add ("OnAutoSizeChanged");
471                    base.OnAutoSizeChanged (e);
472            }
473
474            protected override void OnBackgroundImageChanged (EventArgs e)
475            {
476                    results.Add ("OnBackgroundImageChanged");
477                    base.OnBackgroundImageChanged (e);
478            }
479
480            protected override void OnImeModeChanged (EventArgs e)
481            {
482                    results.Add ("OnImeModeChanged");
483                    base.OnImeModeChanged (e);
484            }
485
486            protected override void OnKeyDown (KeyEventArgs e)
487            {
488                    results.Add ("OnKeyDown,"+(char)e.KeyValue);
489                    base.OnKeyDown (e);
490            }
491
492            protected override void OnKeyPress (KeyPressEventArgs e)
493            {
494                    results.Add ("OnKeyPress,"+e.KeyChar.ToString ());
495                    base.OnKeyPress (e);
496            }
497
498            protected override void OnKeyUp (KeyEventArgs e)
499            {
500                    results.Add ("OnKeyUp,"+(char)e.KeyValue);
501                    base.OnKeyUp (e);
502            }
503
504            protected override void OnHandleCreated (EventArgs e)
505            {
506                    results.Add ("OnHandleCreated");
507                    base.OnHandleCreated (e);
508            }
509
510            protected override void OnBindingContextChanged (EventArgs e)
511            {
512                    results.Add ("OnBindingContextChanged");
513                    base.OnBindingContextChanged (e);
514            }
515
516            protected override void OnInvalidated (InvalidateEventArgs e)
517            {
518                    results.Add("OnInvalidated");
519                    base.OnInvalidated (e);
520            }
521
522            protected override void OnResize (EventArgs e)
523            {
524                    results.Add("OnResize");
525                    base.OnResize (e);
526            }
527
528            protected override void OnSizeChanged (EventArgs e)
529            {
530                    results.Add("OnSizeChanged");
531                    base.OnSizeChanged (e);
532            }
533
534            protected override void OnLayout (LayoutEventArgs e)
535            {
536                    results.Add("OnLayout");
537                    base.OnLayout (e);
538            }
539
540            protected override void OnVisibleChanged (EventArgs e)
541            {
542                    results.Add("OnVisibleChanged");
543                    base.OnVisibleChanged (e);
544            }
545
546            protected override void OnPaint (PaintEventArgs e)
547            {
548                    results.Add("OnPaint");
549                    base.OnPaint (e);
550            }
551
552            public void KeyPressA()
553            {
554                    Message m;
555
556                    m = new Message();
557
558                    m.Msg = (int)WndMsg.WM_KEYDOWN;
559                    m.HWnd = this.Handle;
560                    m.WParam = (IntPtr)0x41;
561                    m.LParam = (IntPtr)0x1e0001;
562                    this.WndProc(ref m);
563
564                    m.Msg = (int)WndMsg.WM_CHAR;
565                    m.HWnd = this.Handle;
566                    m.WParam = (IntPtr)0x61;
567                    m.LParam = (IntPtr)0x1e0001;
568                    this.WndProc(ref m);
569
570                    m.Msg = (int)WndMsg.WM_KEYUP;
571                    m.HWnd = this.Handle;
572                    m.WParam = (IntPtr)0x41;
573                    m.LParam = (IntPtr)unchecked((int)0xC01e0001);
574                    this.WndProc(ref m);
575            }
576
577            public void KeyDownA()
578            {
579                    Message m;
580
581                    m = new Message();
582
583                    m.Msg = (int)WndMsg.WM_KEYDOWN;
584                    m.HWnd = this.Handle;
585                    m.WParam = (IntPtr)0x41;
586                    m.LParam = (IntPtr)0x1e0001;
587                    this.WndProc(ref m);
588
589                    m.Msg = (int)WndMsg.WM_CHAR;
590                    m.HWnd = this.Handle;
591                    m.WParam = (IntPtr)0x61;
592                    m.LParam = (IntPtr)0x1e0001;
593                    this.WndProc(ref m);
594            }
595
596            public void KeyUpA()
597            {
598                    Message m;
599
600                    m = new Message();
601
602                    m.Msg = (int)WndMsg.WM_KEYUP;
603                    m.HWnd = this.Handle;
604                    m.WParam = (IntPtr)0x41;
605                    m.LParam = (IntPtr)unchecked((int)0xC01e0001);
606                    this.WndProc(ref m);
607            }
608
609            public ArrayList Results {
610                    get {        return results; }
611            }
612    }
613
614    [TestFixture]
615    [Ignore("Comparisons too strict")]
616    public class LabelTestEventsOrder : TestHelper
617    {
618            public string [] ArrayListToString (ArrayList arrlist)
619            {
620                    string [] retval = new string [arrlist.Count];
621                    for (int i = 0; i < arrlist.Count; i++)
622                      retval[i] = (string)arrlist[i];
623                    return retval;
624            }
625
626         //private void OrderedAssert(string[] wanted, ArrayList found) {
627         //        int   last_target;
628         //        bool  seen;
629         //
630         //        last_target = 0;
631         //
632         //        for (int i = 0; i < wanted.Length; i++) {
633         //                seen = false;
634         //                for (int j = last_target; j < found.Count; j++) {
635         //                        if (wanted[i] == (string)found[j]) {
636         //                                seen = true;
637         //                                last_target = j + 1;
638         //                                break;
639         //                        }
640         //                }
641         //
642         //                if (!seen) {
643         //                        Console.WriteLine("Needed {0}", wanted[i]);
644         //                }
645         //        }
646         //}
647
648         public void PrintList(string name, ArrayList list) {
649                 Console.WriteLine("{0}", name);
650                 for (int i = 0; i < list.Count; i++) {
651                         Console.WriteLine("   {0}", list[i]);
652                 }
653                 Console.WriteLine("");
654         }
655
656
657            [Test]
658            public void CreateEventsOrder ()
659              {
660                      string[] EventsWanted = {
661                              "OnHandleCreated",
662                                "OnBindingContextChanged",
663                                "OnBindingContextChanged"
664                      };
665                      Form myform = new Form ();
666                      myform.ShowInTaskbar = false;
667                      myform.Visible = true;
668                      MyLabel l = new MyLabel ();
669                      myform.Controls.Add (l);
670
671                      Assert.AreEqual (EventsWanted, ArrayListToString (l.Results));
672                      myform.Dispose();
673              }
674
675            [Test]
676            public void SizeChangedEventsOrder ()
677              {
678                      string[] EventsWanted = {
679                              "OnHandleCreated",
680                                "OnBindingContextChanged",
681                                "OnBindingContextChanged",
682                                "OnSizeChanged",
683                                "OnResize",
684                                "OnInvalidated",
685                                "OnLayout"
686                      };
687                      Form myform = new Form ();
688                      myform.ShowInTaskbar = false;
689                      myform.Visible = true;
690                      MyLabel l = new MyLabel ();
691                      myform.Controls.Add (l);
692                      l.Size = new Size (150, 20);
693
694                      Assert.AreEqual (EventsWanted, ArrayListToString (l.Results));
695                      myform.Dispose();
696              }
697
698            [Test]
699            public void AutoSizeChangedEventsOrder ()
700              {
701                      string[] EventsWanted = {
702                              "OnHandleCreated",
703                                "OnBindingContextChanged",
704                                "OnBindingContextChanged",
705                                "OnSizeChanged",
706                                "OnResize",
707                                "OnInvalidated",
708                                "OnLayout",
709                                "OnAutoSizeChanged"
710                      };
711                      Form myform = new Form ();
712                      myform.ShowInTaskbar = false;
713                      myform.Visible = true;
714                      MyLabel l = new MyLabel ();
715                      myform.Controls.Add (l);
716                      l.AutoSize = true;
717
718                      Assert.AreEqual (EventsWanted, ArrayListToString (l.Results));
719                      myform.Dispose();
720              }
721
722            [Test]
723            public void BackgroundImageChangedEventsOrder ()
724              {
725                      string[] EventsWanted = {
726                              "OnHandleCreated",
727                                "OnBindingContextChanged",
728                                "OnBindingContextChanged",
729                                "OnBackgroundImageChanged",
730                                "OnInvalidated"
731                      };
732                      Form myform = new Form ();
733                      myform.ShowInTaskbar = false;
734                      myform.Visible = true;
735                      MyLabel l = new MyLabel ();
736                      myform.Controls.Add (l);
737                      l.BackgroundImage = Image.FromFile ("Test/System.Windows.Forms/bitmaps/a.png");
738
739                      Assert.AreEqual (EventsWanted, ArrayListToString (l.Results));
740                      myform.Dispose();
741              }
742
743            [Test]
744            public void ImeModeChangedChangedEventsOrder ()
745              {
746                      string[] EventsWanted = {
747                              "OnHandleCreated",
748                                "OnBindingContextChanged",
749                                "OnBindingContextChanged",
750                                "OnImeModeChanged"
751                      };
752                      Form myform = new Form ();
753                      myform.ShowInTaskbar = false;
754                      myform.Visible = true;
755                      MyLabel l = new MyLabel ();
756                      myform.Controls.Add (l);
757                      l.ImeMode = ImeMode.Katakana;
758
759                      Assert.AreEqual (EventsWanted, ArrayListToString (l.Results));
760                      myform.Dispose();
761              }
762
763            [Test]
764            public void KeyPressEventsOrder ()
765              {
766                      string[] EventsWanted = {
767                              "OnHandleCreated",
768                                "OnBindingContextChanged",
769                                "OnBindingContextChanged",
770                                "OnKeyDown,A",
771                                "OnKeyPress,a",
772                                "OnKeyUp,A"
773                      };
774                      Form myform = new Form ();
775                      myform.ShowInTaskbar = false;
776                      myform.Visible = true;
777                      MyLabel l = new MyLabel ();
778                      myform.Controls.Add (l);
779                      l.KeyPressA ();
780
781                      Assert.AreEqual (EventsWanted, ArrayListToString (l.Results));
782                      myform.Dispose();
783              }
784
785            [Test]
786            public void TabStopChangedEventsOrder ()
787              {
788                      string[] EventsWanted = {
789                              "OnHandleCreated",
790                                "OnBindingContextChanged",
791                                "OnBindingContextChanged"
792                      };
793                      Form myform = new Form ();
794                      myform.ShowInTaskbar = false;
795                      myform.Visible = true;
796                      MyLabel l = new MyLabel ();
797                      myform.Controls.Add (l);
798                      l.TabStop = true;
799 PrintList("TabStopChanged", l.Results);
800                      Assert.AreEqual (EventsWanted, ArrayListToString (l.Results));
801                      myform.Dispose();
802              }
803
804            [Test]
805            public void TextAlignChangedEventsOrder ()
806              {
807                      string[] EventsWanted = {
808                              "OnHandleCreated",
809                                "OnBindingContextChanged",
810                                "OnBindingContextChanged",
811                                "OnInvalidated"
812                      };
813                      Form myform = new Form ();
814                      myform.ShowInTaskbar = false;
815                      myform.Visible = true;
816                      MyLabel l = new MyLabel ();
817                      myform.Controls.Add (l);
818                      l.TextAlign = ContentAlignment.TopRight;
819
820                      Assert.AreEqual (EventsWanted, ArrayListToString (l.Results));
821                      myform.Dispose();
822              }
823
824            [Test]
825            public void InvalidateEventsOrder ()
826              {
827                      Rectangle rect = new Rectangle (new Point (0,0), new Size (2, 2));
828
829                      Form myform = new Form ();
830                      myform.ShowInTaskbar = false;
831                      myform.Visible = true;
832                      MyLabelInvalidate l = new MyLabelInvalidate ();
833                      myform.Controls.Add (l);
834                      l.TextAlign = ContentAlignment.TopRight;
835
836                      string [] EventsWanted = {
837                              "OnHandleCreated",
838                                "OnBindingContextChanged",
839                                "OnBindingContextChanged",
840                                "OnInvalidated,{X=0,Y=0,Width="+l.Size.Width+",Height="+l.Size.Height+"}",
841                                "OnInvalidated," + rect.ToString ()
842                      };
843
844                      l.Invalidate (rect);
845
846                      Assert.AreEqual (EventsWanted, ArrayListToString (l.Results));
847                      myform.Dispose();
848              }
849
850            [Test]
851            public void PaintEventsOrder ()
852              {
853                      string[] EventsWanted = {
854                              "OnHandleCreated",
855                                "OnBindingContextChanged",
856                                "OnBindingContextChanged",
857                                "OnInvalidated",
858                                "OnInvalidated",
859                                "OnPaint"
860                      };
861                      Form myform = new Form ();
862                      myform.ShowInTaskbar = false;
863                      myform.Visible = true;
864                      MyLabel l = new MyLabel ();
865                      myform.Controls.Add (l);
866                      l.TextAlign = ContentAlignment.TopRight;
867                      l.Refresh ();
868                      Assert.AreEqual (EventsWanted, ArrayListToString (l.Results));
869                      myform.Dispose();
870              }
871
872    }
873
874 public class MyLabel2 : Label
875    {
876            protected ArrayList results = new ArrayList ();
877     public MyLabel2 () : base ()
878            {
879                    this.AutoSizeChanged += new EventHandler (AutoSizeChanged_Handler);
880                    this.HandleCreated += new EventHandler (HandleCreated_Handler);
881                    this.BindingContextChanged += new EventHandler (BindingContextChanged_Handler);
882                    this.BackgroundImageChanged += new EventHandler (BackgroundImageChanged_Handler);
883                    this.ImeModeChanged += new EventHandler (ImeModeChanged_Handler);
884                    this.KeyDown += new KeyEventHandler (KeyDown_Handler);
885                    this.KeyPress += new KeyPressEventHandler (KeyPress_Handler);
886                    this.KeyUp += new KeyEventHandler (KeyUp_Handler);
887                    this.Invalidated += new InvalidateEventHandler (Invalidated_Handler);
888                    this.Resize += new EventHandler (Resize_Handler);
889                    this.SizeChanged += new EventHandler (SizeChanged_Handler);
890                    this.Layout += new LayoutEventHandler (Layout_Handler);
891                    this.VisibleChanged += new EventHandler (VisibleChanged_Handler);
892                    this.Paint += new PaintEventHandler (Paint_Handler);
893            }
894
895            protected void AutoSizeChanged_Handler (object sender, EventArgs e)
896            {
897                    results.Add ("AutoSizeChanged");
898            }
899
900            protected void BackgroundImageChanged_Handler (object sender, EventArgs e)
901            {
902                    results.Add ("BackgroundImageChanged");
903            }
904
905            protected void ImeModeChanged_Handler (object sender, EventArgs e)
906            {
907                    results.Add ("ImeModeChanged");
908            }
909
910            protected void KeyDown_Handler (object sender, KeyEventArgs e)
911            {
912                    results.Add ("KeyDown,"+(char)e.KeyValue);
913            }
914
915            protected void KeyPress_Handler (object sender, KeyPressEventArgs e)
916            {
917                    results.Add ("KeyPress,"+e.KeyChar.ToString ());
918            }
919
920            protected void KeyUp_Handler (object sender, KeyEventArgs e)
921            {
922                    results.Add ("KeyUp,"+(char)e.KeyValue);
923            }
924
925            protected void HandleCreated_Handler (object sender, EventArgs e)
926            {
927                    results.Add ("HandleCreated");
928            }
929
930            protected void BindingContextChanged_Handler (object sender, EventArgs e)
931            {
932                    results.Add ("BindingContextChanged");
933            }
934
935            protected void Invalidated_Handler (object sender, InvalidateEventArgs e)
936            {
937                    results.Add("Invalidated");
938            }
939
940            protected void Resize_Handler (object sender, EventArgs e)
941            {
942                    results.Add("Resize");
943            }
944
945            protected void SizeChanged_Handler (object sender, EventArgs e)
946            {
947                    results.Add("SizeChanged");
948            }
949
950            protected void Layout_Handler (object sender, LayoutEventArgs e)
951            {
952                    results.Add("Layout");
953            }
954
955            protected void VisibleChanged_Handler (object sender, EventArgs e)
956            {
957                    results.Add("VisibleChanged");
958            }
959
960            protected void Paint_Handler (object sender, PaintEventArgs e)
961            {
962                    results.Add("Paint");
963            }
964
965            public void KeyPressA()
966            {
967                    Message m;
968
969                    m = new Message();
970
971                    m.Msg = (int)WndMsg.WM_KEYDOWN;
972                    m.HWnd = this.Handle;
973                    m.WParam = (IntPtr)0x41;
974                    m.LParam = (IntPtr)0x1e0001;
975                    this.WndProc(ref m);
976
977                    m.Msg = (int)WndMsg.WM_CHAR;
978                    m.HWnd = this.Handle;
979                    m.WParam = (IntPtr)0x61;
980                    m.LParam = (IntPtr)0x1e0001;
981                    this.WndProc(ref m);
982
983                    m.Msg = (int)WndMsg.WM_KEYUP;
984                    m.HWnd = this.Handle;
985                    m.WParam = (IntPtr)0x41;
986                    m.LParam = (IntPtr)unchecked((int)0xC01e0001);
987                    this.WndProc(ref m);
988            }
989
990            public void KeyDownA()
991            {
992                    Message m;
993
994                    m = new Message();
995
996                    m.Msg = (int)WndMsg.WM_KEYDOWN;
997                    m.HWnd = this.Handle;
998                    m.WParam = (IntPtr)0x41;
999                    m.LParam = (IntPtr)0x1e0001;
1000                    this.WndProc(ref m);
1001
1002                    m.Msg = (int)WndMsg.WM_CHAR;
1003                    m.HWnd = this.Handle;
1004                    m.WParam = (IntPtr)0x61;
1005                    m.LParam = (IntPtr)0x1e0001;
1006                    this.WndProc(ref m);
1007            }
1008
1009            public void KeyUpA()
1010            {
1011                    Message m;
1012
1013                    m = new Message();
1014
1015                    m.Msg = (int)WndMsg.WM_KEYUP;
1016                    m.HWnd = this.Handle;
1017                    m.WParam = (IntPtr)0x41;
1018                    m.LParam = (IntPtr)unchecked((int)0xC01e0001);
1019                    this.WndProc(ref m);
1020            }
1021
1022            public ArrayList Results {
1023                    get {        return results; }
1024            }
1025    }
1026
1027    [TestFixture]
1028    [Ignore("Comparisons too strict")]
1029    public class LabelTestEventsOrder2 : TestHelper
1030    {
1031            public string [] ArrayListToString (ArrayList arrlist)
1032            {
1033                    string [] retval = new string [arrlist.Count];
1034                    for (int i = 0; i < arrlist.Count; i++)
1035                      retval[i] = (string)arrlist[i];
1036                    return retval;
1037            }
1038
1039            [Test]
1040            public void CreateEventsOrder ()
1041              {
1042                      string[] EventsWanted = {
1043                              "HandleCreated",
1044                                "BindingContextChanged",
1045                                "BindingContextChanged"
1046                      };
1047                      Form myform = new Form ();
1048                      myform.ShowInTaskbar = false;
1049                      myform.Visible = true;
1050                      MyLabel2 l = new MyLabel2 ();
1051                      myform.Controls.Add (l);
1052
1053                      Assert.AreEqual (EventsWanted, ArrayListToString (l.Results));
1054                      myform.Dispose();
1055              }
1056
1057            [Test]
1058            public void SizeChangedEventsOrder ()
1059              {
1060                      string[] EventsWanted = {
1061                              "HandleCreated",
1062                                "BindingContextChanged",
1063                                "BindingContextChanged",
1064                                "Invalidated",
1065                                "Layout",
1066                                "Resize",
1067                                "SizeChanged"
1068                      };
1069                      Form myform = new Form ();
1070                      myform.ShowInTaskbar = false;
1071                      myform.Visible = true;
1072                      MyLabel2 l = new MyLabel2 ();
1073                      myform.Controls.Add (l);
1074                      l.Size = new Size (150, 20);
1075
1076                      Assert.AreEqual (EventsWanted, ArrayListToString (l.Results));
1077                      myform.Dispose();
1078              }
1079
1080            [Test]
1081            public void AutoSizeChangedEventsOrder ()
1082              {
1083                      string[] EventsWanted = {
1084                              "HandleCreated",
1085                                "BindingContextChanged",
1086                                "BindingContextChanged",
1087                                "Invalidated",
1088                                "Layout",
1089                                "Resize",
1090                                "SizeChanged",
1091                                "AutoSizeChanged"
1092                      };
1093                      Form myform = new Form ();
1094                      myform.ShowInTaskbar = false;
1095                      myform.Visible = true;
1096                      MyLabel2 l = new MyLabel2 ();
1097                      myform.Controls.Add (l);
1098                      l.AutoSize = true;
1099
1100                      Assert.AreEqual (EventsWanted, ArrayListToString (l.Results));
1101                      myform.Dispose();
1102              }
1103
1104            [Test]
1105            public void BackgroundImageChangedEventsOrder ()
1106              {
1107                      string[] EventsWanted = {
1108                              "HandleCreated",
1109                                "BindingContextChanged",
1110                                "BindingContextChanged",
1111                                "Invalidated",
1112                                "BackgroundImageChanged"
1113                      };
1114                      Form myform = new Form ();
1115                      myform.ShowInTaskbar = false;
1116                      myform.Visible = true;
1117                      MyLabel2 l = new MyLabel2 ();
1118                      myform.Controls.Add (l);
1119                      l.BackgroundImage = Image.FromFile ("Test/System.Windows.Forms/bitmaps/a.png");
1120
1121                      Assert.AreEqual (EventsWanted, ArrayListToString (l.Results));
1122                      myform.Dispose();
1123              }
1124
1125            [Test]
1126            public void ImeModeChangedChangedEventsOrder ()
1127              {
1128                      string[] EventsWanted = {
1129                              "HandleCreated",
1130                                "BindingContextChanged",
1131                                "BindingContextChanged",
1132                                "ImeModeChanged"
1133                      };
1134                      Form myform = new Form ();
1135                      myform.ShowInTaskbar = false;
1136                      myform.Visible = true;
1137                      MyLabel2 l = new MyLabel2 ();
1138                      myform.Controls.Add (l);
1139                      l.ImeMode = ImeMode.Katakana;
1140
1141                      Assert.AreEqual (EventsWanted, ArrayListToString (l.Results));
1142                      myform.Dispose();
1143              }
1144
1145            [Test]
1146            public void KeyPressEventsOrder ()
1147              {
1148                      string[] EventsWanted = {
1149                              "HandleCreated",
1150                                "BindingContextChanged",
1151                                "BindingContextChanged",
1152                                "KeyDown,A",
1153                                "KeyPress,a",
1154                                "KeyUp,A"
1155                      };
1156                      Form myform = new Form ();
1157                      myform.ShowInTaskbar = false;
1158                      myform.Visible = true;
1159                      MyLabel2 l = new MyLabel2 ();
1160                      myform.Controls.Add (l);
1161                      l.KeyPressA ();
1162
1163                      Assert.AreEqual (EventsWanted, ArrayListToString (l.Results));
1164                      myform.Dispose();
1165              }
1166
1167            [Test]
1168            public void TabStopChangedEventsOrder ()
1169              {
1170                      string[] EventsWanted = {
1171                              "HandleCreated",
1172                                "BindingContextChanged",
1173                                "BindingContextChanged"
1174                      };
1175                      Form myform = new Form ();
1176                      myform.ShowInTaskbar = false;
1177                      myform.Visible = true;
1178                      MyLabel2 l = new MyLabel2 ();
1179                      myform.Controls.Add (l);
1180                      l.TabStop = true;
1181
1182                      Assert.AreEqual (EventsWanted, ArrayListToString (l.Results));
1183                      myform.Dispose();
1184              }
1185
1186            [Test]
1187            public void TextAlignChangedEventsOrder ()
1188              {
1189                      string[] EventsWanted = {
1190                              "HandleCreated",
1191                                "BindingContextChanged",
1192                                "BindingContextChanged",
1193                                "Invalidated"
1194                      };
1195                      Form myform = new Form ();
1196                      myform.ShowInTaskbar = false;
1197                      myform.Visible = true;
1198                      MyLabel2 l = new MyLabel2 ();
1199                      myform.Controls.Add (l);
1200                      l.TextAlign = ContentAlignment.TopRight;
1201
1202                      Assert.AreEqual (EventsWanted, ArrayListToString (l.Results));
1203                      myform.Dispose();
1204              }
1205
1206            [Test]
1207            public void PaintEventsOrder ()
1208              {
1209                      string[] EventsWanted = {
1210                              "HandleCreated",
1211                                "BindingContextChanged",
1212                                "BindingContextChanged",
1213                                "Invalidated",
1214                                "Invalidated",
1215                                "Paint"
1216                      };
1217                      Form myform = new Form ();
1218                      myform.ShowInTaskbar = false;
1219                      myform.Visible = true;
1220                      MyLabel2 l = new MyLabel2 ();
1221                      myform.Controls.Add (l);
1222                      l.TextAlign = ContentAlignment.TopRight;
1223                      l.Refresh ();
1224                      Assert.AreEqual (EventsWanted, ArrayListToString (l.Results));
1225                      myform.Dispose();
1226              }
1227
1228    }
1229
1230 }