diff options
| -rw-r--r-- | lua/clever_f/sequence_coordinator.lua | 14 | ||||
| -rw-r--r-- | tests/run.lua | 21 |
2 files changed, 35 insertions, 0 deletions
diff --git a/lua/clever_f/sequence_coordinator.lua b/lua/clever_f/sequence_coordinator.lua index f3ae7d7..7a23eab 100644 --- a/lua/clever_f/sequence_coordinator.lua +++ b/lua/clever_f/sequence_coordinator.lua @@ -511,6 +511,13 @@ function SequenceCoordinator:resolve_explicit_same() return self:resolve_explicit("explicit_same", "same_direction_request") end +function SequenceCoordinator:resolve_explicit_opposite() + return self:resolve_explicit( + "explicit_opposite", + "opposite_direction_request" + ) +end + function SequenceCoordinator:primary(value) local descriptor = self:validate_primary_descriptor(value) local invocation = self:read_primary_invocation() @@ -554,6 +561,13 @@ end SequenceCoordinator.RepeatSameDirection = SequenceCoordinator.repeat_same_direction +function SequenceCoordinator:repeat_opposite_direction() + return self:resolve_explicit_opposite() +end + +SequenceCoordinator.RepeatOppositeDirection = + SequenceCoordinator.repeat_opposite_direction + function M.new(options) return SequenceCoordinator.new(options) end diff --git a/tests/run.lua b/tests/run.lua index db19ffa..1afe2c8 100644 --- a/tests/run.lua +++ b/tests/run.lua @@ -7730,6 +7730,27 @@ test("Same-direction explicit coordination reads current-context state", functio same(visual_target, resolution.request.target) end) +test("Opposite explicit coordination swaps current-context descriptor", function() + for _, stored in ipairs({ "f", "F", "t", "T" }) do + local _, transitions = fresh_sequence_state() + local stored_target = target("x") + transitions:BeginAcquisition("n", stored) + transitions:CommitAcquiredTarget("n", stored_target) + local host = MemoryHost.new({ + configuration = { fix_key_direction = true }, + count = 3, + }) + + local resolution = sequence_coordinator.new({ host = host }) + :repeat_opposite_direction() + + same("explicit_opposite", resolution.kind) + same(domain.Descriptor.swap(stored), resolution.request.descriptor) + same(stored_target, resolution.request.target) + same(3, resolution.invocation.count.value) + end +end) + for _, item in ipairs(tests) do local ok, failure = xpcall(item.body, debug.traceback) if not ok then |
