summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJackson Moore <jacksonmoore@tuta.io>2026-09-04 14:24:35 +0200
committerJackson Moore <jacksonmoore@tuta.io>2026-09-04 14:24:35 +0200
commit4cb3fb0f1532de3465962903a1697339ad3d6159 (patch)
tree952c43a26dd8b114dfacf17ecaa09b2f9b31afbe /tests
parent970db02504aeaf5c392a1bcad2f148734ba6ea48 (diff)
Translate window-local highlights
Diffstat (limited to 'tests')
-rw-r--r--tests/run.lua90
1 files changed, 90 insertions, 0 deletions
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 = {