mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-16 00:02:23 +02:00
53 lines
1.6 KiB
Lua
53 lines
1.6 KiB
Lua
-- A sandboxed mod may read battery state without receiving love.system and
|
|
-- its process-launching surface.
|
|
|
|
package.path = "./?.lua;./?/init.lua;" .. package.path
|
|
|
|
local T = require("tests.modkit")
|
|
|
|
local FIXTURE = {
|
|
["mods/power_probe/manifest.json"] = [[{
|
|
"id": "power_probe",
|
|
"name": "Power Probe",
|
|
"version": "1.0.0",
|
|
"entry": "main.lua",
|
|
"api": 2
|
|
}]],
|
|
["mods/power_probe/main.lua"] = [[
|
|
local mod = ...
|
|
mod.exports.state, mod.exports.percent = mod.device:powerInfo()
|
|
]],
|
|
}
|
|
|
|
local saved = T.love.system.getPowerInfo
|
|
local calls = 0
|
|
T.love.system.getPowerInfo = function()
|
|
calls = calls + 1
|
|
return "charging", 42, 900
|
|
end
|
|
|
|
local vanilla = T.sdk.loadNone({})
|
|
T.eq(calls, 0, "no mod leaves the device power backend cold")
|
|
vanilla.release()
|
|
|
|
local run = T.sdk.loadMods({ "mods/power_probe" },
|
|
{ fs = T.sdk.memfs(FIXTURE) })
|
|
T.eq(#run.errors, 0,
|
|
"the sandboxed power probe loads clean (" .. tostring(run.errors[1]) .. ")")
|
|
local out = run.loader.exports.power_probe or {}
|
|
T.eq(out.state, "charging", "the public facade reports battery state")
|
|
T.eq(out.percent, 42, "the public facade reports battery percentage")
|
|
T.eq(calls, 1, "one facade read makes one platform call")
|
|
run.release()
|
|
|
|
T.love.system.getPowerInfo = nil
|
|
local unavailable = T.sdk.loadMods({ "mods/power_probe" },
|
|
{ fs = T.sdk.memfs(FIXTURE) })
|
|
out = unavailable.loader.exports.power_probe or {}
|
|
T.eq(out.state, "unknown", "a missing platform backend has a stable state")
|
|
T.eq(out.percent, nil, "a missing platform backend has no invented percentage")
|
|
unavailable.release()
|
|
|
|
T.love.system.getPowerInfo = saved
|
|
T.finish("device_power_info")
|