summaryrefslogtreecommitdiff
path: root/tests/run.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tests/run.lua')
-rw-r--r--tests/run.lua71
1 files changed, 71 insertions, 0 deletions
diff --git a/tests/run.lua b/tests/run.lua
index 87b6e73..8c3c771 100644
--- a/tests/run.lua
+++ b/tests/run.lua
@@ -14,6 +14,7 @@ local composition_root = require("clever_f.composition_root")
local destination_engine = require("clever_f.destination_engine")
local direct_preview_planner = require("clever_f.direct_preview_planner")
local feedback_service = require("clever_f.feedback_service")
+local host_adapter = require("clever_f.host_adapter")
local case_policy = require("clever_f.case_policy")
local policy = require("clever_f.policy")
local repeat_resolver = require("clever_f.repeat_resolver")
@@ -360,6 +361,76 @@ test("ActionOutcome and DotPayload retain resolved result data", function()
same("problem", domain.ActionOutcome.error(destination, "problem").diagnostic)
end)
+test("Host adapter translates typed action outcomes to Nvim effects", function()
+ local effects = {}
+ local runtime = {
+ api = {
+ nvim_feedkeys = function(keys, mode, escape_csi)
+ effects[#effects + 1] = {
+ kind = "feedkeys",
+ keys = keys,
+ mode = mode,
+ escape_csi = escape_csi,
+ }
+ end,
+ },
+ keycode = function(key)
+ same("<Esc>", key)
+ return string.char(27)
+ end,
+ log = { levels = { ERROR = 4 } },
+ notify = function(text, level, options)
+ effects[#effects + 1] = {
+ kind = "diagnostic",
+ text = text,
+ level = level,
+ title = options.title,
+ }
+ end,
+ }
+ local adapter = host_adapter.new({ runtime = runtime })
+ local position = domain.Position.new(1, 1)
+ local complete = domain.SearchOutcome.complete(
+ domain.Position.new(1, 2),
+ 1
+ )
+ local failed = domain.SearchOutcome.boundary_before_any(position)
+ local no_effect = {
+ domain.ActionOutcome.neutral(position),
+ domain.ActionOutcome.empty(position),
+ domain.ActionOutcome.from_search(complete, "f"),
+ domain.ActionOutcome.from_search(failed, "f"),
+ }
+
+ for _, outcome in ipairs(no_effect) do
+ same(
+ host_adapter.ActionEffect.NONE,
+ adapter:translate_action_outcome(outcome)
+ )
+ end
+ same(0, #effects)
+
+ same(
+ host_adapter.ActionEffect.ESCAPE,
+ adapter:translate_action_outcome(domain.ActionOutcome.escape(position))
+ )
+ same("feedkeys", effects[1].kind)
+ same(string.char(27), effects[1].keys)
+ same("n", effects[1].mode)
+ falsy(effects[1].escape_csi)
+
+ same(
+ host_adapter.ActionEffect.ERROR,
+ adapter:translate_action_outcome(
+ domain.ActionOutcome.error(position, "adapter error")
+ )
+ )
+ same("diagnostic", effects[2].kind)
+ same("adapter error", effects[2].text)
+ same(4, effects[2].level)
+ same("clever-f", effects[2].title)
+end)
+
test("Capability contract reports every semantic method", function()
local host = MemoryHost.new()
same(host, capabilities.assert_implements(host))