"""Verify the bounded 2.0.77 scenario envelope, offsets and unsupported inputs.""" import io import json import struct import subprocess import tempfile import zipfile import zlib from pathlib import Path ROOT=Path(__file__).resolve().parents[1] PROBE=ROOT/'build/save-layout/probe' TICKS=(720001,42,0xffffffffffffffff) def compact(value,size=4): return bytes([value]) if value<255 else b'\xff'+value.to_bytes(size,'little') def string(value): return compact(len(value))+value def version(values=(2,0,77)): return b''.join(compact(v,2) for v in values) def localised(text=None,children=(),kind=1): return b'\0' if text is None else bytes([kind])+string(text)+bytes([len(children)])+b''.join(children) def ending(title=None,children=()): return localised(title,children)+localised()+compact(0)+localised()+string(b'') def fixture(long_string=b'freeplay',mod_count=1,extended_version=False,nested=False): result=bytearray(struct.pack('<4HB',2,0,77,0,0)) positions={} result+=string(b'')+string(long_string)+string(b'base') positions['difficulty']=len(result);result+=b'\1' positions['boolean']=len(result);result+=b'\0\0'+string(b'')+b'\0\0\0\1' result+=version((65535,255,254) if extended_version else (2,0,77)) result+=struct.pack('len(data),report checks+=1 for length in (0,1,254,255,256,4097): data,offset,_=fixture(long_string=b'x'*length,extended_version=True,nested=True) probe(data,offset=offset) for count in (0,1,254,255): data,offset,_=fixture(mod_count=count) probe(data,offset=offset,mods=count) data,offset,positions=fixture() for length in range(len(data)): probe(data[:length],6) for index,value in [(4,78),(8,1),(positions['difficulty'],3),(positions['boolean'],2), (positions['property_type'],4),(positions['property_count'],1)]: changed=bytearray(data);changed[index]=value;probe(changed,4) probe(data[:9]+b'\xff'+struct.pack('