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
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)
39 _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 ClearTabPagesTest ()
114 TabControl tab = new TabControl ();
115 tab.TabPages.Clear ();
116 Assert.AreEqual (-1, tab.SelectedIndex, "#A1");
117 Assert.AreEqual (0, tab.TabPages.Count, "#A2");
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");
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");
140 [Category ("NotWorking")]
141 public void Controls_Remove_HandleCreated ()
143 TabControl tab = new TabControl ();
144 tab.SelectedIndexChanged += new EventHandler (SelectedIndexChanged);
146 Form form = new Form ();
147 form.ShowInTaskbar = false;
148 form.Controls.Add (tab);
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 ());
158 Assert.AreEqual (0, tab.SelectedIndex, "#A1");
159 Assert.AreEqual (6, tab.TabPages.Count, "#A2");
160 Assert.AreEqual (0, _selected_index_changed, "#A3");
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);
168 Assert.AreEqual (0, tab.SelectedIndex, "#B3");
170 Assert.AreEqual (1, tab.SelectedIndex, "#B3");
172 Assert.AreEqual (5, tab.TabPages.Count, "#B4");
173 Assert.AreEqual (2, _selected_index_changed, "#B5");
175 // remove not-selected tab
177 Assert.AreEqual (0, tab.SelectedIndex, "#C1");
179 Assert.AreEqual (1, tab.SelectedIndex, "#C1");
181 Assert.AreEqual (2, _selected_index_changed, "#C2");
182 tab.Controls.RemoveAt (3);
184 Assert.AreEqual (0, tab.SelectedIndex, "#C3");
186 Assert.AreEqual (2, tab.SelectedIndex, "#C3");
188 Assert.AreEqual (4, tab.TabPages.Count, "#C4");
190 Assert.AreEqual (2, _selected_index_changed, "#C5");
192 Assert.AreEqual (3, _selected_index_changed, "#C5");
196 tab.Controls.RemoveAt (3);
198 Assert.AreEqual (0, tab.SelectedIndex, "#D1");
200 Assert.AreEqual (2, tab.SelectedIndex, "#D1");
202 Assert.AreEqual (3, tab.TabPages.Count, "#D2");
204 Assert.AreEqual (2, _selected_index_changed, "#D3");
206 Assert.AreEqual (3, _selected_index_changed, "#D3");
210 tab.Controls.RemoveAt (0);
211 Assert.AreEqual (0, tab.SelectedIndex, "#E1");
212 Assert.AreEqual (2, tab.TabPages.Count, "#E2");
214 Assert.AreEqual (3, _selected_index_changed, "#E3");
216 Assert.AreEqual (4, _selected_index_changed, "#E3");
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");
225 Assert.AreEqual (4, _selected_index_changed, "#F3");
227 Assert.AreEqual (5, _selected_index_changed, "#F3");
232 [Category ("NotWorking")]
233 public void Controls_Remove_HandleNotCreated ()
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 ());
244 Assert.AreEqual (-1, tab.SelectedIndex, "#A1");
245 Assert.AreEqual (6, tab.TabPages.Count, "#A2");
246 Assert.AreEqual (0, _selected_index_changed, "#A3");
248 // remove selected tab
249 tab.SelectedIndex = 2;
250 Assert.AreEqual (2, tab.SelectedIndex, "#B1");
252 Assert.AreEqual (0, _selected_index_changed, "#B2");
254 Assert.AreEqual (1, _selected_index_changed, "#B2");
256 tab.Controls.RemoveAt (2);
258 Assert.AreEqual (0, tab.SelectedIndex, "#B3");
260 Assert.AreEqual (1, tab.SelectedIndex, "#B3");
262 Assert.AreEqual (5, tab.TabPages.Count, "#B4");
264 Assert.AreEqual (0, _selected_index_changed, "#B5");
266 Assert.AreEqual (2, _selected_index_changed, "#B5");
269 // remove not-selected tab
270 tab.Controls.RemoveAt (3);
272 Assert.AreEqual (0, tab.SelectedIndex, "#C3");
274 Assert.AreEqual (2, tab.SelectedIndex, "#C3");
276 Assert.AreEqual (4, tab.TabPages.Count, "#C4");
278 Assert.AreEqual (0, _selected_index_changed, "#C5");
280 Assert.AreEqual (3, _selected_index_changed, "#C5");
284 tab.Controls.RemoveAt (3);
286 Assert.AreEqual (0, tab.SelectedIndex, "#D1");
288 Assert.AreEqual (2, tab.SelectedIndex, "#D1");
290 Assert.AreEqual (3, tab.TabPages.Count, "#D2");
292 Assert.AreEqual (0, _selected_index_changed, "#D3");
294 Assert.AreEqual (3, _selected_index_changed, "#D3");
298 tab.Controls.RemoveAt (0);
299 Assert.AreEqual (0, tab.SelectedIndex, "#E1");
300 Assert.AreEqual (2, tab.TabPages.Count, "#E2");
302 Assert.AreEqual (0, _selected_index_changed, "#E3");
304 Assert.AreEqual (4, _selected_index_changed, "#E3");
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");
313 Assert.AreEqual (0, _selected_index_changed, "#F3");
315 Assert.AreEqual (4, _selected_index_changed, "#F3");
318 Form form = new Form ();
319 form.ShowInTaskbar = false;
320 form.Controls.Add (tab);
322 Assert.AreEqual (-1, tab.SelectedIndex, "#G1");
323 Assert.AreEqual (0, tab.TabPages.Count, "#G2");
325 Assert.AreEqual (0, _selected_index_changed, "#G3");
327 Assert.AreEqual (4, _selected_index_changed, "#G3");
332 public void SelectedIndex ()
334 TabControl tab = new TabControl ();
335 tab.SelectedIndexChanged += new EventHandler (SelectedIndexChanged);
336 tab.Controls.Add (new TabPage ());
337 tab.Controls.Add (new TabPage ());
339 tab.SelectedIndex = 0;
341 Assert.AreEqual (0, _selected_index_changed, "#A1");
343 Assert.AreEqual (1, _selected_index_changed, "#A1");
345 Assert.AreEqual (0, tab.SelectedIndex, "#A2");
347 tab.SelectedIndex = -1;
349 Assert.AreEqual (0, _selected_index_changed, "#B1");
351 Assert.AreEqual (2, _selected_index_changed, "#B1");
353 Assert.AreEqual (-1, tab.SelectedIndex, "#B2");
355 tab.SelectedIndex = 1;
357 Assert.AreEqual (0, _selected_index_changed, "#C1");
359 Assert.AreEqual (3, _selected_index_changed, "#C1");
361 Assert.AreEqual (1, tab.SelectedIndex, "#C2");
363 tab.SelectedIndex = 1;
365 Assert.AreEqual (0, _selected_index_changed, "#D1");
367 Assert.AreEqual (3, _selected_index_changed, "#D1");
369 Assert.AreEqual (1, tab.SelectedIndex, "#D2");
372 tab.SelectedIndex = 6;
374 Assert.AreEqual (0, _selected_index_changed, "#E1");
376 Assert.AreEqual (4, _selected_index_changed, "#E1");
378 Assert.AreEqual (6, tab.SelectedIndex, "#E2");
380 tab.SelectedIndex = 6;
382 Assert.AreEqual (0, _selected_index_changed, "#E31");
384 Assert.AreEqual (4, _selected_index_changed, "#E3");
386 Assert.AreEqual (6, tab.SelectedIndex, "#E4");
388 Form form = new Form ();
389 form.ShowInTaskbar = false;
390 form.Controls.Add (tab);
394 Assert.AreEqual (0, tab.SelectedIndex, "#E5");
396 tab.SelectedIndex = 0;
398 Assert.AreEqual (0, _selected_index_changed, "#F1");
400 Assert.AreEqual (4, _selected_index_changed, "#F1");
402 Assert.AreEqual (0, tab.SelectedIndex, "#F2");
404 tab.SelectedIndex = -1;
406 Assert.AreEqual (1, _selected_index_changed, "#G1");
408 Assert.AreEqual (5, _selected_index_changed, "#G1");
410 Assert.AreEqual (-1, tab.SelectedIndex, "#G2");
412 tab.SelectedIndex = 1;
414 Assert.AreEqual (2, _selected_index_changed, "#H1");
416 Assert.AreEqual (6, _selected_index_changed, "#H1");
418 Assert.AreEqual (1, tab.SelectedIndex, "#H2");
420 tab.SelectedIndex = 1;
422 Assert.AreEqual (2, _selected_index_changed, "#I1");
424 Assert.AreEqual (6, _selected_index_changed, "#I1");
426 Assert.AreEqual (1, tab.SelectedIndex, "#I2");
432 public void SelectedIndex_Ignore ()
434 TabControl c = new TabControl ();
435 c.SelectedIndexChanged += new EventHandler (SelectedIndexChanged);
438 Assert.AreEqual (0, _selected_index_changed, "#1");
440 Assert.AreEqual (1, _selected_index_changed, "#1");
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;
451 Assert.AreEqual (0, _selected_index_changed, "#3");
453 Assert.AreEqual (1, _selected_index_changed, "#3");
455 c.SelectedIndex = 2; // beyond the pages - ignored
457 Assert.AreEqual (1, _selected_index_changed, "#4");
459 Assert.AreEqual (2, _selected_index_changed, "#4");
461 Assert.AreEqual (0, c.SelectedIndex, "#4");
466 public void SelectedIndex_Negative ()
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);
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");
480 tab.SelectedIndex = -2;
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");
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");
503 Assert.AreEqual (0, _selected_index_changed, "#C1");
504 Assert.AreEqual (-1, tab.SelectedIndex, "#C2");
506 Assert.AreEqual (0, _selected_index_changed, "#C3");
507 Assert.AreEqual (-1, tab.SelectedIndex, "#C4");
510 tab.SelectedIndex = -5;
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");
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");
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");
542 [Category ("NotWorking")]
543 public void InputKeyTest ()
545 TabControlPoker p = new TabControlPoker ();
547 foreach (Keys key in Enum.GetValues (typeof (Keys))) {
555 Assert.IsFalse (p.CheckIsInputKey (key), "FALSE- " + key);
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");
563 // Create the handle, things are a little different with
564 // the handle created
565 IntPtr dummy = p.Handle;
567 TestHelper.RemoveWarning (dummy);
569 foreach (Keys key in Enum.GetValues (typeof (Keys))) {
581 Assert.IsFalse (p.CheckIsInputKey (key), "PH-FALSE- " + key);
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");
595 public void NoTabPages ()
597 Form form = new Form ();
598 TabControl tab = new TabControl ();
599 tab.SelectedIndex = 0;
600 Assert.AreEqual (0, tab.SelectedIndex, "#A1");
602 form.Controls.Add (tab);
604 Assert.AreEqual (0, tab.SelectedIndex, "#A2");
606 form.ShowInTaskbar = false;
609 Assert.AreEqual (-1, tab.SelectedIndex, "#A3");
614 private void SelectedIndexChanged (object sender, EventArgs e)
616 _selected_index_changed++;
621 public void MethodSelectTab ()
623 TabControl tc = new TabControl ();
624 tc.TabPages.Add (new TabPage ("One"));
625 tc.TabPages.Add (new TabPage ("Two"));
628 Assert.AreEqual (1, tc.SelectedIndex, "A1");
632 [ExpectedException (typeof (ArgumentOutOfRangeException))]
633 public void MethodSelectTabAOORE ()
635 TabControl tc = new TabControl ();
636 tc.TabPages.Add (new TabPage ("One"));
637 tc.TabPages.Add (new TabPage ("Two"));
643 [ExpectedException (typeof (ArgumentOutOfRangeException))]
644 public void MethodSelectTabAOORE2 ()
646 TabControl tc = new TabControl ();
647 tc.TabPages.Add (new TabPage ("One"));
648 tc.TabPages.Add (new TabPage ("Two"));
654 public void EventSelected ()
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);
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; });
671 TabPage tp1 = new TabPage ("One");
672 TabPage tp2 = new TabPage ("Two");
674 tc.TabPages.Add (tp1);
675 tc.TabPages.Add (tp2);
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");