from pathlib import Path import os,subprocess,json P=Path('/tmp/erri-mounted-intercept-convoy-1247');R=Path('/home/jakub/devel/escapistsrereintroduced');D=P/'addons/core/Scripts/Game/ERR/10_AI';env=os.environ.copy();env.update(PYTHONDONTWRITEBYTECODE='1',PYTHONPATH=str(R/'tests'),ERR_CONVOY_SERVICE=str(D/'ERR_ConvoyService.c'),ERR_SUPPLY_SERVICE_SOURCE=str(D/'ERR_SupplyConvoyService.c'),ERR_SUPPLY_COLUMN_SOURCE=str(D/'ERR_SupplyConvoyColumn.c'),ERR_SUPPLY_TACTICS_SOURCE=str(D/'ERR_SupplyConvoyTactics.c'));results={} for name in ['test_convoy_lifecycle.py','test_convoy_combat.py','test_convoy_column.py','test_supply_convoys.py','test_convoy_admission.py','test_convoy_dispatch.py']: f=P/'tests'/name if not f.exists():f=R/'tests'/name r=subprocess.run(['python3',str(f)],env=env,stdout=subprocess.PIPE,stderr=subprocess.STDOUT,text=True);(P/('final-'+name+'.log')).write_text(r.stdout);results[name]=r.returncode;print(name,r.returncode,flush=True) if r.returncode:print(r.stdout[-4000:]) (P/'final-results.json').write_text(json.dumps(results,indent=2)+'\n');assert not any(results.values()) # A production mutation keeps signatures/native adapters unchanged, then must fail runtime. s=(D/'ERR_ConvoyService.c').read_text();mut=s.replace('if (delivered) LegDeadline = now + 600000;', 'LegDeadline = now + 600000;').replace('bool delivered = InterceptActive;', '') m=P/'mutation-pending-deadline.c';m.write_text(mut);env['ERR_CONVOY_SERVICE']=str(m) r=subprocess.run(['python3',str(P/'tests/test_convoy_lifecycle.py')],env=env,stdout=subprocess.PIPE,stderr=subprocess.STDOUT,text=True);(P/'mutation-pending-deadline.log').write_text(r.stdout) assert r.returncode and 'Assertion' in r.stdout and 'error:' not in r.stdout,r.stdout print('pending-deadline mutation: compiled runtime failure',flush=True)