diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/run.lua | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/tests/run.lua b/tests/run.lua index 97fbacb..957a4bb 100644 --- a/tests/run.lua +++ b/tests/run.lua @@ -3340,6 +3340,41 @@ test("Complete command execution commits direction and landing", function() truthy(state.moved_forward_initialized) end) +test("Visual calculation retains the active selection", function() + local origin = domain.Position.new(1, 1) + local active = domain.Selection.active( + domain.SelectionKind.CHARACTER, + origin, + origin, + domain.SelectionOption.INCLUSIVE + ) + local host = MemoryHost.new({ + buffer_lines = { "abc" }, + cursor = origin, + mode = "v", + selection = active, + }) + local observed_selection + local engine = { + calculate = function(_, _, calculation_origin) + observed_selection = host:read_selection() + return domain.SearchOutcome.boundary_before_any(calculation_origin) + end, + } + local plan = motion_plan.build( + target_plan.build(target("z"), matching_policy()), + "f" + ) + local outcome = motion_executor.new({ + host = host, + destination_engine = engine, + }):execute(text_topology.from_host(host), "v", plan, 1, true) + + same(domain.ActionKind.FAILED_SEARCH, outcome.kind) + same(active, observed_selection) + same(active, host:read_selection()) +end) + for _, item in ipairs(tests) do local ok, failure = xpcall(item.body, debug.traceback) if not ok then |
