mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-19 12:15:31 +02:00
86 lines
3.3 KiB
Lua
86 lines
3.3 KiB
Lua
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")
|