Files
libretro/tests/test_profile_names.py
T
Abdessamad Derraz f2e21f3a44 docs: name profiles as their projects write them
emulator: carried the file stem on 67 profiles, so site links read like ids. Each now takes the project's own name (libretro .info corename, README title, window title or site title). tests/test_profile_names.py allows the stem only on a commented list: lowercase project names, test cores, aliases and the template.
2026-10-24 00:40:13 +02:00

97 lines
3.0 KiB
Python

"""A profile's `emulator:` is the name the project gives itself.
The site titles every emulator page and link with it. A value equal to the
file stem reads as an id ("corsixth", "shadps4") unless the project writes its
own name that way.
"""
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_emulator_profiles # noqa: E402
STEM_NAMED = {
# Template and test cores, no emulator page.
"00_example": "template",
"test": "type test",
"testgl": "type test",
"testvulkan": "type test",
"vidtest": "type test",
# Aliases, no emulator page.
"mednafen_lynx": "alias",
"mednafen_ngp": "alias",
"mednafen_pcfx": "alias",
"mednafen_psx": "alias",
"mednafen_psx_hw": "alias",
"mednafen_saturn": "alias",
"mednafen_vb": "alias",
"mednafen_wswan": "alias",
"mkxp-z": "alias",
"parallel_n64_debug": "alias",
# Libretro cores whose .info corename is the stem.
"2048": "corename 2048",
"a5200": "corename a5200",
"b2": "corename b2",
"bnes": "corename bnes",
"boom3": "corename boom3",
"bsnes": "corename bsnes, the project writes bsnes",
"bsnes-jg": "corename bsnes-jg",
"galaksija": "corename galaksija",
"nes": "corename nes",
"uzem": "corename uzem",
"vecx": "corename vecx",
"xemu": "corename xemu, the project writes xemu",
"yaps2": "corename yaps2, README title yaps2",
# Lowercase project names.
"advanced_drastic": "README title advanced_drastic",
"ares": "the project writes ares",
"ccleste": "README title ccleste",
"dhewm3": "window title dhewm3 (ENGINE_VERSION)",
"dsda-doom": "README title dsda-doom",
"fheroes2": "README title fheroes2",
"hode": "README title hode",
"ioquake3": "the project writes ioquake3",
"izapple2": "README title izapple2",
"jgenesis": "README title jgenesis",
"np2pi": "repository and binary np2pi, no title in the source",
"rpix86": "the author writes rpix86",
"simple64": "window title simple64",
"sixtyforce": "site title sixtyforce",
"veesem": "README title veesem",
}
class ProfileNames(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
cls.profiles = load_emulator_profiles(
REPO_ROOT / "emulators", skip_aliases=False
)
def test_emulator_name_is_not_the_file_stem(self) -> None:
stem_named = sorted(
stem
for stem, profile in self.profiles.items()
if str(profile.get("emulator", "")) == stem
and stem not in STEM_NAMED
)
self.assertEqual(stem_named, [], "set emulator: to the project's own name")
def test_allow_list_has_no_stale_entry(self) -> None:
stale = sorted(
stem
for stem in STEM_NAMED
if str(self.profiles.get(stem, {}).get("emulator", "")) != stem
)
self.assertEqual(stale, [])
if __name__ == "__main__":
unittest.main()