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 foreach (Keys key in Enum.GetValues (typeof (Keys))) {
579 Assert.IsFalse (p.CheckIsInputKey (key), "PH-FALSE- " + key);
582 Assert.IsTrue (p.CheckIsInputKey (Keys.Left), "PH-TRUE-left");
583 Assert.IsTrue (p.CheckIsInputKey (Keys.Right), "PH-TRUE-right");
584 Assert.IsTrue (p.CheckIsInputKey (Keys.Up), "PH-TRUE-up");
585 Assert.IsTrue (p.CheckIsInputKey (Keys.Down), "PH-TRUE-down");
586 Assert.IsTrue (p.CheckIsInputKey (Keys.PageUp), "PH-TRUE-pageup");
587 Assert.IsTrue (p.CheckIsInputKey (Keys.PageDown), "PH-TRUE-pagedown");
588 Assert.IsTrue (p.CheckIsInputKey (Keys.End), "PH-TRUE-end");
589 Assert.IsTrue (p.CheckIsInputKey (Keys.Home), "PH-TRUE-home");
593 public void NoTabPages ()
595 Form form = new Form ();
596 TabControl tab = new TabControl ();
597 tab.SelectedIndex = 0;
598 Assert.AreEqual (0, tab.SelectedIndex, "#A1");
600 form.Controls.Add (tab);
602 Assert.AreEqual (0, tab.SelectedIndex, "#A2");
604 form.ShowInTaskbar = false;
607 Assert.AreEqual (-1, tab.SelectedIndex, "#A3");
612 private void SelectedIndexChanged (object sender, EventArgs e)
614 _selected_index_changed++;