123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using Xunit;
- namespace Terminal.Gui.Views {
- public class MenuTests {
- [Fact]
- public void Constuctors_Defaults ()
- {
- var menu = new Menu (new MenuBar (), 0, 0, new MenuBarItem ());
- Assert.Equal (Colors.Menu, menu.ColorScheme);
- Assert.True (menu.CanFocus);
- Assert.False (menu.WantContinuousButtonPressed);
- var menuBar = new MenuBar ();
- Assert.Equal (0, menuBar.X);
- Assert.Equal (0, menuBar.Y);
- Assert.IsType<Dim.DimFill> (menuBar.Width);
- Assert.Equal (1, menuBar.Height);
- Assert.Empty (menuBar.Menus);
- Assert.Equal (Colors.Menu, menuBar.ColorScheme);
- Assert.True (menuBar.WantMousePositionReports);
- Assert.False (menuBar.IsMenuOpen);
- menuBar = new MenuBar (new MenuBarItem [] { });
- Assert.Equal (0, menuBar.X);
- Assert.Equal (0, menuBar.Y);
- Assert.IsType<Dim.DimFill> (menuBar.Width);
- Assert.Equal (1, menuBar.Height);
- Assert.Empty (menuBar.Menus);
- Assert.Equal (Colors.Menu, menuBar.ColorScheme);
- Assert.True (menuBar.WantMousePositionReports);
- Assert.False (menuBar.IsMenuOpen);
- var menuBarItem = new MenuBarItem ();
- Assert.Equal ("", menuBarItem.Title);
- Assert.Null (menuBarItem.Parent);
- Assert.Empty (menuBarItem.Children);
- menuBarItem = new MenuBarItem (new MenuBarItem [] { });
- Assert.Equal ("", menuBarItem.Title);
- Assert.Null (menuBarItem.Parent);
- Assert.Empty (menuBarItem.Children);
- menuBarItem = new MenuBarItem ("Test", new MenuBarItem [] { });
- Assert.Equal ("Test", menuBarItem.Title);
- Assert.Null (menuBarItem.Parent);
- Assert.Empty (menuBarItem.Children);
- menuBarItem = new MenuBarItem ("Test", new List<MenuItem []> ());
- Assert.Equal ("Test", menuBarItem.Title);
- Assert.Null (menuBarItem.Parent);
- Assert.Empty (menuBarItem.Children);
- menuBarItem = new MenuBarItem ("Test", "Help", null);
- Assert.Equal ("Test", menuBarItem.Title);
- Assert.Equal ("Help", menuBarItem.Help);
- Assert.Null (menuBarItem.Action);
- Assert.Null (menuBarItem.CanExecute);
- Assert.Null (menuBarItem.Parent);
- Assert.Equal (Key.Null, menuBarItem.Shortcut);
- var menuItem = new MenuItem ();
- Assert.Equal ("", menuItem.Title);
- Assert.Equal ("", menuItem.Help);
- Assert.Null (menuItem.Action);
- Assert.Null (menuItem.CanExecute);
- Assert.Null (menuItem.Parent);
- Assert.Equal (Key.Null, menuItem.Shortcut);
- menuItem = new MenuItem ("Test", "Help", Run, () => { return true; }, new MenuItem (), Key.F1);
- Assert.Equal ("Test", menuItem.Title);
- Assert.Equal ("Help", menuItem.Help);
- Assert.Equal (Run, menuItem.Action);
- Assert.NotNull (menuItem.CanExecute);
- Assert.NotNull (menuItem.Parent);
- Assert.Equal (Key.F1, menuItem.Shortcut);
- void Run () { }
- }
- [Fact]
- public void Exceptions ()
- {
- Assert.Throws<ArgumentNullException> (() => new MenuBarItem ("Test", (MenuItem [])null, null));
- Assert.Throws<ArgumentNullException> (() => new MenuBarItem ("Test", (List<MenuItem []>)null, null));
- }
- [Fact]
- [AutoInitShutdown]
- public void MenuOpening_MenuOpened_MenuClosing_Events ()
- {
- var miAction = "";
- var isMenuClosed = true;
- var menu = new MenuBar (new MenuBarItem [] {
- new MenuBarItem ("_File", new MenuItem [] {
- new MenuItem ("_New", "Creates new file.", New)
- })
- });
- menu.MenuOpening += (e) => {
- Assert.Equal ("_File", e.CurrentMenu.Title);
- Assert.Equal ("_New", e.CurrentMenu.Children [0].Title);
- Assert.Equal ("Creates new file.", e.CurrentMenu.Children [0].Help);
- Assert.Equal (New, e.CurrentMenu.Children [0].Action);
- e.CurrentMenu.Children [0].Action ();
- Assert.Equal ("New", miAction);
- e.NewMenuBarItem = new MenuBarItem ("_Edit", new MenuItem [] {
- new MenuItem ("_Copy", "Copies the selection.", Copy)
- });
- };
- menu.MenuOpened += (e) => {
- Assert.Equal ("_Edit", e.Parent.Title);
- Assert.Equal ("_Copy", e.Title);
- Assert.Equal ("Copies the selection.", e.Help);
- Assert.Equal (Copy, e.Action);
- e.Action ();
- Assert.Equal ("Copy", miAction);
- };
- menu.MenuClosing += () => {
- Assert.False (isMenuClosed);
- isMenuClosed = true;
- };
- Application.Top.Add (menu);
- Assert.True (menu.ProcessHotKey (new KeyEvent (Key.F9, new KeyModifiers ())));
- Assert.True (menu.IsMenuOpen);
- isMenuClosed = !menu.IsMenuOpen;
- Assert.False (isMenuClosed);
- Assert.True (menu.ProcessHotKey (new KeyEvent (Key.F9, new KeyModifiers ())));
- Assert.False (menu.IsMenuOpen);
- Assert.True (isMenuClosed);
- void New () => miAction = "New";
- void Copy () => miAction = "Copy";
- }
- [Fact]
- [AutoInitShutdown]
- public void MouseEvent_Test ()
- {
- MenuItem miCurrent = null;
- Menu mCurrent = null;
- var menu = new MenuBar (new MenuBarItem [] {
- new MenuBarItem ("_File", new MenuItem [] {
- new MenuItem ("_New", "", null),
- new MenuItem ("_Open", "", null),
- new MenuItem ("_Save", "", null)
- }),
- new MenuBarItem ("_Edit", new MenuItem [] {
- new MenuItem ("_Copy", "", null),
- new MenuItem ("C_ut", "", null),
- new MenuItem ("_Paste", "", null)
- })
- });
- menu.MenuOpened += (e) => {
- miCurrent = e;
- mCurrent = menu.openCurrentMenu;
- };
- Application.Top.Add (menu);
- Assert.True (menu.MouseEvent (new MouseEvent () {
- X = 10,
- Y = 0,
- Flags = MouseFlags.Button1Pressed,
- View = menu
- }));
- Assert.True (menu.IsMenuOpen);
- Assert.Equal ("_Edit", miCurrent.Parent.Title);
- Assert.Equal ("_Copy", miCurrent.Title);
- Assert.True (mCurrent.MouseEvent (new MouseEvent () {
- X = 10,
- Y = 3,
- Flags = MouseFlags.ReportMousePosition,
- View = mCurrent
- }));
- Assert.True (menu.IsMenuOpen);
- Assert.Equal ("_Edit", miCurrent.Parent.Title);
- Assert.Equal ("_Paste", miCurrent.Title);
- for (int i = 2; i >= -1; i--) {
- View view;
- if (i == -1) {
- Assert.False (mCurrent.MouseEvent (new MouseEvent () {
- X = 10,
- Y = i,
- Flags = MouseFlags.ReportMousePosition,
- View = menu
- }));
- } else {
- Assert.True (mCurrent.MouseEvent (new MouseEvent () {
- X = 10,
- Y = i,
- Flags = MouseFlags.ReportMousePosition,
- View = mCurrent
- }));
- }
- Assert.True (menu.IsMenuOpen);
- if (i == 2) {
- Assert.Equal ("_Edit", miCurrent.Parent.Title);
- Assert.Equal ("C_ut", miCurrent.Title);
- } else if (i == 1) {
- Assert.Equal ("_Edit", miCurrent.Parent.Title);
- Assert.Equal ("_Copy", miCurrent.Title);
- } else if (i == 0) {
- Assert.Equal ("_Edit", miCurrent.Parent.Title);
- Assert.Equal ("_Copy", miCurrent.Title);
- } else {
- Assert.Equal ("_Edit", miCurrent.Parent.Title);
- Assert.Equal ("_Copy", miCurrent.Title);
- }
- }
- }
- [Fact]
- [AutoInitShutdown]
- public void KeyBindings_Command ()
- {
- var miAction = "";
- MenuItem mbiCurrent = null;
- MenuItem miCurrent = null;
- Menu mCurrent = null;
- var menu = new MenuBar (new MenuBarItem [] {
- new MenuBarItem ("_File", new MenuItem [] {
- new MenuItem ("_New", "", () => miAction ="New"),
- new MenuItem ("_Open", "", () => miAction ="Open"),
- new MenuItem ("_Save", "", () => miAction ="Save"),
- null,
- new MenuItem ("_Quit", "", () => miAction ="Quit"),
- }),
- new MenuBarItem ("_Edit", new MenuItem [] {
- new MenuItem ("_Copy", "", () => miAction ="Copy"),
- new MenuItem ("C_ut", "", () => miAction ="Cut"),
- new MenuItem ("_Paste", "", () => miAction ="Paste"),
- new MenuBarItem ("_Find and Replace", new MenuItem [] {
- new MenuItem ("F_ind", "", null),
- new MenuItem ("_Replace", "", null)
- }),
- new MenuItem ("_Select All", "", () => miAction ="Select All")
- }),
- new MenuBarItem ("_About", "Top-Level", () => miAction ="About")
- });
- menu.MenuOpening += (e) => mbiCurrent = e.CurrentMenu;
- menu.MenuOpened += (e) => {
- miCurrent = e;
- mCurrent = menu.openCurrentMenu;
- };
- menu.MenuClosing += () => {
- mbiCurrent = null;
- miCurrent = null;
- mCurrent = null;
- };
- Application.Top.Add (menu);
- Application.Begin (Application.Top);
- Assert.True (menu.ProcessHotKey (new KeyEvent (Key.F9, new KeyModifiers ())));
- Assert.True (menu.IsMenuOpen);
- Assert.Equal ("_File", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("_New", GetCurrentMenuTitle ());
- Assert.True (menu.ProcessKey (new KeyEvent (Key.CursorLeft, new KeyModifiers ())));
- Assert.True (menu.IsMenuOpen);
- Assert.Equal ("_About", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("None", GetCurrentMenuTitle ());
- Assert.True (menu.ProcessKey (new KeyEvent (Key.CursorRight, new KeyModifiers ())));
- Assert.True (menu.IsMenuOpen);
- Assert.Equal ("_File", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("_New", GetCurrentMenuTitle ());
- Assert.True (menu.ProcessKey (new KeyEvent (Key.Esc, new KeyModifiers ())));
- Assert.False (menu.IsMenuOpen);
- Assert.Equal ("Closed", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("None", GetCurrentMenuTitle ());
- Assert.True (menu.ProcessHotKey (new KeyEvent (Key.F9, new KeyModifiers ())));
- Assert.True (menu.IsMenuOpen);
- Assert.Equal ("_File", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("_New", GetCurrentMenuTitle ());
- Assert.True (menu.ProcessKey (new KeyEvent (Key.C | Key.CtrlMask, new KeyModifiers ())));
- Assert.False (menu.IsMenuOpen);
- Assert.Equal ("Closed", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("None", GetCurrentMenuTitle ());
- Assert.True (menu.ProcessKey (new KeyEvent (Key.CursorDown, new KeyModifiers ())));
- Assert.True (menu.IsMenuOpen);
- Assert.Equal ("_File", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("_New", GetCurrentMenuTitle ());
- Assert.True (menu.ProcessKey (new KeyEvent (Key.Esc, new KeyModifiers ())));
- Assert.False (menu.IsMenuOpen);
- Assert.Equal ("Closed", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("None", GetCurrentMenuTitle ());
- Assert.True (menu.ProcessKey (new KeyEvent (Key.Enter, new KeyModifiers ())));
- Assert.True (menu.IsMenuOpen);
- Assert.Equal ("_File", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("_New", GetCurrentMenuTitle ());
- Assert.True (mCurrent.ProcessKey (new KeyEvent (Key.Tab, new KeyModifiers ())));
- Assert.False (menu.IsMenuOpen);
- Assert.Equal ("Closed", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("None", GetCurrentMenuTitle ());
- Assert.True (menu.ProcessHotKey (new KeyEvent (Key.F9, new KeyModifiers ())));
- Assert.True (menu.IsMenuOpen);
- Assert.Equal ("_File", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("_New", GetCurrentMenuTitle ());
- Assert.True (mCurrent.ProcessKey (new KeyEvent (Key.CursorUp, new KeyModifiers ())));
- Assert.True (menu.IsMenuOpen);
- Assert.Equal ("_File", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("_Quit", GetCurrentMenuTitle ());
- Assert.True (mCurrent.ProcessKey (new KeyEvent (Key.CursorDown, new KeyModifiers ())));
- Assert.True (menu.IsMenuOpen);
- Assert.Equal ("_File", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("_New", GetCurrentMenuTitle ());
- Assert.True (mCurrent.ProcessKey (new KeyEvent (Key.CursorLeft, new KeyModifiers ())));
- Assert.True (menu.IsMenuOpen);
- Assert.Equal ("_About", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("None", GetCurrentMenuTitle ());
- Assert.True (mCurrent.ProcessKey (new KeyEvent (Key.CursorRight, new KeyModifiers ())));
- Assert.True (menu.IsMenuOpen);
- Assert.Equal ("_File", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("_New", GetCurrentMenuTitle ());
- Assert.True (mCurrent.ProcessKey (new KeyEvent (Key.Esc, new KeyModifiers ())));
- Assert.False (menu.IsMenuOpen);
- Assert.Equal ("Closed", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("None", GetCurrentMenuTitle ());
- Assert.True (menu.ProcessHotKey (new KeyEvent (Key.F9, new KeyModifiers ())));
- Assert.True (menu.IsMenuOpen);
- Assert.Equal ("_File", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("_New", GetCurrentMenuTitle ());
- Assert.True (mCurrent.ProcessKey (new KeyEvent (Key.Enter, new KeyModifiers ())));
- Assert.False (menu.IsMenuOpen);
- Assert.Equal ("Closed", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("None", GetCurrentMenuTitle ());
- Application.MainLoop.MainIteration ();
- Assert.Equal ("New", miAction);
- Assert.True (menu.ProcessHotKey (new KeyEvent (Key.F9, new KeyModifiers ())));
- Assert.True (menu.IsMenuOpen);
- Assert.Equal ("_File", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("_New", GetCurrentMenuTitle ());
- Assert.True (mCurrent.ProcessKey (new KeyEvent (Key.CursorLeft, new KeyModifiers ())));
- Assert.True (menu.IsMenuOpen);
- Assert.Equal ("_About", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("None", GetCurrentMenuTitle ());
- Assert.True (mCurrent.ProcessKey (new KeyEvent (Key.Enter, new KeyModifiers ())));
- Assert.False (menu.IsMenuOpen);
- Assert.Equal ("Closed", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("None", GetCurrentMenuTitle ());
- Application.MainLoop.MainIteration ();
- Assert.Equal ("About", miAction);
- Assert.True (menu.ProcessHotKey (new KeyEvent (Key.F9, new KeyModifiers ())));
- Assert.True (menu.IsMenuOpen);
- Assert.Equal ("_File", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("_New", GetCurrentMenuTitle ());
- Assert.True (menu.ProcessKey (new KeyEvent (Key.CursorRight, new KeyModifiers ())));
- Assert.True (menu.IsMenuOpen);
- Assert.Equal ("_Edit", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("_Copy", GetCurrentMenuTitle ());
- Assert.True (mCurrent.ProcessKey (new KeyEvent (Key.CursorDown, new KeyModifiers ())));
- Assert.True (menu.IsMenuOpen);
- Assert.Equal ("_Edit", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("C_ut", GetCurrentMenuTitle ());
- Assert.True (mCurrent.ProcessKey (new KeyEvent (Key.CursorDown, new KeyModifiers ())));
- Assert.True (menu.IsMenuOpen);
- Assert.Equal ("_Edit", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("_Edit", GetCurrenParenttMenuItemTitle ());
- Assert.Equal ("_Paste", GetCurrentMenuTitle ());
- Assert.True (mCurrent.ProcessKey (new KeyEvent (Key.CursorDown, new KeyModifiers ())));
- Assert.True (menu.IsMenuOpen);
- Assert.Equal ("_Edit", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("_Find and Replace", GetCurrenParenttMenuItemTitle ());
- Assert.Equal ("F_ind", GetCurrentMenuTitle ());
- Assert.True (mCurrent.ProcessKey (new KeyEvent (Key.CursorDown, new KeyModifiers ())));
- Assert.True (menu.IsMenuOpen);
- Assert.Equal ("_Edit", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("_Find and Replace", GetCurrenParenttMenuItemTitle ());
- Assert.Equal ("_Replace", GetCurrentMenuTitle ());
- Assert.True (mCurrent.ProcessKey (new KeyEvent (Key.CursorDown, new KeyModifiers ())));
- Assert.True (menu.IsMenuOpen);
- Assert.Equal ("_Edit", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("_Find and Replace", GetCurrenParenttMenuItemTitle ());
- Assert.Equal ("F_ind", GetCurrentMenuTitle ());
- Assert.True (mCurrent.ProcessKey (new KeyEvent (Key.CursorLeft, new KeyModifiers ())));
- Assert.True (menu.IsMenuOpen);
- Assert.Equal ("_Edit", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("_Edit", GetCurrenParenttMenuItemTitle ());
- Assert.Equal ("_Find and Replace", GetCurrentMenuTitle ());
- Assert.True (mCurrent.ProcessKey (new KeyEvent (Key.CursorDown, new KeyModifiers ())));
- Assert.True (menu.IsMenuOpen);
- Assert.Equal ("_Edit", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("_Edit", GetCurrenParenttMenuItemTitle ());
- Assert.Equal ("_Select All", GetCurrentMenuTitle ());
- Assert.True (mCurrent.ProcessKey (new KeyEvent (Key.CursorUp, new KeyModifiers ())));
- Assert.True (menu.IsMenuOpen);
- Assert.Equal ("_Edit", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("_Find and Replace", GetCurrenParenttMenuItemTitle ());
- Assert.Equal ("F_ind", GetCurrentMenuTitle ());
- Assert.True (mCurrent.ProcessKey (new KeyEvent (Key.CursorUp, new KeyModifiers ())));
- Assert.True (menu.IsMenuOpen);
- Assert.Equal ("_Edit", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("_Edit", GetCurrenParenttMenuItemTitle ());
- Assert.Equal ("_Find and Replace", GetCurrentMenuTitle ());
- Assert.True (mCurrent.ProcessKey (new KeyEvent (Key.CursorUp, new KeyModifiers ())));
- Assert.True (menu.IsMenuOpen);
- Assert.Equal ("_Edit", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("_Edit", GetCurrenParenttMenuItemTitle ());
- Assert.Equal ("_Paste", GetCurrentMenuTitle ());
- Assert.True (mCurrent.ProcessKey (new KeyEvent (Key.CursorUp, new KeyModifiers ())));
- Assert.True (menu.IsMenuOpen);
- Assert.Equal ("_Edit", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("C_ut", GetCurrentMenuTitle ());
- Assert.True (mCurrent.ProcessKey (new KeyEvent (Key.CursorUp, new KeyModifiers ())));
- Assert.True (menu.IsMenuOpen);
- Assert.Equal ("_Edit", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("_Copy", GetCurrentMenuTitle ());
- Assert.True (mCurrent.ProcessKey (new KeyEvent (Key.Enter, new KeyModifiers ())));
- Assert.False (menu.IsMenuOpen);
- Assert.Equal ("Closed", GetCurrentMenuBarItemTitle ());
- Assert.Equal ("None", GetCurrentMenuTitle ());
- Application.MainLoop.MainIteration ();
- Assert.Equal ("Copy", miAction);
- string GetCurrentMenuBarItemTitle ()
- {
- return mbiCurrent != null ? mbiCurrent.Title.ToString () : "Closed";
- }
- string GetCurrenParenttMenuItemTitle ()
- {
- return miCurrent?.Parent != null ? miCurrent.Parent.Title.ToString () : "None";
- }
- string GetCurrentMenuTitle ()
- {
- return miCurrent != null ? miCurrent.Title.ToString () : "None";
- }
- }
- }
- }
|