neovim/test/functional/autocmd/completedone_spec.lua
Famiu Haque a616272f56
feat(complete): specify reason for CompleteDone
Problem: `CompleteDone` currently does not specify the reason for why completion was done, which is problematic for completion plugins as they cannot know whether the event was triggered due to the completion being canceled, accepted, or for some other reason.

Solution: Add a `reason` key to `v:event`, which is set by `CompleteDone` to indicate why completion ended.
2024-05-24 11:57:46 +02:00

42 lines
1.0 KiB
Lua

local t = require('test.testutil')
local n = require('test.functional.testnvim')()
local clear = n.clear
local command = n.command
local call = n.call
local feed = n.feed
local eval = n.eval
local eq = t.eq
describe('CompleteDone', function()
before_each(clear)
describe('sets v:event.reason', function()
before_each(function()
clear()
command('autocmd CompleteDone * let g:donereason = v:event.reason')
feed('i')
call('complete', call('col', '.'), { 'foo', 'bar' })
end)
it('accept', function()
feed('<C-y>')
eq('accept', eval('g:donereason'))
end)
describe('cancel', function()
it('on <C-e>', function()
feed('<C-e>')
eq('cancel', eval('g:donereason'))
end)
it('on non-keyword character', function()
feed('<Esc>')
eq('cancel', eval('g:donereason'))
end)
it('when overriden by another complete()', function()
call('complete', call('col', '.'), { 'bar', 'baz' })
eq('cancel', eval('g:donereason'))
end)
end)
end)
end)