From 5efff363d45cf03f334bf10145367e7bc43d2754 Mon Sep 17 00:00:00 2001 From: Matthias Andreas Benkard Date: Wed, 26 Aug 2026 07:46:48 +0200 Subject: Die Eingabe darf eine Anschrift sein MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Das Handbuch verlangte, jede Eingabe als Datei bereitzuhalten. Für das Bundesrecht war das eine Zumutung: Die Anschrift des Norm-XML folgt aus der Abkürzung des Gesetzes, und wer sie von Hand herunterlädt, verrichtet eine Arbeit, die das Erzeugnis selbst verrichten kann. Der neue Bezug nimmt einen Dateipfad, eine Anschrift oder die Kurzform „gii:“ und gibt eine Quelle zurück. Die Kennung ist die klein geschriebene Abkürzung, in der jedes andere Zeichen als Buchstabe, Ziffer und Bindestrich zum Unterstrich wird; führt sie ins Leere, so wird im Verzeichnis des Portals nachgeschlagen, denn dass das UWG dort „uwg_2004“ heißt, kann niemand wissen. Bleibt es mehrdeutig, so wird nicht geraten, sondern aufgezählt. Die vorhandene Datei behält den Vorrang: Wer eine Datei „gii:etwas“ nennt, meint sie. Zwei Kleinigkeiten, die das Werkzeug erst brauchbar machen: Der Zwischenspeicher ist eine Bequemlichkeit und keine Bedingung — ist das Heimatverzeichnis schreibgeschützt, so wird eben jedes Mal geladen. Und ein Vermittler wird aus HTTPS_PROXY samt Kennung übernommen; die Laufzeit liest das nicht von sich aus, obgleich es auf der Kommandozeile die gewohnte Angabe ist und in einer Behörde jeder Weg darüber führt. Der Bezug gehört allein der Befehlszeile. Die Pipeline kennt weiterhin nur Name und Bytes, und die Browserfassung rührt ihn nicht an. Geprüft: mvnw verify, 415 Tests (zuvor 406), reuse lint 196/196. Von Hand belegt ist der Lauf ganz ohne Datei — „gii:UWG 2004“ nebst der Drucksache 21/1855 von dserver.bundestag.de, zwanzig Befehle angewandt; die Synopse aus „gii:UWG 2004“ gleicht bis auf den Quellennamen zeichengenau der aus der örtlichen XML-Datei. Change-Id: I935efb19a5777fc8dd08c96ff44376b65fb7211b --- src/test/java/eu/mulk/aendggner/BezugTest.java | 59 ++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 src/test/java/eu/mulk/aendggner/BezugTest.java (limited to 'src/test/java/eu') diff --git a/src/test/java/eu/mulk/aendggner/BezugTest.java b/src/test/java/eu/mulk/aendggner/BezugTest.java new file mode 100644 index 0000000..6b54691 --- /dev/null +++ b/src/test/java/eu/mulk/aendggner/BezugTest.java @@ -0,0 +1,59 @@ +// SPDX-FileCopyrightText: 2026 Matthias Andreas Benkard +// SPDX-License-Identifier: AGPL-3.0-or-later +package eu.mulk.aendggner; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assumptions.assumeTrue; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; + +/** + * Geprüft wird, was ohne Netz zu prüfen ist: die Ableitung der Kennung, die Ableitung des Namens + * und der Vorrang der vorhandenen Datei. Der Abruf selbst gehört nicht in eine Prüfung, die auf + * jedem Rechner laufen soll. + */ +class BezugTest { + + /** + * Die Kennung des Portals: klein geschrieben, und was kein Buchstabe, keine Ziffer und kein + * Bindestrich ist, wird zum Unterstrich. So schreibt gesetze-im-internet.de seine Anschriften. + */ + @ParameterizedTest + @CsvSource({ + "UWG 2004, uwg_2004", + "uwg_2004, uwg_2004", + "GEG, geg", + "1-DM-GoldmünzG, 1-dm-goldm_nzg", + "' IfSG ', ifsg", + }) + void leitetDieKennungAb(String angabe, String erwartet) { + assertThat(Bezug.kennung(angabe)).isEqualTo(erwartet); + } + + @ParameterizedTest + @CsvSource({ + "https://dserver.bundestag.de/btd/21/018/2101855.pdf, 2101855.pdf", + "https://www.gesetze-im-internet.de/uwg_2004/xml.zip, xml.zip", + "https://example.org/heft.pdf?fassung=2#seite3, heft.pdf", + }) + void leitetDenNamenAusDerAnschriftAb(String anschrift, String erwartet) { + assertThat(Bezug.dateiname(anschrift)).isEqualTo(erwartet); + } + + /** Die vorhandene Datei hat den Vorrang: Wer eine Datei „gii:etwas“ nennt, meint sie. */ + @Test + void nimmtDieVorhandeneDateiVorJederDeutung() throws IOException, InterruptedException { + var datei = Path.of("src/test/resources/sampledata/Brandenburg/FraktG-alt.txt"); + assumeTrue(Files.exists(datei), "Beispieldaten fehlen"); + + var quelle = Bezug.hole(datei.toString()); + + assertThat(quelle.name()).isEqualTo("FraktG-alt.txt"); + assertThat(quelle.inhalt()).isEqualTo(Files.readAllBytes(datei)); + } +} -- cgit v1.2.1