diff options
Diffstat (limited to 'src/test/java')
4 files changed, 94 insertions, 0 deletions
diff --git a/src/test/java/eu/mulk/aendggner/EndToEndTest.java b/src/test/java/eu/mulk/aendggner/EndToEndTest.java index bd17d79..44903e7 100644 --- a/src/test/java/eu/mulk/aendggner/EndToEndTest.java +++ b/src/test/java/eu/mulk/aendggner/EndToEndTest.java @@ -110,10 +110,18 @@ class EndToEndTest { assertThat(parseErgebnis.artikel()).contains("1"); assertThat(parseErgebnis.befehle().size()).isGreaterThanOrEqualTo(100); + // Der Großteil der Befehle wird erkannt; nur einige Spezialfälle (Mehrquell-Ersetzungen, + // §§-Bereiche, Chapeau-Angaben) bleiben unbekannt. + var unbekannt = + parseErgebnis.befehle().stream().filter(b -> b instanceof UnbekannterBefehl).count(); + assertThat(unbekannt).isLessThanOrEqualTo(8); + // Das XML ist bereits konsolidiert; entscheidend ist, dass die Anwendung sauber terminiert // und jeden Befehl protokolliert. var anwendung = BefehlAnwender.anwenden(gesetz, parseErgebnis.befehle()); assertThat(anwendung.protokoll()).hasSameSizeAs(parseErgebnis.befehle()); + // Gliederungs-Überschriften (Teil/Abschnitt) werden als Befehle erkannt und angewandt. + assertThat(anwendung.anzahlAngewandt()).isGreaterThanOrEqualTo(50); var synopse = SynopseBuilder.baue(gesetz, anwendung, parseErgebnis.warnungen(), false); assertThat(HtmlRenderer.rendere(synopse, "E2E-Test")).contains("Manuell prüfen"); } 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 2d0db8a..230bfca 100644 --- a/src/test/java/eu/mulk/aendggner/aenderung/parse/BefehlErkennerTest.java +++ b/src/test/java/eu/mulk/aendggner/aenderung/parse/BefehlErkennerTest.java @@ -519,6 +519,43 @@ class BefehlErkennerTest { } @Test + void gliederungsUeberschriftNeufassung() { + var befehl = + erkenne( + "Die Überschrift von Teil 3 wird wie folgt gefasst: „Teil 3 Anforderungen an" + + " bestehende Gebäude“.", + Stelle.LEER); + assertThat(befehl).get().isInstanceOf(Neufassung.class); + assertThat(befehl.orElseThrow().stelle().betrifftGliederung()).isTrue(); + } + + @Test + void gliederungsUeberschriftStreichung() { + var befehl = erkenne("Die Überschrift von Teil 2 Abschnitt 4 wird gestrichen.", Stelle.LEER); + assertThat(befehl).get().isInstanceOf(Aufhebung.class); + assertThat(befehl.orElseThrow().stelle().gliederungsPfad()).hasSize(2); + } + + @Test + void absatzbezeichnungStreichung() { + var befehl = + erkenne( + "Die Absatzbezeichnung „(2)“ wird gestrichen.", + new Stelle(List.of(new Stelle.Paragraph("64")))); + var b = befehl.orElseThrow(); + assertThat(b).isInstanceOf(Aufhebung.class); + assertThat(b.stelle().absatzbezeichnung()).get().extracting(Stelle.Absatzbezeichnung::nummer) + .isEqualTo("2"); + } + + @Test + void inhaltsuebersichtAngabeWirdTypisiert() { + var befehl = erkenne("Die Angabe zu Teil 3 wird wie folgt gefasst: „Teil 3 Neu“.", Stelle.LEER); + assertThat(befehl).get().isInstanceOf(Neufassung.class); + assertThat(befehl.orElseThrow().stelle().betrifftInhaltsuebersicht()).isTrue(); + } + + @Test void mehrfachErsetzungWirdSammelbefehl() { // Mehrere Ersetzungspaare unter einem gemeinsamen „ersetzt“. var befehl = 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 c0ea159..9389534 100644 --- a/src/test/java/eu/mulk/aendggner/aenderung/parse/StellenParserTest.java +++ b/src/test/java/eu/mulk/aendggner/aenderung/parse/StellenParserTest.java @@ -67,4 +67,25 @@ class StellenParserTest { assertThat(stellen).extracting(Stelle::anzeigeText) .containsExactly("Absatz 1 Satz 1", "Absatz 1 Satz 2"); } + + @Test + void parstGliederungspfad() { + assertThat(StellenParser.parse("Teil 3 Abschnitt 2").orElseThrow().anzeigeText()) + .isEqualTo("Teil 3 Abschnitt 2"); + } + + @Test + void parstUeberschriftVonGliederung() { + var stelle = StellenParser.parse("Die Überschrift von Teil 3 Abschnitt 2").orElseThrow(); + assertThat(stelle.betrifftUeberschrift()).isTrue(); + assertThat(stelle.gliederungsPfad()).hasSize(2); + assertThat(stelle.anzeigeText()).isEqualTo("Überschrift Teil 3 Abschnitt 2"); + } + + @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()) + .isEqualTo("Absatz 1"); + } } diff --git a/src/test/java/eu/mulk/aendggner/synopse/HtmlRendererTest.java b/src/test/java/eu/mulk/aendggner/synopse/HtmlRendererTest.java index b82778c..01c25cd 100644 --- a/src/test/java/eu/mulk/aendggner/synopse/HtmlRendererTest.java +++ b/src/test/java/eu/mulk/aendggner/synopse/HtmlRendererTest.java @@ -3,12 +3,14 @@ package eu.mulk.aendggner.synopse; import static org.assertj.core.api.Assertions.assertThat; import eu.mulk.aendggner.aenderung.Aenderungsbefehl.Ersetzung; +import eu.mulk.aendggner.aenderung.Aenderungsbefehl.Neufassung; import eu.mulk.aendggner.aenderung.Aenderungsbefehl.UnbekannterBefehl; import eu.mulk.aendggner.aenderung.Provenienz; import eu.mulk.aendggner.aenderung.Stelle; import eu.mulk.aendggner.anwendung.BefehlAnwender; import eu.mulk.aendggner.gesetz.Absatz; import eu.mulk.aendggner.gesetz.Gesetz; +import eu.mulk.aendggner.gesetz.Gliederung; import eu.mulk.aendggner.gesetz.Norm; import java.util.List; import org.junit.jupiter.api.Test; @@ -71,6 +73,32 @@ class HtmlRendererTest { } @Test + void wendetGliederungsUeberschriftAnUndRendertDiff() { + var alt = + new Gesetz( + "TestG", + "Testgesetz", + "TestG", + List.of(new Norm("§ 1", "Zweck", null, List.of(new Absatz("1", "Text.")), false)), + List.of(new Gliederung("030", "Teil 3", "Alte Überschrift"))); + var befehl = + new Neufassung( + new Stelle( + List.of(new Stelle.Ueberschrift(), new Stelle.Gliederungseinheit("Teil", "3"))), + "Teil 3 Neue Überschrift", + PROV); + + var anwendung = BefehlAnwender.anwenden(alt, List.of(befehl)); + assertThat(anwendung.protokoll().get(0).status()).isEqualTo(BefehlAnwender.Status.ANGEWANDT); + assertThat(anwendung.neu().gliederungen().get(0).titel()).isEqualTo("Neue Überschrift"); + + var html = + HtmlRenderer.rendere(SynopseBuilder.baue(alt, anwendung, List.of(), false), "quelle"); + assertThat(html).contains("Geänderte Gliederungs-Überschriften"); + assertThat(html).contains("<del>Alte</del>").contains("<ins>Neue</ins>"); + } + + @Test void zeigtWarnungenAn() { var html = HtmlRenderer.rendere(synopse(), "quelle"); |
