blob: 4af75be514accfb7b471805ebd18d52341bec9a1 [file] [log] [blame]
Bram Moolenaar2d6c8002016-01-03 23:31:24 +01001" Test that the system menu can be loaded.
2
Bram Moolenaarb46fecd2019-06-15 17:58:09 +02003source check.vim
4CheckFeature menu
Bram Moolenaar11dd8c12017-03-04 20:41:34 +01005
Bram Moolenaar2d6c8002016-01-03 23:31:24 +01006func Test_load_menu()
7 try
8 source $VIMRUNTIME/menu.vim
9 catch
Bram Moolenaar37175402017-03-18 20:18:45 +010010 call assert_report('error while loading menus: ' . v:exception)
Bram Moolenaar2d6c8002016-01-03 23:31:24 +010011 endtry
Bram Moolenaara1c8ecf2017-03-04 21:41:05 +010012 call assert_match('browse confirm w', execute(':menu File.Save'))
Bram Moolenaare24c5b32019-12-10 22:11:53 +010013
14 let v:errmsg = ''
15 doautocmd LoadBufferMenu VimEnter
16 call assert_equal('', v:errmsg)
17
Bram Moolenaar11dd8c12017-03-04 20:41:34 +010018 source $VIMRUNTIME/delmenu.vim
Bram Moolenaare24c5b32019-12-10 22:11:53 +010019 call assert_equal('', v:errmsg)
Bram Moolenaar11dd8c12017-03-04 20:41:34 +010020endfunc
21
22func Test_translate_menu()
23 if !has('multi_lang')
24 return
25 endif
26 if !filereadable($VIMRUNTIME . '/lang/menu_de_de.latin1.vim')
27 throw 'Skipped: translated menu not found'
28 endif
29
Bram Moolenaara1c8ecf2017-03-04 21:41:05 +010030 " First delete any English menus.
31 source $VIMRUNTIME/delmenu.vim
Bram Moolenaar11dd8c12017-03-04 20:41:34 +010032 set langmenu=de_de
33 source $VIMRUNTIME/menu.vim
Bram Moolenaar5558d192017-03-04 21:02:22 +010034 call assert_match('browse confirm w', execute(':menu Datei.Speichern'))
Bram Moolenaar11dd8c12017-03-04 20:41:34 +010035
36 source $VIMRUNTIME/delmenu.vim
Bram Moolenaar2d6c8002016-01-03 23:31:24 +010037endfunc
Bram Moolenaar4c5d8152018-10-19 22:36:53 +020038
39func Test_menu_commands()
40 nmenu 2 Test.FooBar :let g:did_menu = 'normal'<CR>
41 vmenu 2 Test.FooBar :let g:did_menu = 'visual'<CR>
42 smenu 2 Test.FooBar :let g:did_menu = 'select'<CR>
43 omenu 2 Test.FooBar :let g:did_menu = 'op-pending'<CR>
44 tlmenu 2 Test.FooBar :let g:did_menu = 'terminal'<CR>
45 imenu 2 Test.FooBar :let g:did_menu = 'insert'<CR>
46 cmenu 2 Test.FooBar :let g:did_menu = 'cmdline'<CR>
47 emenu n Test.FooBar
Bram Moolenaar297610b2019-12-27 17:20:55 +010048
49 call feedkeys(":menu Test.FooB\<C-A>\<C-B>\"\<CR>", 'tx')
50 call assert_equal('"menu Test.FooBar', @:)
51
Bram Moolenaar4c5d8152018-10-19 22:36:53 +020052 call assert_equal('normal', g:did_menu)
53 emenu v Test.FooBar
54 call assert_equal('visual', g:did_menu)
55 emenu s Test.FooBar
56 call assert_equal('select', g:did_menu)
57 emenu o Test.FooBar
58 call assert_equal('op-pending', g:did_menu)
59 emenu t Test.FooBar
60 call assert_equal('terminal', g:did_menu)
61 emenu i Test.FooBar
62 call assert_equal('insert', g:did_menu)
63 emenu c Test.FooBar
64 call assert_equal('cmdline', g:did_menu)
65
Bram Moolenaarce793532019-05-05 14:19:20 +020066 nunmenu Test.FooBar
67 call assert_fails('emenu n Test.FooBar', 'E335: Menu not defined for Normal mode')
68 vunmenu Test.FooBar
69 call assert_fails('emenu v Test.FooBar', 'E335: Menu not defined for Visual mode')
70 vmenu 2 Test.FooBar :let g:did_menu = 'visual'<CR>
71 sunmenu Test.FooBar
72 call assert_fails('emenu s Test.FooBar', 'E335: Menu not defined for Select mode')
73 ounmenu Test.FooBar
74 call assert_fails('emenu o Test.FooBar', 'E335: Menu not defined for Op-pending mode')
75 iunmenu Test.FooBar
76 call assert_fails('emenu i Test.FooBar', 'E335: Menu not defined for Insert mode')
77 cunmenu Test.FooBar
78 call assert_fails('emenu c Test.FooBar', 'E335: Menu not defined for Cmdline mode')
Bram Moolenaar4c5d8152018-10-19 22:36:53 +020079 tlunmenu Test.FooBar
Bram Moolenaarce793532019-05-05 14:19:20 +020080 call assert_fails('emenu t Test.FooBar', 'E335: Menu not defined for Terminal mode')
81
82 aunmenu Test.FooBar
Bram Moolenaar4c5d8152018-10-19 22:36:53 +020083 call assert_fails('emenu n Test.FooBar', 'E334:')
84
85 nmenu 2 Test.FooBar.Child :let g:did_menu = 'foobar'<CR>
86 call assert_fails('emenu n Test.FooBar', 'E333:')
87 nunmenu Test.FooBar.Child
88
89 unlet g:did_menu
90endfun
Bram Moolenaar8d588cc2020-02-25 21:47:45 +010091
92" Test for menu item completion in command line
93func Test_menu_expand()
94 " Create the menu itmes for test
95 for i in range(1, 4)
96 let m = 'menu Xmenu.A' .. i .. '.A' .. i
97 for j in range(1, 4)
98 exe m .. 'B' .. j .. ' :echo "A' .. i .. 'B' .. j .. '"' .. "<CR>"
99 endfor
100 endfor
101 set wildmenu
102
103 " Test for <CR> selecting a submenu
104 call feedkeys(":emenu Xmenu.A\<Tab>\<CR>\<Right>x\<BS>\<C-B>\"\<CR>", 'xt')
105 call assert_equal('"emenu Xmenu.A1.A1B2', @:)
106
107 " Test for <Down> selecting a submenu
108 call feedkeys(":emenu Xmenu.A\<Tab>\<Right>\<Right>\<Down>" ..
109 \ "\<C-A>\<C-B>\"\<CR>", 'xt')
110 call assert_equal('"emenu Xmenu.A3.A3B1 A3B2 A3B3 A3B4', @:)
111
112 " Test for <Up> to go up a submenu
113 call feedkeys(":emenu Xmenu.A\<Tab>\<Down>\<Up>\<Right>\<Right>" ..
114 \ "\<Left>\<Down>\<C-A>\<C-B>\"\<CR>", 'xt')
115 call assert_equal('"emenu Xmenu.A2.A2B1 A2B2 A2B3 A2B4', @:)
116
117 " Test for <Up> to go up a menu
118 call feedkeys(":emenu Xmenu.A\<Tab>\<Down>\<Up>\<Up>\<Up>" ..
119 \ "\<C-A>\<C-B>\"\<CR>", 'xt')
120 call assert_equal('"emenu Buffers. Xmenu.', @:)
121
122 set wildmenu&
123 unmenu Xmenu
124endfunc
125
126" vim: shiftwidth=2 sts=2 expandtab