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