mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-13 00:40:59 +02:00
3069b2e2a9
* new launcher and save converts and pipeline * fixing bugs
111 lines
3.9 KiB
Lua
111 lines
3.9 KiB
Lua
-- #167: Android second-ROM Choose must open the picker (or import a pending
|
|
-- opposite cart), not re-import a leftover picked_rom.gb from the first game.
|
|
-- Self-contained: `luajit tests/rom_importer_android_pick_test.lua`; also
|
|
-- dofile'd by tests/run_tests.lua.
|
|
package.path = "./?.lua;./?/init.lua;" .. package.path
|
|
if not _G.love then _G.love = require("tests.love_stub") end
|
|
|
|
local S = require("tests.harness").suite("rom importer android pick")
|
|
local eq = S.eq
|
|
local check = S.check
|
|
|
|
local GameVersion = require("src.core.GameVersion")
|
|
local RomImporter = require("src.import.RomImporter")
|
|
|
|
local MiB = 1024 * 1024
|
|
local redData = string.rep("R", MiB)
|
|
local blueData = string.rep("B", MiB)
|
|
|
|
-- Map our fake 1 MiB blobs onto the real Red/Blue SHA-1 ids without needing
|
|
-- a crypto library in the headless stub.
|
|
love.data = love.data or {}
|
|
love.system = love.system or {}
|
|
-- the love stub is shared with every later suite in run_tests.lua;
|
|
-- restore whatever this file overrides
|
|
local saved = {
|
|
hash = love.data.hash,
|
|
encode = love.data.encode,
|
|
getSaveDirectory = love.filesystem.getSaveDirectory,
|
|
getOS = love.system.getOS,
|
|
pickFile = love.system.pickFile,
|
|
}
|
|
love.data.hash = function(_, data)
|
|
return { tag = data:sub(1, 1) }
|
|
end
|
|
love.data.encode = function(_, _, digest)
|
|
if type(digest) == "table" and digest.tag == "R" then
|
|
return GameVersion.info("red").sha1
|
|
end
|
|
if type(digest) == "table" and digest.tag == "B" then
|
|
return GameVersion.info("blue").sha1
|
|
end
|
|
return "0000000000000000000000000000000000000000"
|
|
end
|
|
|
|
love.filesystem.getSaveDirectory = function() return "/tmp/pokemon-love2d" end
|
|
|
|
local pickCalls = 0
|
|
love.system.getOS = function() return "Android" end
|
|
love.system.pickFile = function()
|
|
pickCalls = pickCalls + 1
|
|
return true
|
|
end
|
|
|
|
local function freshImporter(ready)
|
|
return setmetatable({
|
|
android = true,
|
|
workState = nil,
|
|
ready = {
|
|
red = ready.red and true or false,
|
|
blue = ready.blue and true or false,
|
|
},
|
|
notice = nil,
|
|
chooseVersion = nil,
|
|
startData = function(self, data, displayName)
|
|
self._started = { data = data, name = displayName }
|
|
end,
|
|
}, RomImporter)
|
|
end
|
|
|
|
-- Stale Red pick still on disk, Red already ready → Choose Blue opens picker.
|
|
love.filesystem.write("picked_rom.gb", redData)
|
|
pickCalls = 0
|
|
local ri = freshImporter({ red = true, blue = false })
|
|
ri:choose("blue")
|
|
eq(pickCalls, 1, "choose opens picker when only an already-imported ROM remains")
|
|
eq(ri._started, nil, "choose does not re-import the stale Red pick")
|
|
|
|
-- Same leftover must not re-import on focus either (picker cancelled).
|
|
ri = freshImporter({ red = true, blue = false })
|
|
ri:focus(true)
|
|
eq(ri._started, nil, "focus ignores already-imported leftover picked_rom.gb")
|
|
|
|
-- A pending Blue cart in the save dir imports without needing the picker.
|
|
love.filesystem.write("pokemon_blue.gb", blueData)
|
|
pickCalls = 0
|
|
ri = freshImporter({ red = true, blue = false })
|
|
ri:choose("blue")
|
|
eq(pickCalls, 0, "choose imports a pending opposite ROM from the save dir")
|
|
check(ri._started ~= nil, "choose started import for pending Blue")
|
|
eq(ri._started.name, "pokemon_blue.gb", "choose picked the pending Blue file")
|
|
eq(ri._started.data, blueData, "choose passed Blue ROM bytes")
|
|
|
|
-- focus after SAF overwrite: pending Blue becomes importable.
|
|
love.filesystem.write("picked_rom.gb", blueData)
|
|
ri = freshImporter({ red = true, blue = false })
|
|
ri:focus(true)
|
|
check(ri._started ~= nil, "focus imports pending Blue after picker returns")
|
|
eq(ri._started.name, "picked_rom.gb", "focus reads the SAF drop filename")
|
|
|
|
-- Cleanup so other suites sharing the stub do not see leftover .gb files
|
|
-- or this file's function stubs.
|
|
love.filesystem.remove("picked_rom.gb")
|
|
love.filesystem.remove("pokemon_blue.gb")
|
|
love.data.hash = saved.hash
|
|
love.data.encode = saved.encode
|
|
love.filesystem.getSaveDirectory = saved.getSaveDirectory
|
|
love.system.getOS = saved.getOS
|
|
love.system.pickFile = saved.pickFile
|
|
|
|
S.finish()
|