| ([^<]*)<\/th> | ([^<]*)<\/td><\/tr>/g)].map((m) => [m[1], m[2]])
+}
+
+// ------------------------------------------------------------------ ersatzHtml
+
+test('Ersatz-HTML ist reines ASCII', () => {
+ const p = plan(
+ { 1: ['09:00', '18:00'], 2: [['08:00', '12:00'], ['14:00', '18:30']], 3: 'rund', 4: 'vereinbarung', 5: ['18:00', '24:00'], 6: ['22:00', '02:00'] },
+ { name: 'Öffnungszeiten für Müller & Söhne – groß \u{1F600}' },
+ )
+ const html = ersatzHtml(daten({ plaene: [p] }), p)
+ assert.equal(typeof html, 'string')
+ assert.ok(html.length > 0)
+ assert.match(html, ASCII)
+})
+
+test('Ersatz-HTML zeigt alle Wochentage in der Reihenfolge Montag bis Sonntag', () => {
+ const p = plan({ 1: ['09:00', '18:00'], 6: ['10:00', '14:00'] })
+ const html = ersatzHtml(daten({ plaene: [p] }), p)
+ assert.match(html, /^/)
+ assert.match(html, /<\/table>\s*$/)
+ const z = zeilen(html)
+ assert.deepEqual(z.map((r) => r[0]), WOCHE)
+ assert.ok(html.includes('09:00–18:00'))
+ assert.ok(html.includes('10:00–14:00'))
+ assert.equal(z[1][1], 'geschlossen')
+ assert.equal(z[6][1], 'geschlossen')
+ for (const tag of WOCHE) {
+ assert.ok(html.indexOf(`| ${tag} | `) >= 0, `${tag} fehlt`)
+ }
+})
+
+test('Ersatz-HTML: Caption ist der Planname, bei leerem Namen "Öffnungszeiten"', () => {
+ const p = plan({ 1: ['09:00', '18:00'] }, { name: 'Sommer' })
+ assert.match(ersatzHtml(daten({ plaene: [p] }), p), /Sommer<\/caption>/)
+ for (const name of ['', ' ', null, undefined, 42]) {
+ const q = plan({ 1: ['09:00', '18:00'] }, { name })
+ const html = ersatzHtml(daten({ plaene: [q] }), q)
+ assert.match(html, /Öffnungszeiten<\/caption>/, `Name ${String(name)}`)
+ assert.match(html, ASCII)
+ }
+})
+
+test('Ersatz-HTML: Kundentext wird maskiert', () => {
+ const p = plan({ 1: ['09:00', '18:00'] }, { name: '' })
+ const html = ersatzHtml(daten({ plaene: [p] }), p)
+ assert.ok(html.includes('<b>'))
+ assert.ok(!html.includes(''))
+
+ const boese = plan({ 1: ['09:00', '18:00'] }, { name: '"> & \'x\'' })
+ const h2 = ersatzHtml(daten({ plaene: [boese] }), boese)
+ assert.ok(!h2.includes(' |
|---|