123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519 |
- using Xunit;
- using Xunit.Abstractions;
- using GraphViewTests = Terminal.Gui.Views.GraphViewTests;
- namespace Terminal.Gui.Core {
- public class ContextMenuTests {
- readonly ITestOutputHelper output;
- public ContextMenuTests (ITestOutputHelper output)
- {
- this.output = output;
- }
- [Fact]
- [AutoInitShutdown]
- public void ContextMenu_Constructors ()
- {
- var cm = new ContextMenu ();
- Assert.Equal (new Point (0, 0), cm.Position);
- Assert.Empty (cm.MenuItens.Children);
- Assert.Null (cm.Host);
- cm.Position = new Point (20, 10);
- cm.MenuItens = new MenuBarItem (new MenuItem [] {
- new MenuItem ("First", "", null)
- });
- Assert.Equal (new Point (20, 10), cm.Position);
- Assert.Single (cm.MenuItens.Children);
- cm = new ContextMenu (5, 10,
- new MenuBarItem (new MenuItem [] {
- new MenuItem ("One", "", null),
- new MenuItem ("Two", "", null)
- })
- );
- Assert.Equal (new Point (5, 10), cm.Position);
- Assert.Equal (2, cm.MenuItens.Children.Length);
- Assert.Null (cm.Host);
- cm = new ContextMenu (new View () { X = 5, Y = 10 },
- new MenuBarItem (new MenuItem [] {
- new MenuItem ("One", "", null),
- new MenuItem ("Two", "", null)
- })
- );
- Assert.Equal (new Point (6, 10), cm.Position);
- Assert.Equal (2, cm.MenuItens.Children.Length);
- Assert.NotNull (cm.Host);
- }
- [Fact]
- [AutoInitShutdown]
- public void Show_Hide_IsShow ()
- {
- var cm = new ContextMenu (10, 5,
- new MenuBarItem (new MenuItem [] {
- new MenuItem ("One", "", null),
- new MenuItem ("Two", "", null)
- })
- );
- cm.Show ();
- Assert.True (ContextMenu.IsShow);
- Application.Begin (Application.Top);
- var expected = @"
- ┌──────┐
- │ One │
- │ Two │
- └──────┘
- ";
- GraphViewTests.AssertDriverContentsAre (expected, output);
- cm.Hide ();
- Assert.False (ContextMenu.IsShow);
- Application.Refresh ();
- expected = "";
- GraphViewTests.AssertDriverContentsAre (expected, output);
- }
- [Fact]
- [AutoInitShutdown]
- public void Position_Changing ()
- {
- var cm = new ContextMenu (10, 5,
- new MenuBarItem (new MenuItem [] {
- new MenuItem ("One", "", null),
- new MenuItem ("Two", "", null)
- })
- );
- cm.Show ();
- Application.Begin (Application.Top);
- var expected = @"
- ┌──────┐
- │ One │
- │ Two │
- └──────┘
- ";
- GraphViewTests.AssertDriverContentsAre (expected, output);
- cm.Position = new Point (5, 10);
- cm.Show ();
- Application.Refresh ();
- expected = @"
- ┌──────┐
- │ One │
- │ Two │
- └──────┘
- ";
- GraphViewTests.AssertDriverContentsAre (expected, output);
- }
- [Fact]
- [AutoInitShutdown]
- public void MenuItens_Changing ()
- {
- var cm = new ContextMenu (10, 5,
- new MenuBarItem (new MenuItem [] {
- new MenuItem ("One", "", null),
- new MenuItem ("Two", "", null)
- })
- );
- cm.Show ();
- Application.Begin (Application.Top);
- var expected = @"
- ┌──────┐
- │ One │
- │ Two │
- └──────┘
- ";
- GraphViewTests.AssertDriverContentsAre (expected, output);
- cm.MenuItens = new MenuBarItem (new MenuItem [] {
- new MenuItem ("First", "", null),
- new MenuItem ("Second", "", null),
- new MenuItem ("Third", "", null)
- });
- cm.Show ();
- Application.Refresh ();
- expected = @"
- ┌─────────┐
- │ First │
- │ Second │
- │ Third │
- └─────────┘
- ";
- GraphViewTests.AssertDriverContentsAre (expected, output);
- }
- [Fact, AutoInitShutdown]
- public void Key_Changing ()
- {
- var lbl = new Label ("Original");
- var cm = new ContextMenu ();
- lbl.KeyPress += (e) => {
- if (e.KeyEvent.Key == cm.Key) {
- lbl.Text = "Replaced";
- e.Handled = true;
- }
- };
- var top = Application.Top;
- top.Add (lbl);
- Application.Begin (top);
- Assert.True (lbl.ProcessKey (new KeyEvent (cm.Key, new KeyModifiers ())));
- Assert.Equal ("Replaced", lbl.Text);
- lbl.Text = "Original";
- cm.Key = Key.Space | Key.CtrlMask;
- Assert.True (lbl.ProcessKey (new KeyEvent (cm.Key, new KeyModifiers ())));
- Assert.Equal ("Replaced", lbl.Text);
- }
- [Fact, AutoInitShutdown]
- public void MouseFlags_Changing ()
- {
- var lbl = new Label ("Original");
- var cm = new ContextMenu ();
- lbl.MouseClick += (e) => {
- if (e.MouseEvent.Flags == cm.MouseFlags) {
- lbl.Text = "Replaced";
- e.Handled = true;
- }
- };
- var top = Application.Top;
- top.Add (lbl);
- Application.Begin (top);
- Assert.True (lbl.OnMouseEvent (new MouseEvent () { Flags = cm.MouseFlags }));
- Assert.Equal ("Replaced", lbl.Text);
- lbl.Text = "Original";
- cm.MouseFlags = MouseFlags.Button2Clicked;
- Assert.True (lbl.OnMouseEvent (new MouseEvent () { Flags = cm.MouseFlags }));
- Assert.Equal ("Replaced", lbl.Text);
- }
- [Fact, AutoInitShutdown]
- public void KeyChanged_Event ()
- {
- var oldKey = Key.Null;
- var cm = new ContextMenu ();
- cm.KeyChanged += (e) => oldKey = e;
- cm.Key = Key.Space | Key.CtrlMask;
- Assert.Equal (Key.Space | Key.CtrlMask, cm.Key);
- Assert.Equal (Key.F10 | Key.ShiftMask, oldKey);
- }
- [Fact, AutoInitShutdown]
- public void MouseFlagsChanged_Event ()
- {
- var oldMouseFlags = new MouseFlags ();
- var cm = new ContextMenu ();
- cm.MouseFlagsChanged += (e) => oldMouseFlags = e;
- cm.MouseFlags = MouseFlags.Button2Clicked;
- Assert.Equal (MouseFlags.Button2Clicked, cm.MouseFlags);
- Assert.Equal (MouseFlags.Button3Clicked, oldMouseFlags);
- }
- [Fact, AutoInitShutdown]
- public void Show_Ensures_Display_Inside_The_Container_But_Preserves_Position ()
- {
- var cm = new ContextMenu (80, 25,
- new MenuBarItem (new MenuItem [] {
- new MenuItem ("One", "", null),
- new MenuItem ("Two", "", null)
- })
- );
- Assert.Equal (new Point (80, 25), cm.Position);
- cm.Show ();
- Assert.Equal (new Point (80, 25), cm.Position);
- Application.Begin (Application.Top);
- var expected = @"
- ┌──────┐
- │ One │
- │ Two │
- └──────┘
- ";
- var pos = GraphViewTests.AssertDriverContentsWithFrameAre (expected, output);
- Assert.Equal (new Rect (72, 21, 80, 4), pos);
- cm.Hide ();
- Assert.Equal (new Point (80, 25), cm.Position);
- }
- [Fact, AutoInitShutdown]
- public void Show_Ensures_Display_Inside_The_Container_Without_Overlap_The_Host ()
- {
- var cm = new ContextMenu (new View () { X = 69, Y = 24, Width = 10, Height = 1 },
- new MenuBarItem (new MenuItem [] {
- new MenuItem ("One", "", null),
- new MenuItem ("Two", "", null)
- })
- );
- Assert.Equal (new Point (70, 25), cm.Position);
- cm.Show ();
- Assert.Equal (new Point (70, 25), cm.Position);
- Application.Begin (Application.Top);
- var expected = @"
- ┌──────┐
- │ One │
- │ Two │
- └──────┘
- ";
- var pos = GraphViewTests.AssertDriverContentsWithFrameAre (expected, output);
- Assert.Equal (new Rect (70, 21, 78, 4), pos);
- cm.Hide ();
- Assert.Equal (new Point (70, 25), cm.Position);
- }
- [Fact, AutoInitShutdown]
- public void Show_Display_Below_The_Bottom_Host_If_Has_Enough_Space ()
- {
- var cm = new ContextMenu (new View () { X = 10, Y = 5, Width = 10, Height = 1 },
- new MenuBarItem (new MenuItem [] {
- new MenuItem ("One", "", null),
- new MenuItem ("Two", "", null)
- })
- );
- Assert.Equal (new Point (11, 6), cm.Position);
- cm.Host.X = 5;
- cm.Host.Y = 10;
- cm.Show ();
- Assert.Equal (new Point (6, 11), cm.Position);
- Application.Begin (Application.Top);
- var expected = @"
- ┌──────┐
- │ One │
- │ Two │
- └──────┘
- ";
- var pos = GraphViewTests.AssertDriverContentsWithFrameAre (expected, output);
- Assert.Equal (new Rect (6, 12, 14, 4), pos);
- cm.Hide ();
- Assert.Equal (new Point (6, 11), cm.Position);
- }
- [Fact, AutoInitShutdown]
- public void Show_Display_At_Zero_If_The_Toplevel_Width_Is_Less_Than_The_Menu_Width ()
- {
- var cm = new ContextMenu (0, 0,
- new MenuBarItem (new MenuItem [] {
- new MenuItem ("One", "", null),
- new MenuItem ("Two", "", null)
- })
- );
- Assert.Equal (new Point (0, 0), cm.Position);
- cm.Show ();
- Assert.Equal (new Point (0, 0), cm.Position);
- Application.Begin (Application.Top);
- ((FakeDriver)Application.Driver).SetBufferSize (5, 25);
- var expected = @"
- ┌────
- │ One
- │ Two
- └────
- ";
- var pos = GraphViewTests.AssertDriverContentsWithFrameAre (expected, output);
- Assert.Equal (new Rect (0, 1, 5, 4), pos);
- cm.Hide ();
- Assert.Equal (new Point (0, 0), cm.Position);
- }
- [Fact, AutoInitShutdown]
- public void Show_Display_At_Zero_If_The_Toplevel_Height_Is_Less_Than_The_Menu_Height ()
- {
- var cm = new ContextMenu (0, 0,
- new MenuBarItem (new MenuItem [] {
- new MenuItem ("One", "", null),
- new MenuItem ("Two", "", null)
- })
- );
- Assert.Equal (new Point (0, 0), cm.Position);
- cm.Show ();
- Assert.Equal (new Point (0, 0), cm.Position);
- Application.Begin (Application.Top);
- ((FakeDriver)Application.Driver).SetBufferSize (80, 4);
- var expected = @"
- ┌──────┐
- │ One │
- │ Two │
- ";
- var pos = GraphViewTests.AssertDriverContentsWithFrameAre (expected, output);
- Assert.Equal (new Rect (0, 1, 8, 3), pos);
- cm.Hide ();
- Assert.Equal (new Point (0, 0), cm.Position);
- }
- [Fact, AutoInitShutdown]
- public void Hide_Is_Invoke_At_Container_Closing ()
- {
- var cm = new ContextMenu (80, 25,
- new MenuBarItem (new MenuItem [] {
- new MenuItem ("One", "", null),
- new MenuItem ("Two", "", null)
- })
- );
- var top = Application.Top;
- Application.Begin (top);
- top.Running = true;
- Assert.False (ContextMenu.IsShow);
- cm.Show ();
- Assert.True (ContextMenu.IsShow);
- top.RequestStop ();
- Assert.False (ContextMenu.IsShow);
- }
- [Fact, AutoInitShutdown]
- public void ForceMinimumPosToZero_True_False ()
- {
- var cm = new ContextMenu (-1, -2,
- new MenuBarItem (new MenuItem [] {
- new MenuItem ("One", "", null),
- new MenuItem ("Two", "", null)
- })
- );
- Assert.Equal (new Point (-1, -2), cm.Position);
- cm.Show ();
- Assert.Equal (new Point (-1, -2), cm.Position);
- Application.Begin (Application.Top);
- var expected = @"
- ┌──────┐
- │ One │
- │ Two │
- └──────┘
- ";
- var pos = GraphViewTests.AssertDriverContentsWithFrameAre (expected, output);
- Assert.Equal (new Rect (0, 1, 8, 4), pos);
- cm.ForceMinimumPosToZero = false;
- cm.Show ();
- Assert.Equal (new Point (-1, -2), cm.Position);
- Application.Refresh ();
- expected = @"
- One │
- Two │
- ──────┘
- ";
- pos = GraphViewTests.AssertDriverContentsWithFrameAre (expected, output);
- Assert.Equal (new Rect (1, 0, 7, 3), pos);
- }
- [Fact, AutoInitShutdown]
- public void ContextMenu_Is_Closed_If_Another_MenuBar_Is_Open_Or_Vice_Versa ()
- {
- var cm = new ContextMenu (10, 5,
- new MenuBarItem (new MenuItem [] {
- new MenuItem ("One", "", null),
- new MenuItem ("Two", "", null)
- })
- );
- var menu = new MenuBar (new MenuBarItem [] {
- new MenuBarItem ("File", "", null),
- new MenuBarItem ("Edit", "", null)
- });
- Application.Top.Add (menu);
- Assert.Null (Application.mouseGrabView);
- cm.Show ();
- Assert.True (ContextMenu.IsShow);
- Assert.Equal (cm.MenuBar, Application.mouseGrabView);
- Assert.False (menu.IsMenuOpen);
- Assert.True (menu.ProcessHotKey (new KeyEvent (Key.F9, new KeyModifiers ())));
- Assert.False (ContextMenu.IsShow);
- Assert.Equal (menu, Application.mouseGrabView);
- Assert.True (menu.IsMenuOpen);
- cm.Show ();
- Assert.True (ContextMenu.IsShow);
- Assert.Equal (cm.MenuBar, Application.mouseGrabView);
- Assert.False (menu.IsMenuOpen);
- Assert.False (menu.OnKeyDown (new KeyEvent (Key.Null, new KeyModifiers () { Alt = true })));
- Assert.True (menu.OnKeyUp (new KeyEvent (Key.Null, new KeyModifiers () { Alt = true })));
- Assert.False (ContextMenu.IsShow);
- Assert.Equal (menu, Application.mouseGrabView);
- Assert.True (menu.IsMenuOpen);
- cm.Show ();
- Assert.True (ContextMenu.IsShow);
- Assert.Equal (cm.MenuBar, Application.mouseGrabView);
- Assert.False (menu.IsMenuOpen);
- Assert.False (menu.MouseEvent (new MouseEvent () { X = 1, Flags = MouseFlags.ReportMousePosition, View = menu }));
- Assert.True (ContextMenu.IsShow);
- Assert.Equal (cm.MenuBar, Application.mouseGrabView);
- Assert.False (menu.IsMenuOpen);
- Assert.True (menu.MouseEvent (new MouseEvent () { X = 1, Flags = MouseFlags.Button1Clicked, View = menu }));
- Assert.False (ContextMenu.IsShow);
- Assert.Equal (menu, Application.mouseGrabView);
- Assert.True (menu.IsMenuOpen);
- }
- }
- }
|