|
@@ -530,10 +530,12 @@ public class ContextMenuTests (ITestOutputHelper output)
|
|
|
output
|
|
|
);
|
|
|
|
|
|
+ View menu = top.SubViews.First (v => v is Menu);
|
|
|
+
|
|
|
Assert.True (
|
|
|
- top.SubViews.ElementAt (0)
|
|
|
+ menu
|
|
|
.NewMouseEvent (
|
|
|
- new MouseEventArgs { Position = new (0, 3), Flags = MouseFlags.ReportMousePosition, View = top.SubViews.ElementAt (0) }
|
|
|
+ new MouseEventArgs { Position = new (0, 3), Flags = MouseFlags.ReportMousePosition, View = menu }
|
|
|
)
|
|
|
);
|
|
|
Application.RunIteration (ref rs);
|
|
@@ -578,10 +580,11 @@ public class ContextMenuTests (ITestOutputHelper output)
|
|
|
output
|
|
|
);
|
|
|
|
|
|
+ menu = top.SubViews.First (v => v is Menu);
|
|
|
Assert.True (
|
|
|
- top.SubViews.ElementAt (0)
|
|
|
+ menu
|
|
|
.NewMouseEvent (
|
|
|
- new MouseEventArgs { Position = new (30, 3), Flags = MouseFlags.ReportMousePosition, View = top.SubViews.ElementAt (0) }
|
|
|
+ new MouseEventArgs { Position = new (30, 3), Flags = MouseFlags.ReportMousePosition, View = menu }
|
|
|
)
|
|
|
);
|
|
|
Application.RunIteration (ref rs);
|
|
@@ -625,10 +628,11 @@ public class ContextMenuTests (ITestOutputHelper output)
|
|
|
output
|
|
|
);
|
|
|
|
|
|
+ menu = top.SubViews.First (v => v is Menu);
|
|
|
Assert.True (
|
|
|
- top.SubViews.ElementAt (0)
|
|
|
+ menu
|
|
|
.NewMouseEvent (
|
|
|
- new MouseEventArgs { Position = new (30, 3), Flags = MouseFlags.ReportMousePosition, View = top.SubViews.ElementAt (0) }
|
|
|
+ new MouseEventArgs { Position = new (30, 3), Flags = MouseFlags.ReportMousePosition, View = menu }
|
|
|
)
|
|
|
);
|
|
|
Application.RunIteration (ref rs);
|
|
@@ -669,10 +673,11 @@ public class ContextMenuTests (ITestOutputHelper output)
|
|
|
output
|
|
|
);
|
|
|
|
|
|
+ menu = top.SubViews.First (v => v is Menu);
|
|
|
Assert.True (
|
|
|
- top.SubViews.ElementAt (0)
|
|
|
+ menu
|
|
|
.NewMouseEvent (
|
|
|
- new MouseEventArgs { Position = new (30, 3), Flags = MouseFlags.ReportMousePosition, View = top.SubViews.ElementAt (0) }
|
|
|
+ new MouseEventArgs { Position = new (30, 3), Flags = MouseFlags.ReportMousePosition, View = menu }
|
|
|
)
|
|
|
);
|
|
|
Application.RunIteration (ref rs);
|
|
@@ -713,10 +718,11 @@ public class ContextMenuTests (ITestOutputHelper output)
|
|
|
output
|
|
|
);
|
|
|
|
|
|
+ menu = top.SubViews.First (v => v is Menu);
|
|
|
Assert.True (
|
|
|
- top.SubViews.ElementAt (0)
|
|
|
+ menu
|
|
|
.NewMouseEvent (
|
|
|
- new MouseEventArgs { Position = new (30, 3), Flags = MouseFlags.ReportMousePosition, View = top.SubViews.ElementAt (0) }
|
|
|
+ new MouseEventArgs { Position = new (30, 3), Flags = MouseFlags.ReportMousePosition, View = menu }
|
|
|
)
|
|
|
);
|
|
|
Application.RunIteration (ref rs);
|
|
@@ -1223,7 +1229,8 @@ public class ContextMenuTests (ITestOutputHelper output)
|
|
|
Toplevel top = new ();
|
|
|
RunState rs = Application.Begin (top);
|
|
|
cm.Show (menuItems);
|
|
|
- Assert.Equal (new Rectangle (5, 11, 10, 5), Application.Top!.SubViews.ElementAt (0).Frame);
|
|
|
+ var menu = Application.Top!.SubViews.First (v => v is Menu);
|
|
|
+ Assert.Equal (new Rectangle (5, 11, 10, 5), menu.Frame);
|
|
|
Application.LayoutAndDraw ();
|
|
|
|
|
|
DriverAssert.AssertDriverContentsWithFrameAre (
|
|
@@ -1241,8 +1248,10 @@ public class ContextMenuTests (ITestOutputHelper output)
|
|
|
|
|
|
var firstIteration = false;
|
|
|
Application.RunIteration (ref rs, firstIteration);
|
|
|
- Assert.Equal (new Rectangle (5, 11, 10, 5), Application.Top.SubViews.ElementAt (0).Frame);
|
|
|
- Assert.Equal (new Rectangle (5, 11, 15, 6), Application.Top.SubViews.ElementAt (1).Frame);
|
|
|
+ menu = Application.Top!.SubViews.First (v => v is Menu);
|
|
|
+ Assert.Equal (new Rectangle (5, 11, 10, 5), menu.Frame);
|
|
|
+ menu = Application.Top!.SubViews.Last (v => v is Menu);
|
|
|
+ Assert.Equal (new Rectangle (5, 11, 15, 6), menu.Frame);
|
|
|
|
|
|
DriverAssert.AssertDriverContentsWithFrameAre (
|
|
|
@"
|
|
@@ -1259,7 +1268,8 @@ public class ContextMenuTests (ITestOutputHelper output)
|
|
|
|
|
|
firstIteration = false;
|
|
|
Application.RunIteration (ref rs, firstIteration);
|
|
|
- Assert.Equal (new Rectangle (5, 11, 10, 5), Application.Top.SubViews.ElementAt (0).Frame);
|
|
|
+ menu = Application.Top!.SubViews.First (v => v is Menu);
|
|
|
+ Assert.Equal (new Rectangle (5, 11, 10, 5), menu.Frame);
|
|
|
|
|
|
DriverAssert.AssertDriverContentsWithFrameAre (
|
|
|
@"
|
|
@@ -1316,7 +1326,10 @@ public class ContextMenuTests (ITestOutputHelper output)
|
|
|
RunState rs = Application.Begin (top);
|
|
|
cm.Show (menuItems);
|
|
|
|
|
|
- Assert.Equal (new Rectangle (5, 11, 10, 5), Application.Top.SubViews.ElementAt (0).Frame);
|
|
|
+
|
|
|
+ var menu = Application.Top!.SubViews.First (v => v is Menu);
|
|
|
+
|
|
|
+ Assert.Equal (new Rectangle (5, 11, 10, 5), menu.Frame);
|
|
|
Application.LayoutAndDraw ();
|
|
|
|
|
|
DriverAssert.AssertDriverContentsWithFrameAre (
|
|
@@ -1333,7 +1346,8 @@ public class ContextMenuTests (ITestOutputHelper output)
|
|
|
|
|
|
var firstIteration = false;
|
|
|
Application.RunIteration (ref rs, firstIteration);
|
|
|
- Assert.Equal (new Rectangle (5, 11, 10, 5), Application.Top.SubViews.ElementAt (0).Frame);
|
|
|
+ menu = Application.Top!.SubViews.First (v => v is Menu);
|
|
|
+ Assert.Equal (new Rectangle (5, 11, 10, 5), menu.Frame);
|
|
|
|
|
|
DriverAssert.AssertDriverContentsWithFrameAre (
|
|
|
@"
|
|
@@ -1350,7 +1364,8 @@ public class ContextMenuTests (ITestOutputHelper output)
|
|
|
|
|
|
firstIteration = false;
|
|
|
Application.RunIteration (ref rs, firstIteration);
|
|
|
- Assert.Equal (new Rectangle (5, 11, 10, 5), Application.Top.SubViews.ElementAt (0).Frame);
|
|
|
+ menu = Application.Top!.SubViews.First (v => v is Menu);
|
|
|
+ Assert.Equal (new Rectangle (5, 11, 10, 5), menu.Frame);
|
|
|
|
|
|
DriverAssert.AssertDriverContentsWithFrameAre (
|
|
|
@"
|
|
@@ -1368,7 +1383,8 @@ public class ContextMenuTests (ITestOutputHelper output)
|
|
|
|
|
|
firstIteration = false;
|
|
|
Application.RunIteration (ref rs, firstIteration);
|
|
|
- Assert.Equal (new Rectangle (5, 11, 10, 5), Application.Top.SubViews.ElementAt (0).Frame);
|
|
|
+ menu = Application.Top!.SubViews.First (v => v is Menu);
|
|
|
+ Assert.Equal (new Rectangle (5, 11, 10, 5), menu.Frame);
|
|
|
|
|
|
DriverAssert.AssertDriverContentsWithFrameAre (
|
|
|
@"
|
|
@@ -1404,7 +1420,7 @@ public class ContextMenuTests (ITestOutputHelper output)
|
|
|
Application.RaiseMouseEvent (new () { ScreenPosition = new (1, 3), Flags = MouseFlags.Button3Clicked });
|
|
|
Assert.False (tf1.HasFocus);
|
|
|
Assert.False (tf2.HasFocus);
|
|
|
- Assert.Equal (5, win.SubViews.Count);
|
|
|
+ Assert.Equal (6, win.SubViews.Count);
|
|
|
Assert.True (tf2.ContextMenu.MenuBar.IsMenuOpen);
|
|
|
Assert.True (win.Focused is Menu);
|
|
|
Assert.True (Application.MouseGrabView is MenuBar);
|
|
@@ -1414,7 +1430,7 @@ public class ContextMenuTests (ITestOutputHelper output)
|
|
|
Application.RaiseMouseEvent (new () { ScreenPosition = new (1, 1), Flags = MouseFlags.Button1Clicked });
|
|
|
Assert.True (tf1.HasFocus);
|
|
|
Assert.False (tf2.HasFocus);
|
|
|
- Assert.Equal (4, win.SubViews.Count);
|
|
|
+ Assert.Equal (5, win.SubViews.Count);
|
|
|
|
|
|
// The last context menu bar opened is always preserved
|
|
|
Assert.NotNull (tf2.ContextMenu.MenuBar);
|
|
@@ -1426,7 +1442,7 @@ public class ContextMenuTests (ITestOutputHelper output)
|
|
|
Application.RaiseMouseEvent (new () { ScreenPosition = new (1, 3), Flags = MouseFlags.Button1Clicked });
|
|
|
Assert.False (tf1.HasFocus);
|
|
|
Assert.True (tf2.HasFocus);
|
|
|
- Assert.Equal (4, win.SubViews.Count);
|
|
|
+ Assert.Equal (5, win.SubViews.Count);
|
|
|
|
|
|
// The last context menu bar opened is always preserved
|
|
|
Assert.NotNull (tf2.ContextMenu.MenuBar);
|
|
@@ -1710,7 +1726,7 @@ public class ContextMenuTests (ITestOutputHelper output)
|
|
|
Assert.False (cm.MenuBar.HotKeyBindings.TryGet (Key.R.NoShift, out _));
|
|
|
Assert.False (cm.MenuBar.HotKeyBindings.TryGet (Key.D.WithAlt, out _));
|
|
|
Assert.False (cm.MenuBar.HotKeyBindings.TryGet (Key.D.NoShift, out _));
|
|
|
- Assert.Single (Application.Top!.SubViews);
|
|
|
+ Assert.Equal (2, Application.Top!.SubViews.Count);
|
|
|
View [] menus = Application.Top!.SubViews.Where (v => v is Menu m && m.Host == cm.MenuBar).ToArray ();
|
|
|
Assert.True (menus [0].HotKeyBindings.TryGet (Key.N.WithAlt, out _));
|
|
|
Assert.True (menus [0].HotKeyBindings.TryGet (Key.N.NoShift, out _));
|
|
@@ -1835,7 +1851,7 @@ public class ContextMenuTests (ITestOutputHelper output)
|
|
|
Assert.False (cm.MenuBar!.HotKeyBindings.TryGet (Key.E.NoShift, out _));
|
|
|
Assert.False (cm.MenuBar.HotKeyBindings.TryGet (Key.R.WithAlt, out _));
|
|
|
Assert.False (cm.MenuBar.HotKeyBindings.TryGet (Key.R.NoShift, out _));
|
|
|
- Assert.Equal (3, Application.Top!.SubViews.Count);
|
|
|
+ Assert.Equal (4, Application.Top!.SubViews.Count);
|
|
|
menus = Application.Top!.SubViews.Where (v => v is Menu m && m.Host == cm.MenuBar).ToArray ();
|
|
|
Assert.True (menus [0].HotKeyBindings.TryGet (Key.E.WithAlt, out _));
|
|
|
Assert.True (menus [0].HotKeyBindings.TryGet (Key.E.NoShift, out _));
|
|
@@ -1850,7 +1866,7 @@ public class ContextMenuTests (ITestOutputHelper output)
|
|
|
|
|
|
cm.Show (menuItems);
|
|
|
Assert.True (cm.MenuBar.IsMenuOpen);
|
|
|
- Assert.Equal (3, Application.Top!.SubViews.Count);
|
|
|
+ Assert.Equal (4, Application.Top!.SubViews.Count);
|
|
|
menus = Application.Top!.SubViews.Where (v => v is Menu m && m.Host == cm.MenuBar).ToArray ();
|
|
|
Assert.True (menus [0].HotKeyBindings.TryGet (Key.E.WithAlt, out _));
|
|
|
Assert.True (menus [0].HotKeyBindings.TryGet (Key.E.NoShift, out _));
|
|
@@ -1866,7 +1882,7 @@ public class ContextMenuTests (ITestOutputHelper output)
|
|
|
Application.MainLoop!.RunIteration ();
|
|
|
Assert.True (renameFile);
|
|
|
|
|
|
- Assert.Single (Application.Top!.SubViews);
|
|
|
+ Assert.Equal (2, Application.Top!.SubViews.Count);
|
|
|
Assert.True (menuBar.HotKeyBindings.TryGet (Key.F.WithAlt, out _));
|
|
|
Assert.True (menuBar.HotKeyBindings.TryGet (Key.F.NoShift, out _));
|
|
|
Assert.False (menuBar.HotKeyBindings.TryGet (Key.N.WithAlt, out _));
|
|
@@ -1938,4 +1954,152 @@ public class ContextMenuTests (ITestOutputHelper output)
|
|
|
|
|
|
top.Dispose ();
|
|
|
}
|
|
|
-}
|
|
|
+
|
|
|
+ [Theory]
|
|
|
+ [InlineData (1)]
|
|
|
+ [InlineData (2)]
|
|
|
+ [InlineData (3)]
|
|
|
+ [AutoInitShutdown]
|
|
|
+ public void Mouse_Pressed_Released_Clicked (int button)
|
|
|
+ {
|
|
|
+ var actionRaised = false;
|
|
|
+
|
|
|
+ var menuBar = new MenuBar
|
|
|
+ {
|
|
|
+ Menus =
|
|
|
+ [
|
|
|
+ new (
|
|
|
+ "_File",
|
|
|
+ new MenuItem []
|
|
|
+ {
|
|
|
+ new ("_New", string.Empty, () => actionRaised = true)
|
|
|
+ })
|
|
|
+ ]
|
|
|
+ };
|
|
|
+ var cm = new ContextMenu ();
|
|
|
+
|
|
|
+ var menuItems = new MenuBarItem (
|
|
|
+ [
|
|
|
+ new ("_Rename File", string.Empty, () => actionRaised = true)
|
|
|
+ ]
|
|
|
+ );
|
|
|
+ var top = new Toplevel ();
|
|
|
+
|
|
|
+ top.MouseClick += (s, e) =>
|
|
|
+ {
|
|
|
+ if (e.Flags == cm.MouseFlags)
|
|
|
+ {
|
|
|
+ cm.Position = new (e.Position.X, e.Position.Y);
|
|
|
+ cm.Show (menuItems);
|
|
|
+ e.Handled = true;
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ top.Add (menuBar);
|
|
|
+ Application.Begin (top);
|
|
|
+
|
|
|
+ // MenuBar
|
|
|
+ Application.RaiseMouseEvent (new () { Flags = MouseFlags.Button1Pressed });
|
|
|
+ Assert.True (menuBar.IsMenuOpen);
|
|
|
+
|
|
|
+ switch (button)
|
|
|
+ {
|
|
|
+ // Left Button
|
|
|
+ case 1:
|
|
|
+ Application.RaiseMouseEvent (new () { ScreenPosition = new (1, 2), Flags = MouseFlags.Button1Pressed });
|
|
|
+ Assert.True (menuBar.IsMenuOpen);
|
|
|
+ Application.MainLoop.RunIteration ();
|
|
|
+ Assert.False (actionRaised);
|
|
|
+ Application.RaiseMouseEvent (new () { ScreenPosition = new (1, 2), Flags = MouseFlags.Button1Released });
|
|
|
+ Assert.True (menuBar.IsMenuOpen);
|
|
|
+ Application.MainLoop.RunIteration ();
|
|
|
+ Assert.False (actionRaised);
|
|
|
+ Application.RaiseMouseEvent (new () { ScreenPosition = new (1, 2), Flags = MouseFlags.Button1Clicked });
|
|
|
+ Assert.False (menuBar.IsMenuOpen);
|
|
|
+ Application.MainLoop.RunIteration ();
|
|
|
+ Assert.True (actionRaised);
|
|
|
+ actionRaised = false;
|
|
|
+
|
|
|
+ break;
|
|
|
+ // Middle Button
|
|
|
+ case 2:
|
|
|
+ // Right Button
|
|
|
+ case 3:
|
|
|
+ Application.RaiseMouseEvent (new () { ScreenPosition = new (1, 2), Flags = MouseFlags.Button3Pressed });
|
|
|
+ Assert.False (menuBar.IsMenuOpen);
|
|
|
+ Application.MainLoop.RunIteration ();
|
|
|
+ Assert.False (actionRaised);
|
|
|
+ Application.RaiseMouseEvent (new () { ScreenPosition = new (1, 2), Flags = MouseFlags.Button3Released });
|
|
|
+ Assert.False (menuBar.IsMenuOpen);
|
|
|
+ Application.MainLoop.RunIteration ();
|
|
|
+ Assert.False (actionRaised);
|
|
|
+ Application.RaiseMouseEvent (new () { ScreenPosition = new (1, 2), Flags = MouseFlags.Button3Clicked });
|
|
|
+ Assert.False (menuBar.IsMenuOpen);
|
|
|
+ Application.MainLoop.RunIteration ();
|
|
|
+ Assert.False (actionRaised);
|
|
|
+
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ // ContextMenu
|
|
|
+ Application.RaiseMouseEvent (new () { ScreenPosition = new (0, 2), Flags = cm.MouseFlags });
|
|
|
+ Assert.False (menuBar.IsMenuOpen);
|
|
|
+ Assert.True (cm.MenuBar!.IsMenuOpen);
|
|
|
+
|
|
|
+ switch (button)
|
|
|
+ {
|
|
|
+ // Left Button
|
|
|
+ case 1:
|
|
|
+ Application.RaiseMouseEvent (new () { ScreenPosition = new (1, 4), Flags = MouseFlags.Button1Pressed });
|
|
|
+ Assert.True (cm.MenuBar!.IsMenuOpen);
|
|
|
+ Application.MainLoop.RunIteration ();
|
|
|
+ Assert.False (actionRaised);
|
|
|
+ Application.RaiseMouseEvent (new () { ScreenPosition = new (1, 4), Flags = MouseFlags.Button1Released });
|
|
|
+ Assert.True (cm.MenuBar!.IsMenuOpen);
|
|
|
+ Application.MainLoop.RunIteration ();
|
|
|
+ Assert.False (actionRaised);
|
|
|
+ Application.RaiseMouseEvent (new () { ScreenPosition = new (1, 4), Flags = MouseFlags.Button1Clicked });
|
|
|
+ Assert.False (cm.MenuBar!.IsMenuOpen);
|
|
|
+ Application.MainLoop.RunIteration ();
|
|
|
+ Assert.True (actionRaised);
|
|
|
+ actionRaised = false;
|
|
|
+
|
|
|
+ break;
|
|
|
+ // Middle Button
|
|
|
+ case 2:
|
|
|
+ Application.RaiseMouseEvent (new () { ScreenPosition = new (1, 4), Flags = MouseFlags.Button2Pressed });
|
|
|
+ Assert.False (cm.MenuBar!.IsMenuOpen);
|
|
|
+ Application.MainLoop.RunIteration ();
|
|
|
+ Assert.False (actionRaised);
|
|
|
+ Application.RaiseMouseEvent (new () { ScreenPosition = new (1, 4), Flags = MouseFlags.Button2Released });
|
|
|
+ Assert.False (cm.MenuBar!.IsMenuOpen);
|
|
|
+ Application.MainLoop.RunIteration ();
|
|
|
+ Assert.False (actionRaised);
|
|
|
+ Application.RaiseMouseEvent (new () { ScreenPosition = new (1, 4), Flags = MouseFlags.Button2Clicked });
|
|
|
+ Assert.False (cm.MenuBar!.IsMenuOpen);
|
|
|
+ Application.MainLoop.RunIteration ();
|
|
|
+ Assert.False (actionRaised);
|
|
|
+
|
|
|
+ break;
|
|
|
+ // Right Button
|
|
|
+ case 3:
|
|
|
+ Application.RaiseMouseEvent (new () { ScreenPosition = new (1, 4), Flags = MouseFlags.Button3Pressed });
|
|
|
+ Assert.False (cm.MenuBar!.IsMenuOpen);
|
|
|
+ Application.MainLoop.RunIteration ();
|
|
|
+ Assert.False (actionRaised);
|
|
|
+ Application.RaiseMouseEvent (new () { ScreenPosition = new (1, 4), Flags = MouseFlags.Button3Released });
|
|
|
+ Assert.False (cm.MenuBar!.IsMenuOpen);
|
|
|
+ Application.MainLoop.RunIteration ();
|
|
|
+ Assert.False (actionRaised);
|
|
|
+ Application.RaiseMouseEvent (new () { ScreenPosition = new (1, 4), Flags = MouseFlags.Button3Clicked });
|
|
|
+ // MouseFlags is the same as cm.MouseFlags. So the context menu is closed and reopened again
|
|
|
+ Assert.True (cm.MenuBar!.IsMenuOpen);
|
|
|
+ Application.MainLoop.RunIteration ();
|
|
|
+ Assert.False (actionRaised);
|
|
|
+
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ top.Dispose ();
|
|
|
+ }
|
|
|
+}
|