Files
Towbar/tests/wrecker-timed-action-42.20-spec.lua
2026-08-13 18:59:54 -04:00

55 lines
1.7 KiB
Lua

local failures = 0
local function expect(condition, message)
if not condition then
failures = failures + 1
io.stderr:write("FAIL: " .. message .. "\n")
end
end
package.preload["TimedActions/ISBaseTimedAction"] = function() return true end
ISBaseTimedAction = {}
function ISBaseTimedAction:derive()
local derived = {}
setmetatable(derived, { __index = self })
return derived
end
function ISBaseTimedAction.new(class, character)
local action = { character = character }
setmetatable(action, { __index = class })
return action
end
function ISBaseTimedAction.perform(action)
action.completed = true
end
function ISBaseTimedAction.stop(action)
action.stopped = true
end
dofile("42.20/media/lua/client/TowBar/WreckerTimedAction.lua")
local sent = 0
local valid = true
local function validate() return valid end
local function perform() sent = sent + 1 end
local attach = WreckerTimedAction:new({}, 300, validate, perform, {}, {})
expect(attach.maxTime == 300, "attach duration must be 300 action units")
expect(sent == 0, "constructing an action must not send a command")
attach:perform()
expect(sent == 1 and attach.completed, "valid attach must send once after its timer completes")
local detach = WreckerTimedAction:new({}, 200, validate, perform, {}, {})
expect(detach.maxTime == 200, "detach duration must be 200 action units")
valid = false
detach:perform()
expect(sent == 1, "an invalidated timed action must not send its command")
valid = true
local cancelled = WreckerTimedAction:new({}, 300, validate, perform, {}, {})
cancelled:stop()
expect(cancelled.stopped and sent == 1, "cancelling an action must not send its command")
if failures > 0 then os.exit(1) end
print("PASS: wrecker timed action behavior")