mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-12 16:31:05 +02:00
47 lines
1.6 KiB
Lua
47 lines
1.6 KiB
Lua
-- End-game persistence must honor a Game:writeSave veto so an ephemeral tool
|
|
-- session cannot overwrite the player's real save while THE END is on screen.
|
|
|
|
package.path = "./?.lua;./?/init.lua;" .. package.path
|
|
if not _G.love then _G.love = require("tests.love_stub") end
|
|
|
|
local T = require("tests.modkit")
|
|
local Commands = require("src.script.Commands")
|
|
local SaveData = require("src.core.SaveData")
|
|
local Screens = require("src.ui.Screens")
|
|
|
|
local originalPush, originalSave = Screens.push, SaveData.save
|
|
local screens = {}
|
|
local directWrites = 0
|
|
|
|
Screens.push = function(_, id, onDone, onTheEnd)
|
|
screens[id] = { onDone = onDone, onTheEnd = onTheEnd }
|
|
return screens[id]
|
|
end
|
|
SaveData.save = function()
|
|
directWrites = directWrites + 1
|
|
return true
|
|
end
|
|
|
|
local save = SaveData.newGame()
|
|
save.party = {}
|
|
local game = {
|
|
data = { field = { boot = {} } },
|
|
save = save,
|
|
writeSave = function() return false end,
|
|
}
|
|
local runner = { yield = function() coroutine.yield() end }
|
|
local ctx = { game = game, save = save, runner = runner }
|
|
local co = coroutine.create(function() Commands.record_hall_of_fame(ctx) end)
|
|
local ok, err = coroutine.resume(co)
|
|
T.check(ok, "Hall of Fame command reaches its UI yield: " .. tostring(err))
|
|
T.check(screens.HallOfFame ~= nil, "Hall of Fame induction was requested")
|
|
|
|
screens.HallOfFame.onDone()
|
|
T.check(screens.Credits ~= nil, "credits were requested after induction")
|
|
screens.Credits.onTheEnd()
|
|
T.eq(directWrites, 0,
|
|
"a vetoed Hall of Fame autosave performs no fallback disk write")
|
|
|
|
Screens.push, SaveData.save = originalPush, originalSave
|
|
T.finish("tool_save_safety")
|