2007-03-14 Andreia Gaita <avidigal@novell.com>
[mono.git] / mcs / class / Managed.Windows.Forms / Test / System.Windows.Forms / TabControlTest.cs
1 //
2 // TabControlTest.cs: Test cases for TabControl.
3 //
4 // Author:
5 //   Ritvik Mayank (mritvik@novell.com)
6 //
7 // (C) 2005 Novell, Inc. (http://www.novell.com)
8 //
9
10 using System;
11 using System.Drawing;
12 using System.Windows.Forms;
13
14 using NUnit.Framework;
15
16 namespace MonoTests.System.Windows.Forms
17 {
18         [TestFixture]
19         public class TabControlTest
20         {
21                 private int _selected_index_changed = 0;
22
23                 private class TabControlPoker : TabControl {
24
25                         public bool CheckIsInputKey (Keys key)
26                         {
27                                 return IsInputKey (key);
28                         }
29
30                         protected override void WndProc (ref Message m)
31                         {
32                                 base.WndProc (ref m);
33                         }
34                 }
35
36                 [SetUp]
37                 public void SetUp ()
38                 {
39                         _selected_index_changed = 0;
40                 }
41
42                 [Test]
43                 public void TabControlPropertyTest ()
44                 {
45                         Form myForm = new Form ();
46                         myForm.ShowInTaskbar = false;
47                         TabControl myTabControl = new TabControl ();
48                         myTabControl.Visible = true;
49                         myTabControl.Name = "Mono TabControl";
50                 
51                         // A 
52                         Assert.AreEqual (TabAlignment.Top, myTabControl.Alignment, "A1");
53                         Assert.AreEqual (TabAppearance.Normal, myTabControl.Appearance, "#A2");
54                 
55                         // D 
56                         Assert.AreEqual (TabDrawMode.Normal, myTabControl.DrawMode, "#D5");
57                 
58                         // H
59                         Assert.AreEqual (false, myTabControl.HotTrack, "#H1");
60                 
61                         // I 
62                         Assert.AreEqual (null, myTabControl.ImageList, "#I1");
63
64                         // M 
65                         Assert.AreEqual (false, myTabControl.Multiline, "#M1");
66                 
67                         // P
68                         Assert.AreEqual (6, myTabControl.Padding.X, "#P1");
69                         Assert.AreEqual (3, myTabControl.Padding.Y, "#P1");
70
71                         // R
72                         Assert.AreEqual (0, myTabControl.RowCount, "#R1");
73
74                         // S
75                         Assert.AreEqual (-1, myTabControl.SelectedIndex, "#S1");
76                         Assert.AreEqual (null, myTabControl.SelectedTab, "#S2");
77                         Assert.AreEqual (false, myTabControl.ShowToolTips, "#S3");
78                         Assert.AreEqual (TabSizeMode.Normal, myTabControl.SizeMode, "#S4");
79
80                         // T
81                         Assert.AreEqual (0, myTabControl.TabCount, "#T1");
82                         Assert.AreEqual (0, myTabControl.TabPages.Count, "#T2");
83
84                         myForm.Dispose ();
85                 }
86
87                 [Test]
88                 [Category ("NotWorking")]
89                 public void GetTabRectTest ()
90                 {
91                         TabControl myTabControl = new TabControl ();
92                         TabPage myTabPage = new TabPage();
93                         myTabControl.Controls.Add(myTabPage);
94                         myTabPage.TabIndex = 0;
95                         Rectangle myTabRect = myTabControl.GetTabRect (0);
96                         Assert.AreEqual (2, myTabRect.X, "#GetT1");
97                         Assert.AreEqual (2, myTabRect.Y, "#GetT2");
98                         Assert.AreEqual (42, myTabRect.Width, "#GetT3");
99                         // It is environment dependent
100                         //Assert.AreEqual (18, myTabRect.Height, "#GetT4");
101                 }
102
103                 [Test]
104                 public void ToStringTest ()
105                 {
106                         TabControl myTabControl = new TabControl ();
107                         Assert.AreEqual ("System.Windows.Forms.TabControl, TabPages.Count: 0", myTabControl.ToString(), "#1");
108                 }
109
110                 [Test]
111                 public void ClearTabPagesTest ()
112                 {
113                         // no tab pages
114                         TabControl tab = new TabControl ();
115                         tab.TabPages.Clear ();
116                         Assert.AreEqual (-1, tab.SelectedIndex, "#A1");
117                         Assert.AreEqual (0, tab.TabPages.Count, "#A2");
118
119                         // single tab page
120                         tab.Controls.Add (new TabPage ());
121                         Assert.AreEqual (0, tab.SelectedIndex, "#B1");
122                         Assert.AreEqual (1, tab.TabPages.Count, "#B2");
123                         tab.TabPages.Clear();
124                         Assert.AreEqual (-1, tab.SelectedIndex, "#B3");
125                         Assert.AreEqual (0, tab.TabPages.Count, "#B4");
126
127                         // multiple tab pages
128                         tab.Controls.Add (new TabPage ());
129                         tab.Controls.Add (new TabPage ());
130                         tab.Controls.Add (new TabPage ());
131                         Assert.AreEqual (0, tab.SelectedIndex, "#C1");
132                         Assert.AreEqual (3, tab.TabPages.Count, "#C2");
133                         tab.SelectedIndex = 1;
134                         tab.TabPages.Clear ();
135                         Assert.AreEqual (-1, tab.SelectedIndex, "#C3");
136                         Assert.AreEqual (0, tab.TabPages.Count, "#C4");
137                 }
138
139                 [Test]
140                 [Category ("NotWorking")]
141                 public void Controls_Remove_HandleCreated ()
142                 {
143                         TabControl tab = new TabControl ();
144                         tab.SelectedIndexChanged += new EventHandler (SelectedIndexChanged);
145
146                         Form form = new Form ();
147                         form.ShowInTaskbar = false;
148                         form.Controls.Add (tab);
149                         form.Show ();
150
151                         tab.Controls.Add (new TabPage ());
152                         tab.Controls.Add (new TabPage ());
153                         tab.Controls.Add (new TabPage ());
154                         tab.Controls.Add (new TabPage ());
155                         tab.Controls.Add (new TabPage ());
156                         tab.Controls.Add (new TabPage ());
157
158                         Assert.AreEqual (0, tab.SelectedIndex, "#A1");
159                         Assert.AreEqual (6, tab.TabPages.Count, "#A2");
160                         Assert.AreEqual (0, _selected_index_changed, "#A3");
161
162                         // remove selected tab
163                         tab.SelectedIndex = 2;
164                         Assert.AreEqual (2, tab.SelectedIndex, "#B1");
165                         Assert.AreEqual (1, _selected_index_changed, "#B2");
166                         tab.Controls.RemoveAt (2);
167 #if NET_2_0
168                         Assert.AreEqual (0, tab.SelectedIndex, "#B3");
169 #else
170                         Assert.AreEqual (1, tab.SelectedIndex, "#B3");
171 #endif
172                         Assert.AreEqual (5, tab.TabPages.Count, "#B4");
173                         Assert.AreEqual (2, _selected_index_changed, "#B5");
174
175                         // remove not-selected tab
176 #if NET_2_0
177                         Assert.AreEqual (0, tab.SelectedIndex, "#C1");
178 #else
179                         Assert.AreEqual (1, tab.SelectedIndex, "#C1");
180 #endif
181                         Assert.AreEqual (2, _selected_index_changed, "#C2");
182                         tab.Controls.RemoveAt (3);
183 #if NET_2_0
184                         Assert.AreEqual (0, tab.SelectedIndex, "#C3");
185 #else
186                         Assert.AreEqual (2, tab.SelectedIndex, "#C3");
187 #endif
188                         Assert.AreEqual (4, tab.TabPages.Count, "#C4");
189 #if NET_2_0
190                         Assert.AreEqual (2, _selected_index_changed, "#C5");
191 #else
192                         Assert.AreEqual (3, _selected_index_changed, "#C5");
193 #endif
194
195                         // remove last tab
196                         tab.Controls.RemoveAt (3);
197 #if NET_2_0
198                         Assert.AreEqual (0, tab.SelectedIndex, "#D1");
199 #else
200                         Assert.AreEqual (2, tab.SelectedIndex, "#D1");
201 #endif
202                         Assert.AreEqual (3, tab.TabPages.Count, "#D2");
203 #if NET_2_0
204                         Assert.AreEqual (2, _selected_index_changed, "#D3");
205 #else
206                         Assert.AreEqual (3, _selected_index_changed, "#D3");
207 #endif
208
209                         // remove first tab
210                         tab.Controls.RemoveAt (0);
211                         Assert.AreEqual (0, tab.SelectedIndex, "#E1");
212                         Assert.AreEqual (2, tab.TabPages.Count, "#E2");
213 #if NET_2_0
214                         Assert.AreEqual (3, _selected_index_changed, "#E3");
215 #else
216                         Assert.AreEqual (4, _selected_index_changed, "#E3");
217 #endif
218
219                         // remove remaining tabs
220                         tab.Controls.RemoveAt (1);
221                         tab.Controls.RemoveAt (0);
222                         Assert.AreEqual (-1, tab.SelectedIndex, "#F1");
223                         Assert.AreEqual (0, tab.TabPages.Count, "#F2");
224 #if NET_2_0
225                         Assert.AreEqual (4, _selected_index_changed, "#F3");
226 #else
227                         Assert.AreEqual (5, _selected_index_changed, "#F3");
228 #endif
229                 }
230
231                 [Test]
232                 [Category ("NotWorking")]
233                 public void Controls_Remove_HandleNotCreated ()
234                 {
235                         TabControl tab = new TabControl ();
236                         tab.SelectedIndexChanged += new EventHandler (SelectedIndexChanged);
237                         tab.Controls.Add (new TabPage ());
238                         tab.Controls.Add (new TabPage ());
239                         tab.Controls.Add (new TabPage ());
240                         tab.Controls.Add (new TabPage ());
241                         tab.Controls.Add (new TabPage ());
242                         tab.Controls.Add (new TabPage ());
243
244                         Assert.AreEqual (-1, tab.SelectedIndex, "#A1");
245                         Assert.AreEqual (6, tab.TabPages.Count, "#A2");
246                         Assert.AreEqual (0, _selected_index_changed, "#A3");
247
248                         // remove selected tab
249                         tab.SelectedIndex = 2;
250                         Assert.AreEqual (2, tab.SelectedIndex, "#B1");
251 #if NET_2_0
252                         Assert.AreEqual (0, _selected_index_changed, "#B2");
253 #else
254                         Assert.AreEqual (1, _selected_index_changed, "#B2");
255 #endif
256                         tab.Controls.RemoveAt (2);
257 #if NET_2_0
258                         Assert.AreEqual (0, tab.SelectedIndex, "#B3");
259 #else
260                         Assert.AreEqual (1, tab.SelectedIndex, "#B3");
261 #endif
262                         Assert.AreEqual (5, tab.TabPages.Count, "#B4");
263 #if NET_2_0
264                         Assert.AreEqual (0, _selected_index_changed, "#B5");
265 #else
266                         Assert.AreEqual (2, _selected_index_changed, "#B5");
267 #endif
268
269                         // remove not-selected tab
270                         tab.Controls.RemoveAt (3);
271 #if NET_2_0
272                         Assert.AreEqual (0, tab.SelectedIndex, "#C3");
273 #else
274                         Assert.AreEqual (2, tab.SelectedIndex, "#C3");
275 #endif
276                         Assert.AreEqual (4, tab.TabPages.Count, "#C4");
277 #if NET_2_0
278                         Assert.AreEqual (0, _selected_index_changed, "#C5");
279 #else
280                         Assert.AreEqual (3, _selected_index_changed, "#C5");
281 #endif
282
283                         // remove last tab
284                         tab.Controls.RemoveAt (3);
285 #if NET_2_0
286                         Assert.AreEqual (0, tab.SelectedIndex, "#D1");
287 #else
288                         Assert.AreEqual (2, tab.SelectedIndex, "#D1");
289 #endif
290                         Assert.AreEqual (3, tab.TabPages.Count, "#D2");
291 #if NET_2_0
292                         Assert.AreEqual (0, _selected_index_changed, "#D3");
293 #else
294                         Assert.AreEqual (3, _selected_index_changed, "#D3");
295 #endif
296
297                         // remove first tab
298                         tab.Controls.RemoveAt (0);
299                         Assert.AreEqual (0, tab.SelectedIndex, "#E1");
300                         Assert.AreEqual (2, tab.TabPages.Count, "#E2");
301 #if NET_2_0
302                         Assert.AreEqual (0, _selected_index_changed, "#E3");
303 #else
304                         Assert.AreEqual (4, _selected_index_changed, "#E3");
305 #endif
306
307                         // remove remaining tabs
308                         tab.Controls.RemoveAt (1);
309                         tab.Controls.RemoveAt (0);
310                         Assert.AreEqual (0, tab.SelectedIndex, "#F1");
311                         Assert.AreEqual (0, tab.TabPages.Count, "#F2");
312 #if NET_2_0
313                         Assert.AreEqual (0, _selected_index_changed, "#F3");
314 #else
315                         Assert.AreEqual (4, _selected_index_changed, "#F3");
316 #endif
317
318                         Form form = new Form ();
319                         form.ShowInTaskbar = false;
320                         form.Controls.Add (tab);
321                         form.Show ();
322                         Assert.AreEqual (-1, tab.SelectedIndex, "#G1");
323                         Assert.AreEqual (0, tab.TabPages.Count, "#G2");
324 #if NET_2_0
325                         Assert.AreEqual (0, _selected_index_changed, "#G3");
326 #else
327                         Assert.AreEqual (4, _selected_index_changed, "#G3");
328 #endif
329                 }
330
331                 [Test]
332                 public void SelectedIndex ()
333                 {
334                         TabControl tab = new TabControl ();
335                         tab.SelectedIndexChanged += new EventHandler (SelectedIndexChanged);
336                         tab.Controls.Add (new TabPage ());
337                         tab.Controls.Add (new TabPage ());
338
339                         tab.SelectedIndex = 0;
340 #if NET_2_0
341                         Assert.AreEqual (0, _selected_index_changed, "#A1");
342 #else
343                         Assert.AreEqual (1, _selected_index_changed, "#A1");
344 #endif
345                         Assert.AreEqual (0, tab.SelectedIndex, "#A2");
346
347                         tab.SelectedIndex = -1;
348 #if NET_2_0
349                         Assert.AreEqual (0, _selected_index_changed, "#B1");
350 #else
351                         Assert.AreEqual (2, _selected_index_changed, "#B1");
352 #endif
353                         Assert.AreEqual (-1, tab.SelectedIndex, "#B2");
354
355                         tab.SelectedIndex = 1;
356 #if NET_2_0
357                         Assert.AreEqual (0, _selected_index_changed, "#C1");
358 #else
359                         Assert.AreEqual (3, _selected_index_changed, "#C1");
360 #endif
361                         Assert.AreEqual (1, tab.SelectedIndex, "#C2");
362
363                         tab.SelectedIndex = 1;
364 #if NET_2_0
365                         Assert.AreEqual (0, _selected_index_changed, "#D1");
366 #else
367                         Assert.AreEqual (3, _selected_index_changed, "#D1");
368 #endif
369                         Assert.AreEqual (1, tab.SelectedIndex, "#D2");
370
371
372                         tab.SelectedIndex = 6;
373 #if NET_2_0
374                         Assert.AreEqual (0, _selected_index_changed, "#E1");
375 #else
376                         Assert.AreEqual (4, _selected_index_changed, "#E1");
377 #endif
378                         Assert.AreEqual (6, tab.SelectedIndex, "#E2");
379
380                         tab.SelectedIndex = 6;
381 #if NET_2_0
382                         Assert.AreEqual (0, _selected_index_changed, "#E31");
383 #else
384                         Assert.AreEqual (4, _selected_index_changed, "#E3");
385 #endif
386                         Assert.AreEqual (6, tab.SelectedIndex, "#E4");
387
388                         Form form = new Form ();
389                         form.ShowInTaskbar = false;
390                         form.Controls.Add (tab);
391
392                         form.Show ();
393
394                         Assert.AreEqual (0, tab.SelectedIndex, "#E5");
395
396                         tab.SelectedIndex = 0;
397 #if NET_2_0
398                         Assert.AreEqual (0, _selected_index_changed, "#F1");
399 #else
400                         Assert.AreEqual (4, _selected_index_changed, "#F1");
401 #endif
402                         Assert.AreEqual (0, tab.SelectedIndex, "#F2");
403
404                         tab.SelectedIndex = -1;
405 #if NET_2_0
406                         Assert.AreEqual (1, _selected_index_changed, "#G1");
407 #else
408                         Assert.AreEqual (5, _selected_index_changed, "#G1");
409 #endif
410                         Assert.AreEqual (-1, tab.SelectedIndex, "#G2");
411
412                         tab.SelectedIndex = 1;
413 #if NET_2_0
414                         Assert.AreEqual (2, _selected_index_changed, "#H1");
415 #else
416                         Assert.AreEqual (6, _selected_index_changed, "#H1");
417 #endif
418                         Assert.AreEqual (1, tab.SelectedIndex, "#H2");
419
420                         tab.SelectedIndex = 1;
421 #if NET_2_0
422                         Assert.AreEqual (2, _selected_index_changed, "#I1");
423 #else
424                         Assert.AreEqual (6, _selected_index_changed, "#I1");
425 #endif
426                         Assert.AreEqual (1, tab.SelectedIndex, "#I2");
427
428                         form.Dispose ();
429                 }
430
431                 [Test] // bug #78395
432                 public void SelectedIndex_Ignore ()
433                 {
434                         TabControl c = new TabControl ();
435                         c.SelectedIndexChanged += new EventHandler (SelectedIndexChanged);
436                         c.SelectedIndex = 0;
437 #if NET_2_0
438                         Assert.AreEqual (0, _selected_index_changed, "#1");
439 #else
440                         Assert.AreEqual (1, _selected_index_changed, "#1");
441 #endif
442
443                         c.TabPages.Add (new TabPage ());
444                         c.TabPages.Add (new TabPage ());
445                         Assert.AreEqual (0, c.SelectedIndex, "#2");
446                         Form f = new Form ();
447                         f.ShowInTaskbar = false;
448                         f.Controls.Add (c);
449                         f.Show ();
450 #if NET_2_0
451                         Assert.AreEqual (0, _selected_index_changed, "#3");
452 #else
453                         Assert.AreEqual (1, _selected_index_changed, "#3");
454 #endif
455                         c.SelectedIndex = 2; // beyond the pages - ignored
456 #if NET_2_0
457                         Assert.AreEqual (1, _selected_index_changed, "#4");
458 #else
459                         Assert.AreEqual (2, _selected_index_changed, "#4");
460 #endif
461                         Assert.AreEqual (0, c.SelectedIndex, "#4");
462                         f.Dispose ();
463                 }
464
465                 [Test]
466                 public void SelectedIndex_Negative ()
467                 {
468                         Form form = new Form ();
469                         form.ShowInTaskbar = false;
470                         TabControl tab = new TabControl ();
471                         tab.SelectedIndexChanged += new EventHandler (SelectedIndexChanged);
472                         form.Controls.Add (tab);
473
474                         Assert.AreEqual (-1, tab.SelectedIndex, "#A1");
475                         tab.SelectedIndex = -1;
476                         Assert.AreEqual (-1, tab.SelectedIndex, "#A2");
477                         Assert.AreEqual (0, _selected_index_changed, "#A3");
478
479                         try {
480                                 tab.SelectedIndex = -2;
481                                 Assert.Fail ("#B1");
482 #if NET_2_0
483                         } catch (ArgumentOutOfRangeException ex) {
484                                 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
485                                 Assert.IsNotNull (ex.Message, "#B3");
486                                 Assert.IsTrue (ex.Message.IndexOf ("'-2'") != -1, "#B4");
487                                 Assert.IsTrue (ex.Message.IndexOf ("'SelectedIndex'") != -1, "#B5");
488                                 Assert.IsTrue (ex.Message.IndexOf ("-1") != -1, "#B6");
489                                 Assert.IsNotNull (ex.ParamName, "#B7");
490                                 Assert.AreEqual ("SelectedIndex", ex.ParamName, "#B8");
491                         }
492 #else
493                         } catch (ArgumentException ex) {
494                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
495                                 Assert.IsNotNull (ex.Message, "#B3");
496                                 Assert.IsTrue (ex.Message.IndexOf ("'-2'") != -1, "#B4");
497                                 Assert.IsTrue (ex.Message.IndexOf ("'value'") != -1, "#B5");
498                                 Assert.IsTrue (ex.Message.IndexOf ("-1") != -1, "#B6");
499                                 Assert.IsNull (ex.ParamName, "#B7");
500                         }
501 #endif
502
503                         Assert.AreEqual (0, _selected_index_changed, "#C1");
504                         Assert.AreEqual (-1, tab.SelectedIndex, "#C2");
505                         form.Show ();
506                         Assert.AreEqual (0, _selected_index_changed, "#C3");
507                         Assert.AreEqual (-1, tab.SelectedIndex, "#C4");
508
509                         try {
510                                 tab.SelectedIndex = -5;
511                                 Assert.Fail ("#D1");
512 #if NET_2_0
513                         } catch (ArgumentOutOfRangeException ex) {
514                                 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#D2");
515                                 Assert.IsNotNull (ex.Message, "#D3");
516                                 Assert.IsTrue (ex.Message.IndexOf ("'-5'") != -1, "#D4");
517                                 Assert.IsTrue (ex.Message.IndexOf ("'SelectedIndex'") != -1, "#D5");
518                                 Assert.IsTrue (ex.Message.IndexOf ("-1") != -1, "#D6");
519                                 Assert.IsNotNull (ex.ParamName, "#D7");
520                                 Assert.AreEqual ("SelectedIndex", ex.ParamName, "#D8");
521                         }
522 #else
523                         } catch (ArgumentException ex) {
524                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#D2");
525                                 Assert.IsNotNull (ex.Message, "#D3");
526                                 Assert.IsTrue (ex.Message.IndexOf ("'-5'") != -1, "#D4");
527                                 Assert.IsTrue (ex.Message.IndexOf ("'value'") != -1, "#D5");
528                                 Assert.IsTrue (ex.Message.IndexOf ("-1") != -1, "#D6");
529                                 Assert.IsNull (ex.ParamName, "#D7");
530                         }
531 #endif
532
533                         Assert.AreEqual (-1, tab.SelectedIndex, "#E1");
534                         tab.SelectedIndex = -1;
535                         Assert.AreEqual (-1, tab.SelectedIndex, "#E2");
536                         Assert.AreEqual (0, _selected_index_changed, "#E3");
537
538                         form.Dispose ();
539                 }
540
541                 [Test]
542                 [Category ("NotWorking")]
543                 public void InputKeyTest ()
544                 {
545                         TabControlPoker p = new TabControlPoker ();
546
547                         foreach (Keys key in Enum.GetValues (typeof (Keys))) {
548                                 switch (key) {
549                                 case Keys.PageUp:
550                                 case Keys.PageDown:
551                                 case Keys.End:
552                                 case Keys.Home:
553                                         continue;
554                                 }
555                                 Assert.IsFalse (p.CheckIsInputKey (key), "FALSE- " + key);
556                         }
557
558                         Assert.IsTrue (p.CheckIsInputKey (Keys.PageUp), "TRUE-pageup");
559                         Assert.IsTrue (p.CheckIsInputKey (Keys.PageDown), "TRUE-pagedown");
560                         Assert.IsTrue (p.CheckIsInputKey (Keys.End), "TRUE-end");
561                         Assert.IsTrue (p.CheckIsInputKey (Keys.Home), "TRUE-home");
562
563                         // Create the handle, things are a little different with
564                         // the handle created
565                         IntPtr dummy = p.Handle;
566                         
567                         TestHelper.RemoveWarning (dummy);
568
569                         foreach (Keys key in Enum.GetValues (typeof (Keys))) {
570                                 switch (key) {
571                                 case Keys.Left:
572                                 case Keys.Right:
573                                 case Keys.Up:
574                                 case Keys.Down:
575                                 case Keys.PageUp:
576                                 case Keys.PageDown:
577                                 case Keys.End:
578                                 case Keys.Home:
579                                         continue;
580                                 }
581                                 Assert.IsFalse (p.CheckIsInputKey (key), "PH-FALSE- " + key);
582                         }
583
584                         Assert.IsTrue (p.CheckIsInputKey (Keys.Left), "PH-TRUE-left");
585                         Assert.IsTrue (p.CheckIsInputKey (Keys.Right), "PH-TRUE-right");
586                         Assert.IsTrue (p.CheckIsInputKey (Keys.Up), "PH-TRUE-up");
587                         Assert.IsTrue (p.CheckIsInputKey (Keys.Down), "PH-TRUE-down");
588                         Assert.IsTrue (p.CheckIsInputKey (Keys.PageUp), "PH-TRUE-pageup");
589                         Assert.IsTrue (p.CheckIsInputKey (Keys.PageDown), "PH-TRUE-pagedown");
590                         Assert.IsTrue (p.CheckIsInputKey (Keys.End), "PH-TRUE-end");
591                         Assert.IsTrue (p.CheckIsInputKey (Keys.Home), "PH-TRUE-home");
592                 }
593
594                 [Test] // bug #79847
595                 public void NoTabPages ()
596                 {
597                         Form form = new Form ();
598                         TabControl tab = new TabControl ();
599                         tab.SelectedIndex = 0;
600                         Assert.AreEqual (0, tab.SelectedIndex, "#A1");
601
602                         form.Controls.Add (tab);
603
604                         Assert.AreEqual (0, tab.SelectedIndex, "#A2");
605
606                         form.ShowInTaskbar = false;
607                         form.Show ();
608
609                         Assert.AreEqual (-1, tab.SelectedIndex, "#A3");
610
611                         form.Dispose ();
612                 }
613
614                 private void SelectedIndexChanged (object sender, EventArgs e)
615                 {
616                         _selected_index_changed++;
617                 }
618                 
619 #if NET_2_0
620                 [Test]
621                 public void MethodSelectTab ()
622                 {
623                         TabControl tc = new TabControl ();
624                         tc.TabPages.Add (new TabPage ("One"));
625                         tc.TabPages.Add (new TabPage ("Two"));
626                         
627                         tc.SelectTab (1);
628                         Assert.AreEqual (1, tc.SelectedIndex, "A1");
629                 }
630
631                 [Test]
632                 [ExpectedException (typeof (ArgumentOutOfRangeException))]
633                 public void MethodSelectTabAOORE ()
634                 {
635                         TabControl tc = new TabControl ();
636                         tc.TabPages.Add (new TabPage ("One"));
637                         tc.TabPages.Add (new TabPage ("Two"));
638
639                         tc.SelectTab (-1);
640                 }
641
642                 [Test]
643                 [ExpectedException (typeof (ArgumentOutOfRangeException))]
644                 public void MethodSelectTabAOORE2 ()
645                 {
646                         TabControl tc = new TabControl ();
647                         tc.TabPages.Add (new TabPage ("One"));
648                         tc.TabPages.Add (new TabPage ("Two"));
649
650                         tc.SelectTab (2);
651                 }
652
653                 [Test]
654                 public void EventSelected ()
655                 {
656                         Form f = new Form ();
657                         TabControl tc = new TabControl ();
658                         TabControlEventArgs tcea1 = new TabControlEventArgs (null, 0, TabControlAction.Deselected);
659                         TabControlEventArgs tcea2 = new TabControlEventArgs (null, 0, TabControlAction.Selected);
660                         TabControlCancelEventArgs tccea1 = new TabControlCancelEventArgs (null, 0, false, TabControlAction.Deselecting);
661                         TabControlCancelEventArgs tccea2 = new TabControlCancelEventArgs (null, 0, false, TabControlAction.Selecting);
662                         
663                         f.Controls.Add (tc);
664                         string events = string.Empty;
665                         tc.SelectedIndexChanged += new EventHandler (delegate (Object obj, EventArgs e) { events += ("SelectedIndexChanged;"); });
666                         tc.Deselecting += new TabControlCancelEventHandler (delegate (Object obj, TabControlCancelEventArgs e) { events += ("Deselecting;"); tccea1 = e; });
667                         tc.Deselected += new TabControlEventHandler (delegate (Object obj, TabControlEventArgs e) { events += ("Deselected;"); tcea1 = e; });
668                         tc.Selecting += new TabControlCancelEventHandler (delegate (Object obj, TabControlCancelEventArgs e) { events += ("Selecting;"); tccea2 = e; });
669                         tc.Selected += new TabControlEventHandler (delegate (Object obj, TabControlEventArgs e) { events += ("Selected;"); tcea2 = e; });
670                         
671                         TabPage tp1 = new TabPage ("One");
672                         TabPage tp2 = new TabPage ("Two");
673                         
674                         tc.TabPages.Add (tp1);
675                         tc.TabPages.Add (tp2);
676                         
677                         f.Show ();
678                         tc.SelectTab (1);
679                         Assert.AreEqual ("Deselecting;Deselected;Selecting;Selected;SelectedIndexChanged;", events, "A1");
680                         Assert.AreEqual (TabControlAction.Deselecting, tccea1.Action, "A2");
681                         Assert.AreEqual (TabControlAction.Deselected, tcea1.Action, "A2");
682                         Assert.AreEqual (TabControlAction.Selecting, tccea2.Action, "A2");
683                         Assert.AreEqual (TabControlAction.Selected, tcea2.Action, "A2");
684                         Assert.AreSame (tp2, tcea2.TabPage, "A3");
685                         Assert.AreEqual (1, tcea2.TabPageIndex, "A4");
686                         f.Close ();
687                 }
688 #endif
689         }
690 }