1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252
|
-- Test for mappings and abbreviations
local t = require('test.testutil')
local n = require('test.functional.testnvim')()
local Screen = require('test.functional.ui.screen')
local clear, feed, insert = n.clear, n.feed, n.insert
local expect, poke_eventloop = n.expect, n.poke_eventloop
local command, eq, eval, api = n.command, t.eq, n.eval, n.api
local exec = n.exec
local sleep = vim.uv.sleep
describe('mapping', function()
before_each(clear)
it('abbreviations with р (0x80)', function()
insert([[
test starts here:
]])
-- Abbreviations with р (0x80) should work.
command('inoreab чкпр vim')
feed('GAчкпр <esc>')
expect([[
test starts here:
vim ]])
end)
-- oldtest: Test_map_ctrl_c_insert()
it('Ctrl-c works in Insert mode', function()
-- Mapping of ctrl-c in insert mode
command('set cpo-=< cpo-=k')
command('inoremap <c-c> <ctrl-c>')
command('cnoremap <c-c> dummy')
command('cunmap <c-c>')
feed('GA<cr>')
-- XXX: editor must be in Insert mode before <C-C> is put into input buffer
poke_eventloop()
feed('TEST2: CTRL-C |<c-c>A|<cr><esc>')
command('unmap! <c-c>')
expect([[
TEST2: CTRL-C |<ctrl-c>A|
]])
end)
-- oldtest: Test_map_ctrl_c_visual()
it('Ctrl-c works in Visual mode', function()
command([[vnoremap <c-c> :<C-u>$put ='vmap works'<cr>]])
feed('GV')
-- XXX: editor must be in Visual mode before <C-C> is put into input buffer
poke_eventloop()
feed('vV<c-c>')
command('vunmap <c-c>')
expect([[
vmap works]])
end)
it('langmap', function()
-- langmap should not get remapped in insert mode.
command('inoremap { FAIL_ilangmap')
command('set langmap=+{ langnoremap')
feed('o+<esc>')
-- Insert mode expr mapping with langmap.
command('inoremap <expr> { "FAIL_iexplangmap"')
feed('o+<esc>')
-- langmap should not get remapped in cmdline mode.
command('cnoremap { FAIL_clangmap')
feed('o+<esc>')
command('cunmap {')
-- cmdline mode expr mapping with langmap.
command('cnoremap <expr> { "FAIL_cexplangmap"')
feed('o+<esc>')
command('cunmap {')
-- Assert buffer contents.
expect([[
+
+
+
+]])
end)
-- oldtest: Test_map_feedkeys()
it('feedkeys', function()
insert([[
a b c d
a b c d
]])
-- Vim's issue #212 (feedkeys insert mapping at current position)
command('nnoremap . :call feedkeys(".", "in")<cr>')
feed('/^a b<cr>')
feed('0qqdw.ifoo<esc>qj0@q<esc>')
command('unmap .')
expect([[
fooc d
fooc d
]])
end)
-- oldtest: Test_map_cursor()
it('i_CTRL-G_U', function()
-- <c-g>U<cursor> works only within a single line
command('imapclear')
command('imap ( ()<c-g>U<left>')
feed('G2o<esc>ki<cr>Test1: text with a (here some more text<esc>k.')
-- test undo
feed('G2o<esc>ki<cr>Test2: text wit a (here some more text [und undo]<c-g>u<esc>k.u')
command('imapclear')
command('set whichwrap=<,>,[,]')
feed('G3o<esc>2k')
command(
[[:exe ":norm! iTest3: text with a (parenthesis here\<C-G>U\<Right>new line here\<esc>\<up>\<up>."]]
)
expect([[
Test1: text with a (here some more text)
Test1: text with a (here some more text)
Test2: text wit a (here some more text [und undo])
new line here
Test3: text with a (parenthesis here
new line here
]])
end)
-- oldtest: Test_mouse_drag_mapped_start_select()
it('dragging starts Select mode even if coming from mapping', function()
command('set mouse=a')
command('set selectmode=mouse')
command('nnoremap <LeftDrag> <LeftDrag><Cmd><CR>')
poke_eventloop()
api.nvim_input_mouse('left', 'press', '', 0, 0, 0)
poke_eventloop()
api.nvim_input_mouse('left', 'drag', '', 0, 0, 1)
poke_eventloop()
eq('s', eval('mode()'))
end)
-- oldtest: Test_mouse_drag_insert_map()
it('<LeftDrag> mapping in Insert mode works correctly', function()
command('set mouse=a')
command('inoremap <LeftDrag> <LeftDrag><Cmd>let g:dragged = 1<CR>')
feed('i')
poke_eventloop()
api.nvim_input_mouse('left', 'press', '', 0, 0, 0)
poke_eventloop()
api.nvim_input_mouse('left', 'drag', '', 0, 0, 1)
poke_eventloop()
eq(1, eval('g:dragged'))
eq('v', eval('mode()'))
feed([[<C-\><C-N>]])
command([[inoremap <LeftDrag> <LeftDrag><C-\><C-N>]])
feed('i')
poke_eventloop()
api.nvim_input_mouse('left', 'press', '', 0, 0, 0)
poke_eventloop()
api.nvim_input_mouse('left', 'drag', '', 0, 0, 1)
poke_eventloop()
eq('n', eval('mode()'))
end)
-- oldtest: Test_map_after_timed_out_nop()
it('timeout works after an <Nop> mapping is triggered on timeout', function()
command('set timeout timeoutlen=400')
command('inoremap ab TEST')
command('inoremap a <Nop>')
-- Enter Insert mode
feed('i')
-- Wait for the "a" mapping to time out
feed('a')
sleep(500)
-- Send "a" and wait for a period shorter than 'timeoutlen'
feed('a')
sleep(100)
-- Send "b", should trigger the "ab" mapping
feed('b')
expect('TEST')
end)
-- oldtest: Test_showcmd_part_map()
it("'showcmd' with a partial mapping", function()
local screen = Screen.new(60, 6)
exec([[
set notimeout showcmd
nnoremap ,a <Ignore>
nnoremap ;a <Ignore>
nnoremap Àa <Ignore>
nnoremap Ëa <Ignore>
nnoremap βa <Ignore>
nnoremap ωa <Ignore>
nnoremap …a <Ignore>
nnoremap <C-W>a <Ignore>
]])
for _, c in ipairs({ ',', ';', 'À', 'Ë', 'β', 'ω', '…' }) do
feed(c)
screen:expect(([[
^ |
{1:~ }|*4
%s |
]]):format(c))
feed('a')
screen:expect([[
^ |
{1:~ }|*4
|
]])
end
feed('\23')
screen:expect([[
^ |
{1:~ }|*4
^W |
]])
feed('a')
screen:expect([[
^ |
{1:~ }|*4
|
]])
feed('<C-W>')
screen:expect([[
^ |
{1:~ }|*4
^W |
]])
feed('a')
screen:expect([[
^ |
{1:~ }|*4
|
]])
end)
end)
|