modechanged_spec.lua (1649B)
1 local t = require('test.testutil') 2 local n = require('test.functional.testnvim')() 3 4 local clear, eval, eq = n.clear, n.eval, t.eq 5 local feed, command = n.feed, n.command 6 local exec_lua = n.exec_lua 7 8 describe('ModeChanged', function() 9 before_each(function() 10 clear() 11 end) 12 13 it('picks up terminal mode changes', function() 14 command('let g:count = 0') 15 command('au ModeChanged * let g:event = copy(v:event)') 16 command('au ModeChanged * let g:count += 1') 17 18 command('term') 19 feed('i') 20 eq({ 21 old_mode = 'nt', 22 new_mode = 't', 23 }, eval('g:event')) 24 feed('<c-\\><c-n>') 25 eq({ 26 old_mode = 't', 27 new_mode = 'nt', 28 }, eval('g:event')) 29 eq(3, eval('g:count')) 30 command('bd!') 31 32 -- v:event is cleared after the autocommand is done 33 eq({}, eval('v:event')) 34 end) 35 36 it('does not repeatedly trigger for scheduled callback', function() 37 exec_lua([[ 38 vim.g.s_count = 0 39 vim.g.s_mode = "" 40 vim.g.t_count = 0 41 vim.g.t_mode = "" 42 vim.api.nvim_create_autocmd("ModeChanged", { 43 callback = function() 44 vim.g.s_count = vim.g.s_count + 1 45 vim.g.s_mode = vim.api.nvim_get_mode().mode 46 vim.schedule(function() 47 vim.g.t_count = vim.g.t_count + 1 48 vim.g.t_mode = vim.api.nvim_get_mode().mode 49 end) 50 end, 51 }) 52 ]]) 53 54 feed('d') 55 eq(1, eval('g:s_count')) 56 eq('no', eval('g:s_mode')) 57 eq(1, eval('g:t_count')) 58 eq('no', eval('g:t_mode')) 59 60 feed('<Esc>') 61 eq(2, eval('g:s_count')) 62 eq('n', eval('g:s_mode')) 63 eq(2, eval('g:t_count')) 64 eq('n', eval('g:t_mode')) 65 end) 66 end)