aboutsummaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
Diffstat (limited to 'src/test')
-rw-r--r--src/test/java/eu/mulk/aendggner/EndToEndTest.java24
-rw-r--r--src/test/java/eu/mulk/aendggner/aenderung/parse/BefehlErkennerTest.java30
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);
+ }
}