mirror of
https://github.com/neovim/neovim.git
synced 2025-10-26 12:27:24 +00:00
api/ui: add tests for popupmenu_external events
update screen.lua to use new style nvim_ui_attach
This commit is contained in:
@@ -755,4 +755,106 @@ describe('completion', function()
|
||||
]])
|
||||
end)
|
||||
end)
|
||||
|
||||
end)
|
||||
|
||||
describe('External completion popupmenu', function()
|
||||
local screen
|
||||
local items, selected, anchor
|
||||
before_each(function()
|
||||
clear()
|
||||
screen = Screen.new(60, 8)
|
||||
screen:attach({rgb=true, popupmenu_external=true})
|
||||
screen:set_default_attr_ids({
|
||||
[1] = {bold=true, foreground=Screen.colors.Blue},
|
||||
[2] = {bold = true},
|
||||
})
|
||||
screen:set_on_event_handler(function(name, data)
|
||||
if name == "popupmenu_show" then
|
||||
local row, col
|
||||
items, selected, row, col = unpack(data)
|
||||
anchor = {row, col}
|
||||
elseif name == "popupmenu_select" then
|
||||
selected = data[1]
|
||||
elseif name == "popupmenu_hide" then
|
||||
items = nil
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
||||
it('works', function()
|
||||
source([[
|
||||
function! TestComplete() abort
|
||||
call complete(1, ['foo', 'bar', 'spam'])
|
||||
return ''
|
||||
endfunction
|
||||
]])
|
||||
local expected = {
|
||||
{'foo', '', '', ''},
|
||||
{'bar', '', '', ''},
|
||||
{'spam', '', '', ''},
|
||||
}
|
||||
feed('o<C-r>=TestComplete()<CR>')
|
||||
screen:expect([[
|
||||
|
|
||||
foo^ |
|
||||
{1:~ }|
|
||||
{1:~ }|
|
||||
{1:~ }|
|
||||
{1:~ }|
|
||||
{1:~ }|
|
||||
{2:-- INSERT --} |
|
||||
]], nil, nil, function()
|
||||
eq(expected, items)
|
||||
eq(0, selected)
|
||||
eq({1,0}, anchor)
|
||||
end)
|
||||
|
||||
feed('<c-p>')
|
||||
screen:expect([[
|
||||
|
|
||||
^ |
|
||||
{1:~ }|
|
||||
{1:~ }|
|
||||
{1:~ }|
|
||||
{1:~ }|
|
||||
{1:~ }|
|
||||
{2:-- INSERT --} |
|
||||
]], nil, nil, function()
|
||||
eq(expected, items)
|
||||
eq(-1, selected)
|
||||
eq({1,0}, anchor)
|
||||
end)
|
||||
|
||||
-- down moves the selection in the menu, but does not insert anything
|
||||
feed('<down><down>')
|
||||
screen:expect([[
|
||||
|
|
||||
^ |
|
||||
{1:~ }|
|
||||
{1:~ }|
|
||||
{1:~ }|
|
||||
{1:~ }|
|
||||
{1:~ }|
|
||||
{2:-- INSERT --} |
|
||||
]], nil, nil, function()
|
||||
eq(expected, items)
|
||||
eq(1, selected)
|
||||
eq({1,0}, anchor)
|
||||
end)
|
||||
|
||||
feed('<cr>')
|
||||
screen:expect([[
|
||||
|
|
||||
bar^ |
|
||||
{1:~ }|
|
||||
{1:~ }|
|
||||
{1:~ }|
|
||||
{1:~ }|
|
||||
{1:~ }|
|
||||
{2:-- INSERT --} |
|
||||
]], nil, nil, function()
|
||||
eq(nil, items) -- popupmenu was hidden
|
||||
end)
|
||||
end)
|
||||
end)
|
||||
|
||||
Reference in New Issue
Block a user