diff options
Diffstat (limited to 'tests/run.lua')
| -rw-r--r-- | tests/run.lua | 71 |
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)) |
