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