-- Content gate for Switch transfer runbooks (XFER-01..08). -- Self-contained: luajit tests/switch_transfer_docs_test.lua local T = require("tests.harness") local check = T.check local function read(path) local f, err = io.open(path, "r") if not f then error("cannot read " .. path .. ": " .. tostring(err)) end local s = f:read("*a") f:close() return s end local function mustContain(body, needle, label) check(body:find(needle, 1, true) ~= nil, label .. " must contain " .. string.format("%q", needle)) end local function mustNotContain(body, needle, label) check(body:find(needle, 1, true) == nil, label .. " must not contain " .. string.format("%q", needle)) end local transfer = read("docs/switch-transfer.md") mustContain(transfer, "MTP", "transfer") mustContain(transfer, "Hekate UMS", "transfer") mustContain(transfer, "FTP", "transfer") mustContain(transfer, "sdmc:/switch/gen1recomp/", "transfer") mustContain(transfer, "imports/", "transfer") mustContain(transfer, "imports/mods/", "transfer") mustContain(transfer, "1: SD Card", "transfer") mustContain(transfer, "Scan again", "transfer") mustContain(transfer, "one contributor workflow", "transfer") mustContain(transfer, "Linux", "transfer") mustContain(transfer, "Windows", "transfer") mustContain(transfer, "macOS", "transfer") mustContain(transfer, "title override", "transfer") mustContain(transfer, "Applet Mode", "transfer") mustContain(transfer, "Exit MTP", "transfer") mustContain(transfer, "nxlink", "transfer") mustContain(transfer, "deferred", "transfer") mustContain(transfer, "gvfs-mtp", "transfer") mustContain(transfer, "Portable Devices", "transfer") mustContain(transfer, "MTP USB Device", "transfer") mustContain(transfer, "AppleDouble", "transfer") mustContain(transfer, "card reader", "transfer") mustContain(transfer, "Canonical methods", "transfer") mustContain(transfer, "OpenMTP", "transfer") mustContain(transfer, "only one", "transfer") mustContain(transfer, "USB-C", "transfer") -- Per-OS SD/FTP fallback when MTP is flaky (XFER-05 AC) mustContain(transfer, "If MTP is unavailable or flaky on Linux", "transfer") mustContain(transfer, "If MTP is unavailable or flaky on Windows", "transfer") mustContain(transfer, "Joy-Con display chords (stock engine)", "transfer") mustNotContain(transfer, "switch-development", "transfer") mustNotContain(transfer, "switch-hardware-evidence", "transfer") local install = read("docs/switch-install.md") local build = read("docs/switch-build.md") mustContain(install, "switch-transfer.md", "install") mustContain(install, "## Community mods", "install") mustContain(install, "Select + **A**", "install") mustContain(install, "Select + **L**", "install") mustContain(install, "COLORS", "install") mustContain(install, "TILT", "install") mustContain(install, "GBC FX", "install") mustContain(install, "PERFORMANCE", "install") mustContain(install, "Stock engine effect", "install") mustContain(install, "## Limitations", "install") mustContain(install, "Title override required", "install") mustNotContain(install, "VoxelMod", "install") mustNotContain(install, "switch-development", "install") mustContain(build, "switch-transfer.md", "build") mustContain(build, "nxlink", "build") mustNotContain(build, "switch-development", "build") mustNotContain(build, "switch-hardware-evidence", "build") T.finish("switch_transfer_docs_test")