// ═══════════════════════════════════════════════════════════════════════════════ // Toetst dat de JavaScript in de statuspagina's parseert, en dat hij dat ook nog // doet nadat umbreld de template heeft ingevuld. // // Draaien: node tests/test_paginas_parsen.mjs // // Waarom dit bestand er is. De pagina's zijn met bijna drieduizend regels het // grootste deel van deze repo en er staat geen enkele toets op: alles eraan is // handwerk in een browser. Dat blijft zo voor wat het doet, maar één klasse fouten // hoeft niet op het apparaat gevonden te worden: een tikfout waardoor het script // helemaal niet loopt. Het gevolg daarvan is een pagina die stil op "unknown" // blijft staan, en dat lijkt op een agent die niet antwoordt. // // Aanleiding: op 30-08-2026 is de pagina van Evolu Relay in zijn geheel opnieuw // geschreven, negenhonderd regels in één keer. Zo'n wijziging hoort niet ongetoetst // naar een apparaat te gaan. // // De invulling wordt hier nagedaan en niet alleen de bron gelezen, want umbreld // haalt elke *.template door envsubst en wat er draait is dus niet wat er staat. // Dat vindt de gevallen waar het weghalen van een accolade-vorm de syntaxis breekt. // // LET OP wat deze helft NIET vindt, want dat is precies de fout die dit project // vreest: een template-literal als `iets ${x}` wordt na de invulling `iets ` en dat // parseert prima. Hij is dan stil kapot en niet luidruchtig. Wat dát dichthoudt is // de dollarteken-toets in tests/test_appstore_vorm.py, die élke accolade-vorm // vlagt die umbrelOS niet zelf invult. Deze toets is de tweede zeef en niet de // eerste. // // Wat dit verder NIET toetst: of het script het juiste doet. Alleen dat het loopt. // ═══════════════════════════════════════════════════════════════════════════════ import { readFileSync, readdirSync, existsSync } from 'node:fs'; import { dirname, join } from 'node:path'; import { fileURLToPath } from 'node:url'; import vm from 'node:vm'; const HIER = dirname(fileURLToPath(import.meta.url)); const REPO = join(HIER, '..'); let goed = 0; let fout = 0; const toets = (omschrijving, voorwaarde, uitleg) => { if (voorwaarde) { goed += 1; return; } fout += 1; console.log(`FOUT: ${omschrijving}${uitleg ? ` - ${uitleg}` : ''}`); }; /** Elke map in de repo-root met een umbrel-app.yml erin. Zelf gevonden, zoals de * Python-toets over de store dat ook doet: een derde app valt er dan vanzelf * onder. */ const appMappen = () => readdirSync(REPO, { withFileTypes: true }) .filter((regel) => regel.isDirectory()) .map((regel) => regel.name) .filter((naam) => existsSync(join(REPO, naam, 'umbrel-app.yml'))) .sort(); /** De inhoud van elk