;; ============================================================ ;; test_omniflo.lsp - Automatischer Integrationstest fuer Omniflo ;; ;; Laedt Testfaelle aus tests/testdata/omniflo_tests.json, ;; fuegt je einen Bogen und Weiche jeden Typs in verschiedenen ;; Hoehen ein (Versatz in x-Richtung je 200mm) und exportiert ;; die CSV-Datei nach tests/output/omniflo_export.csv. ;; ;; Voraussetzungen: ;; - SSG_LIB geladen (OmniModulInsert.lsp, export.lsp) ;; - Umgebungsvariablen DXFMAKRO, DXFM_DATA gesetzt ;; ;; Aufruf in BricsCAD: ;; (load "tests/test_omniflo.lsp") ;; TEST_OMNIFLO_EXPORT ;; ============================================================ ;; --- Omniflo Block non-interaktiv an gegebenem Punkt einfuegen --- ;; sivasnr-str : String der SivasNr (= Dateiname ohne .dxf) ;; insert-pt : Einfuegepunkt als Liste (x y z) ;; hoehe-str : Hoehe als String (fuer HOEHE-Attribut) ;; drehung-str : Drehung als String (fuer DREHUNG-Attribut) (defun omni:test-insert (sivasnr-str insert-pt hoehe-str drehung-str / dxf-pfad data-pfad blockEnt angleDeg) (setq data-pfad (getenv "DXFM_DATA")) (if (null data-pfad) (progn (princ "\n[TEST_OMNIFLO] FEHLER: DXFM_DATA nicht gesetzt!") nil ) (progn (setq dxf-pfad (strcat data-pfad "/omniflo/" sivasnr-str ".dxf")) (if (not (findfile dxf-pfad)) (progn (princ (strcat "\n[TEST_OMNIFLO] WARNUNG: DXF nicht gefunden: " dxf-pfad)) nil ) (progn (setq angleDeg (if drehung-str (atof drehung-str) 0.0)) (setvar "ATTREQ" 0) (setvar "ATTDIA" 0) (command "_.INSERT" dxf-pfad insert-pt "" "" angleDeg) (setq blockEnt (entlast)) (if (and blockEnt (= (cdr (assoc 0 (entget blockEnt))) "INSERT")) (ssg-attrib-set-on blockEnt (list (cons "HOEHE" (if hoehe-str hoehe-str "2000")) (cons "DREHUNG" (if drehung-str drehung-str "0")))) ) (princ (strcat "\n[TEST_OMNIFLO] OK: " sivasnr-str " H=" (if hoehe-str hoehe-str "2000"))) blockEnt ) ) ) ) ) ;; ============================================================ ;; C:TEST_OMNIFLO_EXPORT ;; ;; Liest omniflo_tests.json, fuegt alle Testbloecke ein, ;; exportiert CSV nach tests/output/. ;; ============================================================ (defun c:TEST_OMNIFLO_EXPORT (/ tests-json-pfad testfaelle x-pos x-schritt idx eintrag sivasnr hoehe-str drehung-str insert-pt anzahl-ok anzahl-fehler tests-out-dir old-results) (if (not *lib-initialized*) (init-bibliothek) ) (ssg-start "TEST_OMNIFLO_EXPORT" '(("OSMODE") ("ATTREQ") ("ATTDIA"))) (setvar "OSMODE" 0) (setvar "ATTREQ" 0) (setvar "ATTDIA" 0) ;; Testdaten laden (setq tests-json-pfad (strcat (getenv "DXFMAKRO") "/tests/testdata/omniflo_tests.json")) (if (not (findfile tests-json-pfad)) (progn (princ (strcat "\n[TEST_OMNIFLO] FEHLER: Testdaten nicht gefunden: " tests-json-pfad)) (ssg-end) (princ) ) (progn (setq testfaelle (omni:load-json tests-json-pfad)) (if (null testfaelle) (progn (princ "\n[TEST_OMNIFLO] FEHLER: Testdaten konnten nicht geladen werden.") (ssg-end) (princ) ) (progn (princ "\n================================================================") (princ "\n TEST_OMNIFLO_EXPORT") (princ (strcat "\n " (itoa (length testfaelle)) " Testfaelle geladen")) (princ "\n================================================================") ;; Alle Bloecke einfuegen (setq x-pos 0.0) (setq x-schritt 200.0) (setq anzahl-ok 0) (setq anzahl-fehler 0) (setq idx 0) (foreach eintrag testfaelle (setq idx (1+ idx)) (setq sivasnr (omni:val eintrag "sivasnr")) (setq hoehe-str (omni:val eintrag "hoehe")) (if (null hoehe-str) (setq hoehe-str "2000")) (if (numberp hoehe-str) (setq hoehe-str (rtos hoehe-str 2 0)) ) (setq drehung-str (omni:val eintrag "drehung")) (if (null drehung-str) (setq drehung-str "0")) (if (numberp drehung-str) (setq drehung-str (rtos drehung-str 2 1)) ) (setq insert-pt (list x-pos 0.0 (atof hoehe-str))) (princ (strcat "\n " (itoa idx) ". " (or (omni:val eintrag "description") sivasnr) " -> (" (rtos x-pos 2 0) ", 0, " hoehe-str ")")) (if (omni:test-insert sivasnr insert-pt hoehe-str drehung-str) (setq anzahl-ok (1+ anzahl-ok)) (setq anzahl-fehler (1+ anzahl-fehler)) ) (setq x-pos (+ x-pos x-schritt)) ) ;; Zusammenfassung (princ "\n================================================================") (princ (strcat "\n Eingefuegt: " (itoa anzahl-ok) " OK, " (itoa anzahl-fehler) " Fehler")) (princ "\n================================================================") ;; CSV-Export nach tests/output/ (setq tests-out-dir (strcat (getenv "DXFMAKRO") "/tests/output")) (vl-mkdir tests-out-dir) (setq old-results (getenv "DXFM_RESULTS")) (setenv "DXFM_RESULTS" tests-out-dir) (princ "\n[TEST_OMNIFLO] Starte OMNI_EXPORT -> tests/output/omniflo_export.csv") (c:OMNI_EXPORT) (setenv "DXFM_RESULTS" (if old-results old-results "")) (ssg-end) (princ "\n================================================================") (princ "\n TEST_OMNIFLO_EXPORT abgeschlossen.") (princ (strcat "\n CSV: " tests-out-dir "/omniflo_export.csv")) (princ "\n================================================================") (princ) ) ) ) ) )