Test für alle Elemente ist jetzt interativ. Man kann jeden Test in einem Reiter offen lassen und ansehen (csv Export aller Files ist dann manuell zu machen), oder auch automatisch schliessen, dafür ist aber der csv Export anschliessend auch mit automatisch.
This commit is contained in:
+188
-29
@@ -20,8 +20,50 @@
|
||||
;; Aufruf in BricsCAD:
|
||||
;; (load (strcat (getenv "DXFMAKRO") "/tests/test_run_all.lsp"))
|
||||
;; SSG_RUN_ALL_TESTS
|
||||
;;
|
||||
;; Jedes Testmodul laeuft in einer eigenen, neuen Zeichnung (statt die
|
||||
;; aktuelle zu leeren/wiederzuverwenden). SSG_RUN_ALL_TESTS fragt zu
|
||||
;; Beginn interaktiv nach dem gewuenschten Modus:
|
||||
;; Kontroll-Modus (Default): Zeichnung wird gespeichert, auf den
|
||||
;; Inhalt gezoomt und bleibt als Tab offen - kein CSV/Sivas-Export.
|
||||
;; Am Ende sind alle Testzeichnungen gleichzeitig offen und koennen
|
||||
;; direkt begutachtet werden. CSV/Sivas-Export danach bei Bedarf
|
||||
;; manuell ueber TEST_EXPORT_ALL (tests/test_export_all.lsp).
|
||||
;; Automatik-Modus: Zeichnung wird gespeichert, per EXPORTCSV/
|
||||
;; EXPORTSIVAS exportiert und danach sofort wieder geschlossen -
|
||||
;; kompletter Lauf ohne manuellen Zusatzschritt, aber ohne
|
||||
;; gleichzeitige visuelle Kontrolle aller Zeichnungen am Ende.
|
||||
;; ============================================================
|
||||
|
||||
(vl-load-com)
|
||||
|
||||
|
||||
;; --- Auf Fertigstellung einer asynchron geschriebenen Datei warten ---
|
||||
;; csv:run-export startet Python per startapp (fire-and-forget). Pollt
|
||||
;; bis die Datei existiert und ihre Groesse ueber ein Intervall stabil
|
||||
;; bleibt, oder bis timeout-sec erreicht ist. Rueckgabe: T bei Erfolg.
|
||||
;; (Analog zu export_all:wait-for-file aus tests/test_export_all.lsp,
|
||||
;; hier lokal, da hier direkt auf der offenen Zeichnung exportiert wird
|
||||
;; statt auf einer bereits gespeicherten Datei.)
|
||||
(defun testrun:wait-for-file (path timeout-sec / elapsed size1 size2 done)
|
||||
(setq elapsed 0.0 done nil)
|
||||
(while (and (not done) (< elapsed timeout-sec))
|
||||
(if (findfile path)
|
||||
(progn
|
||||
(setq size1 (vl-file-size path))
|
||||
(command "_.DELAY" 400)
|
||||
(setq size2 (vl-file-size path))
|
||||
(if (and size1 size2 (= size1 size2) (> size1 0))
|
||||
(setq done T)
|
||||
)
|
||||
)
|
||||
(command "_.DELAY" 400)
|
||||
)
|
||||
(setq elapsed (+ elapsed 0.4))
|
||||
)
|
||||
done
|
||||
)
|
||||
|
||||
|
||||
;; --- Hilfsfunktion: String-Wert aus JSON-Objekt-Zeile lesen ---
|
||||
;; Sucht "key": "value" in obj-str und gibt value zurueck.
|
||||
@@ -99,14 +141,17 @@
|
||||
)
|
||||
|
||||
|
||||
(defun c:SSG_RUN_ALL_TESTS ( / tests-pfad tests-out-dir
|
||||
(defun c:SSG_RUN_ALL_TESTS ( / tests-pfad tests-out-dir app auto-export
|
||||
idx anz entry name save-fmt module
|
||||
namen befehl datei export-fn
|
||||
out-path old-json test-result)
|
||||
namen befehl datei export-fn new-doc
|
||||
out-path dwg-pfad dxf-pfad old-json test-result
|
||||
old-filenames csv-name sivas-name csv-pfad
|
||||
sivas-pfad csv-ok sivas-ok)
|
||||
|
||||
(setq tests-pfad (strcat (getenv "DXFMAKRO") "/tests"))
|
||||
(setq tests-out-dir (strcat tests-pfad "/output"))
|
||||
(vl-mkdir tests-out-dir)
|
||||
(setq app (vlax-get-acad-object))
|
||||
|
||||
;; Testliste aus alltests.json laden
|
||||
(setq *test-module* (alltests:load tests-pfad))
|
||||
@@ -120,15 +165,29 @@
|
||||
(setq anz (length *test-module*))
|
||||
(setq idx 0)
|
||||
|
||||
;; Modus abfragen: Kontrolle (Zeichnungen bleiben offen, kein Export)
|
||||
;; oder Automatik (Speichern + CSV/Sivas-Export + Schliessen je Test).
|
||||
;; ssg-ques gibt T zurueck wenn "No" gewaehlt wurde - deshalb "not".
|
||||
;; Default = Nein -> Kontroll-Modus (nicht-destruktiver Default).
|
||||
(setq auto-export
|
||||
(not (ssg-ques
|
||||
"Zeichnungen automatisch speichern, exportieren (CSV/Sivas) und schliessen"
|
||||
nil))
|
||||
)
|
||||
|
||||
(princ "\n")
|
||||
(princ "\n================================================================")
|
||||
(princ "\n SSG_RUN_ALL_TESTS")
|
||||
(princ (strcat "\n " (itoa anz) " Testmodule (aus alltests.json)"))
|
||||
(princ (if auto-export
|
||||
"\n Modus: Automatik (speichern + CSV/Sivas-Export + schliessen)"
|
||||
"\n Modus: Kontrolle (Zeichnungen bleiben offen, kein Export)"
|
||||
))
|
||||
(princ "\n================================================================")
|
||||
|
||||
;; Tests laden und ausfuehren
|
||||
;; Vor jedem Test werden alle Entities geloescht, damit jeder
|
||||
;; Testlauf eine eigene saubere Zeichnung erzeugt.
|
||||
;; Jeder Test bekommt eine eigene neue Zeichnung (statt die aktuelle
|
||||
;; zu leeren/wiederzuverwenden) und bleibt danach als Tab offen.
|
||||
(foreach entry *test-module*
|
||||
(setq idx (1+ idx))
|
||||
(setq name (cdr (assoc "name" entry)))
|
||||
@@ -158,19 +217,18 @@
|
||||
(princ " [kein Speichern]")
|
||||
)
|
||||
|
||||
;; Zeichnung leeren fuer sauberen Testlauf
|
||||
;; Frozen Layer werden von _.ERASE _ALL ignoriert - deshalb
|
||||
;; erst alle Layer auftauen, entsperren und einschalten.
|
||||
(command "_.LAYER" "_Thaw" "*" "_Unlock" "*" "_On" "*" "")
|
||||
(if (ssget "_X")
|
||||
(command "_.ERASE" "_ALL" "")
|
||||
)
|
||||
;; PURGE mehrfach, da verschachtelte Block-Referenzen
|
||||
;; erst nach mehreren Durchlaeufen entfernt werden
|
||||
(repeat 5
|
||||
(command "_.PURGE" "_ALL" "" "_N")
|
||||
)
|
||||
;; Block-Library-Flag zuruecksetzen
|
||||
;; Neue, leere Zeichnung fuer diesen Test anlegen und aktivieren
|
||||
(setq new-doc (vla-add (vla-get-documents app)))
|
||||
(vla-put-activedocument app new-doc)
|
||||
;; vf_core.lsp/Gefaellestrecke.lsp setzen die globalen Variablen "doc"
|
||||
;; und "modelspace" nur EINMAL, beim ersten Laden des Moduls (Top-Level-
|
||||
;; Code, kein erneuter Aufruf durch ssg-ensure). Ohne diese Aktualisierung
|
||||
;; wuerden VarioFoerderer/Gefaellestrecke weiterhin in das allererste
|
||||
;; Dokument der Sitzung zeichnen statt in die hier neu angelegte
|
||||
;; Zeichnung - die neuen Tabs blieben leer.
|
||||
(setq doc new-doc)
|
||||
(setq modelspace (vla-get-modelspace new-doc))
|
||||
;; Block-Library-Flag zuruecksetzen (Bloecke sind pro Zeichnung neu zu laden)
|
||||
(setq *lib-initialized* nil)
|
||||
|
||||
(if (findfile datei)
|
||||
@@ -193,19 +251,117 @@
|
||||
;; JSON-Export (immer)
|
||||
(apply export-fn (list tests-out-dir))
|
||||
|
||||
;; Datei speichern je nach save-fmt aus alltests.json
|
||||
(setq out-path (strcat tests-out-dir "/" name "_tests"))
|
||||
(cond
|
||||
((and save-fmt (= (strcase save-fmt) "DXF"))
|
||||
(command "_.DXFOUT" out-path 6)
|
||||
(princ (strcat "\n DXF gespeichert: " out-path ".dxf"))
|
||||
|
||||
(if auto-export
|
||||
|
||||
;; ==========================================================
|
||||
;; AUTOMATIK-MODUS: speichern (vereinfacht, kein Tab-Naming-
|
||||
;; Trick noetig) + CSV/Sivas-Export + Zeichnung schliessen.
|
||||
;; ==========================================================
|
||||
(progn
|
||||
(cond
|
||||
((and save-fmt (= (strcase save-fmt) "DWG"))
|
||||
(setq dwg-pfad (strcat out-path ".dwg"))
|
||||
(vla-saveas new-doc dwg-pfad)
|
||||
(princ (strcat "\n DWG gespeichert: " dwg-pfad))
|
||||
)
|
||||
((and save-fmt (= (strcase save-fmt) "DXF"))
|
||||
(command "_.DXFOUT" out-path 6)
|
||||
(princ (strcat "\n DXF gespeichert: " out-path ".dxf"))
|
||||
)
|
||||
(T
|
||||
(princ "\n (kein Speichern der Zeichnung)")
|
||||
)
|
||||
)
|
||||
|
||||
;; CSV/Sivas-Export direkt auf der offenen Zeichnung.
|
||||
;; *export-filenames* temporaer umbiegen, damit jeder Test
|
||||
;; seine eigenen CSV-Ergebnisse bekommt (statt der fixen
|
||||
;; Standardnamen "export.csv"/"export_sivas.csv").
|
||||
(setq csv-name (strcat name "_tests_export.csv"))
|
||||
(setq sivas-name (strcat name "_tests_sivas.csv"))
|
||||
(setq csv-pfad (strcat tests-out-dir "/" csv-name))
|
||||
(setq sivas-pfad (strcat tests-out-dir "/" sivas-name))
|
||||
(if (findfile csv-pfad) (vl-file-delete csv-pfad))
|
||||
(if (findfile sivas-pfad) (vl-file-delete sivas-pfad))
|
||||
|
||||
(setq old-filenames *export-filenames*)
|
||||
(setq *export-filenames*
|
||||
(list
|
||||
(cons "raw_json_datei" (cdr (assoc "raw_json_datei" old-filenames)))
|
||||
(cons "sivas_script" (cdr (assoc "sivas_script" old-filenames)))
|
||||
(cons "sivas_csv" sivas-name)
|
||||
(cons "csv_script" (cdr (assoc "csv_script" old-filenames)))
|
||||
(cons "csv_csv" csv-name)
|
||||
)
|
||||
)
|
||||
|
||||
(princ (strcat "\n CSV-Export -> " csv-name))
|
||||
(c:EXPORTCSV)
|
||||
(setq csv-ok (testrun:wait-for-file csv-pfad 30.0))
|
||||
(princ (if csv-ok "\n CSV OK" "\n CSV TIMEOUT/FEHLER"))
|
||||
|
||||
(princ (strcat "\n Sivas-Export -> " sivas-name))
|
||||
(c:EXPORTSIVAS)
|
||||
(setq sivas-ok (testrun:wait-for-file sivas-pfad 30.0))
|
||||
(princ (if sivas-ok "\n Sivas OK" "\n Sivas TIMEOUT/FEHLER"))
|
||||
|
||||
(setq *export-filenames* old-filenames)
|
||||
|
||||
;; Zeichnung schliessen: der urspruenglich schon offene Tab
|
||||
;; bleibt unangetastet, BricsCAD erzeugt daher kein neues
|
||||
;; Blank-Dokument samt Modul-/Menue-Reload.
|
||||
(vla-close new-doc :vlax-false)
|
||||
)
|
||||
((and save-fmt (= (strcase save-fmt) "DWG"))
|
||||
(command "_.-SAVEAS" "R2013" (strcat out-path ".dwg"))
|
||||
(princ (strcat "\n DWG gespeichert: " out-path ".dwg"))
|
||||
)
|
||||
(T
|
||||
(princ "\n (kein Speichern der Zeichnung)")
|
||||
|
||||
;; ==========================================================
|
||||
;; KONTROLL-MODUS: speichern, auf Inhalt zoomen, Tab offen
|
||||
;; lassen (bisheriges Verhalten).
|
||||
;; ==========================================================
|
||||
(progn
|
||||
(cond
|
||||
((and save-fmt (= (strcase save-fmt) "DWG"))
|
||||
;; Direkt als DWG speichern - Tab bleibt offen und benannt.
|
||||
;; Ueber ActiveX statt "_.-SAVEAS" "R2013" ...: Das Versions-
|
||||
;; Keyword "R2013" wird von BricsCADs Kommandozeilen-SAVEAS
|
||||
;; nicht zuverlaessig erkannt, wodurch der Befehl auf eine
|
||||
;; ungueltige Eingabe wartet und nie eine Datei schreibt
|
||||
;; (nachfolgende LISP-Eingaben landen dann im haengenden
|
||||
;; Prompt). vla-saveas ist deterministisch.
|
||||
(setq dwg-pfad (strcat out-path ".dwg"))
|
||||
(vla-saveas new-doc dwg-pfad)
|
||||
(princ (strcat "\n DWG gespeichert: " dwg-pfad))
|
||||
)
|
||||
((and save-fmt (= (strcase save-fmt) "DXF"))
|
||||
;; Erst als DWG speichern (nur fuer den Tab-Namen) und DXF
|
||||
;; exportieren. Danach die Zeichnung schliessen (entsperrt die
|
||||
;; DWG-Datei), die temporaere DWG loeschen und stattdessen die
|
||||
;; eigentlich angeforderte DXF-Datei erneut oeffnen - der Tab
|
||||
;; ist dann korrekt an die DXF gebunden, keine ungewollte DWG
|
||||
;; bleibt liegen.
|
||||
(setq dwg-pfad (strcat out-path ".dwg"))
|
||||
(setq dxf-pfad (strcat out-path ".dxf"))
|
||||
(vla-saveas new-doc dwg-pfad)
|
||||
(command "_.DXFOUT" out-path 6)
|
||||
(vla-close new-doc :vlax-false)
|
||||
(if (findfile dwg-pfad) (vl-file-delete dwg-pfad))
|
||||
(setq new-doc (vla-open (vla-get-documents app) dxf-pfad))
|
||||
(vla-put-activedocument app new-doc)
|
||||
(setq doc new-doc)
|
||||
(setq modelspace (vla-get-modelspace new-doc))
|
||||
(princ (strcat "\n DXF gespeichert: " dxf-pfad))
|
||||
)
|
||||
(T
|
||||
;; Kein Speichern angefordert: keine Datei erzeugen, Tab
|
||||
;; bleibt beim generischen Namen ("ZeichnungN").
|
||||
(princ "\n (kein Speichern der Zeichnung)")
|
||||
)
|
||||
)
|
||||
|
||||
;; Ansicht auf den gesamten Inhalt zoomen, Tab bleibt offen
|
||||
;; (naechster Test startet in einer neuen Zeichnung).
|
||||
(command "_.ZOOM" "_Extents")
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -216,6 +372,9 @@
|
||||
(princ "\n\n================================================================")
|
||||
(princ "\n SSG_RUN_ALL_TESTS abgeschlossen.")
|
||||
(princ (strcat "\n Ergebnisse in: " (getenv "DXFMAKRO") "/tests/output/"))
|
||||
(if (not auto-export)
|
||||
(princ "\n CSV/Sivas-Export: TEST_EXPORT_ALL manuell aufrufen (Menue: Tests -> Export CSV/Sivas ALL)")
|
||||
)
|
||||
(princ "\n================================================================")
|
||||
(princ)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user