mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-19 04:06:10 +02:00
skins and skin studio
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
-- Driver: presses Play in the Skin Studio the way the button does, then keeps
|
||||
-- drawing and pumping update so the deferred handoff runs. Regression cover
|
||||
-- for the crash where Play unloaded the studio inside its own draw pass.
|
||||
-- POKEPORT_DRIVER=tests/drivers/skin_studio_play_test.lua love .
|
||||
return function(game)
|
||||
local U = dofile("tests/drivers/util.lua")
|
||||
local Studio = require("src.ui.SkinStudio")
|
||||
|
||||
love.window.setMode(1280, 720, { resizable = true, highdpi = true })
|
||||
U.wait(2)
|
||||
|
||||
local booted, bootVersion = false, nil
|
||||
Studio.load({
|
||||
version = "red",
|
||||
onClose = function() end,
|
||||
onPlay = function(v)
|
||||
-- what main.lua's handler does: unload, then boot
|
||||
Studio.unload()
|
||||
booted, bootVersion = true, v
|
||||
end,
|
||||
})
|
||||
U.wait(3)
|
||||
U.log("loaded skin:", Studio.skin and Studio.skin.id)
|
||||
|
||||
Studio.skinIdField = "play_probe"
|
||||
|
||||
-- press Play exactly as the inspector button does
|
||||
Studio.play()
|
||||
U.log("after play(): pendingPlay =", tostring(Studio.pendingPlay),
|
||||
"skin alive =", tostring(Studio.skin ~= nil), "booted =", tostring(booted))
|
||||
U.log("status:", tostring(Studio.status))
|
||||
|
||||
-- the frame that queued the handoff must still draw
|
||||
local okDraw, errDraw = pcall(Studio.draw)
|
||||
U.log("draw on the click frame:", okDraw, errDraw or "")
|
||||
|
||||
-- now the deferred handoff
|
||||
local okUp, errUp = pcall(Studio.update, 1 / 60)
|
||||
U.log("update handoff:", okUp, errUp or "")
|
||||
U.log("booted =", tostring(booted), "version =", tostring(bootVersion),
|
||||
"skin =", tostring(Studio.skin))
|
||||
|
||||
-- and a draw after teardown, which is what actually crashed before
|
||||
local okAfter, errAfter = pcall(Studio.draw)
|
||||
U.log("draw after teardown:", okAfter, errAfter or "")
|
||||
|
||||
local okUp2 = pcall(Studio.update, 1 / 60)
|
||||
U.log("second update:", okUp2, "booted still once =", tostring(booted))
|
||||
|
||||
if okDraw and okUp and okAfter and booted then
|
||||
U.log("RESULT pass")
|
||||
else
|
||||
U.log("RESULT FAIL")
|
||||
end
|
||||
love.event.quit()
|
||||
while true do coroutine.yield() end
|
||||
end
|
||||
Reference in New Issue
Block a user