1" Test that the system menu can be loaded. 2 3source check.vim 4CheckFeature menu 5 6func Test_load_menu() 7 try 8 source $VIMRUNTIME/menu.vim 9 catch 10 call assert_report('error while loading menus: ' . v:exception) 11 endtry 12 call assert_match('browse confirm w', execute(':menu File.Save')) 13 14 let v:errmsg = '' 15 doautocmd LoadBufferMenu VimEnter 16 call assert_equal('', v:errmsg) 17 18 source $VIMRUNTIME/delmenu.vim 19 call assert_equal('', v:errmsg) 20endfunc 21 22func Test_buffer_menu_special_buffers() 23 " Load in runtime menus 24 try 25 source $VIMRUNTIME/menu.vim 26 catch 27 call assert_report('error while loading menus: ' . v:exception) 28 endtry 29 30 let v:errmsg = '' 31 doautocmd LoadBufferMenu VimEnter 32 call assert_equal('', v:errmsg) 33 34 let orig_buffer_menus = execute("nmenu Buffers") 35 36 " Test that regular new buffer results in a new buffer menu item. 37 new 38 let new_buffer_menus = execute('nmenu Buffers') 39 call assert_equal(len(split(orig_buffer_menus, "\n")) + 2, len(split(new_buffer_menus, "\n"))) 40 bwipe! 41 call assert_equal(orig_buffer_menus, execute("nmenu Buffers")) 42 43 " Make a new command-line window, test that it does not create a new buffer 44 " menu. 45 call feedkeys("q::let cmdline_buffer_menus=execute('nmenu Buffers')\<CR>:q\<CR>", 'ntx') 46 call assert_equal(len(split(orig_buffer_menus, "\n")) + 2, len(split(cmdline_buffer_menus, "\n"))) 47 call assert_equal(orig_buffer_menus, execute("nmenu Buffers")) 48 49 if has('terminal') 50 " Open a terminal window and test that it does not create a buffer menu 51 " item. 52 terminal 53 let term_buffer_menus = execute('nmenu Buffers') 54 call assert_equal(len(split(orig_buffer_menus, "\n")) + 2, len(split(term_buffer_menus, "\n"))) 55 bwipe! 56 call assert_equal(orig_buffer_menus, execute("nmenu Buffers")) 57 endif 58 59 " Remove menus to clean up 60 source $VIMRUNTIME/delmenu.vim 61 call assert_equal('', v:errmsg) 62endfunc 63 64func Test_translate_menu() 65 CheckFeature multi_lang 66 if !filereadable($VIMRUNTIME . '/lang/menu_de_de.latin1.vim') 67 throw 'Skipped: translated menu not found' 68 endif 69 70 " First delete any English menus. 71 source $VIMRUNTIME/delmenu.vim 72 set langmenu=de_de 73 source $VIMRUNTIME/menu.vim 74 call assert_match('browse confirm w', execute(':menu Datei.Speichern')) 75 76 source $VIMRUNTIME/delmenu.vim 77endfunc 78 79func Test_menu_commands() 80 nmenu 2 Test.FooBar :let g:did_menu = 'normal'<CR> 81 vmenu 2 Test.FooBar :let g:did_menu = 'visual'<CR> 82 smenu 2 Test.FooBar :let g:did_menu = 'select'<CR> 83 omenu 2 Test.FooBar :let g:did_menu = 'op-pending'<CR> 84 tlmenu 2 Test.FooBar :let g:did_menu = 'terminal'<CR> 85 imenu 2 Test.FooBar :let g:did_menu = 'insert'<CR> 86 cmenu 2 Test.FooBar :let g:did_menu = 'cmdline'<CR> 87 emenu n Test.FooBar 88 89 call feedkeys(":menu Test.FooB\<C-A>\<C-B>\"\<CR>", 'tx') 90 call assert_equal('"menu Test.FooBar', @:) 91 92 call assert_equal('normal', g:did_menu) 93 emenu v Test.FooBar 94 call assert_equal('visual', g:did_menu) 95 emenu s Test.FooBar 96 call assert_equal('select', g:did_menu) 97 emenu o Test.FooBar 98 call assert_equal('op-pending', g:did_menu) 99 emenu t Test.FooBar 100 call assert_equal('terminal', g:did_menu) 101 emenu i Test.FooBar 102 call assert_equal('insert', g:did_menu) 103 emenu c Test.FooBar 104 call assert_equal('cmdline', g:did_menu) 105 106 nunmenu Test.FooBar 107 call assert_fails('emenu n Test.FooBar', 'E335: Menu not defined for Normal mode') 108 vunmenu Test.FooBar 109 call assert_fails('emenu v Test.FooBar', 'E335: Menu not defined for Visual mode') 110 vmenu 2 Test.FooBar :let g:did_menu = 'visual'<CR> 111 sunmenu Test.FooBar 112 call assert_fails('emenu s Test.FooBar', 'E335: Menu not defined for Select mode') 113 ounmenu Test.FooBar 114 call assert_fails('emenu o Test.FooBar', 'E335: Menu not defined for Op-pending mode') 115 iunmenu Test.FooBar 116 call assert_fails('emenu i Test.FooBar', 'E335: Menu not defined for Insert mode') 117 cunmenu Test.FooBar 118 call assert_fails('emenu c Test.FooBar', 'E335: Menu not defined for Cmdline mode') 119 tlunmenu Test.FooBar 120 call assert_fails('emenu t Test.FooBar', 'E335: Menu not defined for Terminal mode') 121 122 aunmenu Test.FooBar 123 call assert_fails('emenu n Test.FooBar', 'E334:') 124 125 nmenu 2 Test.FooBar.Child :let g:did_menu = 'foobar'<CR> 126 call assert_fails('emenu n Test.FooBar', 'E333:') 127 nunmenu Test.FooBar.Child 128 129 unlet g:did_menu 130endfun 131 132" Test various menu related errors 133func Test_menu_errors() 134 menu Test.Foo :version<CR> 135 136 " Error cases 137 call assert_fails('menu .Test.Foo :ls<CR>', 'E475:') 138 call assert_fails('menu Test. :ls<CR>', 'E330:') 139 call assert_fails('menu Foo. :ls<CR>', 'E331:') 140 call assert_fails('unmenu Test.Foo abc', 'E488:') 141 call assert_fails('menu <Tab>:ls :ls<CR>', 'E792:') 142 call assert_fails('menu Test.<Tab>:ls :ls<CR>', 'E792:') 143 call assert_fails('menu Test.Foo.Bar :ls<CR>', 'E327:') 144 call assert_fails('menu Test.-Sep-.Baz :ls<CR>', 'E332:') 145 call assert_fails('menu Foo.Bar.--.Baz :ls<CR>', 'E332:') 146 call assert_fails('menu disable Test.Foo.Bar', 'E327:') 147 call assert_fails('menu disable T.Foo', 'E329:') 148 call assert_fails('unmenu Test.Foo.Bar', 'E327:') 149 call assert_fails('cunmenu Test.Foo', 'E328:') 150 call assert_fails('unmenu Test.Bar', 'E329:') 151 call assert_fails('menu Test.Foo.Bar', 'E327:') 152 call assert_fails('cmenu Test.Foo', 'E328:') 153 call assert_fails('emenu x Test.Foo', 'E475:') 154 call assert_fails('emenu Test.Foo.Bar', 'E327:') 155 call assert_fails('menutranslate Test', 'E474:') 156 157 silent! unmenu Foo 158 unmenu Test 159endfunc 160 161" Test for menu item completion in command line 162func Test_menu_expand() 163 " Make sure we don't have stale menu items like Buffers menu. 164 source $VIMRUNTIME/delmenu.vim 165 166 " Create the menu itmes for test 167 menu Dummy.Nothing lll 168 for i in range(1, 4) 169 let m = 'menu Xmenu.A' .. i .. '.A' .. i 170 for j in range(1, 4) 171 exe m .. 'B' .. j .. ' :echo "A' .. i .. 'B' .. j .. '"' .. "<CR>" 172 endfor 173 endfor 174 set wildmenu 175 176 " Test for <CR> selecting a submenu 177 call feedkeys(":emenu Xmenu.A\<Tab>\<CR>\<Right>x\<BS>\<C-B>\"\<CR>", 'xt') 178 call assert_equal('"emenu Xmenu.A1.A1B2', @:) 179 180 " Test for <Down> selecting a submenu 181 call feedkeys(":emenu Xmenu.A\<Tab>\<Right>\<Right>\<Down>" .. 182 \ "\<C-A>\<C-B>\"\<CR>", 'xt') 183 call assert_equal('"emenu Xmenu.A3.A3B1 A3B2 A3B3 A3B4', @:) 184 185 " Test for <Up> to go up a submenu 186 call feedkeys(":emenu Xmenu.A\<Tab>\<Down>\<Up>\<Right>\<Right>" .. 187 \ "\<Left>\<Down>\<C-A>\<C-B>\"\<CR>", 'xt') 188 call assert_equal('"emenu Xmenu.A2.A2B1 A2B2 A2B3 A2B4', @:) 189 190 " Test for <Up> to go up a menu 191 call feedkeys(":emenu Xmenu.A\<Tab>\<Down>\<Up>\<Up>\<Up>" .. 192 \ "\<C-A>\<C-B>\"\<CR>", 'xt') 193 call assert_equal('"emenu Dummy. Xmenu.', @:) 194 195 " Test for expanding only submenus 196 call feedkeys(":popup Xmenu.\<C-A>\<C-B>\"\<CR>", 'xt') 197 call assert_equal('"popup Xmenu.A1 A2 A3 A4', @:) 198 199 " Test for expanding menus after enable/disable 200 call feedkeys(":menu enable Xmenu.\<C-A>\<C-B>\"\<CR>", 'xt') 201 call assert_equal('"menu enable Xmenu.A1. A2. A3. A4.', @:) 202 call feedkeys(":menu disable Xmenu.\<C-A>\<C-B>\"\<CR>", 'xt') 203 call assert_equal('"menu disable Xmenu.A1. A2. A3. A4.', @:) 204 205 " Test for expanding non-existing menu path 206 call feedkeys(":menu xyz.\<C-A>\<C-B>\"\<CR>", 'xt') 207 call assert_equal('"menu xyz.', @:) 208 call feedkeys(":menu Xmenu.A1.A1B1.xyz.\<C-A>\<C-B>\"\<CR>", 'xt') 209 call assert_equal('"menu Xmenu.A1.A1B1.xyz.', @:) 210 211 set wildmenu& 212 unmenu Xmenu 213 unmenu Dummy 214 215 " Test for expanding popup menus with some hidden items 216 menu Xmenu.foo.A1 a1 217 menu Xmenu.]bar bar 218 menu Xmenu.]baz.B1 b1 219 menu Xmenu.-sep- : 220 call feedkeys(":popup Xmenu.\<C-A>\<C-B>\"\<CR>", 'xt') 221 call assert_equal('"popup Xmenu.foo', @:) 222 unmenu Xmenu 223endfunc 224 225" Test for the menu_info() function 226func Test_menu_info() 227 " Define menus with various attributes 228 10nnoremenu 10.10 T&est.F&oo :echo 'foo'<CR> 229 10nmenu <silent> 10.20 T&est.B&ar<Tab>:bar :echo 'bar'<CR> 230 10nmenu <script> 10.30.5 T&est.Ba&z.Qu&x :echo 'qux'<CR> 231 232 let d = #{name: "B&ar\t:bar", display: 'Bar', modes: 'n', shortcut: 'a', 233 \ accel: ':bar', priority: 20, enabled: v:true, silent: v:true, 234 \ noremenu: v:false, script: v:false, rhs: ":echo 'bar'<CR>"} 235 call assert_equal(d, menu_info('Test.Bar')) 236 237 let d = #{name: 'Ba&z', display: 'Baz', modes: 'n', shortcut: 'z', 238 \ priority: 30, submenus: ['Qux']} 239 call assert_equal(d, menu_info('Test.Baz')) 240 241 let d = #{name: 'T&est', display: 'Test', modes: 'n', shortcut: 'e', 242 \ priority: 10, submenus: ['Foo', 'Bar', 'Baz']} 243 call assert_equal(d, menu_info('Test')) 244 call assert_equal({}, menu_info('Test.Dummy')) 245 call assert_equal({}, menu_info('Dummy')) 246 247 nmenu disable Test.Foo 248 call assert_equal(v:false, menu_info('Test.Foo').enabled) 249 nmenu enable Test.Foo 250 call assert_equal(v:true, menu_info('Test.Foo').enabled) 251 252 call assert_equal(menu_info('Test.Foo'), menu_info('Test.Foo', '')) 253 nmenu Test.abc <Nop> 254 call assert_equal('<Nop>', menu_info('Test.abc').rhs) 255 call assert_fails('call menu_info([])', 'E730:') 256 call assert_fails('call menu_info("", [])', 'E730:') 257 nunmenu Test 258 259 " Test for defining menus in different modes 260 menu Test.menu :menu<CR> 261 menu! Test.menu! :menu!<CR> 262 amenu Test.amenu :amenu<CR> 263 nmenu Test.nmenu :nmenu<CR> 264 omenu Test.omenu :omenu<CR> 265 vmenu Test.vmenu :vmenu<CR> 266 xmenu Test.xmenu :xmenu<CR> 267 smenu Test.smenu :smenu<CR> 268 imenu <silent> <script> Test.imenu :imenu<CR> 269 cmenu Test.cmenu :cmenu<CR> 270 tlmenu Test.tlmenu :tlmenu<CR> 271 tmenu Test.nmenu Normal mode menu 272 tmenu Test.omenu Op-pending mode menu 273 noremenu Test.noremenu :noremenu<CR> 274 noremenu! Test.noremenu! :noremenu!<CR> 275 anoremenu Test.anoremenu :anoremenu<CR> 276 nnoremenu Test.nnoremenu :nnoremenu<CR> 277 onoremenu Test.onoremenu :onoremenu<CR> 278 vnoremenu Test.vnoremenu :vnoremenu<CR> 279 xnoremenu Test.xnoremenu :xnoremenu<CR> 280 snoremenu Test.snoremenu :snoremenu<CR> 281 inoremenu <silent> Test.inoremenu :inoremenu<CR> 282 cnoremenu Test.cnoremenu :cnoremenu<CR> 283 tlnoremenu Test.tlnoremenu :tlnoremenu<CR> 284 call assert_equal(#{name: 'menu', priority: 500, shortcut: '', 285 \ display: 'menu', modes: ' ', enabled: v:true, silent: v:false, 286 \ rhs: ":menu<CR>", noremenu: v:false, script: v:false}, 287 \ menu_info('Test.menu')) 288 call assert_equal(#{name: 'menu!', priority: 500, shortcut: '', 289 \ display: 'menu!', modes: '!', enabled: v:true, silent: v:false, 290 \ rhs: ":menu!<CR>", noremenu: v:false, script: v:false}, 291 \ menu_info('Test.menu!', '!')) 292 call assert_equal(#{name: 'amenu', priority: 500, shortcut: '', 293 \ display: 'amenu', modes: 'a', enabled: v:true, silent: v:false, 294 \ rhs: ":amenu<CR>", noremenu: v:false, script: v:false}, 295 \ menu_info('Test.amenu', 'a')) 296 call assert_equal(#{name: 'nmenu', priority: 500, shortcut: '', 297 \ display: 'nmenu', modes: 'n', enabled: v:true, silent: v:false, 298 \ rhs: ':nmenu<CR>', noremenu: v:false, script: v:false}, 299 \ menu_info('Test.nmenu', 'n')) 300 call assert_equal(#{name: 'omenu', priority: 500, shortcut: '', 301 \ display: 'omenu', modes: 'o', enabled: v:true, silent: v:false, 302 \ rhs: ':omenu<CR>', noremenu: v:false, script: v:false}, 303 \ menu_info('Test.omenu', 'o')) 304 call assert_equal(#{name: 'vmenu', priority: 500, shortcut: '', 305 \ display: 'vmenu', modes: 'v', enabled: v:true, silent: v:false, 306 \ rhs: ':vmenu<CR>', noremenu: v:false, script: v:false}, 307 \ menu_info('Test.vmenu', 'v')) 308 call assert_equal(#{name: 'xmenu', priority: 500, shortcut: '', 309 \ display: 'xmenu', modes: 'x', enabled: v:true, silent: v:false, 310 \ rhs: ':xmenu<CR>', noremenu: v:false, script: v:false}, 311 \ menu_info('Test.xmenu', 'x')) 312 call assert_equal(#{name: 'smenu', priority: 500, shortcut: '', 313 \ display: 'smenu', modes: 's', enabled: v:true, silent: v:false, 314 \ rhs: ':smenu<CR>', noremenu: v:false, script: v:false}, 315 \ menu_info('Test.smenu', 's')) 316 call assert_equal(#{name: 'imenu', priority: 500, shortcut: '', 317 \ display: 'imenu', modes: 'i', enabled: v:true, silent: v:true, 318 \ rhs: ':imenu<CR>', noremenu: v:false, script: v:true}, 319 \ menu_info('Test.imenu', 'i')) 320 call assert_equal(#{ name: 'cmenu', priority: 500, shortcut: '', 321 \ display: 'cmenu', modes: 'c', enabled: v:true, silent: v:false, 322 \ rhs: ':cmenu<CR>', noremenu: v:false, script: v:false}, 323 \ menu_info('Test.cmenu', 'c')) 324 call assert_equal(#{name: 'tlmenu', priority: 500, shortcut: '', 325 \ display: 'tlmenu', modes: 'tl', enabled: v:true, silent: v:false, 326 \ rhs: ':tlmenu<CR>', noremenu: v:false, script: v:false}, 327 \ menu_info('Test.tlmenu', 'tl')) 328 call assert_equal(#{name: 'noremenu', priority: 500, shortcut: '', 329 \ display: 'noremenu', modes: ' ', enabled: v:true, silent: v:false, 330 \ rhs: ":noremenu<CR>", noremenu: v:true, script: v:false}, 331 \ menu_info('Test.noremenu')) 332 call assert_equal(#{name: 'noremenu!', priority: 500, shortcut: '', 333 \ display: 'noremenu!', modes: '!', enabled: v:true, silent: v:false, 334 \ rhs: ":noremenu!<CR>", noremenu: v:true, script: v:false}, 335 \ menu_info('Test.noremenu!', '!')) 336 call assert_equal(#{name: 'anoremenu', priority: 500, shortcut: '', 337 \ display: 'anoremenu', modes: 'a', enabled: v:true, silent: v:false, 338 \ rhs: ":anoremenu<CR>", noremenu: v:true, script: v:false}, 339 \ menu_info('Test.anoremenu', 'a')) 340 call assert_equal(#{name: 'nnoremenu', priority: 500, shortcut: '', 341 \ display: 'nnoremenu', modes: 'n', enabled: v:true, silent: v:false, 342 \ rhs: ':nnoremenu<CR>', noremenu: v:true, script: v:false}, 343 \ menu_info('Test.nnoremenu', 'n')) 344 call assert_equal(#{name: 'onoremenu', priority: 500, shortcut: '', 345 \ display: 'onoremenu', modes: 'o', enabled: v:true, silent: v:false, 346 \ rhs: ':onoremenu<CR>', noremenu: v:true, script: v:false}, 347 \ menu_info('Test.onoremenu', 'o')) 348 call assert_equal(#{name: 'vnoremenu', priority: 500, shortcut: '', 349 \ display: 'vnoremenu', modes: 'v', enabled: v:true, silent: v:false, 350 \ rhs: ':vnoremenu<CR>', noremenu: v:true, script: v:false}, 351 \ menu_info('Test.vnoremenu', 'v')) 352 call assert_equal(#{name: 'xnoremenu', priority: 500, shortcut: '', 353 \ display: 'xnoremenu', modes: 'x', enabled: v:true, silent: v:false, 354 \ rhs: ':xnoremenu<CR>', noremenu: v:true, script: v:false}, 355 \ menu_info('Test.xnoremenu', 'x')) 356 call assert_equal(#{name: 'snoremenu', priority: 500, shortcut: '', 357 \ display: 'snoremenu', modes: 's', enabled: v:true, silent: v:false, 358 \ rhs: ':snoremenu<CR>', noremenu: v:true, script: v:false}, 359 \ menu_info('Test.snoremenu', 's')) 360 call assert_equal(#{name: 'inoremenu', priority: 500, shortcut: '', 361 \ display: 'inoremenu', modes: 'i', enabled: v:true, silent: v:true, 362 \ rhs: ':inoremenu<CR>', noremenu: v:true, script: v:false}, 363 \ menu_info('Test.inoremenu', 'i')) 364 call assert_equal(#{ name: 'cnoremenu', priority: 500, shortcut: '', 365 \ display: 'cnoremenu', modes: 'c', enabled: v:true, silent: v:false, 366 \ rhs: ':cnoremenu<CR>', noremenu: v:true, script: v:false}, 367 \ menu_info('Test.cnoremenu', 'c')) 368 call assert_equal(#{name: 'tlnoremenu', priority: 500, shortcut: '', 369 \ display: 'tlnoremenu', modes: 'tl', enabled: v:true, silent: v:false, 370 \ rhs: ':tlnoremenu<CR>', noremenu: v:true, script: v:false}, 371 \ menu_info('Test.tlnoremenu', 'tl')) 372 aunmenu Test 373 tlunmenu Test 374 call assert_equal({}, menu_info('Test')) 375 call assert_equal({}, menu_info('Test', '!')) 376 call assert_equal({}, menu_info('Test', 'a')) 377 call assert_equal({}, menu_info('Test', 'n')) 378 call assert_equal({}, menu_info('Test', 'o')) 379 call assert_equal({}, menu_info('Test', 'v')) 380 call assert_equal({}, menu_info('Test', 'x')) 381 call assert_equal({}, menu_info('Test', 's')) 382 call assert_equal({}, menu_info('Test', 'i')) 383 call assert_equal({}, menu_info('Test', 'c')) 384 call assert_equal({}, menu_info('Test', 't')) 385 call assert_equal({}, menu_info('Test', 'tl')) 386 387 amenu Test.amenu :amenu<CR> 388 call assert_equal(':amenu<CR>', menu_info('Test.amenu', '').rhs) 389 call assert_equal('<C-\><C-O>:amenu<CR>', menu_info('Test.amenu', '!').rhs) 390 call assert_equal(':amenu<CR>', menu_info('Test.amenu', 'n').rhs) 391 call assert_equal('<C-C>:amenu<CR><C-\><C-G>', 392 \ menu_info('Test.amenu', 'o').rhs) 393 call assert_equal('<C-C>:amenu<CR><C-\><C-G>', 394 \ menu_info('Test.amenu', 'v').rhs) 395 call assert_equal('<C-C>:amenu<CR><C-\><C-G>', 396 \ menu_info('Test.amenu', 'x').rhs) 397 call assert_equal('<C-C>:amenu<CR><C-\><C-G>', 398 \ menu_info('Test.amenu', 's').rhs) 399 call assert_equal('<C-\><C-O>:amenu<CR>', menu_info('Test.amenu', 'i').rhs) 400 call assert_equal('<C-C>:amenu<CR><C-\><C-G>', 401 \ menu_info('Test.amenu', 'c').rhs) 402 aunmenu Test.amenu 403 404 " Test for hidden menus 405 menu ]Test.menu :menu<CR> 406 call assert_equal(#{name: ']Test', display: ']Test', priority: 500, 407 \ shortcut: '', modes: ' ', submenus: ['menu']}, 408 \ menu_info(']Test')) 409 unmenu ]Test 410 411 " Test for getting all the top-level menu names 412 call assert_notequal(menu_info('').submenus, []) 413endfunc 414 415" Test for <special> keyword in a menu with 'cpo' containing '<' 416func Test_menu_special() 417 new 418 set cpo+=< 419 nmenu Test.Sign am<Tab>n<Esc> 420 call feedkeys(":emenu n Test.Sign\<CR>", 'x') 421 call assert_equal("m<Tab>n<Esc>", getline(1)) 422 nunmenu Test.Sign 423 nmenu <special> Test.Sign am<Tab>n<Esc> 424 call setline(1, '') 425 call feedkeys(":emenu n Test.Sign\<CR>", 'x') 426 call assert_equal("m\tn", getline(1)) 427 set cpo-=< 428 close! 429 nunmenu Test.Sign 430endfunc 431 432" Test for "icon=filename" in a toolbar 433func Test_menu_icon() 434 CheckFeature toolbar 435 nmenu icon=myicon.xpm Toolbar.Foo :echo "Foo"<CR> 436 call assert_equal('myicon.xpm', "Toolbar.Foo"->menu_info().icon) 437 nunmenu Toolbar.Foo 438 439 " Test for using the builtin icon 440 amenu ToolBar.BuiltIn22 :echo "BuiltIn22"<CR> 441 call assert_equal(#{name: 'BuiltIn22', display: 'BuiltIn22', 442 \ enabled: v:true, shortcut: '', modes: 'a', script: v:false, 443 \ iconidx: 22, priority: 500, silent: v:false, 444 \ rhs: ':echo "BuiltIn22"<CR>', noremenu: v:false}, 445 \ menu_info("ToolBar.BuiltIn22")) 446 aunmenu ToolBar.BuiltIn22 447endfunc 448 449" Test for ":emenu" command in different modes 450func Test_emenu_cmd() 451 new 452 xmenu Test.foo rx 453 call setline(1, ['aaaa', 'bbbb']) 454 normal ggVj 455 %emenu Test.foo 456 call assert_equal(['xxxx', 'xxxx'], getline(1, 2)) 457 call setline(1, ['aaaa', 'bbbb']) 458 exe "normal ggVj\<Esc>" 459 %emenu Test.foo 460 call assert_equal(['xxxx', 'xxxx'], getline(1, 2)) 461 call setline(1, ['aaaa', 'bbbb']) 462 exe "normal ggV\<Esc>" 463 2emenu Test.foo 464 call assert_equal(['aaaa', 'xxxx'], getline(1, 2)) 465 xunmenu Test.foo 466 close! 467endfunc 468 469" Test for PopUp menus 470func Test_popup_menu() 471 20menu PopUp.foo :echo 'foo'<CR> 472 20menu PopUp.bar :echo 'bar'<CR> 473 call assert_equal(#{name: 'PopUp', display: 'PopUp', priority: 20, 474 \ shortcut: '', modes: ' ', submenus: ['foo', 'bar']}, 475 \ menu_info('PopUp')) 476 menu disable PopUp.bar 477 call assert_equal(v:true, "PopUp.foo"->menu_info().enabled) 478 call assert_equal(v:false, "PopUp.bar"->menu_info().enabled) 479 menu enable PopUp.bar 480 call assert_equal(v:true, "PopUp.bar"->menu_info().enabled) 481 unmenu PopUp 482endfunc 483 484" Test for listing the menus using the :menu command 485func Test_show_menus() 486 " In the GUI, tear-off menu items are present in the output below 487 " So skip this test 488 CheckNotGui 489 aunmenu * 490 call assert_equal(['--- Menus ---'], split(execute('menu'), "\n")) 491 nmenu <script> 200.10 Test.nmenu1 :nmenu1<CR> 492 nmenu 200.20 Test.nmenu2 :nmenu2<CR> 493 nnoremenu 200.30 Test.nmenu3 :nmenu3<CR> 494 nmenu 200.40 Test.nmenu4 :nmenu4<CR> 495 nmenu 200.50 disable Test.nmenu4 496 let exp =<< trim [TEXT] 497 --- Menus --- 498 200 Test 499 10 nmenu1 500 n& :nmenu1<CR> 501 20 nmenu2 502 n :nmenu2<CR> 503 30 nmenu3 504 n* :nmenu3<CR> 505 40 nmenu4 506 n - :nmenu4<CR> 507 [TEXT] 508 call assert_equal(exp, split(execute('nmenu'), "\n")) 509 nunmenu Test 510endfunc 511 512" Test for menu tips 513func Test_tmenu() 514 tunmenu * 515 call assert_equal(['--- Menus ---'], split(execute('tmenu'), "\n")) 516 tmenu Test.nmenu1 nmenu1 517 tmenu Test.nmenu2.sub1 nmenu2.sub1 518 let exp =<< trim [TEXT] 519 --- Menus --- 520 500 Test 521 500 nmenu1 522 t - nmenu1 523 500 nmenu2 524 500 sub1 525 t - nmenu2.sub1 526 [TEXT] 527 call assert_equal(exp, split(execute('tmenu'), "\n")) 528 tunmenu Test 529endfunc 530 531" vim: shiftwidth=2 sts=2 expandtab 532