mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-19 12:15:31 +02:00
skin studio updates, save sync CLOSES #1533
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
package.path = "./?.lua;./?/init.lua;" .. package.path
|
||||
|
||||
local T = require("tests.harness")
|
||||
local check, eq = T.check, T.eq
|
||||
love = love or require("tests.love_stub")
|
||||
|
||||
local SaveData = require("src.core.SaveData")
|
||||
local Save = require("src.core.gen2.Save")
|
||||
|
||||
local function memfs()
|
||||
local files = {}
|
||||
return {
|
||||
files = files,
|
||||
write = function(path, content) files[path] = content return true end,
|
||||
read = function(path) return files[path] end,
|
||||
remove = function(path) files[path] = nil return true end,
|
||||
getInfo = function(path)
|
||||
if files[path] ~= nil then return { type = "file" } end
|
||||
return nil
|
||||
end,
|
||||
}
|
||||
end
|
||||
|
||||
local fs = memfs()
|
||||
local seed = SaveData.defaultOptions()
|
||||
seed.touchControls = { enabled = true, skin = "gb_anim" }
|
||||
seed.haptics = "off"
|
||||
seed[Save.OPTIONS_KEY] = { textSpeed = "FAST", touchControls = { enabled = false } }
|
||||
check(SaveData.saveOptions(seed, fs) ~= nil, "seed write lands")
|
||||
|
||||
local opts = Save.loadOptions(fs)
|
||||
eq(opts.touchControls and opts.touchControls.skin, "gb_anim",
|
||||
"gold sees the skin the launcher picked")
|
||||
eq(opts.touchControls.enabled, true, "top-level touchControls wins over the gold block")
|
||||
eq(opts.haptics, "off", "top-level haptics wins over the gold default")
|
||||
eq(opts.textSpeed, "FAST", "gold-block keys still merge")
|
||||
|
||||
local fs2 = memfs()
|
||||
fs2.files["options.lua"] =
|
||||
"return { gold = { touchControls = { enabled = false } } }"
|
||||
local opts2 = Save.loadOptions(fs2)
|
||||
eq(opts2.touchControls and opts2.touchControls.enabled, true,
|
||||
"shared touchControls (default-folded) wins over a stale gold-block copy")
|
||||
|
||||
local fs3 = memfs()
|
||||
SaveData.saveOptions(SaveData.defaultOptions(), fs3)
|
||||
local gopts = Save.loadOptions(fs3)
|
||||
gopts.touchControls = { enabled = true, skin = "tv_crt" }
|
||||
gopts.haptics = "strong"
|
||||
gopts.textSpeed = "SLOW"
|
||||
check(Save.saveOptions(gopts, fs3), "gold options write lands")
|
||||
|
||||
local file = SaveData.loadOptions(fs3)
|
||||
eq(file.touchControls and file.touchControls.skin, "tv_crt",
|
||||
"gold's touch pick lands on the shared top-level key")
|
||||
eq(file.haptics, "strong", "gold's haptics lands on the shared top-level key")
|
||||
eq(file[Save.OPTIONS_KEY].touchControls, nil, "gold block no longer shadows touchControls")
|
||||
eq(file[Save.OPTIONS_KEY].haptics, nil, "gold block no longer shadows haptics")
|
||||
eq(file[Save.OPTIONS_KEY].textSpeed, "SLOW", "gold-only keys stay in the gold block")
|
||||
|
||||
local g1 = Save.loadOptions(fs3)
|
||||
eq(g1.touchControls.skin, "tv_crt", "hoisted value round-trips back into gold")
|
||||
|
||||
local TouchSkin = require("src.core.TouchSkin")
|
||||
local Chrome = require("src.ui.gen2.Chrome")
|
||||
|
||||
local savedViewport = TouchSkin.viewport
|
||||
TouchSkin.viewport = function() return nil end
|
||||
eq(Chrome.fitScale(640, 576), 4, "no cutout: integer fit against the window")
|
||||
local ox, oy = Chrome.fitOrigin(640, 576)
|
||||
eq(ox, 0, "no cutout: centred x")
|
||||
eq(oy, 0, "no cutout: centred y")
|
||||
|
||||
TouchSkin.viewport = function(w, h) return w * 0.25, h * 0.125, w * 0.5, h * 0.5 end
|
||||
eq(Chrome.fitScale(640, 576), 2, "cutout: integer fit against the cutout rect")
|
||||
local cx, cy = Chrome.fitOrigin(640, 576)
|
||||
eq(cx, 160 + (320 - 320) / 2, "cutout: origin starts at the cutout")
|
||||
eq(cy, 72 + math.floor((288 - 288) / 2), "cutout: origin starts at the cutout y")
|
||||
|
||||
TouchSkin.viewport = function() error("boom") end
|
||||
eq(Chrome.fitScale(640, 576), 4, "a throwing viewport degrades to the window fit")
|
||||
|
||||
TouchSkin.viewport = savedViewport
|
||||
|
||||
T.finish("gen2_touch_skin_options")
|
||||
Reference in New Issue
Block a user