Merge #9728 from justinmk/autocmd-once

This commit is contained in:
Justin M. Keyes
2019-03-15 12:38:53 +01:00
committed by GitHub
8 changed files with 79 additions and 51 deletions

View File

@@ -59,9 +59,9 @@ describe('autocmd', function()
end)
end)
it('-once', function() -- :help autocmd-once
it('++once', function() -- :help autocmd-once
--
-- ":autocmd ... -once" executes its handler once, then removes the handler.
-- ":autocmd ... ++once" executes its handler once, then removes the handler.
--
local expected = {
'Many1',
@@ -76,10 +76,10 @@ describe('autocmd', function()
}
command('let g:foo = []')
command('autocmd TabNew * :call add(g:foo, "Many1")')
command('autocmd TabNew * -once :call add(g:foo, "Once1")')
command('autocmd TabNew * -once :call add(g:foo, "Once2")')
command('autocmd TabNew * ++once :call add(g:foo, "Once1")')
command('autocmd TabNew * ++once :call add(g:foo, "Once2")')
command('autocmd TabNew * :call add(g:foo, "Many2")')
command('autocmd TabNew * -once :call add(g:foo, "Once3")')
command('autocmd TabNew * ++once :call add(g:foo, "Once3")')
eq(dedent([[
--- Autocommands ---
@@ -103,27 +103,45 @@ describe('autocmd', function()
funcs.execute('autocmd Tabnew'))
--
-- ":autocmd ... -once" handlers can be deleted.
-- ":autocmd ... ++once" handlers can be deleted.
--
expected = {}
command('let g:foo = []')
command('autocmd TabNew * -once :call add(g:foo, "Once1")')
command('autocmd TabNew * ++once :call add(g:foo, "Once1")')
command('autocmd! TabNew')
command('tabnew')
eq(expected, eval('g:foo'))
--
-- ":autocmd ... <buffer> -once -nested"
-- ":autocmd ... <buffer> ++once ++nested"
--
expected = {
'OptionSet-Once',
'CursorMoved-Once',
}
command('let g:foo = []')
command('autocmd OptionSet binary -nested -once :call add(g:foo, "OptionSet-Once")')
command('autocmd CursorMoved <buffer> -once -nested setlocal binary|:call add(g:foo, "CursorMoved-Once")')
command('autocmd OptionSet binary ++nested ++once :call add(g:foo, "OptionSet-Once")')
command('autocmd CursorMoved <buffer> ++once ++nested setlocal binary|:call add(g:foo, "CursorMoved-Once")')
command("put ='foo bar baz'")
feed('0llhlh')
eq(expected, eval('g:foo'))
--
-- :autocmd should not show empty section after ++once handlers expire.
--
expected = {
'Once1',
'Once2',
}
command('let g:foo = []')
command('autocmd! TabNew') -- Clear all TabNew handlers.
command('autocmd TabNew * ++once :call add(g:foo, "Once1")')
command('autocmd TabNew * ++once :call add(g:foo, "Once2")')
command('tabnew')
eq(expected, eval('g:foo'))
eq(dedent([[
--- Autocommands ---]]),
funcs.execute('autocmd Tabnew'))
end)
end)