lsa-planer

LSA-Planer Professional – Planungssoftware für Lichtsignalanlagen nach RiLSA 2015 und § 45 StVO. EUPL-1.2.

/ tests ui uebergangstabelleBeschriftung.test.ts

2,5 KB Rohdatei
tests/ui/uebergangstabelleBeschriftung.test.ts — 77 Zeilen
1 import { afterEach, describe, expect, it } from 'vitest';
2 import { ProjectStore } from '@/app/store';
3 import { createStandardIntersectionProject } from '@/domain/model/factory';
4 import { planView } from '@/ui/views/planView';
5
6 /**
7 * Befund 57 zur Fassung 5.9.0 (falsche Tabellenbeschriftung).
8 *
9 * WAS DER ANWENDER SONST ERLEBT
10 *
11 * Er steuert im Signalzeitenplan mit der Sprachausgabe die Tabelle im
12 * Abschnitt "Phasenübergänge" an - angesagt wird "Phasen des Umlaufs". Die
13 * Tabelle listet aber Uebergaenge ("Übergang", "Beginn", "Dauer", "Maßgebende
14 * Beziehung"), keine Phasen. Im Ausdruck fuehrt der Abschnitt "Phasen und
15 * Phasenübergänge" wirklich zwei Tabellen; der Name gehoert zur anderen.
16 *
17 * `beschrifteTabelle` setzt den Text als `<caption class="nur-vorlesen">` ein -
18 * er ist damit der zugaengliche Name der Tabelle und nur dort zu bemerken.
19 */
20
21 const FESTES_DATUM = new Date('2026-01-01T00:00:00Z');
22
23 afterEach(() => {
24 document.body.replaceChildren();
25 });
26
27 interface Ansicht {
28 readonly wurzel: HTMLElement;
29 readonly aufraeumen: () => void;
30 }
31
32 function zeichne(): Ansicht {
33 const wurzel = document.createElement('div');
34 document.body.append(wurzel);
35 const schliessen = planView.render(wurzel, {
36 store: new ProjectStore(createStandardIntersectionProject('Signalzeitenplan', FESTES_DATUM)),
37 refresh: () => {},
38 navigate: () => {},
39 target: null,
40 });
41 return {
42 wurzel,
43 aufraeumen: () => {
44 schliessen();
45 wurzel.remove();
46 },
47 };
48 }
49
50 /** Beschriftung der Tabelle, deren erste Spaltenueberschrift `kopf` lautet. */
51 function beschriftungZu(wurzel: HTMLElement, kopf: string): string {
52 const tabelle = [...wurzel.querySelectorAll('table')].find(
53 (t) => (t.querySelector('thead th')?.textContent ?? '').trim() === kopf,
54 );
55 if (tabelle === undefined) throw new Error(`Keine Tabelle mit erster Spalte "${kopf}"`);
56 return (tabelle.querySelector('caption')?.textContent ?? '').trim();
57 }
58
59 describe('Signalzeitenplan: die Uebergangstabelle heisst nach ihrem Inhalt', () => {
60 it('nennt die Tabelle der Phasenuebergaenge nicht "Phasen des Umlaufs"', () => {
61 const ansicht = zeichne();
62 try {
63 expect(beschriftungZu(ansicht.wurzel, 'Übergang')).toBe('Phasenübergänge im Umlauf');
64 } finally {
65 ansicht.aufraeumen();
66 }
67 });
68
69 it('laesst die Beschriftung der Signalzeitentabelle unberuehrt', () => {
70 const ansicht = zeichne();
71 try {
72 expect(beschriftungZu(ansicht.wurzel, 'Signalgruppe')).toBe('Signalzeiten je Signalgruppe');
73 } finally {
74 ansicht.aufraeumen();
75 }
76 });
77 });