mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-12 00:10:56 +02:00
66 lines
2.4 KiB
Python
66 lines
2.4 KiB
Python
#!/usr/bin/env python3
|
|
"""ROM-free regression tests for source-build version detection and routing."""
|
|
|
|
from contextlib import redirect_stderr, redirect_stdout
|
|
from io import StringIO
|
|
from pathlib import Path
|
|
from types import SimpleNamespace
|
|
from unittest import TestCase, main, mock
|
|
|
|
import sys
|
|
|
|
sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "tools"))
|
|
import build_rom_data # noqa: E402
|
|
|
|
|
|
class BuildRomDataCliTest(TestCase):
|
|
def run_builder(self, sha1, *extra):
|
|
manifest = {"romSha1": sha1, "symbols": {}}
|
|
rom = SimpleNamespace(sha1=sha1)
|
|
with mock.patch.object(build_rom_data, "RomImage", return_value=rom), \
|
|
mock.patch.object(build_rom_data, "load_manifest", return_value=manifest), \
|
|
mock.patch.object(build_rom_data, "build") as build, \
|
|
mock.patch.object(build_rom_data.os, "makedirs"), \
|
|
redirect_stdout(StringIO()), redirect_stderr(StringIO()):
|
|
result = build_rom_data.main([
|
|
"--rom", "fixture.gb", "--only", "constants", *extra])
|
|
return result, build
|
|
|
|
def test_blue_rom_selects_blue_manifest_and_cache_paths(self):
|
|
result, build = self.run_builder(
|
|
build_rom_data.CANONICAL_BLUE_SHA1)
|
|
|
|
self.assertEqual(result, 0)
|
|
args = build.call_args.args
|
|
self.assertEqual(args[3], "blue/data/generated")
|
|
self.assertEqual(args[4], "blue/assets/generated")
|
|
|
|
def test_red_rom_keeps_historical_root_paths(self):
|
|
result, build = self.run_builder(build_rom_data.CANONICAL_RED_SHA1)
|
|
|
|
self.assertEqual(result, 0)
|
|
args = build.call_args.args
|
|
self.assertEqual(args[3], "data/generated")
|
|
self.assertEqual(args[4], "assets/generated")
|
|
|
|
def test_explicit_output_paths_are_preserved(self):
|
|
result, build = self.run_builder(
|
|
build_rom_data.CANONICAL_YELLOW_SHA1,
|
|
"--out", "/tmp/custom-data", "--assets", "/tmp/custom-assets")
|
|
|
|
self.assertEqual(result, 0)
|
|
args = build.call_args.args
|
|
self.assertEqual(args[3], "/tmp/custom-data")
|
|
self.assertEqual(args[4], "/tmp/custom-assets")
|
|
|
|
def test_unknown_rom_is_rejected_before_build(self):
|
|
unknown = "0" * 40
|
|
result, build = self.run_builder(unknown)
|
|
|
|
self.assertEqual(result, 1)
|
|
build.assert_not_called()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|