diff options
Diffstat (limited to 'src/test/java/eu')
3 files changed, 87 insertions, 1 deletions
diff --git a/src/test/java/eu/mulk/aendggner/EndToEndTest.java b/src/test/java/eu/mulk/aendggner/EndToEndTest.java index a395fa1..0b7820d 100644 --- a/src/test/java/eu/mulk/aendggner/EndToEndTest.java +++ b/src/test/java/eu/mulk/aendggner/EndToEndTest.java @@ -88,6 +88,13 @@ class EndToEndTest { // werden (kurze Stichwort-Zeile vor hängend eingerückter Definition, kein Wort wird getrennt). assertThat(text).contains("Nachhaltigkeitssiegels\ndas Anbringen"); assertThat(text).doesNotContain("Nachhaltigkeitssiegelsdas"); + // Dank geometrischer Umbruch-Klassifikation gilt das auch für Stichwort-Zeilen, die fast die + // volle Spaltenbreite erreichen (Nummer 4c) … + assertThat(text).contains("Treibhausgasemissionen\ndas Treffen"); + assertThat(text).doesNotContain("Treibhausgasemissionendas"); + // … und für markerlose Zeilenenden vor einer Aufzählungs-Folgezeile („und“ + „d)“). + assertThat(text).contains("vorgesehen und\nd) die Überwachung"); + assertThat(text).doesNotContain("undd)"); var parseErgebnis = new AenderungsgesetzParser().parse(text, gesetz, null); assertThat(parseErgebnis.artikel()).containsExactly("1"); @@ -100,6 +107,14 @@ class EndToEndTest { var anwendung = BefehlAnwender.anwenden(gesetz, parseErgebnis.befehle()); assertThat(anwendung.anzahlManuell()).isZero(); assertThat(anwendung.anzahlAngewandt()).isEqualTo(parseErgebnis.befehle().size()); + + // Kurzüberschrift und Definitionstext stehen in der angewandten Fassung auf eigenen Zeilen — + // sowohl bei XML-stämmigen (Nummer 22) als auch bei PDF-stämmigen (Nummer 2a) Anhang-Nummern. + var anhangNeu = anwendung.neu().norm("Anhang").orElseThrow(); + assertThat(anhangNeu.gesamtText()) + .contains("Irreführung über Unternehmereigenschaft\n die unwahre Angabe") + .contains("unzulässiges Anbringen eines Nachhaltigkeitssiegels\n das Anbringen"); + var synopse = SynopseBuilder.baue(gesetz, anwendung, parseErgebnis.warnungen(), false); assertThat(HtmlRenderer.rendere(synopse, "E2E-Test")).contains("Neue Fassung"); } 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 4ca86cf..8a7cf12 100644 --- a/src/test/java/eu/mulk/aendggner/aenderung/parse/TextBereinigerTest.java +++ b/src/test/java/eu/mulk/aendggner/aenderung/parse/TextBereinigerTest.java @@ -121,6 +121,57 @@ class TextBereinigerTest { } @Test + void ziehtMarkerlosNichtVorAufzaehlungsmarkerZusammen() { + // Ein Marker eröffnet eine bewusste Strukturzeile — auch wenn die Vorzeile markerlos mit + // einem Buchstaben endet und die Folgezeile klein beginnt („…und“ + „d) die Überwachung“). + var roh = + "es ist der Entzug der Verwendung im Fall von Verstößen gegen die Anforderungen" + + " vorgesehen und\n" + + "d) die Überwachung der Einhaltung der Anforderungen durch einen Dritten erfolgt. \n" + + "Nächste Zeile endet mit Leerzeichen. "; + + assertThat(TextBereiniger.bereinige(roh)).contains("und\nd) die Überwachung"); + } + + @Test + void ziehtMarkerlosNichtBeiGeometrischHartemZeilenendeZusammen() { + // Volle Spaltenbreite in Zeichen, aber laut Geometrie-Marker des FontgroessenFilters + // deutlich vor dem Rand endend (lange Stichwort-Zeile wie Nummer 4c im UWG-Anhang): + // der Umbruch ist bewusst und bleibt erhalten. + var roh = + "4c. Aussagen zu Umweltauswirkungen bei Kompensation von Treibhausgasemissionen\uE000\n" + + "das Treffen einer Aussage, die sich auf die Kompensation von" + + " Treibhausgasemissionen gründet. "; + + assertThat(TextBereiniger.bereinige(roh)).contains("Treibhausgasemissionen\ndas Treffen"); + } + + @Test + void reflowtGeometrischWeicheUmbruecheUndErhaeltHarte() { + var roh = + "Erste Zeile des Absatzes wird \uE001\n" + + "fortgesetzt und endet hier. \uE000\n" + + "Nächste eigene Zeile. \uE000"; + + assertThat(TextBereiniger.bereinige(roh)) + .isEqualTo("Erste Zeile des Absatzes wird fortgesetzt und endet hier.\nNächste eigene Zeile."); + } + + @Test + void strukturzeilenBleibenTrotzWeicherKlassifikationEigeneZeilen() { + // Gleich breite, zentrierte Artikel-Überschriften in Serie bilden ein Schein- + // Ausrichtungs-Cluster und werden fälschlich als weich klassifiziert — der Parser braucht + // sie aber allein auf der Zeile (teileInArtikel). + var roh = + "Artikel 2\uE001\n" + + "Inkrafttreten\uE000\n" + + "Dieses Gesetz tritt am Tag nach der Verkündung in Kraft. \uE000"; + + assertThat(TextBereiniger.bereinige(roh)) + .isEqualTo("Artikel 2\nInkrafttreten\nDieses Gesetz tritt am Tag nach der Verkündung in Kraft."); + } + + @Test void repariertInvertierteZitatzeichenAnAbsatzmarkern() { // BMJV-Vorlagen zeichnen das hängende „ nach dem Absatzmarker bzw. der Paragraphenangabe. assertThat(TextBereiniger.bereinige("(1) „ Ungeachtet des § 8 gilt.“")) diff --git a/src/test/java/eu/mulk/aendggner/gesetz/gii/GiiXmlLoaderTest.java b/src/test/java/eu/mulk/aendggner/gesetz/gii/GiiXmlLoaderTest.java index b3e3f32..607f24f 100644 --- a/src/test/java/eu/mulk/aendggner/gesetz/gii/GiiXmlLoaderTest.java +++ b/src/test/java/eu/mulk/aendggner/gesetz/gii/GiiXmlLoaderTest.java @@ -19,7 +19,7 @@ class GiiXmlLoaderTest { assertThat(gesetz.langue()).isEqualTo("Gesetz zur Erprobung des ÄndGgners"); assertThat(gesetz.kurzue()).isEqualTo("Testgesetz"); // Die Rahmen-Norm ohne enbez wird übersprungen. - assertThat(gesetz.normen()).hasSize(3); + assertThat(gesetz.normen()).hasSize(4); assertThat(gesetz.normen().get(0).enbez()).isEqualTo("Inhaltsübersicht"); assertThat(gesetz.norm("§ 1")).isPresent(); assertThat(gesetz.norm("§ 3")).isEmpty(); @@ -59,6 +59,26 @@ class GiiXmlLoaderTest { } @Test + void trenntKurzueberschriftUndDefinitionInAufzaehlungen() throws Exception { + var gesetz = new GiiXmlLoader().load(fixture()); + var anhang = gesetz.norm("Anhang").orElseThrow().absaetze().get(0).text(); + + // Zwei <LA>-Geschwister in einem <DD> (Kurzüberschrift + Definitionstext, wie im UWG-Anhang + // oder in § 2 IfSG) sind eigene Zeilen — nicht nahtlos verklebter Fließtext. Die Folgezeile + // ist tiefer eingerückt als die Aufzählungszeile, damit die Stellenauflösung sie als + // Kindzeile der Einheit erkennt. + assertThat(anhang).doesNotContain("Erprobungdie"); + assertThat(anhang) + .contains( + "1. Irreführung über die Erprobung\n" + + " die unwahre Angabe, die Erprobung sei abgeschlossen;"); + // Auch mit geschachtelter Aufzählung im Definitionstext bleibt die Zeilenstruktur erhalten. + assertThat(anhang) + .contains(" 2. Verheimlichung von Prüfschritten\n das Verschweigen, dass") + .contains(" a) Zwischenschritte oder"); + } + + @Test void flattetTabellenZuZeilen() throws Exception { var gesetz = new GiiXmlLoader().load(fixture()); var inhaltsuebersicht = gesetz.norm("Inhaltsübersicht").orElseThrow(); |
