Build independent base gameplay and source-bound native verification
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user