import { describe, expect, it } from 'vitest'; import { leseKoordinate } from '@/domain/geometrie/projektion'; import { ORTSEINGABE_HINWEIS } from '@/ui/lageplan/luftbild'; /* * Der Hinweis am Ortsfeld des Luftbilddialogs gegen das, was leseKoordinate * tatsaechlich erkennt. * * Der Text sagte zuvor "die Adresse aus einem Kartendienst hier einfuegen" und * meinte die Internetadresse. In einem Verkehrsplanungsprogramm liest das * jeder als Hausanschrift - und sucht dann vergeblich nach einer Ortssuche, * die es nicht gibt. Zugleich verbarg die Formulierung den bequemsten Weg: * Verweis aus der Adresszeile kopieren, einfuegen, fertig. * * Ein Hinweis, der etwas verspricht, was der Leser nicht erkennt, ist * schlimmer als keiner. Deshalb wird hier nicht der Wortlaut festgenagelt, * sondern jede Zusage des Textes am Verhalten geprueft. */ /** Ein Verweis aus jedem Dienst, den der Hinweis namentlich nennt. */ const VERWEISE: readonly [string, string][] = [ ['OpenStreetMap', 'https://www.openstreetmap.org/#map=19/50.9412784/6.9582814'], ['Google Maps', 'https://www.google.com/maps/@50.9412784,6.9582814,110m/data=!3m1!1e3'], ['Apple Karten', 'https://maps.apple.com/?ll=50.9412784,6.9582814'], ['Bing', 'https://www.bing.com/maps?cp=50.9412784~6.9582814&lvl=19'], ]; describe('Hinweis am Ortsfeld deckt sich mit dem, was gelesen wird', () => { it('erkennt jeden Dienst, den der Hinweis namentlich nennt', () => { for (const [name, verweis] of VERWEISE) { expect(ORTSEINGABE_HINWEIS, `${name} muss im Hinweis stehen`).toContain(name); expect(leseKoordinate(verweis), `${name} muss gelesen werden`).not.toBeNull(); } }); it('nennt keinen Dienst, den es nicht liest', () => { // Die Gegenrichtung. Sonst wandert beim naechsten Wortwechsel ein Name in // den Text, den der Leser gar nicht kennt - genau der Fall, der den // Anwender vor ein scheinbar kaputtes Feld setzte. const bekannt = VERWEISE.map(([name]) => name); for (const name of ['Here', 'Waze', 'Mapy', 'TomTom', 'Komoot']) { expect(bekannt, name).not.toContain(name); expect( ORTSEINGABE_HINWEIS, `${name} steht im Hinweis, wird aber nicht geprüft`, ).not.toContain(name); } }); it('sagt die zwei Zahlen zu und liest sie', () => { expect(ORTSEINGABE_HINWEIS).toMatch(/zwei Zahlen/); expect(leseKoordinate('50,941278 6,958281')).not.toBeNull(); }); it('schliesst die Hausanschrift aus und begruendet es', () => { expect(leseKoordinate('Bahnhofstraße 12, 12345 Musterstadt')).toBeNull(); expect(ORTSEINGABE_HINWEIS).toContain('Hausanschrift'); // Nicht nur "geht nicht", sondern warum: Eine Ortssuche liesse die // Anschrift den Rechner verlassen. Das ist die Entscheidung, die dahinter // steht, und sie gehoert an die Stelle, an der sie auffaellt. expect(ORTSEINGABE_HINWEIS).toMatch(/verließe|verlässt|den Rechner/); }); it('verwechselt Internetadresse und Hausanschrift nicht mehr', () => { // "Adresszeile" ist eindeutig, "Adresse" allein war es nicht. expect(ORTSEINGABE_HINWEIS).toContain('Adresszeile'); expect(ORTSEINGABE_HINWEIS).toContain('Verweis'); expect(ORTSEINGABE_HINWEIS).not.toMatch(/\bdie Adresse aus einem\b/); }); });