X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FManaged.Windows.Forms%2FTest%2FSystem.Windows.Forms%2FTabControlTest.cs;h=c2590f943c8ec42fbeb134e08de19c4bef954c8b;hb=6c035e225abc36a15501a03f574744824225350b;hp=d6645f6e44f419456890d732f48ced65d6bb992f;hpb=987f8c63e214937c50dcb308149f7558a2cbba41;p=mono.git diff --git a/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/TabControlTest.cs b/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/TabControlTest.cs index d6645f6e44f..c2590f943c8 100644 --- a/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/TabControlTest.cs +++ b/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/TabControlTest.cs @@ -13,14 +13,13 @@ using System.Windows.Forms; using NUnit.Framework; - - - -namespace MonoTests.System.Windows.Forms { - +namespace MonoTests.System.Windows.Forms +{ [TestFixture] - public class TabControlTest + public class TabControlTest : TestHelper { + private int _selected_index_changed = 0; + private class TabControlPoker : TabControl { public bool CheckIsInputKey (Keys key) @@ -34,8 +33,13 @@ namespace MonoTests.System.Windows.Forms { } } + [SetUp] + protected override void SetUp () { + _selected_index_changed = 0; + base.SetUp (); + } + [Test] - [Category ("NotWorking")] public void TabControlPropertyTest () { Form myForm = new Form (); @@ -49,10 +53,6 @@ namespace MonoTests.System.Windows.Forms { Assert.AreEqual (TabAppearance.Normal, myTabControl.Appearance, "#A2"); // D - Assert.AreEqual (4, myTabControl.DisplayRectangle.X, "#D1"); - Assert.AreEqual (4, myTabControl.DisplayRectangle.Y, "#D2"); - Assert.AreEqual (192, myTabControl.DisplayRectangle.Width, "#D3"); - Assert.AreEqual (92, myTabControl.DisplayRectangle.Height, "#D4"); Assert.AreEqual (TabDrawMode.Normal, myTabControl.DrawMode, "#D5"); // H @@ -60,9 +60,6 @@ namespace MonoTests.System.Windows.Forms { // I Assert.AreEqual (null, myTabControl.ImageList, "#I1"); - // It is environment dependent - //Assert.AreEqual (18, myTabControl.ItemSize.Height, "#I2"); - Assert.AreEqual (0, myTabControl.ItemSize.Width, "#I3"); // M Assert.AreEqual (false, myTabControl.Multiline, "#M1"); @@ -140,24 +137,407 @@ namespace MonoTests.System.Windows.Forms { } [Test] - public void SetSelectedIndex () + [Category ("NotWorking")] + public void Controls_Remove_HandleCreated () + { + TabControl tab = new TabControl (); + tab.SelectedIndexChanged += new EventHandler (SelectedIndexChanged); + + Form form = new Form (); + form.ShowInTaskbar = false; + form.Controls.Add (tab); + form.Show (); + + tab.Controls.Add (new TabPage ()); + tab.Controls.Add (new TabPage ()); + tab.Controls.Add (new TabPage ()); + tab.Controls.Add (new TabPage ()); + tab.Controls.Add (new TabPage ()); + tab.Controls.Add (new TabPage ()); + + Assert.AreEqual (0, tab.SelectedIndex, "#A1"); + Assert.AreEqual (6, tab.TabPages.Count, "#A2"); + Assert.AreEqual (0, _selected_index_changed, "#A3"); + + // remove selected tab + tab.SelectedIndex = 2; + Assert.AreEqual (2, tab.SelectedIndex, "#B1"); + Assert.AreEqual (1, _selected_index_changed, "#B2"); + tab.Controls.RemoveAt (2); +#if NET_2_0 + Assert.AreEqual (0, tab.SelectedIndex, "#B3"); +#else + Assert.AreEqual (1, tab.SelectedIndex, "#B3"); +#endif + Assert.AreEqual (5, tab.TabPages.Count, "#B4"); + Assert.AreEqual (2, _selected_index_changed, "#B5"); + + // remove not-selected tab +#if NET_2_0 + Assert.AreEqual (0, tab.SelectedIndex, "#C1"); +#else + Assert.AreEqual (1, tab.SelectedIndex, "#C1"); +#endif + Assert.AreEqual (2, _selected_index_changed, "#C2"); + tab.Controls.RemoveAt (3); +#if NET_2_0 + Assert.AreEqual (0, tab.SelectedIndex, "#C3"); +#else + Assert.AreEqual (2, tab.SelectedIndex, "#C3"); +#endif + Assert.AreEqual (4, tab.TabPages.Count, "#C4"); +#if NET_2_0 + Assert.AreEqual (2, _selected_index_changed, "#C5"); +#else + Assert.AreEqual (3, _selected_index_changed, "#C5"); +#endif + + // remove last tab + tab.Controls.RemoveAt (3); +#if NET_2_0 + Assert.AreEqual (0, tab.SelectedIndex, "#D1"); +#else + Assert.AreEqual (2, tab.SelectedIndex, "#D1"); +#endif + Assert.AreEqual (3, tab.TabPages.Count, "#D2"); +#if NET_2_0 + Assert.AreEqual (2, _selected_index_changed, "#D3"); +#else + Assert.AreEqual (3, _selected_index_changed, "#D3"); +#endif + + // remove first tab + tab.Controls.RemoveAt (0); + Assert.AreEqual (0, tab.SelectedIndex, "#E1"); + Assert.AreEqual (2, tab.TabPages.Count, "#E2"); +#if NET_2_0 + Assert.AreEqual (3, _selected_index_changed, "#E3"); +#else + Assert.AreEqual (4, _selected_index_changed, "#E3"); +#endif + + // remove remaining tabs + tab.Controls.RemoveAt (1); + tab.Controls.RemoveAt (0); + Assert.AreEqual (-1, tab.SelectedIndex, "#F1"); + Assert.AreEqual (0, tab.TabPages.Count, "#F2"); +#if NET_2_0 + Assert.AreEqual (4, _selected_index_changed, "#F3"); +#else + Assert.AreEqual (5, _selected_index_changed, "#F3"); +#endif + } + + [Test] + [Category ("NotWorking")] + public void Controls_Remove_HandleNotCreated () + { + TabControl tab = new TabControl (); + tab.SelectedIndexChanged += new EventHandler (SelectedIndexChanged); + tab.Controls.Add (new TabPage ()); + tab.Controls.Add (new TabPage ()); + tab.Controls.Add (new TabPage ()); + tab.Controls.Add (new TabPage ()); + tab.Controls.Add (new TabPage ()); + tab.Controls.Add (new TabPage ()); + + Assert.AreEqual (-1, tab.SelectedIndex, "#A1"); + Assert.AreEqual (6, tab.TabPages.Count, "#A2"); + Assert.AreEqual (0, _selected_index_changed, "#A3"); + + // remove selected tab + tab.SelectedIndex = 2; + Assert.AreEqual (2, tab.SelectedIndex, "#B1"); +#if NET_2_0 + Assert.AreEqual (0, _selected_index_changed, "#B2"); +#else + Assert.AreEqual (1, _selected_index_changed, "#B2"); +#endif + tab.Controls.RemoveAt (2); +#if NET_2_0 + Assert.AreEqual (0, tab.SelectedIndex, "#B3"); +#else + Assert.AreEqual (1, tab.SelectedIndex, "#B3"); +#endif + Assert.AreEqual (5, tab.TabPages.Count, "#B4"); +#if NET_2_0 + Assert.AreEqual (0, _selected_index_changed, "#B5"); +#else + Assert.AreEqual (2, _selected_index_changed, "#B5"); +#endif + + // remove not-selected tab + tab.Controls.RemoveAt (3); +#if NET_2_0 + Assert.AreEqual (0, tab.SelectedIndex, "#C3"); +#else + Assert.AreEqual (2, tab.SelectedIndex, "#C3"); +#endif + Assert.AreEqual (4, tab.TabPages.Count, "#C4"); +#if NET_2_0 + Assert.AreEqual (0, _selected_index_changed, "#C5"); +#else + Assert.AreEqual (3, _selected_index_changed, "#C5"); +#endif + + // remove last tab + tab.Controls.RemoveAt (3); +#if NET_2_0 + Assert.AreEqual (0, tab.SelectedIndex, "#D1"); +#else + Assert.AreEqual (2, tab.SelectedIndex, "#D1"); +#endif + Assert.AreEqual (3, tab.TabPages.Count, "#D2"); +#if NET_2_0 + Assert.AreEqual (0, _selected_index_changed, "#D3"); +#else + Assert.AreEqual (3, _selected_index_changed, "#D3"); +#endif + + // remove first tab + tab.Controls.RemoveAt (0); + Assert.AreEqual (0, tab.SelectedIndex, "#E1"); + Assert.AreEqual (2, tab.TabPages.Count, "#E2"); +#if NET_2_0 + Assert.AreEqual (0, _selected_index_changed, "#E3"); +#else + Assert.AreEqual (4, _selected_index_changed, "#E3"); +#endif + + // remove remaining tabs + tab.Controls.RemoveAt (1); + tab.Controls.RemoveAt (0); + Assert.AreEqual (0, tab.SelectedIndex, "#F1"); + Assert.AreEqual (0, tab.TabPages.Count, "#F2"); +#if NET_2_0 + Assert.AreEqual (0, _selected_index_changed, "#F3"); +#else + Assert.AreEqual (4, _selected_index_changed, "#F3"); +#endif + + Form form = new Form (); + form.ShowInTaskbar = false; + form.Controls.Add (tab); + form.Show (); + Assert.AreEqual (-1, tab.SelectedIndex, "#G1"); + Assert.AreEqual (0, tab.TabPages.Count, "#G2"); +#if NET_2_0 + Assert.AreEqual (0, _selected_index_changed, "#G3"); +#else + Assert.AreEqual (4, _selected_index_changed, "#G3"); +#endif + } + + [Test] + public void SelectedIndex () + { + TabControl tab = new TabControl (); + tab.SelectedIndexChanged += new EventHandler (SelectedIndexChanged); + tab.Controls.Add (new TabPage ()); + tab.Controls.Add (new TabPage ()); + + tab.SelectedIndex = 0; +#if NET_2_0 + Assert.AreEqual (0, _selected_index_changed, "#A1"); +#else + Assert.AreEqual (1, _selected_index_changed, "#A1"); +#endif + Assert.AreEqual (0, tab.SelectedIndex, "#A2"); + + tab.SelectedIndex = -1; +#if NET_2_0 + Assert.AreEqual (0, _selected_index_changed, "#B1"); +#else + Assert.AreEqual (2, _selected_index_changed, "#B1"); +#endif + Assert.AreEqual (-1, tab.SelectedIndex, "#B2"); + + tab.SelectedIndex = 1; +#if NET_2_0 + Assert.AreEqual (0, _selected_index_changed, "#C1"); +#else + Assert.AreEqual (3, _selected_index_changed, "#C1"); +#endif + Assert.AreEqual (1, tab.SelectedIndex, "#C2"); + + tab.SelectedIndex = 1; +#if NET_2_0 + Assert.AreEqual (0, _selected_index_changed, "#D1"); +#else + Assert.AreEqual (3, _selected_index_changed, "#D1"); +#endif + Assert.AreEqual (1, tab.SelectedIndex, "#D2"); + + + tab.SelectedIndex = 6; +#if NET_2_0 + Assert.AreEqual (0, _selected_index_changed, "#E1"); +#else + Assert.AreEqual (4, _selected_index_changed, "#E1"); +#endif + Assert.AreEqual (6, tab.SelectedIndex, "#E2"); + + tab.SelectedIndex = 6; +#if NET_2_0 + Assert.AreEqual (0, _selected_index_changed, "#E31"); +#else + Assert.AreEqual (4, _selected_index_changed, "#E3"); +#endif + Assert.AreEqual (6, tab.SelectedIndex, "#E4"); + + Form form = new Form (); + form.ShowInTaskbar = false; + form.Controls.Add (tab); + + form.Show (); + + Assert.AreEqual (0, tab.SelectedIndex, "#E5"); + + tab.SelectedIndex = 0; +#if NET_2_0 + Assert.AreEqual (0, _selected_index_changed, "#F1"); +#else + Assert.AreEqual (4, _selected_index_changed, "#F1"); +#endif + Assert.AreEqual (0, tab.SelectedIndex, "#F2"); + + tab.SelectedIndex = -1; +#if NET_2_0 + Assert.AreEqual (1, _selected_index_changed, "#G1"); +#else + Assert.AreEqual (5, _selected_index_changed, "#G1"); +#endif + Assert.AreEqual (-1, tab.SelectedIndex, "#G2"); + + tab.SelectedIndex = 1; +#if NET_2_0 + Assert.AreEqual (2, _selected_index_changed, "#H1"); +#else + Assert.AreEqual (6, _selected_index_changed, "#H1"); +#endif + Assert.AreEqual (1, tab.SelectedIndex, "#H2"); + + tab.SelectedIndex = 1; +#if NET_2_0 + Assert.AreEqual (2, _selected_index_changed, "#I1"); +#else + Assert.AreEqual (6, _selected_index_changed, "#I1"); +#endif + Assert.AreEqual (1, tab.SelectedIndex, "#I2"); + + form.Dispose (); + } + + [Test] // bug #78395 + public void SelectedIndex_Ignore () { - // bug #78395 TabControl c = new TabControl (); + c.SelectedIndexChanged += new EventHandler (SelectedIndexChanged); c.SelectedIndex = 0; +#if NET_2_0 + Assert.AreEqual (0, _selected_index_changed, "#1"); +#else + Assert.AreEqual (1, _selected_index_changed, "#1"); +#endif c.TabPages.Add (new TabPage ()); c.TabPages.Add (new TabPage ()); - Assert.AreEqual (0, c.SelectedIndex, "#1"); + Assert.AreEqual (0, c.SelectedIndex, "#2"); Form f = new Form (); f.ShowInTaskbar = false; f.Controls.Add (c); f.Show (); +#if NET_2_0 + Assert.AreEqual (0, _selected_index_changed, "#3"); +#else + Assert.AreEqual (1, _selected_index_changed, "#3"); +#endif c.SelectedIndex = 2; // beyond the pages - ignored - Assert.AreEqual (0, c.SelectedIndex, "#2"); +#if NET_2_0 + Assert.AreEqual (1, _selected_index_changed, "#4"); +#else + Assert.AreEqual (2, _selected_index_changed, "#4"); +#endif + Assert.AreEqual (0, c.SelectedIndex, "#4"); f.Dispose (); } + [Test] + public void SelectedIndex_Negative () + { + Form form = new Form (); + form.ShowInTaskbar = false; + TabControl tab = new TabControl (); + tab.SelectedIndexChanged += new EventHandler (SelectedIndexChanged); + form.Controls.Add (tab); + + Assert.AreEqual (-1, tab.SelectedIndex, "#A1"); + tab.SelectedIndex = -1; + Assert.AreEqual (-1, tab.SelectedIndex, "#A2"); + Assert.AreEqual (0, _selected_index_changed, "#A3"); + + try { + tab.SelectedIndex = -2; + Assert.Fail ("#B1"); +#if NET_2_0 + } catch (ArgumentOutOfRangeException ex) { + Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2"); + Assert.IsNotNull (ex.Message, "#B3"); + Assert.IsTrue (ex.Message.IndexOf ("'-2'") != -1, "#B4"); + Assert.IsTrue (ex.Message.IndexOf ("'SelectedIndex'") != -1, "#B5"); + Assert.IsTrue (ex.Message.IndexOf ("-1") != -1, "#B6"); + Assert.IsNotNull (ex.ParamName, "#B7"); + Assert.AreEqual ("SelectedIndex", ex.ParamName, "#B8"); + } +#else + } catch (ArgumentException ex) { + Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2"); + Assert.IsNotNull (ex.Message, "#B3"); + Assert.IsTrue (ex.Message.IndexOf ("'-2'") != -1, "#B4"); + Assert.IsTrue (ex.Message.IndexOf ("'value'") != -1, "#B5"); + Assert.IsTrue (ex.Message.IndexOf ("-1") != -1, "#B6"); + Assert.IsNull (ex.ParamName, "#B7"); + } +#endif + + Assert.AreEqual (0, _selected_index_changed, "#C1"); + Assert.AreEqual (-1, tab.SelectedIndex, "#C2"); + form.Show (); + Assert.AreEqual (0, _selected_index_changed, "#C3"); + Assert.AreEqual (-1, tab.SelectedIndex, "#C4"); + + try { + tab.SelectedIndex = -5; + Assert.Fail ("#D1"); +#if NET_2_0 + } catch (ArgumentOutOfRangeException ex) { + Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#D2"); + Assert.IsNotNull (ex.Message, "#D3"); + Assert.IsTrue (ex.Message.IndexOf ("'-5'") != -1, "#D4"); + Assert.IsTrue (ex.Message.IndexOf ("'SelectedIndex'") != -1, "#D5"); + Assert.IsTrue (ex.Message.IndexOf ("-1") != -1, "#D6"); + Assert.IsNotNull (ex.ParamName, "#D7"); + Assert.AreEqual ("SelectedIndex", ex.ParamName, "#D8"); + } +#else + } catch (ArgumentException ex) { + Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#D2"); + Assert.IsNotNull (ex.Message, "#D3"); + Assert.IsTrue (ex.Message.IndexOf ("'-5'") != -1, "#D4"); + Assert.IsTrue (ex.Message.IndexOf ("'value'") != -1, "#D5"); + Assert.IsTrue (ex.Message.IndexOf ("-1") != -1, "#D6"); + Assert.IsNull (ex.ParamName, "#D7"); + } +#endif + + Assert.AreEqual (-1, tab.SelectedIndex, "#E1"); + tab.SelectedIndex = -1; + Assert.AreEqual (-1, tab.SelectedIndex, "#E2"); + Assert.AreEqual (0, _selected_index_changed, "#E3"); + + form.Dispose (); + } + [Test] [Category ("NotWorking")] public void InputKeyTest () @@ -183,6 +563,8 @@ namespace MonoTests.System.Windows.Forms { // Create the handle, things are a little different with // the handle created IntPtr dummy = p.Handle; + + TestHelper.RemoveWarning (dummy); foreach (Keys key in Enum.GetValues (typeof (Keys))) { switch (key) { @@ -213,9 +595,230 @@ namespace MonoTests.System.Windows.Forms { public void NoTabPages () { Form form = new Form (); + TabControl tab = new TabControl (); + tab.SelectedIndex = 0; + Assert.AreEqual (0, tab.SelectedIndex, "#A1"); + + form.Controls.Add (tab); + + Assert.AreEqual (0, tab.SelectedIndex, "#A2"); + + form.ShowInTaskbar = false; + form.Show (); + + Assert.AreEqual (-1, tab.SelectedIndex, "#A3"); + + form.Dispose (); + } + + [Test] // bug #81802. should not throw an exception + public void NoTabPages2 () + { + Form form = new Form (); + form.Font = new Font ("Tahoma", 8.25F, FontStyle.Regular, GraphicsUnit.Point, ((byte) (0))); + TabControl tab = new TabControl (); + form.Controls.Add (tab); + tab.Dispose (); + form.Dispose (); + } + + private void SelectedIndexChanged (object sender, EventArgs e) + { + _selected_index_changed++; + } + +#if NET_2_0 + [Test] + public void MethodSelectTab () + { + TabControl tc = new TabControl (); + tc.TabPages.Add ("One", "One"); + tc.TabPages.Add ("Two", "Two"); + tc.TabPages.Add ("Three", "Three"); + + tc.SelectTab (1); + Assert.AreEqual (1, tc.SelectedIndex, "A1"); + + tc.SelectTab (tc.TabPages[2]); + Assert.AreEqual (2, tc.SelectedIndex, "A2"); + + tc.SelectTab ("One"); + Assert.AreEqual (0, tc.SelectedIndex, "A3"); + + tc.SelectTab (1); + tc.DeselectTab (1); + Assert.AreEqual (2, tc.SelectedIndex, "A4"); + + tc.DeselectTab (2); + Assert.AreEqual (0, tc.SelectedIndex, "A5"); + + tc.DeselectTab (tc.TabPages[0]); + Assert.AreEqual (1, tc.SelectedIndex, "A6"); + + tc.DeselectTab (tc.TabPages[0]); + Assert.AreEqual (1, tc.SelectedIndex, "A7"); + + tc.DeselectTab (tc.TabPages[1]); + Assert.AreEqual (2, tc.SelectedIndex, "A7"); + + tc.DeselectTab ("Two"); + Assert.AreEqual (2, tc.SelectedIndex, "A8"); + + tc.DeselectTab ("Three"); + Assert.AreEqual (0, tc.SelectedIndex, "A8"); + } + + [Test] + [ExpectedException (typeof (ArgumentOutOfRangeException))] + public void MethodSelectTabAOORE () + { + TabControl tc = new TabControl (); + tc.TabPages.Add (new TabPage ("One")); + tc.TabPages.Add (new TabPage ("Two")); + + tc.SelectTab (-1); + } + + [Test] + [ExpectedException (typeof (ArgumentOutOfRangeException))] + public void MethodSelectTabAOORE2 () + { + TabControl tc = new TabControl (); + tc.TabPages.Add (new TabPage ("One")); + tc.TabPages.Add (new TabPage ("Two")); + + tc.SelectTab (2); + } + + [Test] + public void EventSelected () + { + Form f = new Form (); + TabControl tc = new TabControl (); + TabControlEventArgs tcea1 = new TabControlEventArgs (null, 0, TabControlAction.Deselected); + TabControlEventArgs tcea2 = new TabControlEventArgs (null, 0, TabControlAction.Selected); + TabControlCancelEventArgs tccea1 = new TabControlCancelEventArgs (null, 0, false, TabControlAction.Deselecting); + TabControlCancelEventArgs tccea2 = new TabControlCancelEventArgs (null, 0, false, TabControlAction.Selecting); + + f.Controls.Add (tc); + string events = string.Empty; + tc.SelectedIndexChanged += new EventHandler (delegate (Object obj, EventArgs e) { events += ("SelectedIndexChanged;"); }); + tc.Deselecting += new TabControlCancelEventHandler (delegate (Object obj, TabControlCancelEventArgs e) { events += ("Deselecting;"); tccea1 = e; }); + tc.Deselected += new TabControlEventHandler (delegate (Object obj, TabControlEventArgs e) { events += ("Deselected;"); tcea1 = e; }); + tc.Selecting += new TabControlCancelEventHandler (delegate (Object obj, TabControlCancelEventArgs e) { events += ("Selecting;"); tccea2 = e; }); + tc.Selected += new TabControlEventHandler (delegate (Object obj, TabControlEventArgs e) { events += ("Selected;"); tcea2 = e; }); + + TabPage tp1 = new TabPage ("One"); + TabPage tp2 = new TabPage ("Two"); + + tc.TabPages.Add (tp1); + tc.TabPages.Add (tp2); + + f.Show (); + tc.SelectTab (1); + Assert.AreEqual ("Deselecting;Deselected;Selecting;Selected;SelectedIndexChanged;", events, "A1"); + Assert.AreEqual (TabControlAction.Deselecting, tccea1.Action, "A2"); + Assert.AreEqual (TabControlAction.Deselected, tcea1.Action, "A2"); + Assert.AreEqual (TabControlAction.Selecting, tccea2.Action, "A2"); + Assert.AreEqual (TabControlAction.Selected, tcea2.Action, "A2"); + Assert.AreSame (tp2, tcea2.TabPage, "A3"); + Assert.AreEqual (1, tcea2.TabPageIndex, "A4"); + f.Close (); + } + + [Test] + [Category ("NotWorking")] + public void EnterLeaveEvents () + { + Form f = new Form (); TabControl tc = new TabControl (); - form.Controls.Add (tc); + TabPage p1 = new TabPage (); + string events = string.Empty; + tc.Enter += new EventHandler (delegate (Object obj, EventArgs e) { events += ("tc_OnEnter;"); }); + tc.Leave += new EventHandler (delegate (Object obj, EventArgs e) { events += ("tc_OnLeave;"); }); + p1.Enter += new EventHandler (delegate (Object obj, EventArgs e) { events += ("p1_OnEnter;");}); + p1.Leave += new EventHandler (delegate (Object obj, EventArgs e) { events += ("p1_OnLeave;"); }); + tc.TabPages.Add (p1); + + Button b1 = new Button (); + + tc.TabIndex = 0; + b1.TabIndex = 1; + + f.Controls.Add (b1); + f.Controls.Add (tc); + + f.Show (); + Assert.AreEqual ("tc_OnEnter;p1_OnEnter;", events, "A1"); + b1.Focus (); + Assert.AreEqual ("tc_OnEnter;p1_OnEnter;p1_OnLeave;tc_OnLeave;", events, "A2"); + } + + [Test] // bug #499887 + public void SelectedIndexChangeFiresFocus () + { + Form f = new Form (); + TabControl tc = new TabControl (); + TabPage p1 = new TabPage (); + TabPage p2 = new TabPage (); + string events = string.Empty; + + tc.TabPages.Add (p1); + tc.TabPages.Add (p2); + tc.SelectedIndex = 0; + Button b1 = new Button (); + Button b2 = new Button (); + + f.Controls.Add (b1); + f.Controls.Add (b2); + f.Controls.Add (tc); + + f.Show (); + b1.Focus (); + b2.GotFocus += new EventHandler (delegate (Object obj, EventArgs e) { + tc.SelectedIndex = 1; + }); + + tc.GotFocus += new EventHandler(delegate (Object obj, EventArgs e) { events += ("tc_OnGotFocus" + tc.SelectedIndex + ";"); }); + tc.SelectedIndexChanged += new EventHandler(delegate (Object obj, EventArgs e) { events += ("tc_OnSelectedIndexChanged" + tc.SelectedIndex + ";"); }); + p2.Enter += new EventHandler(delegate (Object obj, EventArgs e) { events += ("p2_OnEnter" + tc.SelectedIndex + ";"); }); + p2.Leave += new EventHandler (delegate (Object obj, EventArgs e) { events += ("p2_OnLeave;"); }); + + b2.Focus (); + Assert.AreEqual ("tc_OnGotFocus0;p2_OnEnter1;tc_OnSelectedIndexChanged1;", events, "A1"); + Assert.IsTrue (tc.Focused, "A2"); + } + +#endif + } + + [TestFixture] + public class TabPageCollectionTest : TestHelper + { + [Test] + public void Indexer () + { + TabControl tab = new TabControl (); + TabControl.TabPageCollection tabPages = new TabControl.TabPageCollection (tab); + TabPage tabPageA = new TabPage (); + TabPage tabPageB = new TabPage (); + TabPage tabPageC = new TabPage (); + TabPage tabPageD = new TabPage (); + tabPages.Add (tabPageA); + Assert.AreSame (tabPageA, tabPages [0], "#1"); + tabPages [0] = tabPageB; + Assert.AreSame (tabPageB, tabPages [0], "#2"); + tabPages.Add (tabPageC); + Assert.AreSame (tabPageB, tabPages [0], "#3"); + Assert.AreSame (tabPageC, tabPages [1], "#4"); + tabPages.Remove (tabPageB); + Assert.AreSame (tabPageC, tabPages [0], "#5"); + tabPages [0] = tabPageD; + Assert.AreSame (tabPageD, tabPages [0], "#6"); + + Form form = new Form (); form.ShowInTaskbar = false; + form.Controls.Add (tab); form.Show (); form.Dispose (); }