summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJackson Moore <jacksonmoore@tuta.io>2026-09-04 11:15:25 +0200
committerJackson Moore <jacksonmoore@tuta.io>2026-09-04 11:15:25 +0200
commiteef3a3bfd8450f5b273d9c0ede8ee22d0bc08a52 (patch)
treed4dfac761f8e78b870c6aa8f9324b47297541673
parent9e420ee208b1ff52690ce8be554d800d749781f3 (diff)
Isolate explicit direction policy
-rw-r--r--lua/clever_f/repeat_resolver.lua2
-rw-r--r--tests/run.lua35
2 files changed, 36 insertions, 1 deletions
diff --git a/lua/clever_f/repeat_resolver.lua b/lua/clever_f/repeat_resolver.lua
index 5363dea..a5374d6 100644
--- a/lua/clever_f/repeat_resolver.lua
+++ b/lua/clever_f/repeat_resolver.lua
@@ -258,6 +258,7 @@ function M.build_same_direction_request(stored_descriptor, stored_target)
end
M.explicit_same_direction = M.build_same_direction_request
+M.same_direction_request = M.build_same_direction_request
function RepeatResolver:same_direction_request(context)
context = domain.ModeContext.from_full_mode(context)
@@ -282,6 +283,7 @@ function M.build_opposite_direction_request(stored_descriptor, stored_target)
end
M.explicit_opposite_direction = M.build_opposite_direction_request
+M.opposite_direction_request = M.build_opposite_direction_request
function RepeatResolver:opposite_direction_request(context)
context = domain.ModeContext.from_full_mode(context)
diff --git a/tests/run.lua b/tests/run.lua
index 202eb4a..6c55d0c 100644
--- a/tests/run.lua
+++ b/tests/run.lua
@@ -4181,6 +4181,39 @@ test("Encoded explicit targets return a neutral request", function()
same(nil, opposite_request.descriptor)
end)
+test("Explicit requests stay outside fixed-direction policy", function()
+ local _, transitions = fresh_sequence_state()
+ local stored_target = target("a")
+ transitions:BeginAcquisition("n", "F")
+ transitions:CommitAcquiredTarget("n", stored_target)
+
+ local direction_samples = 0
+ local policy_probe = {
+ sample_timeouts = function()
+ return { repeat_timeout_ms = 0 }
+ end,
+ sample_direction = function()
+ direction_samples = direction_samples + 1
+ return { fix_key_direction = true }
+ end,
+ }
+ local resolver = repeat_resolver.new({ policy = policy_probe })
+
+ local same_request = resolver:same_direction_request("n")
+ local opposite_request = resolver:opposite_direction_request("n")
+ same(0, direction_samples)
+ same(domain.Descriptor.FIND_BACKWARD, same_request.descriptor)
+ same(domain.Descriptor.FIND_FORWARD, opposite_request.descriptor)
+ same(stored_target, same_request.target)
+ same(stored_target, opposite_request.target)
+
+ same(
+ domain.Descriptor.FIND_FORWARD,
+ resolver:resolve_primary_direction("F", "f")
+ )
+ same(1, direction_samples)
+end)
+
for _, item in ipairs(tests) do
local ok, failure = xpcall(item.body, debug.traceback)
if not ok then
@@ -4190,4 +4223,4 @@ for _, item in ipairs(tests) do
passed = passed + 1
end
-io.stdout:write(string.format("Phase 9: %d tests passed\n", passed))
+io.stdout:write(string.format("Phase 10: %d tests passed\n", passed))