summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lua/clever_f/repeat_resolver.lua21
-rw-r--r--tests/run.lua17
2 files changed, 30 insertions, 8 deletions
diff --git a/lua/clever_f/repeat_resolver.lua b/lua/clever_f/repeat_resolver.lua
index 32734cb..5363dea 100644
--- a/lua/clever_f/repeat_resolver.lua
+++ b/lua/clever_f/repeat_resolver.lua
@@ -242,14 +242,19 @@ function M.explicit_target(stored_target)
return stored_target
end
-function M.build_same_direction_request(stored_descriptor, stored_target)
- if stored_descriptor == nil then
+local function build_explicit_request(descriptor, stored_target)
+ if descriptor == nil then
return domain.ExplicitRepeatRequest.neutral()
end
- return domain.ExplicitRepeatRequest.new(
- stored_descriptor,
- M.explicit_target(stored_target)
- )
+ local target = M.explicit_target(stored_target)
+ if target.first_code == 0x80 then
+ return domain.ExplicitRepeatRequest.neutral()
+ end
+ return domain.ExplicitRepeatRequest.new(descriptor, target)
+end
+
+function M.build_same_direction_request(stored_descriptor, stored_target)
+ return build_explicit_request(stored_descriptor, stored_target)
end
M.explicit_same_direction = M.build_same_direction_request
@@ -270,9 +275,9 @@ function M.build_opposite_direction_request(stored_descriptor, stored_target)
if stored_descriptor == nil then
return domain.ExplicitRepeatRequest.neutral()
end
- return domain.ExplicitRepeatRequest.new(
+ return build_explicit_request(
domain.Descriptor.swap(stored_descriptor),
- M.explicit_target(stored_target)
+ stored_target
)
end
diff --git a/tests/run.lua b/tests/run.lua
index 11062ac..202eb4a 100644
--- a/tests/run.lua
+++ b/tests/run.lua
@@ -4164,6 +4164,23 @@ test("Missing explicit targets use character code zero", function()
same(domain.Descriptor.TILL_FORWARD, opposite_request.descriptor)
end)
+test("Encoded explicit targets return a neutral request", function()
+ local _, transitions = fresh_sequence_state()
+ local special_target = domain.TargetValue.special_key(
+ string.char(0x80, 0xfd, 0x01)
+ )
+ transitions:BeginAcquisition("n", "f")
+ transitions:CommitAcquiredTarget("n", special_target)
+ local resolver = repeat_resolver.new()
+
+ local same_request = resolver:same_direction_request("n")
+ local opposite_request = resolver:opposite_direction_request("n")
+ truthy(same_request.neutral)
+ truthy(opposite_request.neutral)
+ same(nil, same_request.target)
+ same(nil, opposite_request.descriptor)
+end)
+
for _, item in ipairs(tests) do
local ok, failure = xpcall(item.body, debug.traceback)
if not ok then