← Files JUJIES ArbeitsblätterARCHIVED FILE

tests/check-reference-packages.py

2.29 KB · Nov 11, 2026 · 13:26 UTC

↓ Download file

"""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