[CHANGE] Nur noch EIN Test baut die HundM-Geometrie: Spec wird TEST_HUNDM05
Nach dem gruenen VF_SPEC_BAU-Lauf bauten zwei Tests dieselben 5 Ketten. Der Spec-Pfad ist jetzt der routinemaessige Bau-Test, der Aufzeichnungs-Pfad der abgeschaltete Regressionstest fuer das Journal-Format. Umbenennungen: - tests/testdata/vf_spec_hundm05.json -> tests/testdata/hundm05.json Die Spec ist das Eingabeformat und die Datei, in der weitere Ketten der Anlage nachgetragen werden. spec_ids jetzt VF_hundm05_LZ_* (wie im Aufzeichnungs-Protokoll), damit sich die Ergebnisse beider Laeufe paaren lassen. - tests/testdata/hundm05.json -> tests/testdata/hm_recformat.json tests/test_hundm05.lsp -> tests/test_hm_recformat.lsp (TEST_HM_RECFORMAT, Praefix hmrec:, Export hm_recformat:export-results) tests/test_hundm05.py -> tests/test_hm_recformat.py In alltests.json auf "disabled": true. Neu: tests/test_hundm05.lsp (TEST_HUNDM05) baut die Spec - OHNE eigene Bau-Logik, es ruft vsp-bau-datei aus Lisp/vf_spec.lsp. Damit gibt es genau einen Code-Pfad, der aus einer Spec Geometrie erzeugt; c:VF_SPEC_BAU nutzt denselben. tests/test_hundm05.py prueft das Ergebnis (die 9 Tests, die vorher in test_vf_spec.py standen); test_vf_spec.py ist jetzt reiner Uebersetzer-Test ohne CAD. Warum das Aufzeichnungsformat bleibt (Details in doc/TODO-plan-vf-interactive.md Abschnitt 4.7): - hm_recformat.json ist die EINZIGE eingecheckte Kopie der Originaldaten (data/polylines.dxf ist mit 124 MB per .gitignore ausgeschlossen). Die Spec ist daraus abgeleitet; ohne die Aufzeichnung faellt die rechte Seite des Rundlauf-Beweises weg. - Es prueft eine ANDERE Invariante: das Journal kommt roh aus der XDATA einer Kundenzeichnung. TEST_HM_RECFORMAT ist damit der einzige Test dafuer, dass ein BESTEHENDER VF_n-Block weiter abspielbar ist - also dass Doppelklick-Edit und 2D/3D-Konvertierung an Altbestand funktionieren. Ein spec-gebautes Journal kann das nicht zeigen, es kommt aus dem Uebersetzer. - Es dokumentiert die Frage-Reihenfolge (kommentar je Eintrag); die Spec verbirgt den Dialog, das ist ihr Zweck. Weitere Anpassungen: - Ergebnisdatei heisst nach der Spec-Datei (<basisname>_results.json), damit Befehl und Testrunner in dieselbe Datei schreiben. Verzeichnis: tests/output (Override DXFM_VF_SPEC_OUT); NICHT DXFM_RESULTS - das sind die Sivas-/ CSV-Exporte, dort landete die Datei ausserhalb des Testbaums. - Neu *vsp-dim-override* fuer TEST_HUNDM05_2D/_3D: wird je Kette angewandt, weil der Abbruch-Handler in vf-linienzug-modus *ssg-ils-dim* zurueck setzt. - Das Anlagenkuerzel der test_id in lib/vf_journal_export.py kam aus dem Namen der Ziel-JSON. Nach der Umbenennung haette eine Regenerierung die ids stillschweigend auf VF_hm_recformat_LZ_* geaendert und die Paarung der beiden Laeufe zerlegt - jetzt feste Konstante TEST_ID_ANLAGE. - conftest: hundm05_* Fixtures -> hmrec_* (die Spec-Fixtures stehen in tests/test_hundm05.py). Verifiziert: 98 pytest-Tests gruen (die 9 Ergebnis-Tests warten auf einen neuen TEST_HUNDM05-Lauf), alle .lsp lint-sauber, Spec-Regenerierung idempotent, TEST_VF_SPEC in BricsCAD 28 PASS / 0 FAIL. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+59
-27
@@ -77,6 +77,11 @@
|
||||
(if (not (boundp '*vsp-erster-dl*)) (setq *vsp-erster-dl* T))
|
||||
(if (not (boundp '*vsp-wo*)) (setq *vsp-wo* "Spec"))
|
||||
(if (not (boundp '*vsp-prompts*)) (setq *vsp-prompts* 0))
|
||||
;; Erzwungene Bau-Dimension ("2D"/"3D") fuer einen ganzen Lauf. nil = die
|
||||
;; Spec bzw. die Sitzung entscheidet. Muss JE KETTE neu gesetzt werden,
|
||||
;; darum in vsp-bau-aus-spec und nicht einmal aussen: der Abbruch-Handler in
|
||||
;; vf-linienzug-modus setzt *ssg-ils-dim* zurueck.
|
||||
(if (not (boundp '*vsp-dim-override*)) (setq *vsp-dim-override* nil))
|
||||
|
||||
;; Fehler sammeln (aeltester zuerst) statt beim ersten abzubrechen: eine
|
||||
;; handgeschriebene Spec hat selten genau einen Tippfehler.
|
||||
@@ -684,7 +689,7 @@
|
||||
|
||||
;; Eine Kette aus einer Spec bauen. Rueckgabe: Ergebnis-Record (Alist).
|
||||
;; Die Klammer um vf-linienzug-modus ist dieselbe wie in
|
||||
;; tests/test_hundm05.lsp: *error* sichern, fangen, *error* zurueck. Weil
|
||||
;; tests/test_hm_recformat.lsp: *error* sichern, fangen, *error* zurueck. Weil
|
||||
;; gefangen wird, laeuft der Abbruch-Handler der Modus-Funktion NICHT - eine
|
||||
;; abgebrochene Kette bleibt also als lose Geometrie liegen und ist per
|
||||
;; c:VF_SEKTION_RESTORE rettbar (vfl-segment-xdata-sichern hat pro Iteration
|
||||
@@ -716,7 +721,11 @@
|
||||
;; Dimension je Kette neu setzen: der Abbruch-Handler in
|
||||
;; vf-linienzug-modus setzt *ssg-ils-dim* zurueck, eine abgebrochene
|
||||
;; Kette wuerde die folgenden sonst in der falschen Dimension bauen.
|
||||
(setq dim (ssg-val kopf "dim"))
|
||||
;; Vorrang: expliziter Lauf-Override (Testbefehle _2D/_3D) vor dem
|
||||
;; Feld in der Spec. Ist keines gesetzt, gilt die Sitzung.
|
||||
(setq dim (if (and (boundp '*vsp-dim-override*) *vsp-dim-override*)
|
||||
*vsp-dim-override*
|
||||
(ssg-val kopf "dim")))
|
||||
(if dim (setq *ssg-ils-dim* dim))
|
||||
(setq rec (vsp-set rec "dimension" (vsp-dim-text)))
|
||||
(princ (strcat " -> " (itoa (length journal)) " Journal-Eintraege, "
|
||||
@@ -811,7 +820,7 @@
|
||||
;; TEIL 8: BEFEHL
|
||||
;; ============================================================
|
||||
;; Fragt nichts. Spec-Datei aus DXFM_VF_SPEC, sonst
|
||||
;; tests/testdata/vf_spec_hundm05.json; Ergebnisse nach DXFM_RESULTS bzw.
|
||||
;; tests/testdata/hundm05.json (die Ketten der Anlage HundM);
|
||||
;; tests/output.
|
||||
|
||||
;; ssg-ensure gibt es nur, wenn das Menue geladen wurde (SSG_LIB.mnl). Im
|
||||
@@ -831,30 +840,23 @@
|
||||
"\n Ergebnis: " (itoa ok) " OK, " (itoa rest) " Fehler"
|
||||
"\n================================================")))
|
||||
|
||||
(defun c:VF_SPEC_BAU ( / datei ziel specs records alt-dim)
|
||||
;; Eine Spec-Datei bauen. Rueckgabe: Liste der Ergebnis-Records (nil, wenn
|
||||
;; die Datei nicht lesbar war). Schreibt NICHTS - das entscheidet der
|
||||
;; Aufrufer (der Befehl legt die Datei selbst ab, der Testrunner ueber
|
||||
;; <name>:export-results). Genutzt von c:VF_SPEC_BAU UND von
|
||||
;; tests/test_hundm05.lsp, damit es nur EINEN Weg gibt, der Geometrie aus
|
||||
;; einer Spec erzeugt.
|
||||
(defun vsp-bau-datei (datei / specs records alt-dim)
|
||||
(vsp-modul-sichern "Gefaellestrecke")
|
||||
(setq datei (getenv "DXFM_VF_SPEC"))
|
||||
(if (or (null datei) (= datei ""))
|
||||
(setq datei (strcat (getenv "DXFMAKRO")
|
||||
"/tests/testdata/vf_spec_hundm05.json")))
|
||||
;; Ergebnis-JSON gehoert nach tests/output - dort liegen alle
|
||||
;; Testergebnisse (Konvention test_run_all.lsp, von den
|
||||
;; pytest-Fixtures gelesen, per .gitignore ausgeschlossen).
|
||||
;; NICHT DXFM_RESULTS: das ist das Verzeichnis der Sivas-/CSV-
|
||||
;; Exporte, dort wuerde die Datei ausserhalb des Testbaums landen.
|
||||
(setq ziel (getenv "DXFM_VF_SPEC_OUT"))
|
||||
(if (or (null ziel) (= ziel ""))
|
||||
(setq ziel (strcat (getenv "DXFMAKRO") "/tests/output")))
|
||||
(setq ziel (strcat ziel "/vf_spec_results.json"))
|
||||
|
||||
(princ (strcat "\n================================================"
|
||||
"\n VF_SPEC_BAU - " datei
|
||||
"\n================================================"))
|
||||
(setq specs (vsp-json-laden datei))
|
||||
(if (null specs)
|
||||
(princ "\n[VF_SPEC] Keine Specs gelesen - Abbruch.")
|
||||
(progn
|
||||
(cond
|
||||
((null specs)
|
||||
(princ "\n[VF_SPEC] Keine Specs gelesen - Abbruch.")
|
||||
nil)
|
||||
(T
|
||||
(ssg-start "VF_SPEC_BAU" '(("OSMODE") ("CECOLOR") ("ATTREQ") ("ATTDIA")))
|
||||
;; Ohne ATTREQ/ATTDIA 0 fragt jedes (command "_.INSERT" ...) nach
|
||||
;; Attributwerten - der wahrscheinlichste Haenger im Batch.
|
||||
(setvar "OSMODE" 0)
|
||||
(setvar "ATTREQ" 0)
|
||||
(setvar "ATTDIA" 0)
|
||||
@@ -873,10 +875,40 @@
|
||||
(princ (strcat "\n[VF_SPEC] FEHLER in der Spec-Schleife: "
|
||||
(vl-catch-all-error-message records)))
|
||||
(setq records '())))
|
||||
(vl-mkdir (vl-filename-directory ziel))
|
||||
(vsp-results-schreiben records ziel)
|
||||
(vsp-bilanz records)
|
||||
(ssg-end)))
|
||||
(ssg-end)
|
||||
records)))
|
||||
|
||||
;; Standard-Spec-Datei: DXFM_VF_SPEC, sonst die HundM-Ketten.
|
||||
(defun vsp-standard-datei ( / datei)
|
||||
(setq datei (getenv "DXFM_VF_SPEC"))
|
||||
(if (or (null datei) (= datei ""))
|
||||
(setq datei (strcat (getenv "DXFMAKRO") "/tests/testdata/hundm05.json")))
|
||||
datei)
|
||||
|
||||
;; Ergebnis-Datei zur Spec-Datei: gleicher Basisname, Endung _results.json,
|
||||
;; im Testausgabe-Verzeichnis. Damit schreibt ein Lauf mit hundm05.json nach
|
||||
;; hundm05_results.json - dieselbe Datei, die der Testrunner erwartet, also
|
||||
;; keine zweite Kopie derselben Ergebnisse.
|
||||
;; NICHT DXFM_RESULTS als Verzeichnis: das sind die Sivas-/CSV-Exporte, dort
|
||||
;; wuerde die Datei ausserhalb des Testbaums landen.
|
||||
(defun vsp-ziel-datei (spec-datei / verz)
|
||||
(setq verz (getenv "DXFM_VF_SPEC_OUT"))
|
||||
(if (or (null verz) (= verz ""))
|
||||
(setq verz (strcat (getenv "DXFMAKRO") "/tests/output")))
|
||||
(strcat verz "/" (vl-filename-base spec-datei) "_results.json"))
|
||||
|
||||
(defun c:VF_SPEC_BAU ( / datei ziel records)
|
||||
(setq datei (vsp-standard-datei))
|
||||
(setq ziel (vsp-ziel-datei datei))
|
||||
(princ (strcat "\n================================================"
|
||||
"\n VF_SPEC_BAU - " datei
|
||||
"\n================================================"))
|
||||
(setq records (vsp-bau-datei datei))
|
||||
(if records
|
||||
(progn
|
||||
(vl-mkdir (vl-filename-directory ziel))
|
||||
(vsp-results-schreiben records ziel)))
|
||||
(princ))
|
||||
|
||||
(princ "\n[vf_spec] geladen (VF_SPEC_BAU)")
|
||||
|
||||
Reference in New Issue
Block a user