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.java8
-rw-r--r--src/test/java/eu/mulk/aendggner/aenderung/parse/BefehlErkennerTest.java37
-rw-r--r--src/test/java/eu/mulk/aendggner/aenderung/parse/StellenParserTest.java21
-rw-r--r--src/test/java/eu/mulk/aendggner/synopse/HtmlRendererTest.java28
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");