From 8b8bb2ab608ca337cc994c94cce7e8f21f4d9f6f Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 20 Jan 2023 20:05:53 +0000 Subject: [PATCH] Test for TabClicked event --- UnitTests/Views/TabViewTests.cs | 81 +++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/UnitTests/Views/TabViewTests.cs b/UnitTests/Views/TabViewTests.cs index 79da1e3a4..a177d251c 100644 --- a/UnitTests/Views/TabViewTests.cs +++ b/UnitTests/Views/TabViewTests.cs @@ -760,6 +760,87 @@ namespace Terminal.Gui.ViewTests { └──────────────┘ ", output); } + [Fact, AutoInitShutdown] + public void MouseClick_ChangesTab () + { + var tv = GetTabView (out var tab1, out var tab2, false); + + tv.Width = 20; + tv.Height = 5; + + tv.LayoutSubviews (); + + tv.Redraw (tv.Bounds); + + var tabRow = tv.Subviews[0]; + Assert.Equal("TabRowView",tabRow.GetType().Name); + + TestHelpers.AssertDriverContentsAre (@" +┌────┐ +│Tab1│Tab2 +│ └─────────────┐ +│hi │ +└──────────────────┘ +", output); + + TabView.Tab clicked = null; + + + tv.TabClicked += (s,e)=>{ + clicked = e.Tab; + }; + + // Waving mouse around does not trigger click + for(int i=0;i<100;i++) + { + tabRow.MouseEvent(new MouseEvent{ + X = i, + Y = 1, + Flags = MouseFlags.ReportMousePosition + }); + + Assert.Null(clicked); + Assert.Equal(tab1, tv.SelectedTab); + } + + tabRow.MouseEvent(new MouseEvent{ + X = 3, + Y = 1, + Flags = MouseFlags.Button1Clicked + }); + + Assert.Equal(tab1, clicked); + Assert.Equal(tab1, tv.SelectedTab); + + + // Click to tab2 + tabRow.MouseEvent(new MouseEvent{ + X = 7, + Y = 1, + Flags = MouseFlags.Button1Clicked + }); + + Assert.Equal(tab2, clicked); + Assert.Equal(tab2, tv.SelectedTab); + + // cancel navigation + tv.TabClicked += (s,e)=>{ + clicked = e.Tab; + e.MouseEvent.Handled = true; + }; + + tabRow.MouseEvent(new MouseEvent{ + X = 3, + Y = 1, + Flags = MouseFlags.Button1Clicked + }); + + // Tab 1 was clicked but event handler blocked navigation + Assert.Equal(tab1, clicked); + Assert.Equal(tab2, tv.SelectedTab); + + } + private void InitFakeDriver () { var driver = new FakeDriver ();