summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJackson Moore <jacksonmoore@tuta.io>2026-09-04 10:51:22 +0200
committerJackson Moore <jacksonmoore@tuta.io>2026-09-04 10:51:22 +0200
commit9c02e7c3331416c22927ec1a78fc9a5724e10427 (patch)
tree4cc5b9b323a2a85806b84a64da090b100b48cc53 /tests
parent93e840d9f95c8500ccebcbfe6b09d5fa2a191040 (diff)
Apply Visual motion endpoints
Diffstat (limited to 'tests')
-rw-r--r--tests/run.lua44
1 files changed, 44 insertions, 0 deletions
diff --git a/tests/run.lua b/tests/run.lua
index 957a4bb..725fe98 100644
--- a/tests/run.lua
+++ b/tests/run.lua
@@ -3375,6 +3375,50 @@ test("Visual calculation retains the active selection", function()
same(active, host:read_selection())
end)
+test("Visual execution applies exact endpoints for every selection kind", function()
+ local origin = domain.Position.new(1, 1)
+ local destination = domain.Position.new(1, 3)
+ local cases = {
+ { mode = "v", kind = domain.SelectionKind.CHARACTER },
+ { mode = "V", kind = domain.SelectionKind.LINE },
+ { mode = string.char(0x16), kind = domain.SelectionKind.BLOCK },
+ }
+
+ for _, case in ipairs(cases) do
+ local host = MemoryHost.new({
+ buffer_lines = { "abx" },
+ cursor = origin,
+ mode = case.mode,
+ selection = domain.Selection.active(
+ case.kind,
+ origin,
+ origin,
+ domain.SelectionOption.INCLUSIVE
+ ),
+ })
+ local plan = motion_plan.build(
+ target_plan.build(target("x"), matching_policy()),
+ "f"
+ )
+ local outcome = motion_executor.new(host):execute(
+ text_topology.from_host(host),
+ case.mode,
+ plan,
+ 1,
+ true
+ )
+ local selection = host:read_selection()
+
+ same(domain.ActionKind.MOVEMENT, outcome.kind, case.mode)
+ same(destination, outcome.position, case.mode)
+ truthy(selection.active, case.mode)
+ same(case.kind, selection.kind, case.mode)
+ same(origin, selection.anchor, case.mode)
+ same(destination, selection.focus, case.mode)
+ same(destination, host:read_cursor(), case.mode)
+ end
+end)
+
for _, item in ipairs(tests) do
local ok, failure = xpcall(item.body, debug.traceback)
if not ok then