55 lines
1.7 KiB
Lua
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")
|