mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-16 08:23:28 -05:00
fix: check the beebem teletext font size
This commit is contained in:
1 parent
ff5e5145fd
commit
012913720c
2 files changed
+59
-2
No files matched your search
@@ -0,0 +1,56 @@
|
||||
"""A profile's checks are the ones the emulator's code runs.
|
||||
|
||||
Each case reads a profile from emulators/ and offers its entry files of
|
||||
chosen sizes or contents, then compares the verdict with what the code at
|
||||
the profile's pin does with the same file. The cases come from reading that
|
||||
code: a check the code does not run rejects a file the emulator loads, and a
|
||||
check left out lets through a file the emulator refuses.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import sys
|
||||
import tempfile
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
import yaml
|
||||
|
||||
REPO_ROOT = Path(__file__).resolve().parents[1]
|
||||
sys.path.insert(0, str(REPO_ROOT / "scripts"))
|
||||
|
||||
from validation import _build_validation_index, check_file_validation # noqa: E402
|
||||
|
||||
|
||||
def _profile(name: str) -> dict:
|
||||
with open(REPO_ROOT / "emulators" / f"{name}.yml", encoding="utf-8") as fh:
|
||||
return yaml.safe_load(fh)
|
||||
|
||||
|
||||
class _Probe(unittest.TestCase):
|
||||
"""Offer a profile entry a file and read the verdict."""
|
||||
|
||||
def setUp(self):
|
||||
self._tmp = tempfile.TemporaryDirectory()
|
||||
self.addCleanup(self._tmp.cleanup)
|
||||
|
||||
def accepts(self, emulator: str, name: str, data: bytes) -> bool:
|
||||
index = _build_validation_index({emulator: _profile(emulator)})
|
||||
path = Path(self._tmp.name) / name
|
||||
path.write_bytes(data)
|
||||
return check_file_validation(str(path), name, index, emulators={emulator}) is None
|
||||
|
||||
|
||||
class BeebEmTeletextFont(_Probe):
|
||||
"""BuildMode7Font reads 96 characters of 18 two-byte rows, 3456 bytes,
|
||||
and returns false at the first EOF, which stops BeebEm at startup;
|
||||
bytes past them are never read (Src/Video.cpp:167-215 at a982ba6)."""
|
||||
|
||||
def test_short_is_refused_and_longer_is_read(self):
|
||||
self.assertFalse(self.accepts("beebem", "Teletext.fnt", b"\0" * 100))
|
||||
self.assertTrue(self.accepts("beebem", "Teletext.fnt", b"\0" * 3456))
|
||||
self.assertTrue(self.accepts("beebem", "Teletext.fnt", b"\0" * 4000))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in new issue
Block a user