Files
libretro/tests/test_cache_independent_counts.py
T
Abdessamad Derraz 06e37b36f7 feat: collect the tyrian files emuelec declares
EmuELEC declares 19 files of the Tyrian 2.1 distribution (setup.ini,
netterm.int, the net*.pcx screens...) that bios/ did not hold. They
resolved only at the data directory step, against data/opentyrian, the
cache refresh_data_dirs.py fills from the opentyrian-data.zip asset. verify
gave 544/572 in a checkout holding that cache and 525/572 in one without
it, for the same commit.

The 19 files are taken from the freeware tyrian21.zip (camanis.net, sha1
29827de9), each equal to the cached copy. netset.pcx and tyrset.pcx are
the same bytes under two names, so the folder joins NODEDUP_DIRS. A test
resolves every platform entry with the data directory caches present and
fails on any that only a cache answers.
2026-10-22 15:08:15 +02:00

64 lines
2.5 KiB
Python

"""A platform's coverage does not depend on which data caches are on disk.
EmuELEC declares 19 files of the Tyrian 2.1 distribution that bios/ did not
hold (setup.ini, netterm.int...). They resolved only through data/opentyrian,
the cache refresh_data_dirs.py fills from a release asset, so verify gave
544/572 in a checkout with that cache and 525/572 in a fresh worktree, for the
same commit. A file a platform declares is collected in bios/; a data
directory cache is not a collection.
"""
from __future__ import annotations
import os
import sys
import unittest
from pathlib import Path
REPO_ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(REPO_ROOT / "scripts"))
class DeclaredFilesResolveWithoutDataCaches(unittest.TestCase):
def test_no_platform_entry_rests_on_a_data_directory_cache(self):
from common import ( # noqa: PLC0415
build_zip_contents_index,
list_registered_platforms,
load_data_dir_registry,
load_database,
load_platform_config,
)
from packresolve import resolve_declaration # noqa: PLC0415
platforms_dir = REPO_ROOT / "platforms"
registry = load_data_dir_registry(str(platforms_dir))
caches = [
entry["local_cache"] for entry in registry.values()
if (REPO_ROOT / entry.get("local_cache", "")).is_dir()
]
if not caches or not (REPO_ROOT / "database.json").is_file():
self.skipTest("no data directory cache on disk (refresh_data_dirs.py fills them)")
cwd = os.getcwd()
os.chdir(REPO_ROOT)
try:
db = load_database("database.json")
zip_contents = build_zip_contents_index(db)
offenders = []
for platform in list_registered_platforms(str(platforms_dir), include_archived=True):
config = load_platform_config(platform, str(platforms_dir))
for sys_id, system in config.get("systems", {}).items():
for entry in system.get("files", []) or []:
path, status = resolve_declaration(
entry, db, "bios", zip_contents, registry, None, offline=True,
)
if status.startswith("data_dir"):
offenders.append(f"{platform} {sys_id} {entry.get('name')}: {path}")
finally:
os.chdir(cwd)
self.assertEqual(offenders, [], "\n".join(offenders))
if __name__ == "__main__":
unittest.main()