From 8f133f69b0ba5f78f3c57b1706a1a6fe7a63f1dd Mon Sep 17 00:00:00 2001 From: Michael Stangl Date: Sat, 29 Aug 2026 09:39:30 +0200 Subject: [PATCH] [TEST] Globaler GUI-Aus-Schalter fuer automatische Testlaeufe Der VF-Linienzug-Wizard (*vfl-wizard-mode* Default T) oeffnete beim automatischen Replay-Test DCL-Dialoge und blockierte den Lauf. - ssg_core.lsp: globaler Schalter *ssg-gui-aus* + ssg-gui-p/-aus/-an - vf_linienzug.lsp: neue vfl-wizard-mode-p (Wizard nur wenn *vfl-wizard-mode* UND GUI nicht abgeschaltet); ersetzt die direkten *vfl-wizard-mode*-Checks in vfl-in-string/-real/-int, vfl-winkel-live und vfl-wizard-aktiv (deckt damit auch alle vflw-gruppe-*-Dialoge ab). Bei GUI-aus fallen die Eingaben auf den getstring/getint/getreal-Pfad, den die Testrunner per Mock/Replay bedienen. - test_linienzug.lsp: (ssg-gui-aus) vor dem Replay, (ssg-gui-an) danach (immer). - test_run_all.lsp: GUI aus um den gesamten Batch, danach wieder an. Alle Guards ueber atoms-family, damit aeltere Ladezustaende unveraendert funktionieren. Paren-Balance geprueft. Co-Authored-By: Claude Opus 4.8 (1M context) --- Lisp/ssg_core.lsp | 13 +++++++++++++ Lisp/vf_linienzug.lsp | 18 +++++++++++++----- tests/test_linienzug.lsp | 8 ++++++++ tests/test_run_all.lsp | 8 ++++++++ 4 files changed, 42 insertions(+), 5 deletions(-) diff --git a/Lisp/ssg_core.lsp b/Lisp/ssg_core.lsp index 6d3fcec..55ab336 100644 --- a/Lisp/ssg_core.lsp +++ b/Lisp/ssg_core.lsp @@ -137,6 +137,19 @@ ) +;; ------------------------------------------------------------ +;; GUI-MODUS (fuer automatische Tests) +;; ------------------------------------------------------------ +;; Globaler Schalter, um alle interaktiven Oberflaechen-Abfragen (DCL-Dialoge, +;; Wizard-Fenster) abzuschalten - dann laufen die Module ueber ihre Konsolen- +;; bzw. Nicht-GUI-Pfade, die von den Testrunnern per Mock-Eingabe/Replay +;; bedient werden. Default nil = GUI an (normaler Betrieb). +;; Test-Setup ruft (ssg-gui-aus) auf; ssg-gui-p fragt den Zustand ab. +(if (not (boundp '*ssg-gui-aus*)) (setq *ssg-gui-aus* nil)) +(defun ssg-gui-p () (null *ssg-gui-aus*)) ;; T = GUI erlaubt +(defun ssg-gui-aus () (setq *ssg-gui-aus* T) (princ)) +(defun ssg-gui-an () (setq *ssg-gui-aus* nil) (princ)) + ;; ------------------------------------------------------------ ;; LISP-PFAD-ERMITTLUNG ;; ------------------------------------------------------------ diff --git a/Lisp/vf_linienzug.lsp b/Lisp/vf_linienzug.lsp index 8f0c70f..ed50552 100644 --- a/Lisp/vf_linienzug.lsp +++ b/Lisp/vf_linienzug.lsp @@ -413,6 +413,14 @@ (if (not (boundp '*vflw-menu-default*)) (setq *vflw-menu-default* 1)) (if (not (boundp '*vflw-menu-frage*)) (setq *vflw-menu-frage* nil)) +;; Effektiver Wizard-Zustand: Wizard-DCL-Dialoge nur, wenn *vfl-wizard-mode* +;; gesetzt UND die GUI global nicht abgeschaltet ist (Tests: (ssg-gui-aus)). +;; Bei abgeschalteter GUI fallen alle Eingaben auf den Konsolen-/getXXX-Pfad +;; zurueck, den die Testrunner per Mock/Replay bedienen. +(defun vfl-wizard-mode-p () + (and *vfl-wizard-mode* + (or (not (car (atoms-family 1 '("SSG-GUI-P")))) (ssg-gui-p)))) + ;; Wizard-GRUPPEN-Dialoge (vflw-gruppe-*-impl) duerfen NUR bei echter Live- ;; Eingabe aufgehen - waehrend eines Journal-Replays (Editieren/Fortsetzen ;; einer bestehenden Kette, *vfl-replay-queue* gesetzt) liefern vfl-in-point/ @@ -424,7 +432,7 @@ ;; Eingabe umgeschaltet wird, liest der naechste Wrapper diese laengst ;; veralteten, falsch typisierten Werte statt neu zu fragen (siehe ;; vfl-neue-linie-messen: fuehrte zu einem String-statt-Punkt-Absturz). -(defun vfl-wizard-aktiv () (and *vfl-wizard-mode* (null *vfl-replay-queue*))) +(defun vfl-wizard-aktiv () (and (vfl-wizard-mode-p) (null *vfl-replay-queue*))) (defun c:VF_WIZARD_AN () (setq *vfl-wizard-mode* T) @@ -897,7 +905,7 @@ (vfl-in-value-p "STR" (function (lambda (v) (eq (type v) 'STR))) (function (lambda () - (if (and *vfl-wizard-mode* *vflw-menu-optionen*) + (if (and (vfl-wizard-mode-p) *vflw-menu-optionen*) (vflw-wahl (if *vflw-menu-frage* (ssg-text *vflw-menu-frage*) prompt) *vflw-menu-optionen* *vflw-menu-default*) (getstring prompt)))))) @@ -905,12 +913,12 @@ (defun vfl-in-real (prompt) (vfl-in-value "REAL" (function (lambda () - (if *vfl-wizard-mode* (vflw-zahl prompt) (getreal prompt)))))) + (if (vfl-wizard-mode-p) (vflw-zahl prompt) (getreal prompt)))))) (defun vfl-in-int (prompt) (vfl-in-value "INT" (function (lambda ( / vs) - (if (and *vfl-wizard-mode* *vflw-menu-optionen*) + (if (and (vfl-wizard-mode-p) *vflw-menu-optionen*) (progn (setq vs (vflw-wahl (if *vflw-menu-frage* (ssg-text *vflw-menu-frage*) prompt) *vflw-menu-optionen* *vflw-menu-default*)) @@ -963,7 +971,7 @@ ;; Live-Abfrage eines Winkelwerts. Wizard: Auswahl aus den Labels, Position -> ;; winkel-werte. Konsole: direkte Zahleneingabe (ENTER = Default). (defun vfl-winkel-live (prompt winkel-werte default-winkel / vs idx r) - (if (and *vfl-wizard-mode* *vflw-menu-optionen*) + (if (and (vfl-wizard-mode-p) *vflw-menu-optionen*) (progn (setq vs (vflw-wahl (if *vflw-menu-frage* (ssg-text *vflw-menu-frage*) prompt) *vflw-menu-optionen* *vflw-menu-default*)) diff --git a/tests/test_linienzug.lsp b/tests/test_linienzug.lsp index 85380a7..b101960 100644 --- a/tests/test_linienzug.lsp +++ b/tests/test_linienzug.lsp @@ -163,6 +163,11 @@ (setvar "ATTREQ" 0) (setvar "ATTDIA" 0) + ;; GUI aus: keine Wizard-DCL-Dialoge waehrend des automatischen Replays - + ;; die Eingaben kommen aus der Mock-Queue (getstring/getint/getreal), siehe + ;; ssg-gui-aus/ssg-gui-p in ssg_core.lsp und vfl-wizard-mode-p. + (if (car (atoms-family 1 '("SSG-GUI-AUS"))) (ssg-gui-aus)) + ;; --- Eingabe-Funktionen sichern und durch Mocks ersetzen --- ;; Punkte ueber den Produktions-Wrapper vfl-getpoint (feste 2-Arity), ;; getstring/getint/getreal (alle 1-argumentig) direkt. @@ -177,6 +182,9 @@ ;; --- Eingabe-Funktionen wiederherstellen (IMMER) --- (setq vfl-getpoint old-vgp getstring old-gs getint old-gi getreal old-gr) + ;; GUI wieder einschalten (auch nach Fehler), damit eine folgende interaktive + ;; Sitzung nicht headless bleibt. + (if (car (atoms-family 1 '("SSG-GUI-AN"))) (ssg-gui-an)) (setq rest-anz (length *tlz-q*)) diff --git a/tests/test_run_all.lsp b/tests/test_run_all.lsp index 6abbbc6..7d4abdf 100644 --- a/tests/test_run_all.lsp +++ b/tests/test_run_all.lsp @@ -185,6 +185,11 @@ )) (princ "\n================================================================") + ;; GUI aus fuer den gesamten Batch: kein Modul (insb. VarioFoerderer-Linienzug) + ;; oeffnet DCL-/Wizard-Dialoge, die den automatischen Lauf blockieren wuerden. + ;; Am Ende wieder einschalten. Siehe ssg-gui-aus/-an in ssg_core.lsp. + (if (car (atoms-family 1 '("SSG-GUI-AUS"))) (ssg-gui-aus)) + ;; Tests laden und ausfuehren ;; Jeder Test bekommt eine eigene neue Zeichnung (statt die aktuelle ;; zu leeren/wiederzuverwenden) und bleibt danach als Tab offen. @@ -386,6 +391,9 @@ ) ) + ;; GUI wieder einschalten (Batch fertig). + (if (car (atoms-family 1 '("SSG-GUI-AN"))) (ssg-gui-an)) + (princ "\n\n================================================================") (princ "\n SSG_RUN_ALL_TESTS abgeschlossen.") (princ (strcat "\n Ergebnisse in: " (getenv "DXFMAKRO") "/tests/output/"))