import { test } from 'node:test' import assert from 'node:assert/strict' import { readFileSync } from 'node:fs' import { sichtbarerText } from './support/knWortlautOrakel.js' const lese = (p) => readFileSync(new URL(`../public/${p}`, import.meta.url), 'utf8') const PAARE = ['login', 'kuendigen', 'widerrufen', 'auftrag', 'offline'].map((n) => [`${n}.html`, `neu/oeffentlich/${n}.html`]) const koerper = (html) => html.slice(html.search(/ [...koerper(html).matchAll(/\s(name|id|value|type|autocomplete|maxlength|required|min|max|step|inputmode|placeholder|enterkeyhint|data-text|data-label|data-label-for)(?:="([^"]*)")?/g)].map((m) => `${m[1]}=${m[2] ?? ''}`).sort() const skripte = (html) => [...html.matchAll(/]*>[\s\S]*?<\/script>/g)].map((m) => m[0].replace(/\s+/g, ' ')) for (const [alt, neu] of PAARE) { test(`${neu}: gleicher sichtbarer Text, gleiche Felder, gleiche Skripte wie ${alt}`, () => { // Kündigen und Widerrufen sprechen seit P7 du (Fassung 6, C14): ihr Text steht in test/knOeffentlichDu.test.js; Felder und Skripte werden weiter verglichen if (!['kuendigen.html', 'widerrufen.html'].includes(alt)) assert.equal(sichtbarerText(lese(neu)), sichtbarerText(lese(alt))) assert.deepEqual(attribute(lese(neu)), attribute(lese(alt))); assert.deepEqual(skripte(lese(neu)), skripte(lese(alt))) }) test(`${neu}: neuer Stil, hell, ohne Verläufe, Lila und Dunkelmodus`, () => { const n = lese(neu) assert.match(n, //); assert.equal((n.match(/name="theme-color"/g) || []).length, 1) assert.doesNotMatch(n, /aurora|dot-background|#9d3dfe|gradient|\/login\.css|\/legal-form\.css|\/auftrag\.css|prefers-color-scheme|content="light dark"/) if (neu.endsWith('offline.html')) assert.doesNotMatch(n, / { const n = lese('neu/oeffentlich/login.html'); assert.match(n, /