#!/usr/bin/env python3 import json import sys import unittest from pathlib import Path from tempfile import TemporaryDirectory sys.path.insert(0, str(Path(__file__).resolve().parent)) from native_runner import compare_golden, run_entry class NativeRunnerTests(unittest.TestCase): def setUp(self): self.directory = TemporaryDirectory() self.root = Path(self.directory.name) (self.root / "linuxcnc/tests/demo").mkdir(parents=True) (self.root / "linuxcnc/tests/demo/test.sh").write_text("#!/bin/sh\nprintf 'ok\\n'\n", encoding="utf-8") (self.root / "artifacts").mkdir() def tearDown(self): self.directory.cleanup() def entry(self, portability="portable_candidate"): return { "test_source_id": "test:linuxcnc/tests/demo/test.sh", "path": "linuxcnc/tests/demo/test.sh", "command": "bash linuxcnc/tests/demo/test.sh", "portability": portability, "parse_status": "parsed", "source_sha": "source", } def test_fixed_runner_emits_stable_content_hashes(self): result = run_entry(self.root, self.entry(), self.root / "artifacts", 5) self.assertEqual(result["status"], "passed") self.assertEqual(result["stdout"], "ok\n") self.assertEqual(result["cwd"], "linuxcnc/tests/demo") self.assertRegex(result["result_sha256"], r"^[0-9a-f]{64}$") def test_real_excluded_is_not_executed_without_override(self): result = run_entry(self.root, self.entry("REAL-EXCLUDED"), self.root / "artifacts", 5) self.assertEqual(result["status"], "REAL-EXCLUDED") self.assertNotIn("exit_code", result) def test_golden_comparison_is_explicit(self): actual = {"status": "passed", "exit_code": 0} self.assertEqual(compare_golden(actual, {"schema": "native-golden.v1", "expected": actual})["status"], "passed") self.assertEqual(compare_golden(actual, {"schema": "native-golden.v1", "expected": {"exit_code": 1}})["status"], "different") self.assertEqual(compare_golden(actual, {"schema": "unknown", "expected": actual})["status"], "blocked") if __name__ == "__main__": unittest.main()