From 4cb3fb0f1532de3465962903a1697339ad3d6159 Mon Sep 17 00:00:00 2001 From: Jackson Moore Date: Fri, 4 Sep 2026 14:24:35 +0200 Subject: Translate window-local highlights --- tests/run.lua | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) (limited to 'tests/run.lua') diff --git a/tests/run.lua b/tests/run.lua index 8c3c771..64c12d6 100644 --- a/tests/run.lua +++ b/tests/run.lua @@ -361,6 +361,96 @@ test("ActionOutcome and DotPayload retain resolved result data", function() same("problem", domain.ActionOutcome.error(destination, "problem").diagnostic) end) +test("Host adapter materializes window-local highlight resources", function() + local groups = { Existing = { fg = 7 } } + local added = {} + local deleted = {} + local next_match = 1000 + local runtime = { + api = { + nvim_get_hl = function(_, options) + return vim.deepcopy(groups[options.name] or {}) + end, + nvim_set_hl = function(_, name, definition) + groups[name] = vim.deepcopy(definition) + end, + }, + fn = { + hlexists = function(name) + return groups[name] ~= nil and 1 or 0 + end, + matchaddpos = function(group, positions, priority, id, options) + local match_id = next_match + next_match = next_match + 1 + added[#added + 1] = { + group = group, + positions = positions, + priority = priority, + id = id, + window = options.window, + match_id = match_id, + } + return match_id + end, + matchdelete = function(match_id, window) + deleted[#deleted + 1] = { match_id = match_id, window = window } + return 0 + end, + }, + } + local adapter = host_adapter.new({ runtime = runtime }) + + same(7, adapter:read_highlight_group("Existing").fg) + same(nil, adapter:read_highlight_group("Missing")) + falsy(adapter:define_highlight_group( + "Existing", + { guifg = "red" }, + { default = true } + )) + truthy(adapter:define_highlight_group("CleverFDefaultLabel", { + guifg = "red", + guibg = "NONE", + gui = { bold = true, underline = true }, + ctermfg = "red", + ctermbg = "NONE", + cterm = { bold = true, underline = true }, + }, { default = true })) + same("red", groups.CleverFDefaultLabel.fg) + same("NONE", groups.CleverFDefaultLabel.bg) + truthy(groups.CleverFDefaultLabel.bold) + truthy(groups.CleverFDefaultLabel.underline) + truthy(groups.CleverFDefaultLabel.default) + + local cursor = adapter:create_highlight({ + group = "CleverFCursor", + window = 42, + position = domain.Position.new(3, 5), + priority = "high", + }) + local character = adapter:create_highlight({ + group = "CleverFChar", + window = 51, + positions = {}, + priority = "ordinary", + }) + same(2, #added) + list_same({ 3, 5 }, added[1].positions[1]) + same(100, added[1].priority) + same(42, added[1].window) + list_same({ 0 }, added[2].positions[1]) + same(10, added[2].priority) + same(51, added[2].window) + + truthy(adapter:remove_highlight(cursor)) + truthy(adapter:remove_highlight(character)) + falsy(adapter:remove_highlight(character)) + same(2, #deleted) + same(1000, deleted[1].match_id) + same(42, deleted[1].window) + same(1001, deleted[2].match_id) + same(51, deleted[2].window) +end) + test("Host adapter translates typed action outcomes to Nvim effects", function() local effects = {} local runtime = { -- cgit v1.2.3