Files
EscapistsReintroduced/tests/test_vehicle_maintenance_stock.py
T

48 lines
3.0 KiB
Python

"""Validate maintenance stock joins the finite scenario without weakening clue/resource bounds."""
from pathlib import Path
import json,os,re
from policy_harness import ROOT
R=Path(os.environ.get('ERR_MAINTENANCE_ROOT',ROOT))
def contents(text,start):
left=text.index('{',start);depth=1;cursor=left+1
while depth:
depth+=(text[cursor]=='{')-(text[cursor]=='}');cursor+=1
return text[left+1:cursor-1]
s=(R/'addons/core/Configs/ERR/EveronSites.conf').read_text()
sites={}
for match in re.finditer(r'ERR_SiteDefinition\s*\{',s):
block=contents(s,match.start());sites[re.search(r'\bId "([^"]+)"',block)[1]]=block
stock={}
for name,site in sites.items():
stock[name]=[]
for match in re.finditer(r'ERR_SiteStock\s*\{',site):
item=contents(site,match.start());ref=re.search(r'Prefab "\{([A-F0-9]{16})\}([^"]+)"',item)
count=int(re.search(r'Count (\d+)',item)[1]);assert 1<=count<=64
stock[name].append((ref[1],ref[2],count,item))
assert sum(item[2] for items in stock.values() for item in items)<=256
# Both established routes to radio intel and the prison field map remain usable.
for name in ('everon-supply-1','everon-supply-2'):
assert 'RevealOnEscape 1' in sites[name]
clues=[i for i in stock[name] if i[1]=='Prefabs/ERR/ObjectiveDocument.et']
assert sum(i[2] for i in clues)>=2 and all('TargetId "everon-radio-1"' in i[3] for i in clues)
assert any(i[1].endswith('PaperMap_01_folded.et') for i in stock['everon-prison-1'])
kitpath='Prefabs/ERR/Items/EmergencyRepairKit.et'
canpath='Prefabs/Items/Fuel/Jerrycan_01/Jerrycan_01_item.et'
maintenance=[(name,i) for name,items in stock.items() for i in items if i[1] in (kitpath,canpath)]
assert len(maintenance)==2 and all(name=='everon-supply-2' for name,_ in maintenance)
assert {i[1]:i[2] for _,i in maintenance}=={kitpath:1,canpath:2}
# Own container must be finite and must not turn off native resource eligibility.
kit=(R/'addons/core'/kitpath).read_text()
assert kit.startswith('GenericEntity : "{33B2DFDCD0EBA3DB}Prefabs/Items/Equipment/Kits/RepairKit_01/RepairKit_01_wrench.et"')
assert kit.count('SCR_ResourceContainer ')==1 and 'm_fResourceValueCurrent 20' in kit and 'm_fResourceValueMax 20' in kit
for forbidden in ('m_aGenerators','m_aDisabledResourceTypes','m_eFactionUsageCheck','m_fMaxHealScaled','SCR_RepairSupportStationComponent','SCR_ResourceConsumer '):
assert forbidden not in kit,forbidden
meta=(R/'addons/core'/Path(kitpath+'.meta')).read_text();guid=re.search(r'Name "\{([A-F0-9]{16})\}',meta)[1]
assert [i[0] for _,i in maintenance if i[1]==kitpath]==[guid]
vanilla=json.loads((R/'docs/vanilla-resources.json').read_text())
assert vanilla[canpath]=='12D5AD21E383B768'
assert vanilla['Prefabs/Items/Equipment/Kits/RepairKit_01/RepairKit_01_wrench.et']=='33B2DFDCD0EBA3DB'
evidence=json.loads((R/'docs/vehicle-maintenance-source-evidence.json').read_text())
assert evidence['finite_initial_stock']['litres_per_can']==5 and evidence['native_validation']=='pending'
print('PASS: finite maintenance stock/resource identity, bounded scenario stock and preserved two-cache clue redundancy; native interaction not claimed')