mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-23 20:29:06 -05:00
The cross-reference page read the label from the shape of cores:, so RetroPie and RetroDECK, which name retroarch in a list, showed no "(all libretro)". The label now comes from the resolved core set.
74 lines
2.6 KiB
Python
74 lines
2.6 KiB
Python
"""The site counts a platform's cores the way the builder resolves them.
|
|
|
|
The cross-reference page re-implemented the resolution and dropped the
|
|
libretro set a cores: list naming retroarch pulls in: RetroDECK read 20 cores
|
|
where its pack is built from 321.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import re
|
|
import sys
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
REPO_ROOT = Path(__file__).resolve().parent.parent
|
|
sys.path.insert(0, str(REPO_ROOT / "scripts"))
|
|
|
|
import generate_site # noqa: E402
|
|
from common import ( # noqa: E402
|
|
list_registered_platforms,
|
|
load_emulator_profiles,
|
|
load_platform_config,
|
|
resolve_platform_cores,
|
|
)
|
|
|
|
|
|
class SiteCoreCounts(unittest.TestCase):
|
|
def test_each_platform_count_is_the_resolved_set(self):
|
|
platforms = str(REPO_ROOT / "platforms")
|
|
profiles = load_emulator_profiles(str(REPO_ROOT / "emulators"))
|
|
unique = {k: v for k, v in profiles.items() if v.get("type") not in ("alias", "test")}
|
|
coverages = {}
|
|
for name in list_registered_platforms(platforms, include_archived=True):
|
|
config = load_platform_config(name, platforms)
|
|
coverages[name] = {"platform": config.get("platform", name), "config": config}
|
|
page = generate_site.generate_cross_reference(coverages, profiles)
|
|
shown = {
|
|
m.group(1): int(m.group(2))
|
|
for m in re.finditer(r'\?\?\? abstract "([^"]+)"\n\n.*\n\n {4}\*\*(\d+) cores', page)
|
|
}
|
|
for name, cov in coverages.items():
|
|
with self.subTest(platform=name):
|
|
expected = len(resolve_platform_cores(cov["config"], unique))
|
|
self.assertEqual(shown[cov["platform"]], expected)
|
|
|
|
|
|
class AllLibretroLabel(unittest.TestCase):
|
|
"""RetroPie and RetroDECK pull in every libretro core by naming retroarch
|
|
in a list, and the label read "(all libretro)" for RetroArch and Lakka
|
|
only, the two whose cores: is the string."""
|
|
|
|
PROFILES = {
|
|
"a": {"type": "libretro"},
|
|
"b": {"type": "standalone + libretro"},
|
|
"sa": {"type": "standalone"},
|
|
}
|
|
|
|
def test_a_list_naming_retroarch_is_labelled(self):
|
|
note = generate_site._core_scope_note(
|
|
{"cores": ["retroarch", "sa"]}, self.PROFILES)
|
|
self.assertEqual(note, " (all libretro, plus 1 other core)")
|
|
|
|
def test_the_string_form_is_labelled(self):
|
|
note = generate_site._core_scope_note({"cores": "all_libretro"}, self.PROFILES)
|
|
self.assertEqual(note, " (all libretro)")
|
|
|
|
def test_a_selection_is_not(self):
|
|
self.assertEqual(
|
|
generate_site._core_scope_note({"cores": ["a", "sa"]}, self.PROFILES), "")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|