aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/eu
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/eu')
-rw-r--r--src/test/java/eu/mulk/aendggner/EndToEndTest.java27
-rw-r--r--src/test/java/eu/mulk/aendggner/gesetz/land/LandesRechtTextParserTest.java41
2 files changed, 55 insertions, 13 deletions
diff --git a/src/test/java/eu/mulk/aendggner/EndToEndTest.java b/src/test/java/eu/mulk/aendggner/EndToEndTest.java
index df80a04..8fa50f5 100644
--- a/src/test/java/eu/mulk/aendggner/EndToEndTest.java
+++ b/src/test/java/eu/mulk/aendggner/EndToEndTest.java
@@ -782,12 +782,12 @@ class EndToEndTest {
* Spaltenspikes fest — die Spaltenreihenfolge des Inhaltsstroms ist bereits die Lesereihenfolge,
* eine koordinatenbasierte Spaltenerkennung ist dafür nicht nötig.
*
- * <p>Kein voller Akzeptanztest: gesetze.berlin.de ist wie das schleswig-holsteinische Portal eine
- * anmeldepflichtige juris-Anwendung, die Stammfassungen sind daraus nicht zu beschaffen. Artikel
- * 1 ändert zudem eine *Anlage*; anlagenbezogene Befehle wendet ÄndGgner an (siehe GEG), doch der
- * {@link eu.mulk.aendggner.gesetz.land.LandesRechtTextParser} kennt nur „§“- und „Art.“-Normköpfe
- * — eine handgepflegte Stammfassung könnte diese Anlage nicht tragen (dieselbe Grenze, an der
- * Baden-Württemberg zurückgestellt wurde).
+ * <p>Artikel 2 (LAF-Errichtungsgesetz) ist ein voller Akzeptanzfall: beide Befehle angewandt,
+ * alle fünf Normen gleich der amtlichen Nachfassung. Für Artikel 1 (ASOG) reicht die Prüfung bis
+ * zur Befehlserkennung. Fünf seiner sechs Befehle zielen auf die <em>Anlage</em>, deren Einheiten
+ * dort nicht als Aufzählungsmarken, sondern als Überschriften gesetzt sind („Nummer 6“, „Nummer
+ * 23“); sie brauchen einen eigenen Rang zwischen Norm und Absatz, den das Datenmodell noch nicht
+ * führt. Die Begründung im einzelnen steht in {@code Berlin/SOURCES}.
*/
@Test
void asogLafAendGBerlin() throws Exception {
@@ -807,13 +807,11 @@ class EndToEndTest {
// Artikel 2 trägt sein Ziel in der Änderungsformel („§ 2 Satz 1 des Gesetzes zur Errichtung
// …“); beide Punkte erben es als Kontext.
- var laf =
- new Gesetz(
- "LAF-ErrichtungsG",
- "Gesetz zur Errichtung eines Landesamtes für Flüchtlingsangelegenheiten und"
- + " Unterbringung",
- null,
- List.of());
+ var altLaf = SAMPLEDATA.resolve("Berlin/LAF-ErrG-alt.txt");
+ assumeTrue(Files.exists(altLaf), "Berliner Stammfassung fehlt");
+ var laf = new eu.mulk.aendggner.gesetz.land.LandesRechtLoader().load(altLaf);
+ // Dieses Gesetz führt kein Inhaltsverzeichnis; der Wortlaut beginnt beim ersten Normkopf.
+ assertThat(laf.normen()).hasSize(5);
var ergebnis = new AenderungsgesetzParser().parse(text, laf, null);
assertThat(ergebnis.artikel()).containsExactly("2");
assertThat(ergebnis.befehle()).hasSize(2);
@@ -858,6 +856,9 @@ class EndToEndTest {
// am nächsten Aufzählungspunkt verschlänge das offene Zitat die Punkte cc) und c).
assertThat(ZitatExtraktor.extrahiere(text).warnungen())
.anyMatch(w -> w.startsWith("Zitat vor dem Aufzählungspunkt „cc)“ nicht geschlossen"));
+
+ // Artikel 2 wird vollständig angewandt und gleicht danach der amtlichen Nachfassung.
+ pruefeGegenNachfassung(laf, ergebnis, "Berlin/LAF-ErrG-neu.txt");
}
/**
diff --git a/src/test/java/eu/mulk/aendggner/gesetz/land/LandesRechtTextParserTest.java b/src/test/java/eu/mulk/aendggner/gesetz/land/LandesRechtTextParserTest.java
index e0cb1fc..bed8f9e 100644
--- a/src/test/java/eu/mulk/aendggner/gesetz/land/LandesRechtTextParserTest.java
+++ b/src/test/java/eu/mulk/aendggner/gesetz/land/LandesRechtTextParserTest.java
@@ -258,4 +258,45 @@ class LandesRechtTextParserTest {
org.assertj.core.groups.Tuple.tuple("1.", "Der Rundfunkrat"));
assertThat(gesetz.norm("§ 15").orElseThrow().gliederung().titel()).isEqualTo("Der Rundfunkrat");
}
+
+ /**
+ * Eine Anlage ist eine eigene Norm; ihre enbez lautet genau wie im gii-XML („Anlage“, „Anlage 2“,
+ * „Anhang“), damit {@code Stelle.anlagenEnbez()} sie unverändert trifft. Alles hinter ihrem Kopf
+ * gehört zu ihr: Ihre inneren Überschriften gliedern nicht das Gesetz, und ein Paragraph, den sie
+ * zitiert, eröffnet keine Norm. Nur eine weitere Anlage beendet sie.
+ */
+ @Test
+ void erkenntAnlagenAlsEigeneNormen() {
+ var gesetz =
+ LandesRechtTextParser.parse(
+ """
+ Beispielgesetz
+ (BeispG)
+ Vom 1. Januar 2020
+ Erster Abschnitt Allgemeines
+ § 1 Zweck
+ (1) Dieses Gesetz dient der Erprobung.
+ Anlage
+ Zuständigkeitskatalog
+ (zu § 1 Absatz 1)
+ Erster Abschnitt Aufgaben der Behörden
+ (1) Die erste Aufgabe.
+ (2) Die zweite Aufgabe; § 1 bleibt unberührt.
+ Anlage 2
+ Muster
+ (1) Das Muster.
+ """);
+
+ assertThat(gesetz.normen())
+ .extracting(eu.mulk.aendggner.gesetz.Norm::enbez)
+ .containsExactly("§ 1", "Anlage", "Anlage 2");
+ // Die Überschrift innerhalb der Anlage ist Inhalt, keine Gliederung des Gesetzes.
+ assertThat(gesetz.gliederungen())
+ .extracting(Gliederung::bezeichnung)
+ .containsExactly("Erster Abschnitt");
+ assertThat(gesetz.norm("Anlage").orElseThrow().gesamtText())
+ .contains("Erster Abschnitt Aufgaben der Behörden")
+ .contains("§ 1 bleibt unberührt");
+ assertThat(gesetz.norm("Anlage 2").orElseThrow().gesamtText()).contains("Das Muster");
+ }
}