#!/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 Phase10DD(unittest.TestCase): @classmethod def setUpClass(cls):cls.data=json.loads((ROOT/"manifests/retroarch/phase-1.0dd-minimal-launcher-source-prerequisite-audit.json").read_text()) def test_names_are_not_abi(self): inventory=self.data["export_inventory"];self.assertTrue(inventory["sceSystemServiceLaunchApp_name_in_sdk_stub"]);self.assertFalse(inventory["sdk_stub_proves_function_signature"] or inventory["sdk_stub_proves_structure_layout"]) def test_single_lineage_not_promoted(self): lineage=self.data["single_lineage_declarations"];self.assertTrue(lineage["acceptable_as_architecture_reference"]);self.assertFalse(lineage["independent_public_abi_corroboration"] or lineage["acceptable_as_new_target_abi_contract"]) def test_title_runtime_unproven(self): title=self.data["title_contract"];self.assertEqual(title["fixed_candidate"],"PPSA01659");self.assertFalse(title["firmware_960_presence_proven"] or title["videoout_ownership_proven"] or title["fallback_title_allowed"]) def test_gate_closed(self): self.assertFalse(any(self.data["authorizations"].values()));self.assertFalse(self.data["decision"]["minimal_launcher_target_source_allowed"] or self.data["decision"]["device_action_allowed"]) def test_public_search_not_overpromoted(self): search=self.data["bounded_public_search"];self.assertTrue(search["sonicloader_candidate_found"]);self.assertFalse(search["sonicloader_accepted_as_independent_corroboration"] or search["global_absence_claimed"]) if __name__=="__main__":unittest.main(argv=[__file__])