diff options
| author | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2026-08-25 22:55:02 +0200 |
|---|---|---|
| committer | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2026-08-25 22:55:02 +0200 |
| commit | a231681883935e0bee2f453b2a4ef3d798ed3534 (patch) | |
| tree | d7cff50c1dd9b70709e1d06a3a72507cd5bbbe51 /src/test | |
| parent | 20d8b08492bea77f42d019af5db66ef184f105b3 (diff) | |
Wer verweist, wird gelesen, auch wenn ihm nicht gefolgt wird
„Die Inhaltsübersicht wird entsprechend der vorstehenden Nummer 8 Buchst. a
geändert.“ Ein Befehl, der seinen Inhalt nicht nennt, sondern auf einen anderen
Punkt desselben Artikels verweist. Er galt bislang als nicht erkannt.
Zwei Prüfungen haben ergeben, dass die naheliegende Abhilfe nicht trägt. Die
Inhaltsübersicht wird nicht selbsttätig mitgeführt — der Anwender rührt sie bei
einer Umnummerierung oder Neufassung nicht an —, und das rheinland-pfälzische
Stammgesetz führt überhaupt keine Inhaltsübersicht. Den Befehl als „bereits
bewirkt“ zu quittieren wäre also aktenwidrig; ihn auszuführen verlangte, dass der
Anwender die Befehlsliste zurückliest und das Ziel umdeutet („Überschrift des
§ 13“ wird zur Titelspalte einer Übersichtszeile). Das ist ein eigenes Vorhaben.
Er wird deshalb gelesen und ausdrücklich als Grenze gerügt. Der Unterschied ist
kein kosmetischer: Der Rest wandert von „Befehl nicht erkannt“ zu „Nicht
unterstützt“ und damit in die Gruppe, die das Handbuch für die bewusst gezogenen
Grenzen führt. Die Synopse sagt fortan, dass hier das Erzeugnis die Grenze zieht,
und nennt dabei den Verweis; sie sagt nicht mehr, die Vorlage sei
unverständlich. Das Muster ist auf den ganzen Satz verankert, damit ein bloß
adverbiales „entsprechend“ nicht mitgerissen wird.
Damit sind sämtliche 23 Befehle des rheinland-pfälzischen Heftes erschlossen.
Geprüft: 388 Tests (zuvor 386).
Change-Id: I70d5ac52676310bf9bc2c95ab921bd74155a16b7
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/java/eu/mulk/aendggner/EndToEndTest.java | 24 | ||||
| -rw-r--r-- | src/test/java/eu/mulk/aendggner/aenderung/parse/BefehlErkennerTest.java | 30 |
2 files changed, 46 insertions, 8 deletions
diff --git a/src/test/java/eu/mulk/aendggner/EndToEndTest.java b/src/test/java/eu/mulk/aendggner/EndToEndTest.java index d0273ad..8cd867e 100644 --- a/src/test/java/eu/mulk/aendggner/EndToEndTest.java +++ b/src/test/java/eu/mulk/aendggner/EndToEndTest.java @@ -10,6 +10,7 @@ import eu.mulk.aendggner.aenderung.Aenderungsbefehl.Ersetzung; import eu.mulk.aendggner.aenderung.Aenderungsbefehl.Sammelbefehl; import eu.mulk.aendggner.aenderung.Aenderungsbefehl.StrukturEinfuegung; import eu.mulk.aendggner.aenderung.Aenderungsbefehl.UnbekannterBefehl; +import eu.mulk.aendggner.aenderung.Aenderungsbefehl.VerweisenderBefehl; import eu.mulk.aendggner.aenderung.Aenderungsbefehl.WortAnker; import eu.mulk.aendggner.aenderung.parse.AenderungsantragParser; import eu.mulk.aendggner.aenderung.parse.AenderungsgesetzParser; @@ -19,6 +20,7 @@ import eu.mulk.aendggner.aenderung.parse.SuperskriptModus; import eu.mulk.aendggner.aenderung.parse.TextBereiniger; import eu.mulk.aendggner.aenderung.parse.ZitatExtraktor; import eu.mulk.aendggner.anwendung.BefehlAnwender; +import eu.mulk.aendggner.anwendung.Grund; import eu.mulk.aendggner.anwendung.Nachfassungsabgleich; import eu.mulk.aendggner.gesetz.Absatz; import eu.mulk.aendggner.gesetz.Gesetz; @@ -1889,14 +1891,20 @@ class EndToEndTest { assertThat(befehlAn(parseErgebnis, "5. a) aa)")).isInstanceOf(Sammelbefehl.class); assertThat(befehlAn(parseErgebnis, "7. a) aa)")).isInstanceOf(Ersetzung.class); - // Eine benannte Grenze bleibt: die Verweisung auf einen anderen Punkt desselben Artikels - // („Die Inhaltsübersicht wird entsprechend der vorstehenden Nummer 8 Buchst. a geändert“). - var unerkannt = - parseErgebnis.befehle().stream() - .filter(b -> b instanceof UnbekannterBefehl) - .map(b -> b.provenienz().gliederungsPfad()) - .toList(); - assertThat(unerkannt).containsExactly("12."); + // Kein Befehl des Heftes bleibt mehr ungelesen. + assertThat(parseErgebnis.befehle()).noneMatch(b -> b instanceof UnbekannterBefehl); + + // Die Verweisung auf einen anderen Punkt desselben Artikels wird gelesen, aber bewusst nicht + // ausgeführt. Der Unterschied ist kein kosmetischer: Die Synopse sagt fortan, dass das + // Erzeugnis hier die Grenze zieht, und nicht, dass die Vorlage unverständlich sei. + var verweisung = befehlAn(parseErgebnis, "12."); + assertThat(verweisung).isInstanceOf(VerweisenderBefehl.class); + assertThat(((VerweisenderBefehl) verweisung).verweis()).isEqualTo("Nummer 8 Buchst. a"); + + var anwendung = BefehlAnwender.anwenden(gesetz, List.of(verweisung)); + assertThat(anwendung.protokoll().get(0).grund()).isEqualTo(Grund.NICHT_UNTERSTUETZT); + assertThat(anwendung.protokoll().get(0).begruendung()) + .contains("verweist auf „Nummer 8 Buchst. a“"); } private static Aenderungsbefehl befehlAn( diff --git a/src/test/java/eu/mulk/aendggner/aenderung/parse/BefehlErkennerTest.java b/src/test/java/eu/mulk/aendggner/aenderung/parse/BefehlErkennerTest.java index 80234b8..327c8db 100644 --- a/src/test/java/eu/mulk/aendggner/aenderung/parse/BefehlErkennerTest.java +++ b/src/test/java/eu/mulk/aendggner/aenderung/parse/BefehlErkennerTest.java @@ -15,6 +15,7 @@ import eu.mulk.aendggner.aenderung.Aenderungsbefehl.Streichung; import eu.mulk.aendggner.aenderung.Aenderungsbefehl.StrukturEinfuegung; import eu.mulk.aendggner.aenderung.Aenderungsbefehl.StrukturErsetzung; import eu.mulk.aendggner.aenderung.Aenderungsbefehl.Umnummerierung; +import eu.mulk.aendggner.aenderung.Aenderungsbefehl.VerweisenderBefehl; import eu.mulk.aendggner.aenderung.Aenderungsbefehl.WoerterEinfuegung; import eu.mulk.aendggner.aenderung.Aenderungsbefehl.WortAnker; import eu.mulk.aendggner.aenderung.Aenderungsbefehl.WortlautZuAbsatz; @@ -1514,4 +1515,33 @@ class BefehlErkennerTest { assertThat(ersetzung.alt()).isEqualTo(";"); assertThat(ersetzung.neu()).isEqualTo(","); } + + /** + * Die Verweisung auf einen anderen Punkt desselben Artikels wird gelesen, aber nicht ausgeführt. + * Erkannt zu werden ist gleichwohl mehr als gar nichts: Die Rüge sagt dann, dass das Erzeugnis + * die Grenze zieht, und nicht, dass die Vorlage unverständlich sei. + */ + @Test + void erkenntDieVerweisungAufEinenAnderenPunkt() { + var befehl = + erkenne( + "Die Inhaltsübersicht wird entsprechend der vorstehenden Nummer 8 Buchst. a geändert.", + Stelle.LEER); + + assertThat(befehl).containsInstanceOf(VerweisenderBefehl.class); + var verweisung = (VerweisenderBefehl) befehl.orElseThrow(); + assertThat(verweisung.verweis()).isEqualTo("Nummer 8 Buchst. a"); + assertThat(verweisung.stelle().betrifftInhaltsuebersicht()).isTrue(); + } + + /** Ein bloß adverbiales „entsprechend“ wird davon nicht mitgerissen. */ + @Test + void adverbialesEntsprechendIstKeineVerweisung() { + var befehl = + erkenne( + "In § 5 werden die Wörter „entsprechend der Anlage“ durch die Wörter „nach der" + + " Anlage“ ersetzt.", + Stelle.LEER); + assertThat(befehl).containsInstanceOf(Ersetzung.class); + } } |
