summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lua/clever_f/acquisition_service.lua12
-rw-r--r--tests/run.lua38
2 files changed, 49 insertions, 1 deletions
diff --git a/lua/clever_f/acquisition_service.lua b/lua/clever_f/acquisition_service.lua
index 37e13cf..a8471f6 100644
--- a/lua/clever_f/acquisition_service.lua
+++ b/lua/clever_f/acquisition_service.lua
@@ -144,6 +144,7 @@ function AcquisitionResult.new(request, options)
previous_target_source = options.previous_target_source,
cached_target = options.cached_target,
missing_previous_input = options.missing_previous_input == true,
+ acquisition_time_ms = options.acquisition_time_ms,
completed = outcome ~= nil or target ~= nil,
}
return result
@@ -669,9 +670,18 @@ function AcquisitionService:acquire(descriptor, context, position, count, macro_
end
end
scope:set_resolved_target(target)
- record.transitions:CommitAcquiredTarget(request.context, target)
+ local acquisition_time_ms
+ if record.policy:sample_timeouts().repeat_timeout_ms > 0 then
+ acquisition_time_ms = record.host:read_time_ms()
+ end
+ record.transitions:CommitAcquiredTarget(
+ request.context,
+ target,
+ acquisition_time_ms
+ )
return AcquisitionResult.new(request, {
target = target,
+ acquisition_time_ms = acquisition_time_ms,
previous_input_trigger = trigger,
previous_target_source = scope.previous_target_source,
cached_target = scope.cached_target,
diff --git a/tests/run.lua b/tests/run.lua
index 603baad..fa9930e 100644
--- a/tests/run.lua
+++ b/tests/run.lua
@@ -5298,6 +5298,44 @@ test("Missing previous input preserves cursor and emits exact diagnostic", funct
)
end)
+test("Positive repeat timeout stores acquisition time", function()
+ local state, transitions = fresh_sequence_state()
+ transitions:SetRepeatTimestamp(17)
+ local host = MemoryHost.new({
+ time_ms = 84.75,
+ configuration = {
+ mark_cursor = false,
+ repeat_timeout_ms = 50,
+ },
+ input_packets = { { kind = "text", text = "a" } },
+ })
+ local result = acquisition_service.new({
+ host = host,
+ transitions = transitions,
+ }):acquire("f", "n", domain.Position.new(1, 1), nil, nil)
+ same(84.75, result.acquisition_time_ms)
+ same(84.75, state.repeat_timestamp_ms)
+
+ fresh_sequence_state()
+ transitions:SetRepeatTimestamp(17)
+ local zero_host = MemoryHost.new({
+ configuration = {
+ mark_cursor = false,
+ repeat_timeout_ms = 0,
+ },
+ input_packets = { { kind = "text", text = "a" } },
+ })
+ local zero_result = acquisition_service.new({
+ host = zero_host,
+ transitions = transitions,
+ }):acquire("f", "n", domain.Position.new(1, 1), nil, nil)
+ same(nil, zero_result.acquisition_time_ms)
+ same(17, state.repeat_timestamp_ms)
+ for _, operation in ipairs(zero_host:operations()) do
+ falsy(operation.operation == "read_time_ms")
+ end
+end)
+
for _, item in ipairs(tests) do
local ok, failure = xpcall(item.body, debug.traceback)
if not ok then