Mercurial > vim
comparison src/testdir/test_menu.vim @ 19713:8514e8b7e661 v8.2.0413
patch 8.2.0413: buffer menu does not handle special buffers properly
Commit: https://github.com/vim/vim/commit/5e94a29ebbde10dd973d58f1adba9a2fc83877d1
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Mar 19 18:46:57 2020 +0100
patch 8.2.0413: buffer menu does not handle special buffers properly
Problem: Buffer menu does not handle special buffers properly.
Solution: Keep a dictionary with buffer names to reliably keep track of
entries.
Also trigger BufFilePre and BufFilePost for command-line and
terminal buffers when the name changes.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Thu, 19 Mar 2020 19:00:04 +0100 |
parents | da791e5c0139 |
children | d53e8428a79a |
comparison
equal
deleted
inserted
replaced
19712:714875349336 | 19713:8514e8b7e661 |
---|---|
13 | 13 |
14 let v:errmsg = '' | 14 let v:errmsg = '' |
15 doautocmd LoadBufferMenu VimEnter | 15 doautocmd LoadBufferMenu VimEnter |
16 call assert_equal('', v:errmsg) | 16 call assert_equal('', v:errmsg) |
17 | 17 |
18 source $VIMRUNTIME/delmenu.vim | |
19 call assert_equal('', v:errmsg) | |
20 endfunc | |
21 | |
22 func 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 | |
18 source $VIMRUNTIME/delmenu.vim | 53 source $VIMRUNTIME/delmenu.vim |
19 call assert_equal('', v:errmsg) | 54 call assert_equal('', v:errmsg) |
20 endfunc | 55 endfunc |
21 | 56 |
22 func Test_translate_menu() | 57 func Test_translate_menu() |
119 endfunc | 154 endfunc |
120 | 155 |
121 " Test for menu item completion in command line | 156 " Test for menu item completion in command line |
122 func Test_menu_expand() | 157 func Test_menu_expand() |
123 " Create the menu itmes for test | 158 " Create the menu itmes for test |
159 menu Dummy.Nothing lll | |
124 for i in range(1, 4) | 160 for i in range(1, 4) |
125 let m = 'menu Xmenu.A' .. i .. '.A' .. i | 161 let m = 'menu Xmenu.A' .. i .. '.A' .. i |
126 for j in range(1, 4) | 162 for j in range(1, 4) |
127 exe m .. 'B' .. j .. ' :echo "A' .. i .. 'B' .. j .. '"' .. "<CR>" | 163 exe m .. 'B' .. j .. ' :echo "A' .. i .. 'B' .. j .. '"' .. "<CR>" |
128 endfor | 164 endfor |
144 call assert_equal('"emenu Xmenu.A2.A2B1 A2B2 A2B3 A2B4', @:) | 180 call assert_equal('"emenu Xmenu.A2.A2B1 A2B2 A2B3 A2B4', @:) |
145 | 181 |
146 " Test for <Up> to go up a menu | 182 " Test for <Up> to go up a menu |
147 call feedkeys(":emenu Xmenu.A\<Tab>\<Down>\<Up>\<Up>\<Up>" .. | 183 call feedkeys(":emenu Xmenu.A\<Tab>\<Down>\<Up>\<Up>\<Up>" .. |
148 \ "\<C-A>\<C-B>\"\<CR>", 'xt') | 184 \ "\<C-A>\<C-B>\"\<CR>", 'xt') |
149 call assert_equal('"emenu Buffers. Xmenu.', @:) | 185 call assert_equal('"emenu Dummy. Xmenu.', @:) |
150 | 186 |
151 " Test for expanding only submenus | 187 " Test for expanding only submenus |
152 call feedkeys(":popup Xmenu.\<C-A>\<C-B>\"\<CR>", 'xt') | 188 call feedkeys(":popup Xmenu.\<C-A>\<C-B>\"\<CR>", 'xt') |
153 call assert_equal('"popup Xmenu.A1 A2 A3 A4', @:) | 189 call assert_equal('"popup Xmenu.A1 A2 A3 A4', @:) |
154 | 190 |
164 call feedkeys(":menu Xmenu.A1.A1B1.xyz.\<C-A>\<C-B>\"\<CR>", 'xt') | 200 call feedkeys(":menu Xmenu.A1.A1B1.xyz.\<C-A>\<C-B>\"\<CR>", 'xt') |
165 call assert_equal('"menu Xmenu.A1.A1B1.xyz.', @:) | 201 call assert_equal('"menu Xmenu.A1.A1B1.xyz.', @:) |
166 | 202 |
167 set wildmenu& | 203 set wildmenu& |
168 unmenu Xmenu | 204 unmenu Xmenu |
205 unmenu Dummy | |
169 | 206 |
170 " Test for expanding popup menus with some hidden items | 207 " Test for expanding popup menus with some hidden items |
171 menu Xmenu.foo.A1 a1 | 208 menu Xmenu.foo.A1 a1 |
172 menu Xmenu.]bar bar | 209 menu Xmenu.]bar bar |
173 menu Xmenu.]baz.B1 b1 | 210 menu Xmenu.]baz.B1 b1 |
174 menu Xmenu.-sep- : | 211 menu Xmenu.-sep- : |
175 call feedkeys(":popup Xmenu.\<C-A>\<C-B>\"\<CR>", 'xt') | 212 call feedkeys(":popup Xmenu.\<C-A>\<C-B>\"\<CR>", 'xt') |
176 call assert_equal('"popup Xmenu.foo', @:) | 213 call assert_equal('"popup Xmenu.foo', @:) |
177 unmenu Xmenu | 214 unmenu Xmenu |
178 | |
179 endfunc | 215 endfunc |
180 | 216 |
181 " Test for the menu_info() function | 217 " Test for the menu_info() function |
182 func Test_menu_info() | 218 func Test_menu_info() |
183 " Define menus with various attributes | 219 " Define menus with various attributes |