← Files JUJIES ArbeitsblätterARCHIVED FILE
tests/check-browser-start.mjs
2.07 KB · Nov 11, 2026 · 13:26 UTC
import {mkdtemp,rm,readFile,readdir,mkdir,stat} from 'node:fs/promises';
import path from 'node:path';import {fileURLToPath} from 'node:url';import assert from 'node:assert/strict';
import {createBrowserStart} from '../skills/arbeitsblatt-html/scripts/create-browser-start.mjs';
const root=path.resolve(path.dirname(fileURLToPath(import.meta.url)),'..');
const examples=root+'/skills/arbeitsblatt-html/assets/beispiele';
await mkdir('work',{recursive:true});const scratch=await mkdtemp(path.resolve('work/browser-start-check-'));
try {
let count=0;
for(const id of await readdir(examples)){
const source=path.join(examples,id),manifest=JSON.parse(await readFile(source+'/manifest.json'));const original=await readFile(source+'/'+manifest.entry);
const output=path.join(scratch,id+'-browser.html');await createBrowserStart({sourceDirectory:source,output});
assert.deepEqual(await readFile(source+'/'+manifest.entry),original,'Generator changed the worksheet source');
const derived=await readFile(output,'utf8');
const fieldIds=h=>[...h.matchAll(/<(?:input|textarea|select)\b[^>]*\bid="([^"]+)"/g)].map(m=>m[1]);
const originalIds=fieldIds(original.toString());
assert.deepEqual(fieldIds(derived).filter(id=>originalIds.includes(id)),originalIds,'Worksheet field identities changed');
assert.equal((derived.match(/\bdata-tafelraum-page(?:=|>)/g)||[]).length,(original.toString().match(/\bdata-tafelraum-page(?:=|>)/g)||[]).length,'Page structure changed');
for(const m of derived.matchAll(/\b(?:src|href)="([^"]+)"/g)) {
if(/^(?:[a-z][a-z\d+.-]*:|\/|#)/i.test(m[1]))continue;
assert((await stat(path.resolve(scratch,decodeURIComponent(m[1].split('#')[0])))).isFile(),'Missing browser resource');
}
count++;
}
await assert.rejects(createBrowserStart({sourceDirectory:examples+'/hamburg-city-bikes-listening',output:examples+'/hamburg-city-bikes-listening/browser.html'}),/außerhalb/);
console.log(JSON.stringify({ok:true,packages:count,sourceAndFieldIdsPreserved:true,resourcesResolvable:true,importFolderProtected:true}));
} finally {await rm(scratch,{recursive:true,force:true});}
SHA-256: 489bf3e5937f163e0e9e34c999215ebcc114470198cba5f6c6c7a823f03951f5