diff options
Diffstat (limited to 'test/functional/autocmd/textchanged_spec.lua')
-rw-r--r-- | test/functional/autocmd/textchanged_spec.lua | 39 |
1 files changed, 30 insertions, 9 deletions
diff --git a/test/functional/autocmd/textchanged_spec.lua b/test/functional/autocmd/textchanged_spec.lua index b90a0fd020..b621eb36bf 100644 --- a/test/functional/autocmd/textchanged_spec.lua +++ b/test/functional/autocmd/textchanged_spec.lua @@ -4,6 +4,7 @@ local exec = helpers.exec local command = helpers.command local feed = helpers.feed local eq = helpers.eq +local neq = helpers.neq local eval = helpers.eval local poke_eventloop = helpers.poke_eventloop @@ -26,14 +27,14 @@ it('TextChangedI and TextChangedP autocommands', function() poke_eventloop() feed('<esc>') -- TextChangedI triggers only if text is actually changed in Insert mode - eq('', eval('g:autocmd')) + eq('I', eval('g:autocmd')) command([[let g:autocmd = '']]) feed('S') poke_eventloop() feed('f') poke_eventloop() - eq('I', eval('g:autocmd')) + eq('II', eval('g:autocmd')) feed('<esc>') command([[let g:autocmd = '']]) @@ -43,7 +44,7 @@ it('TextChangedI and TextChangedP autocommands', function() poke_eventloop() feed('<C-N>') poke_eventloop() - eq('IP', eval('g:autocmd')) + eq('IIP', eval('g:autocmd')) feed('<esc>') command([[let g:autocmd = '']]) @@ -55,7 +56,7 @@ it('TextChangedI and TextChangedP autocommands', function() poke_eventloop() feed('<C-N>') poke_eventloop() - eq('IPP', eval('g:autocmd')) + eq('IIPP', eval('g:autocmd')) feed('<esc>') command([[let g:autocmd = '']]) @@ -69,7 +70,7 @@ it('TextChangedI and TextChangedP autocommands', function() poke_eventloop() feed('<C-N>') poke_eventloop() - eq('IPPP', eval('g:autocmd')) + eq('IIPPP', eval('g:autocmd')) feed('<esc>') command([[let g:autocmd = '']]) @@ -84,7 +85,7 @@ it('TextChangedI and TextChangedP autocommands', function() feed('<C-N>') poke_eventloop() feed('<C-N>') - eq('IPPPP', eval('g:autocmd')) + eq('IIPPPP', eval('g:autocmd')) feed('<esc>') eq({'foo', 'bar', 'foobar', 'foo'}, eval('getline(1, "$")')) @@ -145,17 +146,37 @@ it('TextChangedI and TextChanged', function() eq('', eval('g:autocmd_n')) eq('I5', eval('g:autocmd_i')) - command([[call feedkeys("yyp", 'tnix')]]) + feed('yyp') eq('N6', eval('g:autocmd_n')) eq('I5', eval('g:autocmd_i')) -- TextChangedI should only trigger if change was done in Insert mode command([[let g:autocmd_i = '']]) - command([[call feedkeys("yypi\<esc>", 'tnix')]]) + feed('yypi<esc>') eq('', eval('g:autocmd_i')) -- TextChanged should only trigger if change was done in Normal mode command([[let g:autocmd_n = '']]) - command([[call feedkeys("ibar\<esc>", 'tnix')]]) + feed('ibar<esc>') eq('', eval('g:autocmd_n')) + + local function validate_mixed_textchangedi(keys) + feed('ifoo<esc>') + command([[let g:autocmd_i = '']]) + command([[let g:autocmd_n = '']]) + for _, s in ipairs(keys) do + feed(s) + poke_eventloop() + end + neq('', eval('g:autocmd_i')) + eq('', eval('g:autocmd_n')) + end + + validate_mixed_textchangedi({'o', '<esc>'}) + validate_mixed_textchangedi({'O', '<esc>'}) + validate_mixed_textchangedi({'ciw', '<esc>'}) + validate_mixed_textchangedi({'cc', '<esc>'}) + validate_mixed_textchangedi({'C', '<esc>'}) + validate_mixed_textchangedi({'s', '<esc>'}) + validate_mixed_textchangedi({'S', '<esc>'}) end) |