"""Read-only checks against the installed game (skipped when it is not installed).""" import random import pytest from ackit.game import Game from ackit.inject import pack_bnk_path, is_pack from ackit.pack import Pack from ackit.verify.selfcheck import rebuild_identical from ackit.wad import Wad, write_wad from ackit.wem import split_concatenated pytestmark = pytest.mark.game def test_wad_roundtrip_identical(real_game_dir, tmp_path): g = Game(real_game_dir) src = g.wad("SFX") out = str(tmp_path / "rt.wad") write_wad(Wad(src), out, {}) a, b = open(src, "rb"), open(out, "rb") while True: x, y = a.read(1 << 22), b.read(1 << 22) assert x == y if not x: break def test_stream_packs_noop_identical(real_game_dir): g = Game(real_game_dir) wad = g.wad("SFX") w = Wad(wad) for e in w.entries: if is_pack(wad, e.hash): bnk = open(pack_bnk_path(wad, e.hash), "rb").read() payload = w.read(e.hash) nb, npay = Pack(bnk).rebuild(payload, {}) assert nb == bnk and npay == payload def test_builder_reproduces_game_wems(real_game_dir): g = Game(real_game_dir) lang = g.language() w = Wad(g.wad(lang)) rnd = random.Random(5) n = 0 for e in rnd.sample(w.entries, 80): for _, r in split_concatenated(w.read(e.hash))[0][:3]: assert rebuild_identical(r) n += 1 assert n >= 80