#!/usr/bin/env python3 """Negative runner checks stop before any native process/audio initialization.""" from pathlib import Path import subprocess import sys import tempfile import unittest ROOT = Path(__file__).resolve().parents[1] class EnvironmentRestartRunnerTests(unittest.TestCase): def invoke(self, profile, *extra): return subprocess.run([sys.executable, str(ROOT/'tools/headless_workbench.py'), '--compat', str(profile/'missing-prefix'), '--profile', str(profile), '--smoke', 'environment-restart', '--project', 'core', '--rounds', '2', *extra], text=True, capture_output=True) def test_requires_two_core_rounds(self): with tempfile.TemporaryDirectory() as directory: for extra in [('--rounds','1'), ('--rounds','3'), ('--project','chat')]: with self.subTest(extra=extra): result = self.invoke(Path(directory), *extra) self.assertNotEqual(result.returncode, 0) self.assertIn('requires --project core --rounds 2', result.stderr) def test_every_existing_fixture_file_is_refused_and_preserved(self): for name in ['erri-environment-restart.json', 'erri-environment-restart.json.bak', 'erri-environment-restart.json.tmp', 'erri-environment-restart-round.json']: with self.subTest(name=name), tempfile.TemporaryDirectory() as directory: profile = Path(directory) path = profile/name path.write_text('prior evidence') result = self.invoke(profile) self.assertNotEqual(result.returncode, 0) self.assertIn('fixture paths must not preexist', result.stderr) self.assertEqual(path.read_text(), 'prior evidence') def test_broken_fixture_symlink_is_refused(self): with tempfile.TemporaryDirectory() as directory: profile = Path(directory) (profile/'erri-environment-restart.json').symlink_to(profile/'missing-target') result = self.invoke(profile) self.assertIn('fixture paths must not preexist', result.stderr) self.assertTrue((profile/'erri-environment-restart.json').is_symlink()) def test_empty_fixture_reaches_existing_prefix_guard_without_side_effects(self): with tempfile.TemporaryDirectory() as directory: profile = Path(directory) result = self.invoke(profile) self.assertNotEqual(result.returncode, 0) self.assertIn('must be a disposable cloned prefix', result.stderr) self.assertEqual(list(profile.iterdir()), []) def test_existing_environment_outcome_does_not_acquire_restart_path_policy(self): with tempfile.TemporaryDirectory() as directory: profile = Path(directory) (profile/'erri-environment-restart.json').write_text('prior evidence') result = self.invoke(profile, '--smoke', 'environment', '--rounds', '1') self.assertIn('must be a disposable cloned prefix', result.stderr) self.assertNotIn('fixture paths must not preexist', result.stderr) if __name__ == '__main__': unittest.main()