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