← Files JUJIES ArbeitsblätterARCHIVED FILE
tests/check-reference-packages.py
2.29 KB · Nov 11, 2026 · 13:26 UTC
"""Exercise actual portable blocks and missing/corrupt dependency cases."""
import sys
sys.dont_write_bytecode = True
from pathlib import Path
import importlib.util,io,contextlib,json,re,hashlib,tempfile,shutil
root=Path(__file__).resolve().parents[1];skill=root/'skills/arbeitsblatt-html'
spec=importlib.util.spec_from_file_location('reference_builder',skill/'scripts/build-reference-packages.py');module=importlib.util.module_from_spec(spec);spec.loader.exec_module(module)
results=[];temporary=[]
try:
for item in json.loads((skill/'references/referenzpakete/herkunft.json').read_text()):
md=(skill/'references/referenzpakete'/item['resource']).read_text();block=re.search(r'```python\n([\s\S]*?)```',md).group(1)
env={};output=io.StringIO()
with contextlib.redirect_stdout(output):exec(compile(block,item['resource'],'exec'),env)
material=Path(env['material_dir']);temporary.append(Path(env['reference_root']))
assert module.resource_files(material)==item['dependencies']
canonical=skill/'assets/vorlagen'/item['id'];image_files={x['file'] for x in item['images']}
for file in material.rglob('*'):
if file.is_file() and file.relative_to(material).as_posix() not in image_files:assert file.read_bytes()==(canonical/file.relative_to(material)).read_bytes(),file
if item['id']=='transport-language-bridge-1':
assert {'page-footer.css','assets/work-alone.svg','assets/work-with-a-partner.svg'} <=set(item['dependencies'])
(material/'page-footer.css').unlink()
try:module.resource_files(material)
except ValueError:pass
else:raise AssertionError('Missing CSS was accepted')
bad,count=re.subn(r'^data\s*=\s*base64\.b64decode\(payload,\s*validate=True\)',lambda m:m.group(0)+'[:-1]',block,count=1,flags=re.M)
assert count==1 and bad!=block, 'Corruption injection did not match the bootstrap'
try:exec(compile(bad,'truncated','exec'),{})
except AssertionError:pass
else:raise AssertionError('Truncated payload was accepted')
results.append({'id':item['id'],'files':item['files'],'dependencies':len(item['dependencies']),'ok':True})
assert len(results)==13
print(json.dumps({'ok':True,'references':results,'missingCssRejected':True,'truncatedPayloadsRejected':13,'canonicalHtmlCssAndNonReducedAssetsByteIdentical':True},ensure_ascii=False,indent=2))
finally:
for p in temporary:shutil.rmtree(p)
SHA-256: 827a57e270e56d5a01cb7548306cf8714e9dac25539387acb9d82a89a3346cbb