Browse Source

Test for TabClicked event

Thomas 2 năm trước cách đây
mục cha
commit
8b8bb2ab60
1 tập tin đã thay đổi với 81 bổ sung0 xóa
  1. 81 0
      UnitTests/Views/TabViewTests.cs

+ 81 - 0
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 ();