2 // TabControlTest.cs: Test cases for TabControl.
5 // Ritvik Mayank (mritvik@novell.com)
7 // (C) 2005 Novell, Inc. (http://www.novell.com)
12 using System.Windows.Forms;
14 using NUnit.Framework;
16 namespace MonoTests.System.Windows.Forms
19 public class TabControlTest : TestHelper
21 private int _selected_index_changed = 0;
23 private class TabControlPoker : TabControl {
25 public bool CheckIsInputKey (Keys key)
27 return IsInputKey (key);
30 protected override void WndProc (ref Message m)
37 protected override void SetUp () {
38 _selected_index_changed = 0;
43 public void TabControlPropertyTest ()
45 Form myForm = new Form ();
46 myForm.ShowInTaskbar = false;
47 TabControl myTabControl = new TabControl ();
48 myTabControl.Visible = true;
49 myTabControl.Name = "Mono TabControl";
52 Assert.AreEqual (TabAlignment.Top, myTabControl.Alignment, "A1");
53 Assert.AreEqual (TabAppearance.Normal, myTabControl.Appearance, "#A2");
56 Assert.AreEqual (TabDrawMode.Normal, myTabControl.DrawMode, "#D5");
59 Assert.AreEqual (false, myTabControl.HotTrack, "#H1");
62 Assert.AreEqual (null, myTabControl.ImageList, "#I1");
65 Assert.AreEqual (false, myTabControl.Multiline, "#M1");
68 Assert.AreEqual (6, myTabControl.Padding.X, "#P1");
69 Assert.AreEqual (3, myTabControl.Padding.Y, "#P1");
72 Assert.AreEqual (0, myTabControl.RowCount, "#R1");
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");
81 Assert.AreEqual (0, myTabControl.TabCount, "#T1");
82 Assert.AreEqual (0, myTabControl.TabPages.Count, "#T2");
88 [Category ("NotWorking")]
89 public void GetTabRectTest ()
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");
104 public void ToStringTest ()
106 TabControl myTabControl = new TabControl ();
107 Assert.AreEqual ("System.Windows.Forms.TabControl, TabPages.Count: 0", myTabControl.ToString(), "#1");
111 public void ItemSizeTestPadding ()
113 TabControl tc = new TabControl ();
114 tc.TabPages.Add ("One"); // Need to add a page to force to calc the width
115 tc.CreateControl (); // And create the control as well
117 Assert.IsTrue (tc.ItemSize != Size.Empty, "#A0");
119 Size item_size = tc.ItemSize;
120 tc.Padding = new Point (tc.Padding.X * 2, tc.Padding.Y * 2);
122 Assert.IsTrue (tc.ItemSize.Height > item_size.Height, "#B0");
123 Assert.IsTrue (tc.ItemSize.Width > item_size.Width, "#B1");
127 public void ItemSizeTest ()
129 TabControl tc = new TabControl ();
130 Assert.AreEqual (Size.Empty, tc.ItemSize, "#A0");
133 Assert.IsTrue (tc.ItemSize.Width == 0, "#B0");
134 Assert.IsTrue (tc.ItemSize.Height > 0, "#B1");
136 tc.TabPages.Add ("A");
137 Assert.IsTrue (tc.ItemSize.Width > 0, "#C0");
138 Assert.IsTrue (tc.ItemSize.Height > 0, "#C1");
140 // ItemSize.Height can change, depending on Font
141 Size prev_size = tc.ItemSize;
142 tc.Font = new Font (tc.Font.FontFamily, tc.Font.Height * 2);
143 Assert.IsTrue (tc.ItemSize.Height > prev_size.Height, "#D0");
145 // Images can cause a change as well
146 prev_size = tc.ItemSize;
147 ImageList image_list = new ImageList ();
148 image_list.ImageSize = new Size (image_list.ImageSize.Width, tc.Font.Height * 2);
149 tc.ImageList = image_list;
150 Assert.IsTrue (tc.ItemSize.Height > prev_size.Height, "#E0");
154 public void ItemSizeFixedTest ()
156 TabControl tc = new TabControl ();
157 tc.SizeMode = TabSizeMode.Fixed;
158 Assert.AreEqual (Size.Empty, tc.ItemSize, "#A0");
161 Assert.IsTrue (tc.ItemSize.Width == 0, "#B0");
162 Assert.IsTrue (tc.ItemSize.Height > 0, "#B1");
164 tc.TabPages.Add ("A");
165 Assert.IsTrue (tc.ItemSize.Width == 96, "#C0");
166 Assert.IsTrue (tc.ItemSize.Width > 0, "#C1");
168 // Height can change automatically depending on Font,
170 Size prev_size = tc.ItemSize;
171 tc.Font = new Font (tc.Font.FontFamily, tc.Font.Height * 2);
172 Assert.IsTrue (tc.ItemSize.Width == 96, "#D0");
173 Assert.IsTrue (tc.ItemSize.Height > prev_size.Height, "#D1");
175 // Manually set ItemSize
176 tc.ItemSize = new Size (100, 35);
177 Assert.AreEqual (100, tc.ItemSize.Width, "#E0");
178 Assert.AreEqual (35, tc.ItemSize.Height, "#E1");
180 // Font size is decreased, but since we manually set
181 // the size we can't automatically update it.
182 tc.Font = new Font (tc.Font.FontFamily, tc.Font.Height / 2);
183 Assert.AreEqual (100, tc.ItemSize.Width, "#F0");
184 Assert.AreEqual (35, tc.ItemSize.Height, "#F1");
186 // Manually set even if control has not been created.
187 tc = new TabControl ();
188 tc.SizeMode = TabSizeMode.Fixed;
189 tc.ItemSize = new Size (100, 35);
190 Assert.AreEqual (100, tc.ItemSize.Width, "#G0");
191 Assert.AreEqual (35, tc.ItemSize.Height, "#G1");
195 public void ClearTabPagesTest ()
198 TabControl tab = new TabControl ();
199 tab.TabPages.Clear ();
200 Assert.AreEqual (-1, tab.SelectedIndex, "#A1");
201 Assert.AreEqual (0, tab.TabPages.Count, "#A2");
204 tab.Controls.Add (new TabPage ());
205 Assert.AreEqual (0, tab.SelectedIndex, "#B1");
206 Assert.AreEqual (1, tab.TabPages.Count, "#B2");
207 tab.TabPages.Clear();
208 Assert.AreEqual (-1, tab.SelectedIndex, "#B3");
209 Assert.AreEqual (0, tab.TabPages.Count, "#B4");
211 // multiple tab pages
212 tab.Controls.Add (new TabPage ());
213 tab.Controls.Add (new TabPage ());
214 tab.Controls.Add (new TabPage ());
215 Assert.AreEqual (0, tab.SelectedIndex, "#C1");
216 Assert.AreEqual (3, tab.TabPages.Count, "#C2");
217 tab.SelectedIndex = 1;
218 tab.TabPages.Clear ();
219 Assert.AreEqual (-1, tab.SelectedIndex, "#C3");
220 Assert.AreEqual (0, tab.TabPages.Count, "#C4");
224 [Category ("NotWorking")]
225 public void Controls_Remove_HandleCreated ()
227 TabControl tab = new TabControl ();
228 tab.SelectedIndexChanged += new EventHandler (SelectedIndexChanged);
230 Form form = new Form ();
231 form.ShowInTaskbar = false;
232 form.Controls.Add (tab);
235 tab.Controls.Add (new TabPage ());
236 tab.Controls.Add (new TabPage ());
237 tab.Controls.Add (new TabPage ());
238 tab.Controls.Add (new TabPage ());
239 tab.Controls.Add (new TabPage ());
240 tab.Controls.Add (new TabPage ());
242 Assert.AreEqual (0, tab.SelectedIndex, "#A1");
243 Assert.AreEqual (6, tab.TabPages.Count, "#A2");
244 Assert.AreEqual (0, _selected_index_changed, "#A3");
246 // remove selected tab
247 tab.SelectedIndex = 2;
248 Assert.AreEqual (2, tab.SelectedIndex, "#B1");
249 Assert.AreEqual (1, _selected_index_changed, "#B2");
250 tab.Controls.RemoveAt (2);
251 Assert.AreEqual (0, tab.SelectedIndex, "#B3");
252 Assert.AreEqual (5, tab.TabPages.Count, "#B4");
253 Assert.AreEqual (2, _selected_index_changed, "#B5");
255 // remove not-selected tab
256 Assert.AreEqual (0, tab.SelectedIndex, "#C1");
257 Assert.AreEqual (2, _selected_index_changed, "#C2");
258 tab.Controls.RemoveAt (3);
259 Assert.AreEqual (0, tab.SelectedIndex, "#C3");
260 Assert.AreEqual (4, tab.TabPages.Count, "#C4");
261 Assert.AreEqual (2, _selected_index_changed, "#C5");
264 tab.Controls.RemoveAt (3);
265 Assert.AreEqual (0, tab.SelectedIndex, "#D1");
266 Assert.AreEqual (3, tab.TabPages.Count, "#D2");
267 Assert.AreEqual (2, _selected_index_changed, "#D3");
270 tab.Controls.RemoveAt (0);
271 Assert.AreEqual (0, tab.SelectedIndex, "#E1");
272 Assert.AreEqual (2, tab.TabPages.Count, "#E2");
273 Assert.AreEqual (3, _selected_index_changed, "#E3");
275 // remove remaining tabs
276 tab.Controls.RemoveAt (1);
277 tab.Controls.RemoveAt (0);
278 Assert.AreEqual (-1, tab.SelectedIndex, "#F1");
279 Assert.AreEqual (0, tab.TabPages.Count, "#F2");
280 Assert.AreEqual (4, _selected_index_changed, "#F3");
284 [Category ("NotWorking")]
285 public void Controls_Remove_HandleNotCreated ()
287 TabControl tab = new TabControl ();
288 tab.SelectedIndexChanged += new EventHandler (SelectedIndexChanged);
289 tab.Controls.Add (new TabPage ());
290 tab.Controls.Add (new TabPage ());
291 tab.Controls.Add (new TabPage ());
292 tab.Controls.Add (new TabPage ());
293 tab.Controls.Add (new TabPage ());
294 tab.Controls.Add (new TabPage ());
296 Assert.AreEqual (-1, tab.SelectedIndex, "#A1");
297 Assert.AreEqual (6, tab.TabPages.Count, "#A2");
298 Assert.AreEqual (0, _selected_index_changed, "#A3");
300 // remove selected tab
301 tab.SelectedIndex = 2;
302 Assert.AreEqual (2, tab.SelectedIndex, "#B1");
303 Assert.AreEqual (0, _selected_index_changed, "#B2");
304 tab.Controls.RemoveAt (2);
305 Assert.AreEqual (0, tab.SelectedIndex, "#B3");
306 Assert.AreEqual (5, tab.TabPages.Count, "#B4");
307 Assert.AreEqual (0, _selected_index_changed, "#B5");
309 // remove not-selected tab
310 tab.Controls.RemoveAt (3);
311 Assert.AreEqual (0, tab.SelectedIndex, "#C3");
312 Assert.AreEqual (4, tab.TabPages.Count, "#C4");
313 Assert.AreEqual (0, _selected_index_changed, "#C5");
316 tab.Controls.RemoveAt (3);
317 Assert.AreEqual (0, tab.SelectedIndex, "#D1");
318 Assert.AreEqual (3, tab.TabPages.Count, "#D2");
319 Assert.AreEqual (0, _selected_index_changed, "#D3");
322 tab.Controls.RemoveAt (0);
323 Assert.AreEqual (0, tab.SelectedIndex, "#E1");
324 Assert.AreEqual (2, tab.TabPages.Count, "#E2");
325 Assert.AreEqual (0, _selected_index_changed, "#E3");
327 // remove remaining tabs
328 tab.Controls.RemoveAt (1);
329 tab.Controls.RemoveAt (0);
330 Assert.AreEqual (0, tab.SelectedIndex, "#F1");
331 Assert.AreEqual (0, tab.TabPages.Count, "#F2");
332 Assert.AreEqual (0, _selected_index_changed, "#F3");
334 Form form = new Form ();
335 form.ShowInTaskbar = false;
336 form.Controls.Add (tab);
338 Assert.AreEqual (-1, tab.SelectedIndex, "#G1");
339 Assert.AreEqual (0, tab.TabPages.Count, "#G2");
340 Assert.AreEqual (0, _selected_index_changed, "#G3");
344 public void SelectedIndex ()
346 TabControl tab = new TabControl ();
347 tab.SelectedIndexChanged += new EventHandler (SelectedIndexChanged);
348 tab.Controls.Add (new TabPage ());
349 tab.Controls.Add (new TabPage ());
351 tab.SelectedIndex = 0;
352 Assert.AreEqual (0, _selected_index_changed, "#A1");
353 Assert.AreEqual (0, tab.SelectedIndex, "#A2");
355 tab.SelectedIndex = -1;
356 Assert.AreEqual (0, _selected_index_changed, "#B1");
357 Assert.AreEqual (-1, tab.SelectedIndex, "#B2");
359 tab.SelectedIndex = 1;
360 Assert.AreEqual (0, _selected_index_changed, "#C1");
361 Assert.AreEqual (1, tab.SelectedIndex, "#C2");
363 tab.SelectedIndex = 1;
364 Assert.AreEqual (0, _selected_index_changed, "#D1");
365 Assert.AreEqual (1, tab.SelectedIndex, "#D2");
368 tab.SelectedIndex = 6;
369 Assert.AreEqual (0, _selected_index_changed, "#E1");
370 Assert.AreEqual (6, tab.SelectedIndex, "#E2");
372 tab.SelectedIndex = 6;
373 Assert.AreEqual (0, _selected_index_changed, "#E31");
374 Assert.AreEqual (6, tab.SelectedIndex, "#E4");
376 Form form = new Form ();
377 form.ShowInTaskbar = false;
378 form.Controls.Add (tab);
382 Assert.AreEqual (0, tab.SelectedIndex, "#E5");
384 tab.SelectedIndex = 0;
385 Assert.AreEqual (0, _selected_index_changed, "#F1");
386 Assert.AreEqual (0, tab.SelectedIndex, "#F2");
388 tab.SelectedIndex = -1;
389 Assert.AreEqual (1, _selected_index_changed, "#G1");
390 Assert.AreEqual (-1, tab.SelectedIndex, "#G2");
392 tab.SelectedIndex = 1;
393 Assert.AreEqual (2, _selected_index_changed, "#H1");
394 Assert.AreEqual (1, tab.SelectedIndex, "#H2");
396 tab.SelectedIndex = 1;
397 Assert.AreEqual (2, _selected_index_changed, "#I1");
398 Assert.AreEqual (1, tab.SelectedIndex, "#I2");
404 public void SelectedIndex_Ignore ()
406 TabControl c = new TabControl ();
407 c.SelectedIndexChanged += new EventHandler (SelectedIndexChanged);
409 Assert.AreEqual (0, _selected_index_changed, "#1");
411 c.TabPages.Add (new TabPage ());
412 c.TabPages.Add (new TabPage ());
413 Assert.AreEqual (0, c.SelectedIndex, "#2");
414 Form f = new Form ();
415 f.ShowInTaskbar = false;
418 Assert.AreEqual (0, _selected_index_changed, "#3");
419 c.SelectedIndex = 2; // beyond the pages - ignored
420 Assert.AreEqual (1, _selected_index_changed, "#4");
421 Assert.AreEqual (0, c.SelectedIndex, "#4");
426 public void SelectedIndex_Negative ()
428 Form form = new Form ();
429 form.ShowInTaskbar = false;
430 TabControl tab = new TabControl ();
431 tab.SelectedIndexChanged += new EventHandler (SelectedIndexChanged);
432 form.Controls.Add (tab);
434 Assert.AreEqual (-1, tab.SelectedIndex, "#A1");
435 tab.SelectedIndex = -1;
436 Assert.AreEqual (-1, tab.SelectedIndex, "#A2");
437 Assert.AreEqual (0, _selected_index_changed, "#A3");
440 tab.SelectedIndex = -2;
442 } catch (ArgumentOutOfRangeException ex) {
443 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
444 Assert.IsNotNull (ex.Message, "#B3");
445 Assert.IsTrue (ex.Message.IndexOf ("'-2'") != -1, "#B4");
446 Assert.IsTrue (ex.Message.IndexOf ("'SelectedIndex'") != -1, "#B5");
447 Assert.IsTrue (ex.Message.IndexOf ("-1") != -1, "#B6");
448 Assert.IsNotNull (ex.ParamName, "#B7");
449 Assert.AreEqual ("SelectedIndex", ex.ParamName, "#B8");
452 Assert.AreEqual (0, _selected_index_changed, "#C1");
453 Assert.AreEqual (-1, tab.SelectedIndex, "#C2");
455 Assert.AreEqual (0, _selected_index_changed, "#C3");
456 Assert.AreEqual (-1, tab.SelectedIndex, "#C4");
459 tab.SelectedIndex = -5;
461 } catch (ArgumentOutOfRangeException ex) {
462 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#D2");
463 Assert.IsNotNull (ex.Message, "#D3");
464 Assert.IsTrue (ex.Message.IndexOf ("'-5'") != -1, "#D4");
465 Assert.IsTrue (ex.Message.IndexOf ("'SelectedIndex'") != -1, "#D5");
466 Assert.IsTrue (ex.Message.IndexOf ("-1") != -1, "#D6");
467 Assert.IsNotNull (ex.ParamName, "#D7");
468 Assert.AreEqual ("SelectedIndex", ex.ParamName, "#D8");
471 Assert.AreEqual (-1, tab.SelectedIndex, "#E1");
472 tab.SelectedIndex = -1;
473 Assert.AreEqual (-1, tab.SelectedIndex, "#E2");
474 Assert.AreEqual (0, _selected_index_changed, "#E3");
480 [Category ("NotWorking")]
481 public void InputKeyTest ()
483 TabControlPoker p = new TabControlPoker ();
485 foreach (Keys key in Enum.GetValues (typeof (Keys))) {
493 Assert.IsFalse (p.CheckIsInputKey (key), "FALSE- " + key);
496 Assert.IsTrue (p.CheckIsInputKey (Keys.PageUp), "TRUE-pageup");
497 Assert.IsTrue (p.CheckIsInputKey (Keys.PageDown), "TRUE-pagedown");
498 Assert.IsTrue (p.CheckIsInputKey (Keys.End), "TRUE-end");
499 Assert.IsTrue (p.CheckIsInputKey (Keys.Home), "TRUE-home");
501 // Create the handle, things are a little different with
502 // the handle created
503 IntPtr dummy = p.Handle;
505 TestHelper.RemoveWarning (dummy);
507 foreach (Keys key in Enum.GetValues (typeof (Keys))) {
519 Assert.IsFalse (p.CheckIsInputKey (key), "PH-FALSE- " + key);
522 Assert.IsTrue (p.CheckIsInputKey (Keys.Left), "PH-TRUE-left");
523 Assert.IsTrue (p.CheckIsInputKey (Keys.Right), "PH-TRUE-right");
524 Assert.IsTrue (p.CheckIsInputKey (Keys.Up), "PH-TRUE-up");
525 Assert.IsTrue (p.CheckIsInputKey (Keys.Down), "PH-TRUE-down");
526 Assert.IsTrue (p.CheckIsInputKey (Keys.PageUp), "PH-TRUE-pageup");
527 Assert.IsTrue (p.CheckIsInputKey (Keys.PageDown), "PH-TRUE-pagedown");
528 Assert.IsTrue (p.CheckIsInputKey (Keys.End), "PH-TRUE-end");
529 Assert.IsTrue (p.CheckIsInputKey (Keys.Home), "PH-TRUE-home");
533 public void NoTabPages ()
535 Form form = new Form ();
536 TabControl tab = new TabControl ();
537 tab.SelectedIndex = 0;
538 Assert.AreEqual (0, tab.SelectedIndex, "#A1");
540 form.Controls.Add (tab);
542 Assert.AreEqual (0, tab.SelectedIndex, "#A2");
544 form.ShowInTaskbar = false;
547 Assert.AreEqual (-1, tab.SelectedIndex, "#A3");
552 [Test] // bug #81802. should not throw an exception
553 public void NoTabPages2 ()
555 Form form = new Form ();
556 form.Font = new Font ("Tahoma", 8.25F, FontStyle.Regular, GraphicsUnit.Point, ((byte) (0)));
557 TabControl tab = new TabControl ();
558 form.Controls.Add (tab);
563 private void SelectedIndexChanged (object sender, EventArgs e)
565 _selected_index_changed++;
569 public void MethodSelectTab ()
571 TabControl tc = new TabControl ();
572 tc.TabPages.Add ("One", "One");
573 tc.TabPages.Add ("Two", "Two");
574 tc.TabPages.Add ("Three", "Three");
577 Assert.AreEqual (1, tc.SelectedIndex, "A1");
579 tc.SelectTab (tc.TabPages[2]);
580 Assert.AreEqual (2, tc.SelectedIndex, "A2");
582 tc.SelectTab ("One");
583 Assert.AreEqual (0, tc.SelectedIndex, "A3");
587 Assert.AreEqual (2, tc.SelectedIndex, "A4");
590 Assert.AreEqual (0, tc.SelectedIndex, "A5");
592 tc.DeselectTab (tc.TabPages[0]);
593 Assert.AreEqual (1, tc.SelectedIndex, "A6");
595 tc.DeselectTab (tc.TabPages[0]);
596 Assert.AreEqual (1, tc.SelectedIndex, "A7");
598 tc.DeselectTab (tc.TabPages[1]);
599 Assert.AreEqual (2, tc.SelectedIndex, "A7");
601 tc.DeselectTab ("Two");
602 Assert.AreEqual (2, tc.SelectedIndex, "A8");
604 tc.DeselectTab ("Three");
605 Assert.AreEqual (0, tc.SelectedIndex, "A8");
609 [ExpectedException (typeof (ArgumentOutOfRangeException))]
610 public void MethodSelectTabAOORE ()
612 TabControl tc = new TabControl ();
613 tc.TabPages.Add (new TabPage ("One"));
614 tc.TabPages.Add (new TabPage ("Two"));
620 [ExpectedException (typeof (ArgumentOutOfRangeException))]
621 public void MethodSelectTabAOORE2 ()
623 TabControl tc = new TabControl ();
624 tc.TabPages.Add (new TabPage ("One"));
625 tc.TabPages.Add (new TabPage ("Two"));
631 public void EventSelected ()
633 Form f = new Form ();
634 TabControl tc = new TabControl ();
635 TabControlEventArgs tcea1 = new TabControlEventArgs (null, 0, TabControlAction.Deselected);
636 TabControlEventArgs tcea2 = new TabControlEventArgs (null, 0, TabControlAction.Selected);
637 TabControlCancelEventArgs tccea1 = new TabControlCancelEventArgs (null, 0, false, TabControlAction.Deselecting);
638 TabControlCancelEventArgs tccea2 = new TabControlCancelEventArgs (null, 0, false, TabControlAction.Selecting);
641 string events = string.Empty;
642 tc.SelectedIndexChanged += new EventHandler (delegate (Object obj, EventArgs e) { events += ("SelectedIndexChanged;"); });
643 tc.Deselecting += new TabControlCancelEventHandler (delegate (Object obj, TabControlCancelEventArgs e) { events += ("Deselecting;"); tccea1 = e; });
644 tc.Deselected += new TabControlEventHandler (delegate (Object obj, TabControlEventArgs e) { events += ("Deselected;"); tcea1 = e; });
645 tc.Selecting += new TabControlCancelEventHandler (delegate (Object obj, TabControlCancelEventArgs e) { events += ("Selecting;"); tccea2 = e; });
646 tc.Selected += new TabControlEventHandler (delegate (Object obj, TabControlEventArgs e) { events += ("Selected;"); tcea2 = e; });
648 TabPage tp1 = new TabPage ("One");
649 TabPage tp2 = new TabPage ("Two");
651 tc.TabPages.Add (tp1);
652 tc.TabPages.Add (tp2);
656 Assert.AreEqual ("Deselecting;Deselected;Selecting;Selected;SelectedIndexChanged;", events, "A1");
657 Assert.AreEqual (TabControlAction.Deselecting, tccea1.Action, "A2");
658 Assert.AreEqual (TabControlAction.Deselected, tcea1.Action, "A2");
659 Assert.AreEqual (TabControlAction.Selecting, tccea2.Action, "A2");
660 Assert.AreEqual (TabControlAction.Selected, tcea2.Action, "A2");
661 Assert.AreSame (tp2, tcea2.TabPage, "A3");
662 Assert.AreEqual (1, tcea2.TabPageIndex, "A4");
667 [Category ("NotWorking")]
668 public void EnterLeaveEvents ()
670 Form f = new Form ();
671 TabControl tc = new TabControl ();
672 TabPage p1 = new TabPage ();
673 string events = string.Empty;
674 tc.Enter += new EventHandler (delegate (Object obj, EventArgs e) { events += ("tc_OnEnter;"); });
675 tc.Leave += new EventHandler (delegate (Object obj, EventArgs e) { events += ("tc_OnLeave;"); });
676 p1.Enter += new EventHandler (delegate (Object obj, EventArgs e) { events += ("p1_OnEnter;");});
677 p1.Leave += new EventHandler (delegate (Object obj, EventArgs e) { events += ("p1_OnLeave;"); });
678 tc.TabPages.Add (p1);
680 Button b1 = new Button ();
689 Assert.AreEqual ("tc_OnEnter;p1_OnEnter;", events, "A1");
691 Assert.AreEqual ("tc_OnEnter;p1_OnEnter;p1_OnLeave;tc_OnLeave;", events, "A2");
694 [Test] // bug #499887
695 public void SelectedIndexChangeFiresFocus ()
697 Form f = new Form ();
698 TabControl tc = new TabControl ();
699 TabPage p1 = new TabPage ();
700 TabPage p2 = new TabPage ();
701 string events = string.Empty;
703 tc.TabPages.Add (p1);
704 tc.TabPages.Add (p2);
705 tc.SelectedIndex = 0;
706 Button b1 = new Button ();
707 Button b2 = new Button ();
715 b2.GotFocus += new EventHandler (delegate (Object obj, EventArgs e) {
716 tc.SelectedIndex = 1;
719 tc.GotFocus += new EventHandler(delegate (Object obj, EventArgs e) { events += ("tc_OnGotFocus" + tc.SelectedIndex + ";"); });
720 tc.SelectedIndexChanged += new EventHandler(delegate (Object obj, EventArgs e) { events += ("tc_OnSelectedIndexChanged" + tc.SelectedIndex + ";"); });
721 p2.Enter += new EventHandler(delegate (Object obj, EventArgs e) { events += ("p2_OnEnter" + tc.SelectedIndex + ";"); });
722 p2.Leave += new EventHandler (delegate (Object obj, EventArgs e) { events += ("p2_OnLeave;"); });
725 Assert.AreEqual ("tc_OnGotFocus0;p2_OnEnter1;tc_OnSelectedIndexChanged1;", events, "A1");
726 Assert.IsTrue (tc.Focused, "A2");
729 // Make sure that setting focus for TabControl is *not* resetting SelectedIndex when
732 public void GotFocusSelectedIndex ()
734 TabControl tc = new TabControl ();
735 tc.TabPages.Add ("A");
736 tc.TabPages.Add ("B");
738 Button b = new Button (); // Dummy button to receive focus by default
739 Form f = new Form ();
740 f.Controls.AddRange (new Control [] { b, tc });
743 tc.SelectedIndex = -1;
745 // Make sure focus goes back to button
748 // Finally give focus back to TabControl
751 Assert.AreEqual (-1, tc.SelectedIndex, "#A0");
756 public class TabPageCollectionTest : TestHelper
759 public void Indexer ()
761 TabControl tab = new TabControl ();
762 TabControl.TabPageCollection tabPages = new TabControl.TabPageCollection (tab);
763 TabPage tabPageA = new TabPage ();
764 TabPage tabPageB = new TabPage ();
765 TabPage tabPageC = new TabPage ();
766 TabPage tabPageD = new TabPage ();
767 tabPages.Add (tabPageA);
768 Assert.AreSame (tabPageA, tabPages [0], "#1");
769 tabPages [0] = tabPageB;
770 Assert.AreSame (tabPageB, tabPages [0], "#2");
771 tabPages.Add (tabPageC);
772 Assert.AreSame (tabPageB, tabPages [0], "#3");
773 Assert.AreSame (tabPageC, tabPages [1], "#4");
774 tabPages.Remove (tabPageB);
775 Assert.AreSame (tabPageC, tabPages [0], "#5");
776 tabPages [0] = tabPageD;
777 Assert.AreSame (tabPageD, tabPages [0], "#6");
779 Form form = new Form ();
780 form.ShowInTaskbar = false;
781 form.Controls.Add (tab);