from pathlib import Path import subprocess,os,json root=Path('/tmp/erri-pair-hq-0054');rel=Path('addons/core/Scripts/Game/ERR/10_AI/ERR_HQMountedDispatch.c');source=(root/rel).read_text() env=dict(os.environ,PYTHONDONTWRITEBYTECODE='1',PYTHONPATH='/home/jakub/devel/escapistsrereintroduced/tests') cases={'green':root/rel,'baseline':root/'baseline'/rel} mutations={ 'receipt-barrier':(' if (!m_MountedInterceptReceipt || (partner && !m_MountedInterceptPartnerReceipt)) return;', ' if (!m_MountedInterceptReceipt) return;'), 'partner-count':(' if (m_MountedInterceptPartner) count++;',' // mutation: partner not counted'), 'partner-claim-cleanup':(' if (partner && partnerUnit && partnerUnit.LogisticsReservation == partner.Token) partnerUnit.LogisticsReservation = 0;', ' if (partner && partnerUnit && partnerUnit.LogisticsReservation == partner.Token) partnerUnit.LogisticsReservation = partner.Token;'), 'token-domain':('400002 + m_MountedTokenCount','400001 + m_MountedTokenCount'), 'survey-budget':('scanned < count && queries < 2','scanned < count && queries < 3') } for name,(old,new) in mutations.items(): assert old in source p=root/'mutations'/name/rel;p.parent.mkdir(parents=True,exist_ok=True);p.write_text(source.replace(old,new));cases[name]=p results=[] for name,p in cases.items(): env['ERR_HQ_MOUNTED_DISPATCH_SOURCE']=str(p) with (root/(name+'.log')).open('w') as log:r=subprocess.run(['python3',str(root/'tests/test_hq_mounted_dispatch.py')],env=env,stdout=log,stderr=subprocess.STDOUT) text=(root/(name+'.log')).read_text();runtime='Assertion' in text or 'assertion' in text results.append({'case':name,'exit_code':r.returncode,'runtime_assertion':runtime}) if name=='green':assert r.returncode==0 else: assert r.returncode!=0 and runtime,(name,text[:500]) (root/'results.json').write_text(json.dumps(results,indent=2)+'\n');print(json.dumps(results))