diff --git a/tests/rom_importer_ios_save_export_test.lua b/tests/rom_importer_ios_save_export_test.lua new file mode 100644 index 00000000..b55b3ad6 --- /dev/null +++ b/tests/rom_importer_ios_save_export_test.lua @@ -0,0 +1,60 @@ +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 iOS save export") +local eq = S.eq +local check = S.check + +love.system = love.system or {} +local saved = { + createFile = love.system.createFile, + read = love.filesystem.read, + write = love.filesystem.write, +} + +local writes = {} +love.filesystem.read = function(name) + eq(name, "exports/red.sav", "export reads the generated save") + return "save-data" +end +love.filesystem.write = function(name, data) + writes[#writes + 1] = { name = name, data = data } + return true +end + +local createCalls = {} +love.system.createFile = function(name) + createCalls[#createCalls + 1] = name + return true +end + +package.loaded["src.import.SaveFileIO"] = { + exportActiveSlot = function(version) + eq(version, "red", "exports the selected game save") + return true, "exports/red.sav" + end, +} + +local RomImporter = require("src.import.RomImporter") +local ri = setmetatable({ + android = true, + ios = true, + workState = nil, + saveNotice = {}, +}, RomImporter) + +ri:exportSave("red") + +eq(#writes, 1, "stages the save for iOS export") +eq(writes[1].name, "pending_export.sav", "uses the native bridge staging name") +eq(writes[1].data, "save-data", "preserves the exported save data") +eq(#createCalls, 1, "opens the system destination picker") +eq(createCalls[1], "red.sav", "suggests the original save name") +check(ri.saveNotice.red.ok, "reports that the destination picker opened") + +love.system.createFile = saved.createFile +love.filesystem.read = saved.read +love.filesystem.write = saved.write +package.loaded["src.import.SaveFileIO"] = nil + +S.finish()