#!/usr/bin/env python3 # SPDX-License-Identifier: GPL-3.0-or-later from __future__ import annotations import argparse, json, unittest from pathlib import Path P = argparse.ArgumentParser() P.add_argument("--root", type=Path, required=True) ROOT = P.parse_args().root class Phase10DZ(unittest.TestCase): @classmethod def setUpClass(cls): cls.data = json.loads( (ROOT / "manifests/retroarch/phase-1.0dz-direct-launcher-decision.json").read_text() ) def test_observation_is_not_overpromoted(self): evidence = self.data["consumed_evidence"] self.assertTrue(evidence["fake00000_appinfo_present"]) self.assertTrue(evidence["operator_observed_launcher_browser_reached"]) self.assertFalse(evidence["port_8080_refusal_proves_general_listener_absence"]) self.assertFalse(evidence["videoout_ownership_proven"]) def test_minimal_route_excludes_websrv_surface(self): route = self.data["route_decision"] self.assertFalse(route["loopback_web_server_required"]) self.assertFalse(route["official_websrv_acceptable"]) self.assertTrue(route["direct_embedded_hash_bound_retroarch_route_selected"]) self.assertFalse(route["generic_endpoints_allowed"] or route["persistent_fake_app_setup_allowed"]) self.assertFalse(route["implicit_bigapp_termination_allowed"] or route["retry_allowed"] or route["unbounded_wait_allowed"]) def test_missing_abi_and_cleanup_block_target(self): self.assertFalse(any(self.data["remaining_blockers"].values())) self.assertFalse(self.data["decision"]["target_source_allowed"]) self.assertFalse(self.data["decision"]["target_build_allowed"]) def test_no_artifact_or_device_authority(self): self.assertFalse(any(self.data["artifact"].values())) self.assertFalse(any(self.data["authorization"].values())) self.assertFalse(self.data["decision"]["device_action_allowed"]) if __name__ == "__main__": unittest.main(argv=[__file__])