Files
libretro/tests/test_target_systems.py
T
Abdessamad Derraz 057fd2d0f6 fix: isolate every test module however it runs
tests/__init__.py keeps a run offline, its scratch under tmp/ and its
installer cache its own, but only discover -s tests -t . imported it.
discover tests ran with RETROBIOS_OFFLINE unset, scratch on the /tmp
tmpfs and the user's real installer cache, the setting in which e2e
fixtures had written into the shared .cache/large. Every test module now
imports the package first, and a test fails on a module that does not.
test_verify_listing.py took its line with the previous commit.
2026-11-06 15:14:05 +01:00

93 lines
3.1 KiB
Python

"""A target keeps a system whose files an on-target core reads.
Batocera files the Enterprise under enterprise-64-128. ep128emu, the core
that reads ep128emu/roms/exos21.rom, declares enterprise-64 and
enterprise-128. Only CLK carries the joined id. With a target that has
ep128emu and not CLK, the system was dropped from the report while the
builder still shipped its ROMs as ep128emu extras.
"""
from __future__ import annotations
import tests # noqa: F401 offline, scratch under tmp/, the suite's own cache
import sys
import unittest
from pathlib import Path
REPO_ROOT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(REPO_ROOT / "scripts"))
from common import filter_systems_by_target # noqa: E402
PROFILES = {
"ep128emu_core": {
"type": "libretro",
"systems": ["enterprise-64", "enterprise-128"],
"files": [{"name": "exos21.rom", "path": "ep128emu/roms/exos21.rom"}],
},
"clk": {
"type": "standalone",
"systems": ["enterprise-64-128"],
"files": [{"name": "exos10.bin", "path": "Enterprise/exos10.bin"}],
},
"generic": {
"type": "libretro",
"systems": ["other"],
"files": [{"name": "bios.bin", "path": "bios.bin"}],
},
}
def systems(*files: str) -> dict:
return {"enterprise-64-128": {"files": [
{"name": f.rsplit("/", 1)[-1], "destination": f} for f in files
]}}
class TargetSystems(unittest.TestCase):
def kept(self, declared: dict) -> list[str]:
return sorted(filter_systems_by_target(
declared, PROFILES, {"ep128emu_core"},
platform_cores={"ep128emu_core", "clk"},
))
def test_a_core_reading_the_system_destination_keeps_it(self):
self.assertEqual(self.kept(systems("ep128emu/roms/exos21.rom")), ["enterprise-64-128"])
def test_without_that_evidence_the_off_target_core_drops_it(self):
self.assertEqual(self.kept(systems("Enterprise/exos10.bin")), [])
def test_a_path_an_off_target_core_reads_excludes_nothing(self):
"""Batocera's bbc runs on MAME, which no profile ties to bbcb.zip, but CLK
reads two of its ROMs. With CLK off the target the system stayed
unknown before and must stay kept."""
declared = {"bbc": {"files": [
{"name": "os12.rom", "destination": "BBCMicro/os12.rom"},
{"name": "bbcb.zip", "destination": "bbcb.zip"},
]}}
profiles = dict(PROFILES)
profiles["clk"] = dict(PROFILES["clk"], files=[
{"name": "os12.rom", "path": "BBCMicro/os12.rom"}])
self.assertEqual(
sorted(filter_systems_by_target(
declared, profiles, {"ep128emu_core"},
platform_cores={"ep128emu_core", "clk"},
)),
["bbc"],
)
def test_a_bare_name_is_no_evidence(self):
declared = {"enterprise-64-128": {"files": [{"name": "bios.bin"}]}}
self.assertEqual(
sorted(filter_systems_by_target(
declared, PROFILES, {"generic"},
platform_cores={"generic", "clk"},
)),
[],
)
if __name__ == "__main__":
unittest.main()