mirror of
https://github.com/neovim/neovim.git
synced 2025-09-16 00:08:19 +00:00
119 lines
3.3 KiB
Lua
119 lines
3.3 KiB
Lua
local helpers = require('test.functional.helpers')(after_each)
|
|
local Screen = require('test.functional.ui.screen')
|
|
|
|
local clear = helpers.clear
|
|
local feed = helpers.feed
|
|
local insert = helpers.insert
|
|
local exec_lua = helpers.exec_lua
|
|
local expect_events = helpers.expect_events
|
|
|
|
describe('decorations provider', function()
|
|
local screen
|
|
before_each(function()
|
|
clear()
|
|
screen = Screen.new(40, 8)
|
|
screen:attach()
|
|
screen:set_default_attr_ids({
|
|
[1] = {bold=true, foreground=Screen.colors.Blue},
|
|
})
|
|
end)
|
|
|
|
local mudholland = [[
|
|
// just to see if there was an accident
|
|
// on Mulholland Drive
|
|
try_start();
|
|
bufref_T save_buf;
|
|
switch_buffer(&save_buf, buf);
|
|
posp = getmark(mark, false);
|
|
restore_buffer(&save_buf); ]]
|
|
|
|
local function setup_provider(code)
|
|
exec_lua ([[
|
|
local a = vim.api
|
|
test1 = a.nvim_create_namespace "test1"
|
|
]] .. (code or [[
|
|
beamtrace = {}
|
|
function on_do(kind, ...)
|
|
table.insert(beamtrace, {kind, ...})
|
|
end
|
|
]]) .. [[
|
|
a.nvim_set_decoration_provider(
|
|
test1, {
|
|
on_start = on_do; on_buf = on_do;
|
|
on_win = on_do; on_line = on_do;
|
|
on_end = on_do;
|
|
})
|
|
]])
|
|
end
|
|
|
|
local function check_trace(expected)
|
|
local actual = exec_lua [[ local b = beamtrace beamtrace = {} return b ]]
|
|
expect_events(expected, actual, "beam trace")
|
|
end
|
|
|
|
it('leaves a trace', function()
|
|
insert(mudholland)
|
|
|
|
setup_provider()
|
|
|
|
screen:expect{grid=[[
|
|
// just to see if there was an accident |
|
|
// on Mulholland Drive |
|
|
try_start(); |
|
|
bufref_T save_buf; |
|
|
switch_buffer(&save_buf, buf); |
|
|
posp = getmark(mark, false); |
|
|
restore_buffer(&save_buf);^ |
|
|
|
|
|
]]}
|
|
check_trace {
|
|
{ "start", 4, 40 };
|
|
{ "win", 1000, 1, 0, 8 };
|
|
{ "line", 1000, 1, 0 };
|
|
{ "line", 1000, 1, 1 };
|
|
{ "line", 1000, 1, 2 };
|
|
{ "line", 1000, 1, 3 };
|
|
{ "line", 1000, 1, 4 };
|
|
{ "line", 1000, 1, 5 };
|
|
{ "line", 1000, 1, 6 };
|
|
{ "end", 4 };
|
|
}
|
|
|
|
feed "iü<esc>"
|
|
screen:expect{grid=[[
|
|
// just to see if there was an accident |
|
|
// on Mulholland Drive |
|
|
try_start(); |
|
|
bufref_T save_buf; |
|
|
switch_buffer(&save_buf, buf); |
|
|
posp = getmark(mark, false); |
|
|
restore_buffer(&save_buf);^ü |
|
|
|
|
|
]]}
|
|
check_trace {
|
|
{ "start", 5, 10 };
|
|
{ "buf", 1 };
|
|
{ "win", 1000, 1, 0, 8 };
|
|
{ "line", 1000, 1, 6 };
|
|
{ "end", 5 };
|
|
}
|
|
end)
|
|
|
|
it('single provider', function()
|
|
insert(mudholland)
|
|
setup_provider [[
|
|
local hl = a.nvim_get_hl_id_by_name "ErrorMsg"
|
|
function do_it(event, ...)
|
|
if event == "line" then
|
|
local win, buf, line = ...
|
|
a.nvim_buf_set_extmark(buf, test_ns, line, line,
|
|
{ end_line = line, end_col = line+1,
|
|
hl_group = hl,
|
|
ephemeral = true
|
|
})
|
|
end
|
|
end
|
|
]]
|
|
end)
|
|
end)
|