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.java22
-rw-r--r--src/test/java/eu/mulk/aendggner/aenderung/parse/StellenParserTest.java15
-rw-r--r--src/test/java/eu/mulk/aendggner/aenderung/parse/TextBereinigerTest.java9
3 files changed, 46 insertions, 0 deletions
diff --git a/src/test/java/eu/mulk/aendggner/EndToEndTest.java b/src/test/java/eu/mulk/aendggner/EndToEndTest.java
index 19a7c8c..b3bea08 100644
--- a/src/test/java/eu/mulk/aendggner/EndToEndTest.java
+++ b/src/test/java/eu/mulk/aendggner/EndToEndTest.java
@@ -597,5 +597,27 @@ class EndToEndTest {
assertThat(ergebnis.befehle())
.extracting(b -> b.stelle().anzeigeText())
.containsExactly("§ 2 Satz 1 Nummer 2", "§ 2 Satz 1 Nummer 2");
+
+ // Artikel 1 ändert die unnummerierte, nach ihrer Vorschrift benannte Anlage („Die Anlage zu
+ // § 2 Absatz 4 Satz 1 wird wie folgt geändert“). Der Zusatz benennt die Anlage nur — er darf
+ // nicht als Ziel „§ 2“ gelesen werden; die Punkte erben „Anlage“ als Kontext.
+ var asog =
+ new Gesetz(
+ "ASOG Bln", "Allgemeines Sicherheits- und Ordnungsgesetz", null, List.of());
+ var artikel1 = new AenderungsgesetzParser().parse(text, asog, null);
+ assertThat(artikel1.artikel()).containsExactly("1");
+ assertThat(artikel1.befehle())
+ .extracting(b -> b.stelle().anzeigeText())
+ .containsExactly(
+ "§ 67 Absatz 2",
+ "Anlage Nummer 6 Absatz 2",
+ "Anlage Nummer 23 Absatz 4a",
+ "Anlage Nummer 23");
+ // Bekannte Grenze: „Vor den Wörtern „…“ wird folgender Absatz 5 eingefügt“ — eine
+ // Struktureinfügung, deren Position ein Wortanker statt einer Stelle bestimmt.
+ assertThat(artikel1.befehle().stream().filter(b -> b instanceof UnbekannterBefehl).toList())
+ .singleElement()
+ .extracting(b -> b.provenienz().gliederungsPfad())
+ .isEqualTo("2. b) bb)");
}
}
diff --git a/src/test/java/eu/mulk/aendggner/aenderung/parse/StellenParserTest.java b/src/test/java/eu/mulk/aendggner/aenderung/parse/StellenParserTest.java
index f15b98f..d5b960a 100644
--- a/src/test/java/eu/mulk/aendggner/aenderung/parse/StellenParserTest.java
+++ b/src/test/java/eu/mulk/aendggner/aenderung/parse/StellenParserTest.java
@@ -110,6 +110,21 @@ class StellenParserTest {
}
@Test
+ void parstUnnummerierteBenannteAnlage() {
+ // Ein Gesetz mit einer einzigen Anlage benennt sie nach der Vorschrift, zu der sie gehört.
+ // Der Zusatz identifiziert die Anlage und ist nicht selbst Ziel — sonst würde das darin
+ // genannte „§ 2“ als Ziel gelesen und die falsche Norm geändert.
+ var anlage = StellenParser.parse("Die Anlage zu § 2 Absatz 4 Satz 1").orElseThrow();
+ assertThat(anlage.anzeigeText()).isEqualTo("Anlage");
+ assertThat(anlage.anlagenEnbez()).contains("Anlage");
+ assertThat(anlage.paragraph()).isEmpty();
+
+ // Nummerierte Anlagen bleiben unverändert.
+ assertThat(StellenParser.parse("Anlage 8 Nummer 1 Buchstabe b").orElseThrow().anzeigeText())
+ .isEqualTo("Anlage 8 Nummer 1 Buchstabe b");
+ }
+
+ @Test
void ignoriertChapeauZusatz() {
// „in der Angabe vor Nummer 1“ ist ein verfeinernder Zusatz ohne eigene Komponente.
assertThat(StellenParser.parse("Absatz 1 in der Angabe vor Nummer 1").orElseThrow().anzeigeText())
diff --git a/src/test/java/eu/mulk/aendggner/aenderung/parse/TextBereinigerTest.java b/src/test/java/eu/mulk/aendggner/aenderung/parse/TextBereinigerTest.java
index 5ed8b93..5b7e850 100644
--- a/src/test/java/eu/mulk/aendggner/aenderung/parse/TextBereinigerTest.java
+++ b/src/test/java/eu/mulk/aendggner/aenderung/parse/TextBereinigerTest.java
@@ -224,6 +224,15 @@ class TextBereinigerTest {
}
@Test
+ void entferntSteuerzeichenUndRepariertZerrisseneBefehlsvokabeln() {
+ // Im GVBl. für Berlin trägt der Einzug der Aufzählungsglieder ein U+0007; es steht unsichtbar
+ // vor dem Befehl und ließ dessen Zeilenanfangs-Anker ins Leere greifen. Im selben Heft ist
+ // „eingefügt“ als „ein ge-“ + „fügt“ gesetzt — ein Leerzeichen mitten in der Befehlsvokabel.
+ assertThat(TextBereiniger.bereinige("a)\t Nach Nummer 6 wird folgender Absatz ein ge-\nfügt:"))
+ .isEqualTo("a)\t Nach Nummer 6 wird folgender Absatz eingefügt:");
+ }
+
+ @Test
void schneidetDenBerlinerSeitenkopfAusDemFliesstext() {
// Im GVBl. für Berlin steht der laufende Seitenkopf nicht auf einer eigenen Zeile, sondern
// klebt samt Seitenzahl mitten im Text der folgenden Spalte.