"""The command line report judges "undeclared" on the flat declared set. Per normalized system id, bk and elektronika-bk never met, nor nintendo-sgb and nintendo-super-game-boy: 646 entries whose exact name a platform declares were counted undeclared, while verify and the site read one flat set, enriched with every spelling the database knows. """ from __future__ import annotations 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 load_database, load_emulator_profiles # noqa: E402 from cross_reference import ( # noqa: E402 _build_supplemental_index, cross_reference, declared_names, load_platform_files, ) class FlatDeclaredSet(unittest.TestCase): def test_a_name_declared_under_another_system_id_is_not_a_gap(self): if not (REPO_ROOT / "database.json").is_file(): self.skipTest("no database.json") db = load_database(str(REPO_ROOT / "database.json")) platforms = str(REPO_ROOT / "platforms") profiles = {k: v for k, v in load_emulator_profiles(str(REPO_ROOT / "emulators")).items() if k == "bk"} if not profiles: self.skipTest("no bk profile") declared, data_dirs = load_platform_files(platforms, ["batocera"]) names = _build_supplemental_index() per_system = cross_reference(profiles, declared, db, data_dirs, names) flat = cross_reference( profiles, declared, db, data_dirs, names, all_declared=declared_names(platforms, ["batocera"], db), ) gaps = {g["name"] for g in flat["bk"]["gap_details"]} self.assertNotIn("MONIT10.ROM", gaps) self.assertLess(flat["bk"]["gaps"], per_system["bk"]["gaps"]) class AnAliasIsADeclaration(unittest.TestCase): """RetroArch lists amiberry's cd32.rom as kick40060.CD32, an alias the profile declares; the gap report still called cd32.rom undeclared.""" def test_a_file_declared_under_its_alias_is_covered(self): profiles = {"amiberry": { "emulator": "Amiberry", "type": "libretro", "systems": ["commodore-amiga"], "files": [{"name": "cd32.rom", "aliases": ["kick40060.CD32"], "size": 524288}], }} db = {"files": {}, "indexes": {"by_name": {}, "by_md5": {}, "by_crc32": {}, "by_path_suffix": {}}} report = cross_reference( profiles, {}, db, {}, {"by_name": {}}, all_declared={"kick40060.CD32"}, ) self.assertEqual(report["amiberry"]["gap_details"], []) if __name__ == "__main__": unittest.main()