Files

81 lines
2.6 KiB
Lua
Raw Permalink Normal View History

-- Standalone test of accessibility/history.lua coalescing + review cursor.
package.path = "./?.lua;" .. package.path
-- Stub the speech module before history requires it.
local spoken = {}
package.loaded["accessibility.speech"] = {
normalise = function(t)
if t == nil then return nil end
t = tostring(t):gsub("[\r\n]+", ". "):gsub("%s+", " "):gsub("^%s+",""):gsub("%s+$","")
if t == "" then return nil end
return t
end,
interrupt = function(t) spoken[#spoken+1] = t end,
say = function(t) spoken[#spoken+1] = t end,
}
love = { system = { setClipboardText = function() end } }
local history = require("accessibility.history")
local failures = 0
local function check(label, got, want)
if got ~= want then
failures = failures + 1
print(string.format("FAIL %-42s got=%q want=%q", label, tostring(got), tostring(want)))
else
print(string.format("ok %-42s %s", label, tostring(got)))
end
end
-- 1. plain append
check("first append", history.append("You hit the rat."), "You hit the rat.")
-- 2. coalescing matches the game's (xN) rendering
history.append("You feel cold.")
check("repeat -> x2", history.append("You feel cold."), "You feel cold. (x2)")
check("repeat -> x3", history.append("You feel cold."), "You feel cold. (x3)")
check("entry count after folds", history.count(), 2)
-- 3. a different message breaks the fold
check("new message", history.append("The rat dies."), "The rat dies.")
check("entry count", history.count(), 3)
-- 4. normalisation: newlines collapse, empties rejected
check("nil rejected", history.append(nil), nil)
check("blank rejected", history.append(" "), nil)
check("newlines collapsed", history.append("a\nb"), "a. b")
-- 5. review cursor
spoken = {}
history.reviewLast()
check("reviewLast speaks newest", spoken[#spoken], "a. b. Last message")
spoken = {}
history.reviewPrevious()
check("reviewPrevious steps back", spoken[#spoken], "The rat dies.")
spoken = {}
history.reviewFirst()
check("reviewFirst", spoken[#spoken], "You hit the rat. First message")
spoken = {}
history.reviewPrevious()
check("clamps at first", spoken[#spoken], "You hit the rat. First message")
-- 6. cursor holds still while new lines arrive (the key requirement)
history.reviewFirst()
history.append("Something new happened.")
spoken = {}
history.reviewNext()
check("cursor not yanked to tail", spoken[#spoken], "You feel cold. (x3)")
-- 7. empty history
history.clear()
spoken = {}
history.reviewNext()
check("empty history", spoken[#spoken], "No messages")
check("count after clear", history.count(), 0)
print(failures == 0 and "\nALL PASS" or ("\n" .. failures .. " FAILURE(S)"))
os.exit(failures == 0 and 0 or 1)