[FEAT] Weitere Objekte der Anlage in hundm05.json bauen (Kreisel)
tests/testdata/hundm05.json enthaelt jetzt neben den 5 Spec-Ketten auch andere Objekte der Anlage - erkennbar am Feld "function", im Format der jeweiligen Einzel-Testdaten (ein Kreisel also wie in kreisel_tests.json). Damit beschreibt EINE Datei die ganze Anlage. - tests/test_hundm05.lsp: hundm05:bau-zusatzobjekte sammelt alle Objekte mit "function" und baut sie; hundm05:bau-kreisel ruft kreisel-insert-script (wie tests/test_kreisel.lsp) und liefert einen Ergebnis-Record in derselben Form wie die Ketten. Eigener ssg-start-Rahmen mit ATTREQ/ATTDIA 0, weil vsp-bau-datei seinen schon geschlossen hat und (command "_.INSERT" ...) sonst nach Attributwerten fragt. Je Objekt gefangen, damit ein Fehler die restlichen nicht mitnimmt. - Lisp/vf_spec.lsp: "kind" ist jetzt ein Record-Feld (Default "linienzug") statt eines Literals in vsp-result-json - so schreibt vsp-results-schreiben beide Objektarten in EINE Ergebnisdatei. - lib/vf_spec_export.py: Objekte der Ziel-Datei, die keine Kette beschreiben, werden beim Neuschreiben unveraendert ans Dateiende uebernommen. Ohne das waere jeder von Hand ergaenzte Eintrag beim naechsten Generatorlauf weg - die Datei ist erzeugt UND handgepflegt. spec_aus_flachen_objekten ueberspringt sie jetzt statt zu werfen, genau wie vsp-gruppieren in LISP. - tests/test_hundm05.py: die Ketten-Tests filtern auf kind "linienzug" (Records ohne das Feld stammen aus aelteren Laeufen und waren nur Ketten); neue Klasse TestZusatzobjekte prueft Status, expect_block_prefix, expect_hoehe (Attribut HOEHE), expect_kreiselart (KREISELART) und den Einfuegepunkt - dieselben Erwartungsfelder wie tests/test_kreisel.py. - tests/test_vf_spec.py: neuer Test, dass die Zusatzobjekte die Ketten-Zerlegung nicht beeinflussen - auch nicht, wenn sie mitten zwischen den Sektionen stehen (der eingetragene Kreisel stand zunaechst inmitten der Sub-Knoten von Kette 5; nach dem Regenerieren steht er am Dateiende). Verifiziert: 118 pytest-Tests gruen, Spec-Regenerierung uebernimmt das Zusatzobjekt (58 Objekte), beide .lsp lint-sauber. Die Kreisel-Tests warten auf den naechsten TEST_HUNDM05-Lauf. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+18
-5
@@ -164,11 +164,23 @@ class TestSpecDaten:
|
||||
f'Token {idx} - {was}'
|
||||
|
||||
def test_objekte_zuordenbar(self, spec_objekte):
|
||||
"""Jedes Objekt ist Kopf, Sektion oder Sub - die Gruppierregel von
|
||||
vsp-gruppieren kennt nichts anderes."""
|
||||
"""Jedes Objekt ist Kopf, Sektion, Sub - oder ein von Hand
|
||||
ergaenztes Anlagenteil (erkennbar an "function", z.B. ein Kreisel).
|
||||
Etwas anderes kennt weder vsp-gruppieren noch der Generator."""
|
||||
for i, obj in enumerate(spec_objekte):
|
||||
assert ("spec_id" in obj) or ("glied" in obj) or ("sub" in obj), \
|
||||
f"Objekt {i} ist weder Kopf, Sektion noch Sub: {obj}"
|
||||
assert ("spec_id" in obj) or ("glied" in obj) or ("sub" in obj) \
|
||||
or ("function" in obj), \
|
||||
f"Objekt {i} ist weder Kette noch Anlagenteil: {obj}"
|
||||
|
||||
def test_fremde_objekte_stoeren_die_ketten_nicht(self, spec_objekte):
|
||||
"""Die von Hand ergaenzten Anlagenteile duerfen die Ketten-Zerlegung
|
||||
nicht beeinflussen - auch nicht, wenn sie mitten zwischen den
|
||||
Sektionen stehen."""
|
||||
fremde = [o for o in spec_objekte if "function" in o]
|
||||
ohne = [o for o in spec_objekte if "function" not in o]
|
||||
assert (len(vse.spec_aus_flachen_objekten(spec_objekte))
|
||||
== len(vse.spec_aus_flachen_objekten(ohne))), \
|
||||
f"{len(fremde)} Zusatzobjekt(e) veraendern die Kettenzahl"
|
||||
|
||||
def test_kopf_felder(self, spec_objekte):
|
||||
for obj in spec_objekte:
|
||||
@@ -221,7 +233,8 @@ class TestSpecDaten:
|
||||
|
||||
def test_flach_fuer_lisp_parser(self, spec_objekte):
|
||||
"""ssg-parse-json-array liest zeilenweise: ein "{" beginnt ein
|
||||
Objekt, Verschachtelung ist unmoeglich."""
|
||||
Objekt, Verschachtelung ist unmoeglich. Gilt auch fuer die von Hand
|
||||
ergaenzten Anlagenteile."""
|
||||
for obj in spec_objekte:
|
||||
for k, v in obj.items():
|
||||
assert not isinstance(v, dict), \
|
||||
|
||||
Reference in New Issue
Block a user