summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lua/clever_f/repeat_resolver.lua14
-rw-r--r--tests/run.lua17
2 files changed, 29 insertions, 2 deletions
diff --git a/lua/clever_f/repeat_resolver.lua b/lua/clever_f/repeat_resolver.lua
index 2af60bf..32734cb 100644
--- a/lua/clever_f/repeat_resolver.lua
+++ b/lua/clever_f/repeat_resolver.lua
@@ -235,11 +235,21 @@ RepeatResolver.primary_direction = RepeatResolver.resolve_primary_direction
RepeatResolver.effective_primary_descriptor =
RepeatResolver.resolve_primary_direction
+function M.explicit_target(stored_target)
+ if stored_target == nil then
+ return domain.TargetValue.code_fallback(0)
+ end
+ return stored_target
+end
+
function M.build_same_direction_request(stored_descriptor, stored_target)
if stored_descriptor == nil then
return domain.ExplicitRepeatRequest.neutral()
end
- return domain.ExplicitRepeatRequest.new(stored_descriptor, stored_target)
+ return domain.ExplicitRepeatRequest.new(
+ stored_descriptor,
+ M.explicit_target(stored_target)
+ )
end
M.explicit_same_direction = M.build_same_direction_request
@@ -262,7 +272,7 @@ function M.build_opposite_direction_request(stored_descriptor, stored_target)
end
return domain.ExplicitRepeatRequest.new(
domain.Descriptor.swap(stored_descriptor),
- stored_target
+ M.explicit_target(stored_target)
)
end
diff --git a/tests/run.lua b/tests/run.lua
index d360332..11062ac 100644
--- a/tests/run.lua
+++ b/tests/run.lua
@@ -4147,6 +4147,23 @@ test("Missing explicit descriptors return a neutral request", function()
truthy(resolver:opposite_direction_request("n").neutral)
end)
+test("Missing explicit targets use character code zero", function()
+ local _, transitions = fresh_sequence_state()
+ transitions:BeginAcquisition("n", "T")
+ local resolver = repeat_resolver.new()
+
+ local same_request = resolver:same_direction_request("n")
+ local opposite_request = resolver:opposite_direction_request("n")
+ for _, request in ipairs({ same_request, opposite_request }) do
+ falsy(request.neutral)
+ same(domain.TargetKind.CODE_FALLBACK, request.target.kind)
+ same(0, request.target.first_code)
+ same("", request.target.value)
+ end
+ same(domain.Descriptor.TILL_BACKWARD, same_request.descriptor)
+ same(domain.Descriptor.TILL_FORWARD, opposite_request.descriptor)
+end)
+
for _, item in ipairs(tests) do
local ok, failure = xpcall(item.body, debug.traceback)
if not ok then