12d6c8002SBram Moolenaar" Test that the system menu can be loaded. 22d6c8002SBram Moolenaar 3b46fecd3SBram Moolenaarsource check.vim 4b46fecd3SBram MoolenaarCheckFeature menu 511dd8c12SBram Moolenaar 62d6c8002SBram Moolenaarfunc Test_load_menu() 72d6c8002SBram Moolenaar try 82d6c8002SBram Moolenaar source $VIMRUNTIME/menu.vim 92d6c8002SBram Moolenaar catch 1037175409SBram Moolenaar call assert_report('error while loading menus: ' . v:exception) 112d6c8002SBram Moolenaar endtry 12a1c8ecfdSBram Moolenaar call assert_match('browse confirm w', execute(':menu File.Save')) 13e24c5b33SBram Moolenaar 14e24c5b33SBram Moolenaar let v:errmsg = '' 15e24c5b33SBram Moolenaar doautocmd LoadBufferMenu VimEnter 16e24c5b33SBram Moolenaar call assert_equal('', v:errmsg) 17e24c5b33SBram Moolenaar 1811dd8c12SBram Moolenaar source $VIMRUNTIME/delmenu.vim 19e24c5b33SBram Moolenaar call assert_equal('', v:errmsg) 2011dd8c12SBram Moolenaarendfunc 2111dd8c12SBram Moolenaar 225e94a29eSBram Moolenaarfunc Test_buffer_menu_special_buffers() 235e94a29eSBram Moolenaar " Load in runtime menus 245e94a29eSBram Moolenaar try 255e94a29eSBram Moolenaar source $VIMRUNTIME/menu.vim 265e94a29eSBram Moolenaar catch 275e94a29eSBram Moolenaar call assert_report('error while loading menus: ' . v:exception) 285e94a29eSBram Moolenaar endtry 295e94a29eSBram Moolenaar 305e94a29eSBram Moolenaar let v:errmsg = '' 315e94a29eSBram Moolenaar doautocmd LoadBufferMenu VimEnter 325e94a29eSBram Moolenaar call assert_equal('', v:errmsg) 335e94a29eSBram Moolenaar 345e94a29eSBram Moolenaar let orig_buffer_menus = execute("nmenu Buffers") 355e94a29eSBram Moolenaar 365908fdf7SBram Moolenaar " Test that regular new buffer results in a new buffer menu item. 375908fdf7SBram Moolenaar new 385908fdf7SBram Moolenaar let new_buffer_menus = execute('nmenu Buffers') 395908fdf7SBram Moolenaar call assert_equal(len(split(orig_buffer_menus, "\n")) + 2, len(split(new_buffer_menus, "\n"))) 405908fdf7SBram Moolenaar bwipe! 415908fdf7SBram Moolenaar call assert_equal(orig_buffer_menus, execute("nmenu Buffers")) 425908fdf7SBram Moolenaar 435e94a29eSBram Moolenaar " Make a new command-line window, test that it does not create a new buffer 445e94a29eSBram Moolenaar " menu. 455e94a29eSBram Moolenaar call feedkeys("q::let cmdline_buffer_menus=execute('nmenu Buffers')\<CR>:q\<CR>", 'ntx') 465908fdf7SBram Moolenaar call assert_equal(len(split(orig_buffer_menus, "\n")) + 2, len(split(cmdline_buffer_menus, "\n"))) 475e94a29eSBram Moolenaar call assert_equal(orig_buffer_menus, execute("nmenu Buffers")) 485e94a29eSBram Moolenaar 495e94a29eSBram Moolenaar if has('terminal') 505e94a29eSBram Moolenaar " Open a terminal window and test that it does not create a buffer menu 515e94a29eSBram Moolenaar " item. 525e94a29eSBram Moolenaar terminal 535e94a29eSBram Moolenaar let term_buffer_menus = execute('nmenu Buffers') 545908fdf7SBram Moolenaar call assert_equal(len(split(orig_buffer_menus, "\n")) + 2, len(split(term_buffer_menus, "\n"))) 555e94a29eSBram Moolenaar bwipe! 565e94a29eSBram Moolenaar call assert_equal(orig_buffer_menus, execute("nmenu Buffers")) 575e94a29eSBram Moolenaar endif 585e94a29eSBram Moolenaar 595e94a29eSBram Moolenaar " Remove menus to clean up 605e94a29eSBram Moolenaar source $VIMRUNTIME/delmenu.vim 615e94a29eSBram Moolenaar call assert_equal('', v:errmsg) 625e94a29eSBram Moolenaarendfunc 635e94a29eSBram Moolenaar 6411dd8c12SBram Moolenaarfunc Test_translate_menu() 656d91bcb4SBram Moolenaar CheckFeature multi_lang 6611dd8c12SBram Moolenaar if !filereadable($VIMRUNTIME . '/lang/menu_de_de.latin1.vim') 6711dd8c12SBram Moolenaar throw 'Skipped: translated menu not found' 6811dd8c12SBram Moolenaar endif 6911dd8c12SBram Moolenaar 70a1c8ecfdSBram Moolenaar " First delete any English menus. 71a1c8ecfdSBram Moolenaar source $VIMRUNTIME/delmenu.vim 7211dd8c12SBram Moolenaar set langmenu=de_de 7311dd8c12SBram Moolenaar source $VIMRUNTIME/menu.vim 745558d194SBram Moolenaar call assert_match('browse confirm w', execute(':menu Datei.Speichern')) 7511dd8c12SBram Moolenaar 7611dd8c12SBram Moolenaar source $VIMRUNTIME/delmenu.vim 772d6c8002SBram Moolenaarendfunc 784c5d8152SBram Moolenaar 794c5d8152SBram Moolenaarfunc Test_menu_commands() 804c5d8152SBram Moolenaar nmenu 2 Test.FooBar :let g:did_menu = 'normal'<CR> 814c5d8152SBram Moolenaar vmenu 2 Test.FooBar :let g:did_menu = 'visual'<CR> 824c5d8152SBram Moolenaar smenu 2 Test.FooBar :let g:did_menu = 'select'<CR> 834c5d8152SBram Moolenaar omenu 2 Test.FooBar :let g:did_menu = 'op-pending'<CR> 844c5d8152SBram Moolenaar tlmenu 2 Test.FooBar :let g:did_menu = 'terminal'<CR> 854c5d8152SBram Moolenaar imenu 2 Test.FooBar :let g:did_menu = 'insert'<CR> 864c5d8152SBram Moolenaar cmenu 2 Test.FooBar :let g:did_menu = 'cmdline'<CR> 874c5d8152SBram Moolenaar emenu n Test.FooBar 88297610baSBram Moolenaar 89297610baSBram Moolenaar call feedkeys(":menu Test.FooB\<C-A>\<C-B>\"\<CR>", 'tx') 90297610baSBram Moolenaar call assert_equal('"menu Test.FooBar', @:) 91297610baSBram Moolenaar 924c5d8152SBram Moolenaar call assert_equal('normal', g:did_menu) 934c5d8152SBram Moolenaar emenu v Test.FooBar 944c5d8152SBram Moolenaar call assert_equal('visual', g:did_menu) 954c5d8152SBram Moolenaar emenu s Test.FooBar 964c5d8152SBram Moolenaar call assert_equal('select', g:did_menu) 974c5d8152SBram Moolenaar emenu o Test.FooBar 984c5d8152SBram Moolenaar call assert_equal('op-pending', g:did_menu) 994c5d8152SBram Moolenaar emenu t Test.FooBar 1004c5d8152SBram Moolenaar call assert_equal('terminal', g:did_menu) 1014c5d8152SBram Moolenaar emenu i Test.FooBar 1024c5d8152SBram Moolenaar call assert_equal('insert', g:did_menu) 1034c5d8152SBram Moolenaar emenu c Test.FooBar 1044c5d8152SBram Moolenaar call assert_equal('cmdline', g:did_menu) 1054c5d8152SBram Moolenaar 106ce79353aSBram Moolenaar nunmenu Test.FooBar 107ce79353aSBram Moolenaar call assert_fails('emenu n Test.FooBar', 'E335: Menu not defined for Normal mode') 108ce79353aSBram Moolenaar vunmenu Test.FooBar 109ce79353aSBram Moolenaar call assert_fails('emenu v Test.FooBar', 'E335: Menu not defined for Visual mode') 110ce79353aSBram Moolenaar vmenu 2 Test.FooBar :let g:did_menu = 'visual'<CR> 111ce79353aSBram Moolenaar sunmenu Test.FooBar 112ce79353aSBram Moolenaar call assert_fails('emenu s Test.FooBar', 'E335: Menu not defined for Select mode') 113ce79353aSBram Moolenaar ounmenu Test.FooBar 114ce79353aSBram Moolenaar call assert_fails('emenu o Test.FooBar', 'E335: Menu not defined for Op-pending mode') 115ce79353aSBram Moolenaar iunmenu Test.FooBar 116ce79353aSBram Moolenaar call assert_fails('emenu i Test.FooBar', 'E335: Menu not defined for Insert mode') 117ce79353aSBram Moolenaar cunmenu Test.FooBar 118ce79353aSBram Moolenaar call assert_fails('emenu c Test.FooBar', 'E335: Menu not defined for Cmdline mode') 1194c5d8152SBram Moolenaar tlunmenu Test.FooBar 120ce79353aSBram Moolenaar call assert_fails('emenu t Test.FooBar', 'E335: Menu not defined for Terminal mode') 121ce79353aSBram Moolenaar 122ce79353aSBram Moolenaar aunmenu Test.FooBar 1234c5d8152SBram Moolenaar call assert_fails('emenu n Test.FooBar', 'E334:') 1244c5d8152SBram Moolenaar 1254c5d8152SBram Moolenaar nmenu 2 Test.FooBar.Child :let g:did_menu = 'foobar'<CR> 1264c5d8152SBram Moolenaar call assert_fails('emenu n Test.FooBar', 'E333:') 1274c5d8152SBram Moolenaar nunmenu Test.FooBar.Child 1284c5d8152SBram Moolenaar 1294c5d8152SBram Moolenaar unlet g:did_menu 1304c5d8152SBram Moolenaarendfun 1318d588cceSBram Moolenaar 1320eabd4dcSBram Moolenaar" Test various menu related errors 1330eabd4dcSBram Moolenaarfunc Test_menu_errors() 1340eabd4dcSBram Moolenaar menu Test.Foo :version<CR> 1350eabd4dcSBram Moolenaar 1360eabd4dcSBram Moolenaar " Error cases 1370eabd4dcSBram Moolenaar call assert_fails('menu .Test.Foo :ls<CR>', 'E475:') 1380eabd4dcSBram Moolenaar call assert_fails('menu Test. :ls<CR>', 'E330:') 1390eabd4dcSBram Moolenaar call assert_fails('menu Foo. :ls<CR>', 'E331:') 1400eabd4dcSBram Moolenaar call assert_fails('unmenu Test.Foo abc', 'E488:') 1410eabd4dcSBram Moolenaar call assert_fails('menu <Tab>:ls :ls<CR>', 'E792:') 1420eabd4dcSBram Moolenaar call assert_fails('menu Test.<Tab>:ls :ls<CR>', 'E792:') 1430eabd4dcSBram Moolenaar call assert_fails('menu Test.Foo.Bar :ls<CR>', 'E327:') 1440eabd4dcSBram Moolenaar call assert_fails('menu Test.-Sep-.Baz :ls<CR>', 'E332:') 1450eabd4dcSBram Moolenaar call assert_fails('menu Foo.Bar.--.Baz :ls<CR>', 'E332:') 1460eabd4dcSBram Moolenaar call assert_fails('menu disable Test.Foo.Bar', 'E327:') 1470eabd4dcSBram Moolenaar call assert_fails('menu disable T.Foo', 'E329:') 1480eabd4dcSBram Moolenaar call assert_fails('unmenu Test.Foo.Bar', 'E327:') 1490eabd4dcSBram Moolenaar call assert_fails('cunmenu Test.Foo', 'E328:') 1500eabd4dcSBram Moolenaar call assert_fails('unmenu Test.Bar', 'E329:') 1510eabd4dcSBram Moolenaar call assert_fails('menu Test.Foo.Bar', 'E327:') 1520eabd4dcSBram Moolenaar call assert_fails('cmenu Test.Foo', 'E328:') 1530eabd4dcSBram Moolenaar call assert_fails('emenu x Test.Foo', 'E475:') 1549b7bf9e9SBram Moolenaar call assert_fails('emenu Test.Foo.Bar', 'E327:') 1550eabd4dcSBram Moolenaar call assert_fails('menutranslate Test', 'E474:') 1560eabd4dcSBram Moolenaar 1570eabd4dcSBram Moolenaar silent! unmenu Foo 1580eabd4dcSBram Moolenaar unmenu Test 1590eabd4dcSBram Moolenaarendfunc 1600eabd4dcSBram Moolenaar 1618d588cceSBram Moolenaar" Test for menu item completion in command line 1628d588cceSBram Moolenaarfunc Test_menu_expand() 1635908fdf7SBram Moolenaar " Make sure we don't have stale menu items like Buffers menu. 1645908fdf7SBram Moolenaar source $VIMRUNTIME/delmenu.vim 1655908fdf7SBram Moolenaar 1668d588cceSBram Moolenaar " Create the menu itmes for test 1675e94a29eSBram Moolenaar menu Dummy.Nothing lll 1688d588cceSBram Moolenaar for i in range(1, 4) 1698d588cceSBram Moolenaar let m = 'menu Xmenu.A' .. i .. '.A' .. i 1708d588cceSBram Moolenaar for j in range(1, 4) 1718d588cceSBram Moolenaar exe m .. 'B' .. j .. ' :echo "A' .. i .. 'B' .. j .. '"' .. "<CR>" 1728d588cceSBram Moolenaar endfor 1738d588cceSBram Moolenaar endfor 1748d588cceSBram Moolenaar set wildmenu 1758d588cceSBram Moolenaar 1768d588cceSBram Moolenaar " Test for <CR> selecting a submenu 1778d588cceSBram Moolenaar call feedkeys(":emenu Xmenu.A\<Tab>\<CR>\<Right>x\<BS>\<C-B>\"\<CR>", 'xt') 1788d588cceSBram Moolenaar call assert_equal('"emenu Xmenu.A1.A1B2', @:) 1798d588cceSBram Moolenaar 1808d588cceSBram Moolenaar " Test for <Down> selecting a submenu 1818d588cceSBram Moolenaar call feedkeys(":emenu Xmenu.A\<Tab>\<Right>\<Right>\<Down>" .. 1828d588cceSBram Moolenaar \ "\<C-A>\<C-B>\"\<CR>", 'xt') 1838d588cceSBram Moolenaar call assert_equal('"emenu Xmenu.A3.A3B1 A3B2 A3B3 A3B4', @:) 1848d588cceSBram Moolenaar 1858d588cceSBram Moolenaar " Test for <Up> to go up a submenu 1868d588cceSBram Moolenaar call feedkeys(":emenu Xmenu.A\<Tab>\<Down>\<Up>\<Right>\<Right>" .. 1878d588cceSBram Moolenaar \ "\<Left>\<Down>\<C-A>\<C-B>\"\<CR>", 'xt') 1888d588cceSBram Moolenaar call assert_equal('"emenu Xmenu.A2.A2B1 A2B2 A2B3 A2B4', @:) 1898d588cceSBram Moolenaar 1908d588cceSBram Moolenaar " Test for <Up> to go up a menu 1918d588cceSBram Moolenaar call feedkeys(":emenu Xmenu.A\<Tab>\<Down>\<Up>\<Up>\<Up>" .. 1928d588cceSBram Moolenaar \ "\<C-A>\<C-B>\"\<CR>", 'xt') 1935e94a29eSBram Moolenaar call assert_equal('"emenu Dummy. Xmenu.', @:) 1948d588cceSBram Moolenaar 1950eabd4dcSBram Moolenaar " Test for expanding only submenus 1960eabd4dcSBram Moolenaar call feedkeys(":popup Xmenu.\<C-A>\<C-B>\"\<CR>", 'xt') 1970eabd4dcSBram Moolenaar call assert_equal('"popup Xmenu.A1 A2 A3 A4', @:) 1980eabd4dcSBram Moolenaar 1990eabd4dcSBram Moolenaar " Test for expanding menus after enable/disable 2000eabd4dcSBram Moolenaar call feedkeys(":menu enable Xmenu.\<C-A>\<C-B>\"\<CR>", 'xt') 2010eabd4dcSBram Moolenaar call assert_equal('"menu enable Xmenu.A1. A2. A3. A4.', @:) 2020eabd4dcSBram Moolenaar call feedkeys(":menu disable Xmenu.\<C-A>\<C-B>\"\<CR>", 'xt') 2030eabd4dcSBram Moolenaar call assert_equal('"menu disable Xmenu.A1. A2. A3. A4.', @:) 2040eabd4dcSBram Moolenaar 2050eabd4dcSBram Moolenaar " Test for expanding non-existing menu path 2060eabd4dcSBram Moolenaar call feedkeys(":menu xyz.\<C-A>\<C-B>\"\<CR>", 'xt') 2070eabd4dcSBram Moolenaar call assert_equal('"menu xyz.', @:) 2080eabd4dcSBram Moolenaar call feedkeys(":menu Xmenu.A1.A1B1.xyz.\<C-A>\<C-B>\"\<CR>", 'xt') 2090eabd4dcSBram Moolenaar call assert_equal('"menu Xmenu.A1.A1B1.xyz.', @:) 2100eabd4dcSBram Moolenaar 2118d588cceSBram Moolenaar set wildmenu& 2128d588cceSBram Moolenaar unmenu Xmenu 2135e94a29eSBram Moolenaar unmenu Dummy 2140eabd4dcSBram Moolenaar 2150eabd4dcSBram Moolenaar " Test for expanding popup menus with some hidden items 2160eabd4dcSBram Moolenaar menu Xmenu.foo.A1 a1 2170eabd4dcSBram Moolenaar menu Xmenu.]bar bar 2180eabd4dcSBram Moolenaar menu Xmenu.]baz.B1 b1 2190eabd4dcSBram Moolenaar menu Xmenu.-sep- : 2200eabd4dcSBram Moolenaar call feedkeys(":popup Xmenu.\<C-A>\<C-B>\"\<CR>", 'xt') 2210eabd4dcSBram Moolenaar call assert_equal('"popup Xmenu.foo', @:) 2220eabd4dcSBram Moolenaar unmenu Xmenu 2230eabd4dcSBram Moolenaarendfunc 2240eabd4dcSBram Moolenaar 2250eabd4dcSBram Moolenaar" Test for the menu_info() function 2260eabd4dcSBram Moolenaarfunc Test_menu_info() 2270eabd4dcSBram Moolenaar " Define menus with various attributes 2280eabd4dcSBram Moolenaar 10nnoremenu 10.10 T&est.F&oo :echo 'foo'<CR> 2290eabd4dcSBram Moolenaar 10nmenu <silent> 10.20 T&est.B&ar<Tab>:bar :echo 'bar'<CR> 2300eabd4dcSBram Moolenaar 10nmenu <script> 10.30.5 T&est.Ba&z.Qu&x :echo 'qux'<CR> 2310eabd4dcSBram Moolenaar 2320eabd4dcSBram Moolenaar let d = #{name: "B&ar\t:bar", display: 'Bar', modes: 'n', shortcut: 'a', 2330eabd4dcSBram Moolenaar \ accel: ':bar', priority: 20, enabled: v:true, silent: v:true, 2340eabd4dcSBram Moolenaar \ noremenu: v:false, script: v:false, rhs: ":echo 'bar'<CR>"} 2350eabd4dcSBram Moolenaar call assert_equal(d, menu_info('Test.Bar')) 2360eabd4dcSBram Moolenaar 2370eabd4dcSBram Moolenaar let d = #{name: 'Ba&z', display: 'Baz', modes: 'n', shortcut: 'z', 2380eabd4dcSBram Moolenaar \ priority: 30, submenus: ['Qux']} 2390eabd4dcSBram Moolenaar call assert_equal(d, menu_info('Test.Baz')) 2400eabd4dcSBram Moolenaar 2410eabd4dcSBram Moolenaar let d = #{name: 'T&est', display: 'Test', modes: 'n', shortcut: 'e', 2420eabd4dcSBram Moolenaar \ priority: 10, submenus: ['Foo', 'Bar', 'Baz']} 2430eabd4dcSBram Moolenaar call assert_equal(d, menu_info('Test')) 2440eabd4dcSBram Moolenaar call assert_equal({}, menu_info('Test.Dummy')) 2450eabd4dcSBram Moolenaar call assert_equal({}, menu_info('Dummy')) 2460eabd4dcSBram Moolenaar 2470eabd4dcSBram Moolenaar nmenu disable Test.Foo 2480eabd4dcSBram Moolenaar call assert_equal(v:false, menu_info('Test.Foo').enabled) 2490eabd4dcSBram Moolenaar nmenu enable Test.Foo 2500eabd4dcSBram Moolenaar call assert_equal(v:true, menu_info('Test.Foo').enabled) 2510eabd4dcSBram Moolenaar 2520eabd4dcSBram Moolenaar call assert_equal(menu_info('Test.Foo'), menu_info('Test.Foo', '')) 2530eabd4dcSBram Moolenaar nmenu Test.abc <Nop> 2540eabd4dcSBram Moolenaar call assert_equal('<Nop>', menu_info('Test.abc').rhs) 2550eabd4dcSBram Moolenaar call assert_fails('call menu_info([])', 'E730:') 25699fa7219SBram Moolenaar call assert_fails('call menu_info("", [])', 'E730:') 2570eabd4dcSBram Moolenaar nunmenu Test 2580eabd4dcSBram Moolenaar 2590eabd4dcSBram Moolenaar " Test for defining menus in different modes 2600eabd4dcSBram Moolenaar menu Test.menu :menu<CR> 2610eabd4dcSBram Moolenaar menu! Test.menu! :menu!<CR> 2620eabd4dcSBram Moolenaar amenu Test.amenu :amenu<CR> 2630eabd4dcSBram Moolenaar nmenu Test.nmenu :nmenu<CR> 2640eabd4dcSBram Moolenaar omenu Test.omenu :omenu<CR> 2650eabd4dcSBram Moolenaar vmenu Test.vmenu :vmenu<CR> 2660eabd4dcSBram Moolenaar xmenu Test.xmenu :xmenu<CR> 2670eabd4dcSBram Moolenaar smenu Test.smenu :smenu<CR> 2680eabd4dcSBram Moolenaar imenu <silent> <script> Test.imenu :imenu<CR> 2690eabd4dcSBram Moolenaar cmenu Test.cmenu :cmenu<CR> 2700eabd4dcSBram Moolenaar tlmenu Test.tlmenu :tlmenu<CR> 2710eabd4dcSBram Moolenaar tmenu Test.nmenu Normal mode menu 2720eabd4dcSBram Moolenaar tmenu Test.omenu Op-pending mode menu 2730eabd4dcSBram Moolenaar noremenu Test.noremenu :noremenu<CR> 2740eabd4dcSBram Moolenaar noremenu! Test.noremenu! :noremenu!<CR> 2750eabd4dcSBram Moolenaar anoremenu Test.anoremenu :anoremenu<CR> 2760eabd4dcSBram Moolenaar nnoremenu Test.nnoremenu :nnoremenu<CR> 2770eabd4dcSBram Moolenaar onoremenu Test.onoremenu :onoremenu<CR> 2780eabd4dcSBram Moolenaar vnoremenu Test.vnoremenu :vnoremenu<CR> 2790eabd4dcSBram Moolenaar xnoremenu Test.xnoremenu :xnoremenu<CR> 2800eabd4dcSBram Moolenaar snoremenu Test.snoremenu :snoremenu<CR> 2810eabd4dcSBram Moolenaar inoremenu <silent> Test.inoremenu :inoremenu<CR> 2820eabd4dcSBram Moolenaar cnoremenu Test.cnoremenu :cnoremenu<CR> 2830eabd4dcSBram Moolenaar tlnoremenu Test.tlnoremenu :tlnoremenu<CR> 2840eabd4dcSBram Moolenaar call assert_equal(#{name: 'menu', priority: 500, shortcut: '', 2850eabd4dcSBram Moolenaar \ display: 'menu', modes: ' ', enabled: v:true, silent: v:false, 2860eabd4dcSBram Moolenaar \ rhs: ":menu<CR>", noremenu: v:false, script: v:false}, 2870eabd4dcSBram Moolenaar \ menu_info('Test.menu')) 2880eabd4dcSBram Moolenaar call assert_equal(#{name: 'menu!', priority: 500, shortcut: '', 2890eabd4dcSBram Moolenaar \ display: 'menu!', modes: '!', enabled: v:true, silent: v:false, 2900eabd4dcSBram Moolenaar \ rhs: ":menu!<CR>", noremenu: v:false, script: v:false}, 2910eabd4dcSBram Moolenaar \ menu_info('Test.menu!', '!')) 2920eabd4dcSBram Moolenaar call assert_equal(#{name: 'amenu', priority: 500, shortcut: '', 2930eabd4dcSBram Moolenaar \ display: 'amenu', modes: 'a', enabled: v:true, silent: v:false, 2940eabd4dcSBram Moolenaar \ rhs: ":amenu<CR>", noremenu: v:false, script: v:false}, 2950eabd4dcSBram Moolenaar \ menu_info('Test.amenu', 'a')) 2960eabd4dcSBram Moolenaar call assert_equal(#{name: 'nmenu', priority: 500, shortcut: '', 2970eabd4dcSBram Moolenaar \ display: 'nmenu', modes: 'n', enabled: v:true, silent: v:false, 2980eabd4dcSBram Moolenaar \ rhs: ':nmenu<CR>', noremenu: v:false, script: v:false}, 2990eabd4dcSBram Moolenaar \ menu_info('Test.nmenu', 'n')) 3000eabd4dcSBram Moolenaar call assert_equal(#{name: 'omenu', priority: 500, shortcut: '', 3010eabd4dcSBram Moolenaar \ display: 'omenu', modes: 'o', enabled: v:true, silent: v:false, 3020eabd4dcSBram Moolenaar \ rhs: ':omenu<CR>', noremenu: v:false, script: v:false}, 3030eabd4dcSBram Moolenaar \ menu_info('Test.omenu', 'o')) 3040eabd4dcSBram Moolenaar call assert_equal(#{name: 'vmenu', priority: 500, shortcut: '', 3050eabd4dcSBram Moolenaar \ display: 'vmenu', modes: 'v', enabled: v:true, silent: v:false, 3060eabd4dcSBram Moolenaar \ rhs: ':vmenu<CR>', noremenu: v:false, script: v:false}, 3070eabd4dcSBram Moolenaar \ menu_info('Test.vmenu', 'v')) 3080eabd4dcSBram Moolenaar call assert_equal(#{name: 'xmenu', priority: 500, shortcut: '', 3090eabd4dcSBram Moolenaar \ display: 'xmenu', modes: 'x', enabled: v:true, silent: v:false, 3100eabd4dcSBram Moolenaar \ rhs: ':xmenu<CR>', noremenu: v:false, script: v:false}, 3110eabd4dcSBram Moolenaar \ menu_info('Test.xmenu', 'x')) 3120eabd4dcSBram Moolenaar call assert_equal(#{name: 'smenu', priority: 500, shortcut: '', 3130eabd4dcSBram Moolenaar \ display: 'smenu', modes: 's', enabled: v:true, silent: v:false, 3140eabd4dcSBram Moolenaar \ rhs: ':smenu<CR>', noremenu: v:false, script: v:false}, 3150eabd4dcSBram Moolenaar \ menu_info('Test.smenu', 's')) 3160eabd4dcSBram Moolenaar call assert_equal(#{name: 'imenu', priority: 500, shortcut: '', 3170eabd4dcSBram Moolenaar \ display: 'imenu', modes: 'i', enabled: v:true, silent: v:true, 3180eabd4dcSBram Moolenaar \ rhs: ':imenu<CR>', noremenu: v:false, script: v:true}, 3190eabd4dcSBram Moolenaar \ menu_info('Test.imenu', 'i')) 3200eabd4dcSBram Moolenaar call assert_equal(#{ name: 'cmenu', priority: 500, shortcut: '', 3210eabd4dcSBram Moolenaar \ display: 'cmenu', modes: 'c', enabled: v:true, silent: v:false, 3220eabd4dcSBram Moolenaar \ rhs: ':cmenu<CR>', noremenu: v:false, script: v:false}, 3230eabd4dcSBram Moolenaar \ menu_info('Test.cmenu', 'c')) 3240eabd4dcSBram Moolenaar call assert_equal(#{name: 'tlmenu', priority: 500, shortcut: '', 3250eabd4dcSBram Moolenaar \ display: 'tlmenu', modes: 'tl', enabled: v:true, silent: v:false, 3260eabd4dcSBram Moolenaar \ rhs: ':tlmenu<CR>', noremenu: v:false, script: v:false}, 3270eabd4dcSBram Moolenaar \ menu_info('Test.tlmenu', 'tl')) 3280eabd4dcSBram Moolenaar call assert_equal(#{name: 'noremenu', priority: 500, shortcut: '', 3290eabd4dcSBram Moolenaar \ display: 'noremenu', modes: ' ', enabled: v:true, silent: v:false, 3300eabd4dcSBram Moolenaar \ rhs: ":noremenu<CR>", noremenu: v:true, script: v:false}, 3310eabd4dcSBram Moolenaar \ menu_info('Test.noremenu')) 3320eabd4dcSBram Moolenaar call assert_equal(#{name: 'noremenu!', priority: 500, shortcut: '', 3330eabd4dcSBram Moolenaar \ display: 'noremenu!', modes: '!', enabled: v:true, silent: v:false, 3340eabd4dcSBram Moolenaar \ rhs: ":noremenu!<CR>", noremenu: v:true, script: v:false}, 3350eabd4dcSBram Moolenaar \ menu_info('Test.noremenu!', '!')) 3360eabd4dcSBram Moolenaar call assert_equal(#{name: 'anoremenu', priority: 500, shortcut: '', 3370eabd4dcSBram Moolenaar \ display: 'anoremenu', modes: 'a', enabled: v:true, silent: v:false, 3380eabd4dcSBram Moolenaar \ rhs: ":anoremenu<CR>", noremenu: v:true, script: v:false}, 3390eabd4dcSBram Moolenaar \ menu_info('Test.anoremenu', 'a')) 3400eabd4dcSBram Moolenaar call assert_equal(#{name: 'nnoremenu', priority: 500, shortcut: '', 3410eabd4dcSBram Moolenaar \ display: 'nnoremenu', modes: 'n', enabled: v:true, silent: v:false, 3420eabd4dcSBram Moolenaar \ rhs: ':nnoremenu<CR>', noremenu: v:true, script: v:false}, 3430eabd4dcSBram Moolenaar \ menu_info('Test.nnoremenu', 'n')) 3440eabd4dcSBram Moolenaar call assert_equal(#{name: 'onoremenu', priority: 500, shortcut: '', 3450eabd4dcSBram Moolenaar \ display: 'onoremenu', modes: 'o', enabled: v:true, silent: v:false, 3460eabd4dcSBram Moolenaar \ rhs: ':onoremenu<CR>', noremenu: v:true, script: v:false}, 3470eabd4dcSBram Moolenaar \ menu_info('Test.onoremenu', 'o')) 3480eabd4dcSBram Moolenaar call assert_equal(#{name: 'vnoremenu', priority: 500, shortcut: '', 3490eabd4dcSBram Moolenaar \ display: 'vnoremenu', modes: 'v', enabled: v:true, silent: v:false, 3500eabd4dcSBram Moolenaar \ rhs: ':vnoremenu<CR>', noremenu: v:true, script: v:false}, 3510eabd4dcSBram Moolenaar \ menu_info('Test.vnoremenu', 'v')) 3520eabd4dcSBram Moolenaar call assert_equal(#{name: 'xnoremenu', priority: 500, shortcut: '', 3530eabd4dcSBram Moolenaar \ display: 'xnoremenu', modes: 'x', enabled: v:true, silent: v:false, 3540eabd4dcSBram Moolenaar \ rhs: ':xnoremenu<CR>', noremenu: v:true, script: v:false}, 3550eabd4dcSBram Moolenaar \ menu_info('Test.xnoremenu', 'x')) 3560eabd4dcSBram Moolenaar call assert_equal(#{name: 'snoremenu', priority: 500, shortcut: '', 3570eabd4dcSBram Moolenaar \ display: 'snoremenu', modes: 's', enabled: v:true, silent: v:false, 3580eabd4dcSBram Moolenaar \ rhs: ':snoremenu<CR>', noremenu: v:true, script: v:false}, 3590eabd4dcSBram Moolenaar \ menu_info('Test.snoremenu', 's')) 3600eabd4dcSBram Moolenaar call assert_equal(#{name: 'inoremenu', priority: 500, shortcut: '', 3610eabd4dcSBram Moolenaar \ display: 'inoremenu', modes: 'i', enabled: v:true, silent: v:true, 3620eabd4dcSBram Moolenaar \ rhs: ':inoremenu<CR>', noremenu: v:true, script: v:false}, 3630eabd4dcSBram Moolenaar \ menu_info('Test.inoremenu', 'i')) 3640eabd4dcSBram Moolenaar call assert_equal(#{ name: 'cnoremenu', priority: 500, shortcut: '', 3650eabd4dcSBram Moolenaar \ display: 'cnoremenu', modes: 'c', enabled: v:true, silent: v:false, 3660eabd4dcSBram Moolenaar \ rhs: ':cnoremenu<CR>', noremenu: v:true, script: v:false}, 3670eabd4dcSBram Moolenaar \ menu_info('Test.cnoremenu', 'c')) 3680eabd4dcSBram Moolenaar call assert_equal(#{name: 'tlnoremenu', priority: 500, shortcut: '', 3690eabd4dcSBram Moolenaar \ display: 'tlnoremenu', modes: 'tl', enabled: v:true, silent: v:false, 3700eabd4dcSBram Moolenaar \ rhs: ':tlnoremenu<CR>', noremenu: v:true, script: v:false}, 3710eabd4dcSBram Moolenaar \ menu_info('Test.tlnoremenu', 'tl')) 3720eabd4dcSBram Moolenaar aunmenu Test 3730eabd4dcSBram Moolenaar tlunmenu Test 3740eabd4dcSBram Moolenaar call assert_equal({}, menu_info('Test')) 3750eabd4dcSBram Moolenaar call assert_equal({}, menu_info('Test', '!')) 3760eabd4dcSBram Moolenaar call assert_equal({}, menu_info('Test', 'a')) 3770eabd4dcSBram Moolenaar call assert_equal({}, menu_info('Test', 'n')) 3780eabd4dcSBram Moolenaar call assert_equal({}, menu_info('Test', 'o')) 3790eabd4dcSBram Moolenaar call assert_equal({}, menu_info('Test', 'v')) 3800eabd4dcSBram Moolenaar call assert_equal({}, menu_info('Test', 'x')) 3810eabd4dcSBram Moolenaar call assert_equal({}, menu_info('Test', 's')) 3820eabd4dcSBram Moolenaar call assert_equal({}, menu_info('Test', 'i')) 3830eabd4dcSBram Moolenaar call assert_equal({}, menu_info('Test', 'c')) 3840eabd4dcSBram Moolenaar call assert_equal({}, menu_info('Test', 't')) 3850eabd4dcSBram Moolenaar call assert_equal({}, menu_info('Test', 'tl')) 3860eabd4dcSBram Moolenaar 3870eabd4dcSBram Moolenaar amenu Test.amenu :amenu<CR> 3880eabd4dcSBram Moolenaar call assert_equal(':amenu<CR>', menu_info('Test.amenu', '').rhs) 3890eabd4dcSBram Moolenaar call assert_equal('<C-\><C-O>:amenu<CR>', menu_info('Test.amenu', '!').rhs) 3900eabd4dcSBram Moolenaar call assert_equal(':amenu<CR>', menu_info('Test.amenu', 'n').rhs) 3910eabd4dcSBram Moolenaar call assert_equal('<C-C>:amenu<CR><C-\><C-G>', 3920eabd4dcSBram Moolenaar \ menu_info('Test.amenu', 'o').rhs) 3930eabd4dcSBram Moolenaar call assert_equal('<C-C>:amenu<CR><C-\><C-G>', 3940eabd4dcSBram Moolenaar \ menu_info('Test.amenu', 'v').rhs) 3950eabd4dcSBram Moolenaar call assert_equal('<C-C>:amenu<CR><C-\><C-G>', 3960eabd4dcSBram Moolenaar \ menu_info('Test.amenu', 'x').rhs) 3970eabd4dcSBram Moolenaar call assert_equal('<C-C>:amenu<CR><C-\><C-G>', 3980eabd4dcSBram Moolenaar \ menu_info('Test.amenu', 's').rhs) 3990eabd4dcSBram Moolenaar call assert_equal('<C-\><C-O>:amenu<CR>', menu_info('Test.amenu', 'i').rhs) 4000eabd4dcSBram Moolenaar call assert_equal('<C-C>:amenu<CR><C-\><C-G>', 4010eabd4dcSBram Moolenaar \ menu_info('Test.amenu', 'c').rhs) 4020eabd4dcSBram Moolenaar aunmenu Test.amenu 4030eabd4dcSBram Moolenaar 4040eabd4dcSBram Moolenaar " Test for hidden menus 4050eabd4dcSBram Moolenaar menu ]Test.menu :menu<CR> 4060eabd4dcSBram Moolenaar call assert_equal(#{name: ']Test', display: ']Test', priority: 500, 4070eabd4dcSBram Moolenaar \ shortcut: '', modes: ' ', submenus: ['menu']}, 4080eabd4dcSBram Moolenaar \ menu_info(']Test')) 4090eabd4dcSBram Moolenaar unmenu ]Test 410*51491adfSYegappan Lakshmanan 411*51491adfSYegappan Lakshmanan " Test for getting all the top-level menu names 412*51491adfSYegappan Lakshmanan call assert_notequal(menu_info('').submenus, []) 4130eabd4dcSBram Moolenaarendfunc 4140eabd4dcSBram Moolenaar 4150eabd4dcSBram Moolenaar" Test for <special> keyword in a menu with 'cpo' containing '<' 4160eabd4dcSBram Moolenaarfunc Test_menu_special() 4170eabd4dcSBram Moolenaar new 4180eabd4dcSBram Moolenaar set cpo+=< 4190eabd4dcSBram Moolenaar nmenu Test.Sign am<Tab>n<Esc> 4200eabd4dcSBram Moolenaar call feedkeys(":emenu n Test.Sign\<CR>", 'x') 4210eabd4dcSBram Moolenaar call assert_equal("m<Tab>n<Esc>", getline(1)) 4220eabd4dcSBram Moolenaar nunmenu Test.Sign 4230eabd4dcSBram Moolenaar nmenu <special> Test.Sign am<Tab>n<Esc> 4240eabd4dcSBram Moolenaar call setline(1, '') 4250eabd4dcSBram Moolenaar call feedkeys(":emenu n Test.Sign\<CR>", 'x') 4260eabd4dcSBram Moolenaar call assert_equal("m\tn", getline(1)) 4270eabd4dcSBram Moolenaar set cpo-=< 4280eabd4dcSBram Moolenaar close! 4290eabd4dcSBram Moolenaar nunmenu Test.Sign 4300eabd4dcSBram Moolenaarendfunc 4310eabd4dcSBram Moolenaar 4328e7d6223SBram Moolenaar" Test for "icon=filename" in a toolbar 4330eabd4dcSBram Moolenaarfunc Test_menu_icon() 4340eabd4dcSBram Moolenaar CheckFeature toolbar 4350eabd4dcSBram Moolenaar nmenu icon=myicon.xpm Toolbar.Foo :echo "Foo"<CR> 4360eabd4dcSBram Moolenaar call assert_equal('myicon.xpm', "Toolbar.Foo"->menu_info().icon) 4370eabd4dcSBram Moolenaar nunmenu Toolbar.Foo 4380eabd4dcSBram Moolenaar 4390eabd4dcSBram Moolenaar " Test for using the builtin icon 4400eabd4dcSBram Moolenaar amenu ToolBar.BuiltIn22 :echo "BuiltIn22"<CR> 4410eabd4dcSBram Moolenaar call assert_equal(#{name: 'BuiltIn22', display: 'BuiltIn22', 4420eabd4dcSBram Moolenaar \ enabled: v:true, shortcut: '', modes: 'a', script: v:false, 4430eabd4dcSBram Moolenaar \ iconidx: 22, priority: 500, silent: v:false, 4440eabd4dcSBram Moolenaar \ rhs: ':echo "BuiltIn22"<CR>', noremenu: v:false}, 4450eabd4dcSBram Moolenaar \ menu_info("ToolBar.BuiltIn22")) 4460eabd4dcSBram Moolenaar aunmenu ToolBar.BuiltIn22 4470eabd4dcSBram Moolenaarendfunc 4480eabd4dcSBram Moolenaar 4490eabd4dcSBram Moolenaar" Test for ":emenu" command in different modes 4500eabd4dcSBram Moolenaarfunc Test_emenu_cmd() 4510eabd4dcSBram Moolenaar new 4520eabd4dcSBram Moolenaar xmenu Test.foo rx 4530eabd4dcSBram Moolenaar call setline(1, ['aaaa', 'bbbb']) 4540eabd4dcSBram Moolenaar normal ggVj 4550eabd4dcSBram Moolenaar %emenu Test.foo 4560eabd4dcSBram Moolenaar call assert_equal(['xxxx', 'xxxx'], getline(1, 2)) 4570eabd4dcSBram Moolenaar call setline(1, ['aaaa', 'bbbb']) 4580eabd4dcSBram Moolenaar exe "normal ggVj\<Esc>" 4590eabd4dcSBram Moolenaar %emenu Test.foo 4600eabd4dcSBram Moolenaar call assert_equal(['xxxx', 'xxxx'], getline(1, 2)) 4610eabd4dcSBram Moolenaar call setline(1, ['aaaa', 'bbbb']) 4620eabd4dcSBram Moolenaar exe "normal ggV\<Esc>" 4630eabd4dcSBram Moolenaar 2emenu Test.foo 4640eabd4dcSBram Moolenaar call assert_equal(['aaaa', 'xxxx'], getline(1, 2)) 4650eabd4dcSBram Moolenaar xunmenu Test.foo 4660eabd4dcSBram Moolenaar close! 4670eabd4dcSBram Moolenaarendfunc 4680eabd4dcSBram Moolenaar 4690eabd4dcSBram Moolenaar" Test for PopUp menus 4700eabd4dcSBram Moolenaarfunc Test_popup_menu() 4710eabd4dcSBram Moolenaar 20menu PopUp.foo :echo 'foo'<CR> 4720eabd4dcSBram Moolenaar 20menu PopUp.bar :echo 'bar'<CR> 4730eabd4dcSBram Moolenaar call assert_equal(#{name: 'PopUp', display: 'PopUp', priority: 20, 4740eabd4dcSBram Moolenaar \ shortcut: '', modes: ' ', submenus: ['foo', 'bar']}, 4750eabd4dcSBram Moolenaar \ menu_info('PopUp')) 4760eabd4dcSBram Moolenaar menu disable PopUp.bar 4770eabd4dcSBram Moolenaar call assert_equal(v:true, "PopUp.foo"->menu_info().enabled) 4780eabd4dcSBram Moolenaar call assert_equal(v:false, "PopUp.bar"->menu_info().enabled) 4790eabd4dcSBram Moolenaar menu enable PopUp.bar 4800eabd4dcSBram Moolenaar call assert_equal(v:true, "PopUp.bar"->menu_info().enabled) 4810eabd4dcSBram Moolenaar unmenu PopUp 4820eabd4dcSBram Moolenaarendfunc 4830eabd4dcSBram Moolenaar 4840eabd4dcSBram Moolenaar" Test for listing the menus using the :menu command 4850eabd4dcSBram Moolenaarfunc Test_show_menus() 4860eabd4dcSBram Moolenaar " In the GUI, tear-off menu items are present in the output below 4870eabd4dcSBram Moolenaar " So skip this test 4880eabd4dcSBram Moolenaar CheckNotGui 4890eabd4dcSBram Moolenaar aunmenu * 4900eabd4dcSBram Moolenaar call assert_equal(['--- Menus ---'], split(execute('menu'), "\n")) 4910eabd4dcSBram Moolenaar nmenu <script> 200.10 Test.nmenu1 :nmenu1<CR> 4920eabd4dcSBram Moolenaar nmenu 200.20 Test.nmenu2 :nmenu2<CR> 4930eabd4dcSBram Moolenaar nnoremenu 200.30 Test.nmenu3 :nmenu3<CR> 4940eabd4dcSBram Moolenaar nmenu 200.40 Test.nmenu4 :nmenu4<CR> 4950eabd4dcSBram Moolenaar nmenu 200.50 disable Test.nmenu4 4960eabd4dcSBram Moolenaar let exp =<< trim [TEXT] 4970eabd4dcSBram Moolenaar --- Menus --- 4980eabd4dcSBram Moolenaar 200 Test 4990eabd4dcSBram Moolenaar 10 nmenu1 5000eabd4dcSBram Moolenaar n& :nmenu1<CR> 5010eabd4dcSBram Moolenaar 20 nmenu2 5020eabd4dcSBram Moolenaar n :nmenu2<CR> 5030eabd4dcSBram Moolenaar 30 nmenu3 5040eabd4dcSBram Moolenaar n* :nmenu3<CR> 5050eabd4dcSBram Moolenaar 40 nmenu4 5060eabd4dcSBram Moolenaar n - :nmenu4<CR> 5070eabd4dcSBram Moolenaar [TEXT] 5080eabd4dcSBram Moolenaar call assert_equal(exp, split(execute('nmenu'), "\n")) 5090eabd4dcSBram Moolenaar nunmenu Test 5100eabd4dcSBram Moolenaarendfunc 5110eabd4dcSBram Moolenaar 5120eabd4dcSBram Moolenaar" Test for menu tips 5130eabd4dcSBram Moolenaarfunc Test_tmenu() 5140eabd4dcSBram Moolenaar tunmenu * 5150eabd4dcSBram Moolenaar call assert_equal(['--- Menus ---'], split(execute('tmenu'), "\n")) 5160eabd4dcSBram Moolenaar tmenu Test.nmenu1 nmenu1 5170eabd4dcSBram Moolenaar tmenu Test.nmenu2.sub1 nmenu2.sub1 5180eabd4dcSBram Moolenaar let exp =<< trim [TEXT] 5190eabd4dcSBram Moolenaar --- Menus --- 5200eabd4dcSBram Moolenaar 500 Test 5210eabd4dcSBram Moolenaar 500 nmenu1 5220eabd4dcSBram Moolenaar t - nmenu1 5230eabd4dcSBram Moolenaar 500 nmenu2 5240eabd4dcSBram Moolenaar 500 sub1 5250eabd4dcSBram Moolenaar t - nmenu2.sub1 5260eabd4dcSBram Moolenaar [TEXT] 5270eabd4dcSBram Moolenaar call assert_equal(exp, split(execute('tmenu'), "\n")) 5280eabd4dcSBram Moolenaar tunmenu Test 5298d588cceSBram Moolenaarendfunc 5308d588cceSBram Moolenaar 5318d588cceSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 532