lsa-planer

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

/ tests ui ortseingabe.test.ts

3,2 KB Rohdatei
tests/ui/ortseingabe.test.ts — 70 Zeilen
1 import { describe, expect, it } from 'vitest';
2 import { leseKoordinate } from '@/domain/geometrie/projektion';
3 import { ORTSEINGABE_HINWEIS } from '@/ui/lageplan/luftbild';
4
5 /*
6 * Der Hinweis am Ortsfeld des Luftbilddialogs gegen das, was leseKoordinate
7 * tatsaechlich erkennt.
8 *
9 * Der Text sagte zuvor "die Adresse aus einem Kartendienst hier einfuegen" und
10 * meinte die Internetadresse. In einem Verkehrsplanungsprogramm liest das
11 * jeder als Hausanschrift - und sucht dann vergeblich nach einer Ortssuche,
12 * die es nicht gibt. Zugleich verbarg die Formulierung den bequemsten Weg:
13 * Verweis aus der Adresszeile kopieren, einfuegen, fertig.
14 *
15 * Ein Hinweis, der etwas verspricht, was der Leser nicht erkennt, ist
16 * schlimmer als keiner. Deshalb wird hier nicht der Wortlaut festgenagelt,
17 * sondern jede Zusage des Textes am Verhalten geprueft.
18 */
19
20 /** Ein Verweis aus jedem Dienst, den der Hinweis namentlich nennt. */
21 const VERWEISE: readonly [string, string][] = [
22 ['OpenStreetMap', 'https://www.openstreetmap.org/#map=19/50.9412784/6.9582814'],
23 ['Google Maps', 'https://www.google.com/maps/@50.9412784,6.9582814,110m/data=!3m1!1e3'],
24 ['Apple Karten', 'https://maps.apple.com/?ll=50.9412784,6.9582814'],
25 ['Bing', 'https://www.bing.com/maps?cp=50.9412784~6.9582814&lvl=19'],
26 ];
27
28 describe('Hinweis am Ortsfeld deckt sich mit dem, was gelesen wird', () => {
29 it('erkennt jeden Dienst, den der Hinweis namentlich nennt', () => {
30 for (const [name, verweis] of VERWEISE) {
31 expect(ORTSEINGABE_HINWEIS, `${name} muss im Hinweis stehen`).toContain(name);
32 expect(leseKoordinate(verweis), `${name} muss gelesen werden`).not.toBeNull();
33 }
34 });
35
36 it('nennt keinen Dienst, den es nicht liest', () => {
37 // Die Gegenrichtung. Sonst wandert beim naechsten Wortwechsel ein Name in
38 // den Text, den der Leser gar nicht kennt - genau der Fall, der den
39 // Anwender vor ein scheinbar kaputtes Feld setzte.
40 const bekannt = VERWEISE.map(([name]) => name);
41 for (const name of ['Here', 'Waze', 'Mapy', 'TomTom', 'Komoot']) {
42 expect(bekannt, name).not.toContain(name);
43 expect(
44 ORTSEINGABE_HINWEIS,
45 `${name} steht im Hinweis, wird aber nicht geprüft`,
46 ).not.toContain(name);
47 }
48 });
49
50 it('sagt die zwei Zahlen zu und liest sie', () => {
51 expect(ORTSEINGABE_HINWEIS).toMatch(/zwei Zahlen/);
52 expect(leseKoordinate('50,941278 6,958281')).not.toBeNull();
53 });
54
55 it('schliesst die Hausanschrift aus und begruendet es', () => {
56 expect(leseKoordinate('Bahnhofstraße 12, 12345 Musterstadt')).toBeNull();
57 expect(ORTSEINGABE_HINWEIS).toContain('Hausanschrift');
58 // Nicht nur "geht nicht", sondern warum: Eine Ortssuche liesse die
59 // Anschrift den Rechner verlassen. Das ist die Entscheidung, die dahinter
60 // steht, und sie gehoert an die Stelle, an der sie auffaellt.
61 expect(ORTSEINGABE_HINWEIS).toMatch(/verließe|verlässt|den Rechner/);
62 });
63
64 it('verwechselt Internetadresse und Hausanschrift nicht mehr', () => {
65 // "Adresszeile" ist eindeutig, "Adresse" allein war es nicht.
66 expect(ORTSEINGABE_HINWEIS).toContain('Adresszeile');
67 expect(ORTSEINGABE_HINWEIS).toContain('Verweis');
68 expect(ORTSEINGABE_HINWEIS).not.toMatch(/\bdie Adresse aus einem\b/);
69 });
70 });