Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
16 lines
1.8 KiB
Python
16 lines
1.8 KiB
Python
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)
|