diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/run.lua | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/tests/run.lua b/tests/run.lua index 64c12d6..e0c9b0c 100644 --- a/tests/run.lua +++ b/tests/run.lua @@ -361,6 +361,101 @@ test("ActionOutcome and DotPayload retain resolved result data", function() same("problem", domain.ActionOutcome.error(destination, "problem").diagnostic) end) +test("Host adapter owns Nvim timers and event registrations", function() + local timer_callbacks = {} + local stopped_timers = {} + local autocmds = {} + local deleted_autocmds = {} + local runtime = { + api = { + nvim_create_augroup = function(name, options) + same("clever_f", name) + truthy(options.clear) + return 7 + end, + nvim_create_autocmd = function(names, options) + local id = #autocmds + 20 + autocmds[#autocmds + 1] = { + id = id, + names = names, + options = options, + } + return id + end, + nvim_del_autocmd = function(id) + deleted_autocmds[#deleted_autocmds + 1] = id + end, + nvim_get_current_win = function() + return 42 + end, + }, + fn = { + timer_start = function(delay, callback) + local id = #timer_callbacks + 1 + timer_callbacks[id] = { delay = delay, callback = callback } + return id + end, + timer_stop = function(id) + stopped_timers[#stopped_timers + 1] = id + end, + }, + } + local adapter = host_adapter.new({ runtime = runtime }) + truthy(adapter:supports_timers()) + + local fired + local first_timer = adapter:start_timer(25, function(identity) + fired = identity + end) + same(25, timer_callbacks[1].delay) + timer_callbacks[1].callback(1) + same(first_timer, fired) + falsy(adapter:stop_timer(first_timer)) + + local second_timer = adapter:start_timer(40, function() end) + truthy(adapter:stop_timer(second_timer)) + falsy(adapter:stop_timer(second_timer)) + list_same({ 2 }, stopped_timers) + + local deliveries = {} + local registration = adapter:register_events( + { "CursorMoved", "TextChanged" }, + function(name, payload) + deliveries[#deliveries + 1] = { + name = name, + buffer = payload.buffer, + window = payload.window, + } + end, + { buffer = 3 } + ) + list_same({ "CursorMoved", "TextChanged" }, autocmds[1].names) + same(3, autocmds[1].options.buffer) + same(7, autocmds[1].options.group) + + local transition = adapter:begin_action_transition() + autocmds[1].options.callback({ + event = "CursorMoved", + buf = 3, + file = "file", + match = "file", + }) + same(0, #deliveries) + adapter:commit_action_transition(transition) + same(1, #deliveries) + same("CursorMoved", deliveries[1].name) + same(3, deliveries[1].buffer) + same(42, deliveries[1].window) + + adapter:deliver_event("TextChanged", { buffer = 3, window = 51 }) + same(2, #deliveries) + same("TextChanged", deliveries[2].name) + same(51, deliveries[2].window) + truthy(adapter:remove_event_registration(registration)) + falsy(adapter:remove_event_registration(registration)) + list_same({ 20 }, deleted_autocmds) +end) + test("Host adapter materializes window-local highlight resources", function() local groups = { Existing = { fg = 7 } } local added = {} |
