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