diff options
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/eu/mulk/aendggner/EndToEndTest.java | 33 | ||||
| -rw-r--r-- | src/test/java/eu/mulk/aendggner/anwendung/BefehlAnwenderTest.java | 96 |
2 files changed, 117 insertions, 12 deletions
diff --git a/src/test/java/eu/mulk/aendggner/EndToEndTest.java b/src/test/java/eu/mulk/aendggner/EndToEndTest.java index 865afe6..fe0ab21 100644 --- a/src/test/java/eu/mulk/aendggner/EndToEndTest.java +++ b/src/test/java/eu/mulk/aendggner/EndToEndTest.java @@ -271,8 +271,9 @@ class EndToEndTest { // vorrücken, ihre Begleitänderungen aber an ihrer Dokumentstelle bleiben — die Wortfolge // „schriftliche“ etwa steht erst nach dem vorangehenden Punkt nur noch einmal im // Artikel und ist damit eindeutig. - // „Kein Rest“ heißt: jeder Befehl hat gegriffen. Es heißt nicht, dass die Norm in allem der - // amtlichen Nachfassung gleicht — was daran noch fehlt, steht weiter unten an Art. 56. + // „Kein Rest“ heißt zunächst nur: jeder Befehl hat gegriffen. Dass Art. 56 Abs. 1 darüber + // hinaus in Aufbau und Wortlaut der amtlichen Nachfassung gleicht, prüfen die + // Zusicherungen weiter unten. var anwendung = BefehlAnwender.anwenden(gesetz, parseErgebnis.befehle()); assertThat(anwendung.protokoll()).hasSameSizeAs(parseErgebnis.befehle()); var manuellPfade = @@ -298,16 +299,24 @@ class EndToEndTest { // Abs. 2 Nr. 12 Buchst. b führt ihre Marke allein auf der Zeile — sie ist trotzdem auflösbar. assertThat(art56.absaetze().get(1).text()).contains("(§ 2 Abs. 3 BJagdG)"); - // Offen bleibt an dieser Norm eine Frage, die mit der Reihenfolge nichts zu tun hat und schon - // vorher so stand: Der eingefügte Block „Nach Nr. 4 werden die folgenden Nrn. 5 bis 7 - // eingefügt“ landet am Ende des Absatzes statt hinter der Nr. 4, und der leere Platzhalter - // „7. (aufgehoben)“ der Altfassung bleibt zwischen den Nrn. 9 und 10 stehen. Beides ist hier - // festgehalten, damit es nicht unbemerkt bleibt — der Befehl gilt als angewandt, die Stellung - // seines Blocks ist aber falsch. - assertThat(katalog).contains("7. (aufgehoben)"); - assertThat(katalog.indexOf("5.\t den Verboten des Art. 29 Abs. 2")) - .as("die eingefügten Nrn. 5 bis 7 stehen (noch) hinter der Nr. 16") - .isGreaterThan(katalog.indexOf("16.")); + // Der Block aus „Nach Nr. 4 werden die folgenden Nrn. 5 bis 7 eingefügt“ steht an seinem Platz + // — zwischen der Nr. 4 und der Nr. 8 — und nicht mehr am Ende des Absatzes. Dass er dort + // landete, lag an der Neufassung der Nr. 4 einen Punkt zuvor: Sie setzte ihren Wortlaut ohne + // Einrückung, worauf der Zeilenblock der Nr. 4 bis ans Absatzende reichte (er reicht so weit, + // wie tiefer eingerückt wird). + assertThat(katalog.indexOf(" 5. den Verboten des Art. 29 Abs. 2")) + .as("die eingefügten Nrn. 5 bis 7 stehen zwischen der Nr. 4 und der Nr. 8") + .isGreaterThan(katalog.indexOf(" 4. entgegen Art. 29 Abs. 1")) + .isLessThan(katalog.indexOf(" 8. entgegen Art. 31 Abs. 2")); + // Der leere Platzhalter „7. (aufgehoben)“ der Altfassung weicht dem eingefügten Block, weil + // dieser dieselbe Bezeichnung vergibt — dieselbe Regel wie bei der Umnummerierung auf eine + // weggefallene Bezeichnung. Verdrängt wird dabei nur ein Platzhalter, nie ein Wortlaut: Der + // Platzhalter „1. (aufgehoben)“ des Abs. 2, den kein Befehl anrührt, bleibt unberührt stehen. + assertThat(katalog).doesNotContain("(aufgehoben)"); + assertThat(art56.absaetze().get(1).text()).contains("1. (aufgehoben)"); + // Die Einrückung der Aufzählungszeilen übersteht die Streichungen des Hefts: Sie wird nicht + // mehr von der Leerzeichen-Heilung mitgenommen, die nur noch die Naht der Streichung glättet. + assertThat(katalog).contains("\n 12. ohne Begleitung").doesNotContain("\n 12. "); // Art. 29a Abs. 5 trägt nach der Kaskade die neue Behördenbezeichnung und den eingefügten Satz. var art29a = anwendung.neu().norm("Art. 29a").orElseThrow(); diff --git a/src/test/java/eu/mulk/aendggner/anwendung/BefehlAnwenderTest.java b/src/test/java/eu/mulk/aendggner/anwendung/BefehlAnwenderTest.java index 7e7da85..212a037 100644 --- a/src/test/java/eu/mulk/aendggner/anwendung/BefehlAnwenderTest.java +++ b/src/test/java/eu/mulk/aendggner/anwendung/BefehlAnwenderTest.java @@ -1192,6 +1192,102 @@ class BefehlAnwenderTest { .isEqualTo("Zweck dieses Gesetzes ist die Erprobung, auch in Teilen,."); } + /** + * Ein Katalog, wie ihn das Stammgesetz führt: Aufzählungszeilen auf zwei Leerzeichen, darunter + * ein weggefallener Platzhalter. + */ + private static Gesetz katalog() { + return new Gesetz( + "TestG", + "Gesetz zur Erprobung", + "Testgesetz", + List.of( + new Norm( + "§ 1", + "Zweck", + null, + List.of( + new Absatz( + "1", + "Erprobt wird, wer\n" + + " 1. Befehle erkennt,\n" + + " 2. Befehle schriftlich anwendet,\n" + + " 3. (weggefallen)\n" + + " 4. Ergebnisse prüft.")), + false)), + List.of()); + } + + /** + * Die Neufassung einer Nummer setzt ihren Wortlaut auf die Einrückung der alten Einheit. Ohne sie + * stünde die Zeile in Spalte 0 und der Zeilenblock ihrer Marke reichte bis ans Absatzende — ein + * nachfolgender Einfügebefehl träte dann an die falsche Stelle. + */ + @Test + void neufassungEinerNummerBehaeltDieEinrueckung() { + var befehl = + new Neufassung( + stelle(new Stelle.Paragraph("1"), new Stelle.AbsatzNr("1"), new Stelle.NummerNr("2")), + "2. Befehle anwendet,", + PROV); + + var ergebnis = BefehlAnwender.anwenden(katalog(), List.of(befehl)); + + assertThat(ergebnis.protokoll().get(0).status()).isEqualTo(Status.ANGEWANDT); + assertThat(absatzText(ergebnis.neu(), "§ 1", 0)) + .contains("\n 2. Befehle anwendet,\n") + .doesNotContain("\n2. "); + } + + /** + * Die Heilung des Weißraums nach einer Streichung glättet die Naht und sonst nichts: Die + * Einrückung der Aufzählungszeilen bleibt, wie sie war. + */ + @Test + void streichungLaesstDieEinrueckungUnberuehrt() { + var befehl = + new Streichung( + stelle(new Stelle.Paragraph("1"), new Stelle.AbsatzNr("1")), "schriftlich ", PROV); + + var ergebnis = BefehlAnwender.anwenden(katalog(), List.of(befehl)); + + assertThat(ergebnis.protokoll().get(0).status()).isEqualTo(Status.ANGEWANDT); + assertThat(absatzText(ergebnis.neu(), "§ 1", 0)) + .isEqualTo( + "Erprobt wird, wer\n" + + " 1. Befehle erkennt,\n" + + " 2. Befehle anwendet,\n" + + " 3. (weggefallen)\n" + + " 4. Ergebnisse prüft."); + } + + /** + * Vergibt ein eingefügter Block eine Bezeichnung, die ein leerer Platzhalter noch hält, so weicht + * dieser — dieselbe Regel wie bei der Umnummerierung auf eine weggefallene Bezeichnung. + */ + @Test + void eingefuegterBlockVerdraengtDenWeggefallenenPlatzhalter() { + var befehl = + new StrukturEinfuegung( + stelle(new Stelle.Paragraph("1"), new Stelle.AbsatzNr("1"), new Stelle.NummerNr("2")), + false, + Ebene.NUMMER, + "3", + "3. Befehle ordnet,", + PROV); + + var ergebnis = BefehlAnwender.anwenden(katalog(), List.of(befehl)); + + assertThat(ergebnis.protokoll().get(0).status()).isEqualTo(Status.ANGEWANDT); + assertThat(absatzText(ergebnis.neu(), "§ 1", 0)) + .isEqualTo( + "Erprobt wird, wer\n" + + " 1. Befehle erkennt,\n" + + " 2. Befehle schriftlich anwendet,\n" + + " 3. Befehle ordnet,\n" + + " 4. Ergebnisse prüft."); + } + private static String absatzText(Gesetz gesetz, String enbez, int index) { return gesetz.norm(enbez).orElseThrow().absaetze().get(index).text(); } |
