TabControl.cs: Set visibility on selected or default tab
[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                 public void SelectedIndex ()
141                 {
142                         TabControl tab = new TabControl ();
143                         tab.Controls.Add (new TabPage ());
144                         tab.Controls.Add (new TabPage ());
145                         tab.SelectedIndexChanged += new EventHandler (SelectedIndexChanged);
146
147                         tab.SelectedIndex = 0;
148 #if NET_2_0
149                         Assert.AreEqual (0, _selected_index_changed, "#A1");
150 #else
151                         Assert.AreEqual (1, _selected_index_changed, "#A1");
152 #endif
153                         Assert.AreEqual (0, tab.SelectedIndex, "#A2");
154
155                         tab.SelectedIndex = -1;
156 #if NET_2_0
157                         Assert.AreEqual (0, _selected_index_changed, "#B1");
158 #else
159                         Assert.AreEqual (2, _selected_index_changed, "#B1");
160 #endif
161                         Assert.AreEqual (-1, tab.SelectedIndex, "#B2");
162
163                         tab.SelectedIndex = 1;
164 #if NET_2_0
165                         Assert.AreEqual (0, _selected_index_changed, "#C1");
166 #else
167                         Assert.AreEqual (3, _selected_index_changed, "#C1");
168 #endif
169                         Assert.AreEqual (1, tab.SelectedIndex, "#C2");
170
171                         tab.SelectedIndex = 1;
172 #if NET_2_0
173                         Assert.AreEqual (0, _selected_index_changed, "#D1");
174 #else
175                         Assert.AreEqual (3, _selected_index_changed, "#D1");
176 #endif
177                         Assert.AreEqual (1, tab.SelectedIndex, "#D2");
178
179
180                         tab.SelectedIndex = 6;
181 #if NET_2_0
182                         Assert.AreEqual (0, _selected_index_changed, "#E1");
183 #else
184                         Assert.AreEqual (4, _selected_index_changed, "#E1");
185 #endif
186                         Assert.AreEqual (6, tab.SelectedIndex, "#E2");
187
188                         tab.SelectedIndex = 6;
189 #if NET_2_0
190                         Assert.AreEqual (0, _selected_index_changed, "#E31");
191 #else
192                         Assert.AreEqual (4, _selected_index_changed, "#E3");
193 #endif
194                         Assert.AreEqual (6, tab.SelectedIndex, "#E4");
195
196
197
198                         Form form = new Form ();
199                         form.ShowInTaskbar = false;
200                         form.Controls.Add (tab);
201
202                         form.Show ();
203
204                         Assert.AreEqual (0, tab.SelectedIndex, "#E5");
205
206                         tab.SelectedIndex = 0;
207 #if NET_2_0
208                         Assert.AreEqual (1, _selected_index_changed, "#F1");
209 #else
210                         Assert.AreEqual (4, _selected_index_changed, "#F1");
211 #endif
212                         Assert.AreEqual (0, tab.SelectedIndex, "#F2");
213
214                         tab.SelectedIndex = -1;
215 #if NET_2_0
216                         Assert.AreEqual (2, _selected_index_changed, "#G1");
217 #else
218                         Assert.AreEqual (5, _selected_index_changed, "#G1");
219 #endif
220                         Assert.AreEqual (-1, tab.SelectedIndex, "#G2");
221
222                         tab.SelectedIndex = 1;
223 #if NET_2_0
224                         Assert.AreEqual (3, _selected_index_changed, "#H1");
225 #else
226                         Assert.AreEqual (6, _selected_index_changed, "#H1");
227 #endif
228                         Assert.AreEqual (1, tab.SelectedIndex, "#H2");
229
230                         tab.SelectedIndex = 1;
231 #if NET_2_0
232                         Assert.AreEqual (3, _selected_index_changed, "#I1");
233 #else
234                         Assert.AreEqual (6, _selected_index_changed, "#I1");
235 #endif
236                         Assert.AreEqual (1, tab.SelectedIndex, "#I2");
237
238                         form.Dispose ();
239                 }
240
241                 [Test] // bug #78395
242                 public void SelectedIndex_Ignore ()
243                 {
244                         TabControl c = new TabControl ();
245                         c.SelectedIndexChanged += new EventHandler (SelectedIndexChanged);
246                         c.SelectedIndex = 0;
247 #if NET_2_0
248                         Assert.AreEqual (0, _selected_index_changed, "#1");
249 #else
250                         Assert.AreEqual (1, _selected_index_changed, "#1");
251 #endif
252
253                         c.TabPages.Add (new TabPage ());
254                         c.TabPages.Add (new TabPage ());
255                         Assert.AreEqual (0, c.SelectedIndex, "#2");
256                         Form f = new Form ();
257                         f.ShowInTaskbar = false;
258                         f.Controls.Add (c);
259                         f.Show ();
260 #if NET_2_0
261                         Assert.AreEqual (0, _selected_index_changed, "#3");
262 #else
263                         Assert.AreEqual (1, _selected_index_changed, "#3");
264 #endif
265                         c.SelectedIndex = 2; // beyond the pages - ignored
266 #if NET_2_0
267                         Assert.AreEqual (1, _selected_index_changed, "#4");
268 #else
269                         Assert.AreEqual (2, _selected_index_changed, "#4");
270 #endif
271                         Assert.AreEqual (0, c.SelectedIndex, "#4");
272                         f.Dispose ();
273                 }
274
275                 [Test]
276                 public void SelectedIndex_Negative ()
277                 {
278                         Form form = new Form ();
279                         form.ShowInTaskbar = false;
280                         TabControl tab = new TabControl ();
281                         tab.SelectedIndexChanged += new EventHandler (SelectedIndexChanged);
282                         form.Controls.Add (tab);
283
284                         Assert.AreEqual (-1, tab.SelectedIndex, "#A1");
285                         tab.SelectedIndex = -1;
286                         Assert.AreEqual (-1, tab.SelectedIndex, "#A2");
287                         Assert.AreEqual (0, _selected_index_changed, "#A3");
288
289                         try {
290                                 tab.SelectedIndex = -2;
291                                 Assert.Fail ("#B1");
292 #if NET_2_0
293                         } catch (ArgumentOutOfRangeException ex) {
294                                 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
295                                 Assert.IsNotNull (ex.Message, "#B3");
296                                 Assert.IsTrue (ex.Message.IndexOf ("'-2'") != -1, "#B4");
297                                 Assert.IsTrue (ex.Message.IndexOf ("'SelectedIndex'") != -1, "#B5");
298                                 Assert.IsTrue (ex.Message.IndexOf ("-1") != -1, "#B6");
299                                 Assert.IsNotNull (ex.ParamName, "#B7");
300                                 Assert.AreEqual ("SelectedIndex", ex.ParamName, "#B8");
301                         }
302 #else
303                         } catch (ArgumentException ex) {
304                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
305                                 Assert.IsNotNull (ex.Message, "#B3");
306                                 Assert.IsTrue (ex.Message.IndexOf ("'-2'") != -1, "#B4");
307                                 Assert.IsTrue (ex.Message.IndexOf ("'value'") != -1, "#B5");
308                                 Assert.IsTrue (ex.Message.IndexOf ("-1") != -1, "#B6");
309                                 Assert.IsNull (ex.ParamName, "#B7");
310                         }
311 #endif
312
313                         Assert.AreEqual (0, _selected_index_changed, "#C1");
314                         Assert.AreEqual (-1, tab.SelectedIndex, "#C2");
315                         form.Show ();
316                         Assert.AreEqual (0, _selected_index_changed, "#C3");
317                         Assert.AreEqual (-1, tab.SelectedIndex, "#C4");
318
319                         try {
320                                 tab.SelectedIndex = -5;
321                                 Assert.Fail ("#D1");
322 #if NET_2_0
323                         } catch (ArgumentOutOfRangeException ex) {
324                                 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#D2");
325                                 Assert.IsNotNull (ex.Message, "#D3");
326                                 Assert.IsTrue (ex.Message.IndexOf ("'-5'") != -1, "#D4");
327                                 Assert.IsTrue (ex.Message.IndexOf ("'SelectedIndex'") != -1, "#D5");
328                                 Assert.IsTrue (ex.Message.IndexOf ("-1") != -1, "#D6");
329                                 Assert.IsNotNull (ex.ParamName, "#D7");
330                                 Assert.AreEqual ("SelectedIndex", ex.ParamName, "#D8");
331                         }
332 #else
333                         } catch (ArgumentException ex) {
334                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#D2");
335                                 Assert.IsNotNull (ex.Message, "#D3");
336                                 Assert.IsTrue (ex.Message.IndexOf ("'-5'") != -1, "#D4");
337                                 Assert.IsTrue (ex.Message.IndexOf ("'value'") != -1, "#D5");
338                                 Assert.IsTrue (ex.Message.IndexOf ("-1") != -1, "#D6");
339                                 Assert.IsNull (ex.ParamName, "#D7");
340                         }
341 #endif
342
343                         Assert.AreEqual (-1, tab.SelectedIndex, "#E1");
344                         tab.SelectedIndex = -1;
345                         Assert.AreEqual (-1, tab.SelectedIndex, "#E2");
346                         Assert.AreEqual (0, _selected_index_changed, "#E3");
347
348                         form.Dispose ();
349                 }
350
351                 [Test]
352                 [Category ("NotWorking")]
353                 public void InputKeyTest ()
354                 {
355                         TabControlPoker p = new TabControlPoker ();
356
357                         foreach (Keys key in Enum.GetValues (typeof (Keys))) {
358                                 switch (key) {
359                                 case Keys.PageUp:
360                                 case Keys.PageDown:
361                                 case Keys.End:
362                                 case Keys.Home:
363                                         continue;
364                                 }
365                                 Assert.IsFalse (p.CheckIsInputKey (key), "FALSE- " + key);
366                         }
367
368                         Assert.IsTrue (p.CheckIsInputKey (Keys.PageUp), "TRUE-pageup");
369                         Assert.IsTrue (p.CheckIsInputKey (Keys.PageDown), "TRUE-pagedown");
370                         Assert.IsTrue (p.CheckIsInputKey (Keys.End), "TRUE-end");
371                         Assert.IsTrue (p.CheckIsInputKey (Keys.Home), "TRUE-home");
372
373                         // Create the handle, things are a little different with
374                         // the handle created
375                         IntPtr dummy = p.Handle;
376
377                         foreach (Keys key in Enum.GetValues (typeof (Keys))) {
378                                 switch (key) {
379                                 case Keys.Left:
380                                 case Keys.Right:
381                                 case Keys.Up:
382                                 case Keys.Down:
383                                 case Keys.PageUp:
384                                 case Keys.PageDown:
385                                 case Keys.End:
386                                 case Keys.Home:
387                                         continue;
388                                 }
389                                 Assert.IsFalse (p.CheckIsInputKey (key), "PH-FALSE- " + key);
390                         }
391
392                         Assert.IsTrue (p.CheckIsInputKey (Keys.Left), "PH-TRUE-left");
393                         Assert.IsTrue (p.CheckIsInputKey (Keys.Right), "PH-TRUE-right");
394                         Assert.IsTrue (p.CheckIsInputKey (Keys.Up), "PH-TRUE-up");
395                         Assert.IsTrue (p.CheckIsInputKey (Keys.Down), "PH-TRUE-down");
396                         Assert.IsTrue (p.CheckIsInputKey (Keys.PageUp), "PH-TRUE-pageup");
397                         Assert.IsTrue (p.CheckIsInputKey (Keys.PageDown), "PH-TRUE-pagedown");
398                         Assert.IsTrue (p.CheckIsInputKey (Keys.End), "PH-TRUE-end");
399                         Assert.IsTrue (p.CheckIsInputKey (Keys.Home), "PH-TRUE-home");
400                 }
401
402                 [Test] // bug #79847
403                 public void NoTabPages ()
404                 {
405                         Form form = new Form ();
406                         TabControl tab = new TabControl ();
407                         tab.SelectedIndex = 0;
408                         Assert.AreEqual (0, tab.SelectedIndex, "#A1");
409
410                         form.Controls.Add (tab);
411
412                         Assert.AreEqual (0, tab.SelectedIndex, "#A2");
413
414                         form.ShowInTaskbar = false;
415                         form.Show ();
416
417                         Assert.AreEqual (-1, tab.SelectedIndex, "#A3");
418
419                         form.Dispose ();
420                 }
421
422                 private void SelectedIndexChanged (object sender, EventArgs e)
423                 {
424                         _selected_index_changed++;
425                 }
426         }
427 }