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