Files
EscapistsReintroduced/tests/test_casualty_remove_probe.py
T

44 lines
2.5 KiB
Python

"""Fixture boundaries and actual safe-exit policy; not an engine substitute."""
from policy_harness import ROOT, body, run
import re
source = ROOT/'addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c'
method = body(source,'static bool SafeExit(')
method = re.sub(r'(?<![\w.])(\d+\.\d+)(?![\w.])',r'\1f',method)
run('#include <cassert>\n'+method+'''
int main() {
assert(SafeExit(0,0));
assert(SafeExit(1.25,-0.25));
assert(SafeExit(1.25,1.5));
assert(!SafeExit(1.251,0));
assert(!SafeExit(-0.01,0));
assert(!SafeExit(1,-0.251));
assert(!SafeExit(1,1.501));
}
''')
text=source.read_text()
assert text.startswith('#ifdef WORKBENCH')
assert 'GetContextIndex("door_l01_door") >= 0' in text
assert 'actions.Contains(m_Remove)' in text
assert 'PickDoorIndexForPoint(m_Context.GetOrigin())' in text
assert 'GetExitTeleportPointInfo()' in text
assert 'm_Remove.GetActionDuration() == 1' in text
assert 'm_Remove.CanBeShown(m_Caller)' in text and 'm_Remove.CanBePerformed(m_Caller)' in text
assert text.count('m_Remove.PerformAction(') == 1
assert 'm_Remove.SetCompartmentDoorInfoIndex(m_SavedDoor)' in body(source,'override void Cleanup(')
assert 'if (m_RemoveStopped) return -1;' in body(source,'override int Tick(')
for forbidden in ('GetOutVehicle(', 'GetOutVehicle_NoDoor(', 'KickFromVehicle(', 'SetUnconscious(', 'm_Casualty.Set', 'm_Casualty).Teleport', 'SetActive('):
assert forbidden not in text,forbidden
# Existing arbitrary-ground mechanism remains exactly its original contract.
base=ROOT/'addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c'
assert 'GetOutVehicle_NoDoor(exitTransform, true, false)' in body(base,'protected bool BeginExit(')
assert 'exitTransform[3] = m_GroundPosition;' in body(base,'protected bool BeginExit(')
assert body(base,'protected bool ExitSettled(').strip().endswith('return ERR_Actors.Alive(m_Casualty) && vector.Distance(m_Casualty.GetOrigin(), m_GroundPosition) < 4 && m_Seat.IsCompartmentAccessible();\n }')
base_text=(ROOT/'addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c').read_text()
assert base_text.count('m_ERRExtractionCase == "casualty-remove"') == 3
assert 'm_ERRCasualtyLoadProbe = new ERR_NativeCasualtyRemoveProbe(this);' in base_text
assert 'm_ERRBaseStep = 802; Transition(ERR_Phase.DEFEAT);' in base_text
runner=(ROOT/'tools/headless_workbench.py').read_text()
assert runner.count("'casualty-remove'") == 3
compile(runner,'headless_workbench.py','exec')
print('PASS: actual safe-exit boundary policy, native action/door selection, stop/cache cleanup, separate old mechanism and opt-in runner contracts')