Files
EscapistsReintroduced/tests/test_vehicle_entry_diagnostics.py
T

56 lines
4.5 KiB
Python

"""Actual WORKBENCH-only native-context fallback; no production admission bypass."""
import os
from pathlib import Path
from policy_harness import ROOT,body,run
base=Path(os.environ.get('ERR_VEHICLE_DIAGNOSTICS_ROOT',str(ROOT)))
source=base/'addons/core/Scripts/Game/ERR/ERR_NativeVehicleSecurityProbe.c'
wrapped=body(source,'protected bool DriverAvailable(').replace('protected ','').replace('m_DriverAction.','m_DriverAction->')
run('''#include <cassert>
struct Action {bool allowed=false,fallback=true;int context=-1,checks=0,diagnostics=0,bindings=0;bool CanBePerformedScript(int){checks++;return allowed;}void ERR_ProbeRejectedEntry(int){diagnostics++;}int ERR_ProbeResolvedDoor(int){return context;}bool ERR_ProbeDeclaredDriverDoor(int){bindings++;return fallback;}};
struct Probe{Action* m_DriverAction;int m_Player=7;
'''+wrapped+'''
};
int main(){Action a;Probe p{&a};a.allowed=true;assert(p.DriverAvailable()&&a.checks==1&&a.diagnostics==0&&a.bindings==0);
a.allowed=false;a.context=2;assert(!p.DriverAvailable()&&a.diagnostics==1&&a.bindings==0); // real selected context cannot be overridden
a.context=-1;assert(p.DriverAvailable()&&a.diagnostics==2&&a.bindings==1);
a.fallback=false;assert(!p.DriverAvailable()&&a.diagnostics==3&&a.bindings==2);
}
''')
method=body(source,'bool ERR_ProbeDeclaredDriverDoor(')
method=method.replace('BaseCompartmentSlot seat','BaseCompartmentSlot* seat').replace('array<int> doors = {};','Array doors;').replace('seat.','seat->').replace('m_CompartmentManager.','m_CompartmentManager->')
method=method.replace('SCR_CompartmentAccessComponent.','SCR_CompartmentAccessComponent::').replace('ECompartmentType.PILOT','PILOT')
run('''#include <cassert>
#include <vector>
using IEntity=int;enum {PILOT=1,CARGO=2};
struct Array:std::vector<int>{int Count(){return size();}};
struct BaseCompartmentSlot{int type=PILOT;std::vector<int> doors={3};void GetAvailableDoorIndices(Array& a){a.assign(doors.begin(),doors.end());}};
struct Manager {int valid=3;bool GetDoorInfo(int i){return i==valid;}};
struct SCR_CompartmentAccessComponent{static int GetCompartmentType(BaseCompartmentSlot* s){return s->type;}};
void PrintFormat(const char*,int,int,bool){}
struct Action {Manager* m_CompartmentManager;BaseCompartmentSlot* seat;int context=-1,stored=-1,checks=0,sets=0,diagnostics=0;bool nativeAllowed=true;
int GetRelevantDoorIndex(IEntity){return context;}BaseCompartmentSlot* GetCompartmentSlot(){return seat;}
int GetCompartmentDoorInfoIndex(){return stored;}void SetCompartmentDoorInfoIndex(int i){stored=i;sets++;}
bool CanBePerformedScript(IEntity){checks++;return nativeAllowed&&stored==3;}
void ERR_ProbeRejectedEntry(IEntity){diagnostics++;}
'''+method+'''
};
int main(){Manager m;BaseCompartmentSlot s;Action a;a.m_CompartmentManager=&m;a.seat=&s;
assert(a.ERR_ProbeDeclaredDriverDoor(7)&&a.stored==-1&&a.checks==1&&a.sets==2); // derived door 3, never hardcoded driver 0
a.nativeAllowed=false;assert(!a.ERR_ProbeDeclaredDriverDoor(7)&&a.stored==-1&&a.diagnostics==1&&a.sets==4);
a.context=2;assert(!a.ERR_ProbeDeclaredDriverDoor(7)&&a.sets==4);a.context=-1;
s.type=CARGO;assert(!a.ERR_ProbeDeclaredDriverDoor(7)&&a.sets==4);s.type=PILOT;
s.doors={};assert(!a.ERR_ProbeDeclaredDriverDoor(7));s.doors={3,4};assert(!a.ERR_ProbeDeclaredDriverDoor(7));
s.doors={4};assert(!a.ERR_ProbeDeclaredDriverDoor(7)&&a.sets==4&&a.checks==2);
a.seat=nullptr;assert(!a.ERR_ProbeDeclaredDriverDoor(7));a.seat=&s;a.m_CompartmentManager=nullptr;assert(!a.ERR_ProbeDeclaredDriverDoor(7));
}
''')
diagnostics=body(source,'void ERR_ProbeRejectedEntry(')
for forbidden in ('SetCompartmentDoorInfoIndex(', 'SetAffiliatedFaction(', 'ClearAffiliatedFaction(', 'GetInVehicle(', 'EnableDamageHandling(', 'TryBreach('):assert forbidden not in diagnostics
assert 'GetCannotPerformReason()' in diagnostics and 'GetRelevantDoorIndex(user)' in diagnostics
assert 'CanGetInVehicleViaDoor' in diagnostics and 'GetStoredResources' in diagnostics
assert diagnostics.index('door >= 0 && m_CompartmentManager.GetDoorInfo(door)') < diagnostics.index('m_CompartmentManager.GetDoorUser(door)')
assert 'if (index < 0 || !m_CompartmentManager.GetDoorInfo(index))' in diagnostics
assert 'missing or invalid context; no indexed native query issued' in diagnostics
assert 'modded class ERR_SecureGetInAction' in source.read_text() and source.read_text().startswith('#ifdef WORKBENCH')
print('PASS: actual diagnostic fallback runs only on failed missing-context call, derives unique native pilot door, preserves stock eligibility and restores prior index on success/failure; diagnostics mutate no game state.')