3f7074f06b
- tests/test_unit.lsp: Mini-Test-Framework (tu-eq/tu-eqf/tu-true/tu-nil) und Testfaelle fuer reine Funktionen aus ssg_core, ssg_lang, ssg_id, vf_core, export, Gefaellestrecke, OmniModulInsert, KreiselInsert. Befehl TEST_UNIT schreibt tests/output/unit_results.txt. - tests/test_unit.scr: Headless-Startskript (laedt SSG_LIB, ruft TEST_UNIT, beendet BricsCAD), pfadunabhaengig ueber DXFMAKRO. - bin/run_tests.bat: Schalter --lisp startet BricsCAD headless, wertet den Report aus (RESULT: OK/FAIL) und setzt den Exit-Code. - tests/README.md: Abschnitt zu den LISP-Unit-Tests. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
240 lines
7.8 KiB
Batchfile
240 lines
7.8 KiB
Batchfile
@echo off
|
|
setlocal EnableDelayedExpansion
|
|
REM ================================================================
|
|
REM run_tests.bat - Testausfuehrung fuer SSG_LIB
|
|
REM
|
|
REM Schalter:
|
|
REM --lisp Startet BricsCAD headless, fuehrt die LISP-Unit-Tests
|
|
REM (TEST_UNIT) aus und wertet tests\output\unit_results.txt aus
|
|
REM --check Fuehrt pytest-Validierung aus
|
|
REM --diff_references Vergleicht CSVs in tests\reference und tests\output,
|
|
REM ruft bei Unterschieden das Diff-Tool (meld) auf
|
|
REM (ohne) Zeigt Hilfe an
|
|
REM
|
|
REM Beispiele:
|
|
REM bin\run_tests.bat --lisp
|
|
REM bin\run_tests.bat --check
|
|
REM bin\run_tests.bat --check test_kreisel.py
|
|
REM bin\run_tests.bat --diff_references
|
|
REM bin\run_tests.bat --diff_references kreisel_tests_export.csv
|
|
REM ================================================================
|
|
|
|
REM Umgebung setzen
|
|
call "%~dp0setenv.bat"
|
|
|
|
REM Virtuelle Umgebung aktivieren
|
|
if exist "%DXFMAKRO%\.venv\Scripts\activate.bat" (
|
|
call "%DXFMAKRO%\.venv\Scripts\activate.bat"
|
|
) else (
|
|
echo WARNUNG: .venv nicht gefunden - pytest muss im PATH sein!
|
|
)
|
|
|
|
set DO_CHECK=0
|
|
set CHECK_ARG=
|
|
set DO_DIFF=0
|
|
set DIFF_ARG=
|
|
set DO_LISP=0
|
|
|
|
REM Argumente parsen
|
|
:parse_args
|
|
if "%~1"=="" goto :after_args
|
|
if "%~1"=="--lisp" (
|
|
set DO_LISP=1
|
|
shift
|
|
goto :parse_args
|
|
)
|
|
if "%~1"=="--check" (
|
|
set DO_CHECK=1
|
|
if not "%~2"=="" (
|
|
set "CHECK_ARG=%~2"
|
|
shift
|
|
)
|
|
shift
|
|
goto :parse_args
|
|
)
|
|
if "%~1"=="--diff_references" (
|
|
set DO_DIFF=1
|
|
if not "%~2"=="" (
|
|
set "DIFF_ARG=%~2"
|
|
shift
|
|
)
|
|
shift
|
|
goto :parse_args
|
|
)
|
|
echo Unbekannter Schalter: %~1
|
|
goto :show_help
|
|
|
|
:after_args
|
|
if %DO_LISP%==0 if %DO_CHECK%==0 if %DO_DIFF%==0 goto :show_help
|
|
|
|
REM ================================================================
|
|
REM --lisp: LISP-Unit-Tests in BricsCAD ausfuehren
|
|
REM ================================================================
|
|
if %DO_LISP%==1 (
|
|
echo.
|
|
echo ================================================================
|
|
echo LISP UNIT-TESTS ^(TEST_UNIT^)
|
|
echo ================================================================
|
|
|
|
if not defined BRICSCAD (
|
|
echo FEHLER: BricsCAD nicht gefunden - siehe setenv.bat.
|
|
exit /b 1
|
|
)
|
|
|
|
if not exist "%DXFM_TESTS%\test_unit.scr" (
|
|
echo FEHLER: %DXFM_TESTS%\test_unit.scr nicht gefunden.
|
|
exit /b 1
|
|
)
|
|
|
|
REM Altes Ergebnis loeschen - fehlender Report = fehlgeschlagener Lauf
|
|
if exist "%DXFM_TESTOUT%\unit_results.txt" del "%DXFM_TESTOUT%\unit_results.txt"
|
|
|
|
echo BricsCAD wird headless gestartet ^(Skript: test_unit.scr^)...
|
|
start /wait "" "%BRICSCAD%" /s "%DXFM_TESTS%\test_unit.scr"
|
|
|
|
if not exist "%DXFM_TESTOUT%\unit_results.txt" (
|
|
echo.
|
|
echo FEHLER: Kein Report erzeugt ^(%DXFM_TESTOUT%\unit_results.txt^).
|
|
echo Lief TEST_UNIT in BricsCAD durch?
|
|
exit /b 1
|
|
)
|
|
|
|
echo.
|
|
type "%DXFM_TESTOUT%\unit_results.txt"
|
|
|
|
findstr /b /c:"RESULT: OK" "%DXFM_TESTOUT%\unit_results.txt" >nul
|
|
if errorlevel 1 (
|
|
echo.
|
|
echo ================================================================
|
|
echo ERGEBNIS: LISP-TESTS FEHLGESCHLAGEN
|
|
echo ================================================================
|
|
exit /b 1
|
|
)
|
|
echo.
|
|
echo ================================================================
|
|
echo ERGEBNIS: ALLE LISP-TESTS BESTANDEN
|
|
echo ================================================================
|
|
)
|
|
|
|
REM ================================================================
|
|
REM --check: pytest-Validierung
|
|
REM ================================================================
|
|
if %DO_CHECK%==1 (
|
|
echo.
|
|
echo ================================================================
|
|
echo PYTEST VALIDIERUNG
|
|
echo ================================================================
|
|
|
|
REM Pruefen ob output-Verzeichnis Ergebnisse enthaelt
|
|
if not exist "%DXFM_TESTOUT%\*.json" (
|
|
echo.
|
|
echo WARNUNG: Keine Ergebnisse in %DXFM_TESTOUT%
|
|
echo Zuerst TESTRUN in BricsCAD ausfuehren!
|
|
echo.
|
|
)
|
|
|
|
if not "%CHECK_ARG%"=="" (
|
|
echo Teste: %CHECK_ARG%
|
|
pytest "%DXFM_TESTS%\%CHECK_ARG%" -v
|
|
) else (
|
|
echo Teste: alle Module
|
|
pytest "%DXFM_TESTS%" -v
|
|
)
|
|
if errorlevel 1 (
|
|
echo.
|
|
echo ================================================================
|
|
echo ERGEBNIS: TESTS FEHLGESCHLAGEN
|
|
echo ================================================================
|
|
exit /b 1
|
|
)
|
|
echo.
|
|
echo ================================================================
|
|
echo ERGEBNIS: ALLE TESTS BESTANDEN
|
|
echo ================================================================
|
|
)
|
|
|
|
REM ================================================================
|
|
REM --diff_references: CSV-Referenzvergleich
|
|
REM ================================================================
|
|
if %DO_DIFF%==1 (
|
|
echo.
|
|
echo ================================================================
|
|
echo REFERENZVERGLEICH ^(--diff_references^)
|
|
echo ================================================================
|
|
|
|
if not defined DXFM_DIFFTOOL (
|
|
echo.
|
|
echo FEHLER: Kein Diff-Tool ^(meld^) gefunden - siehe setenv.bat.
|
|
echo meld installieren: https://meldmerge.org
|
|
exit /b 1
|
|
)
|
|
|
|
set DIFF_COUNT=0
|
|
|
|
if not "%DIFF_ARG%"=="" (
|
|
if not exist "%DXFM_TESTREF%\%DIFF_ARG%" (
|
|
echo FEHLER: Referenzdatei nicht gefunden: %DXFM_TESTREF%\%DIFF_ARG%
|
|
exit /b 1
|
|
)
|
|
call :diff_one "%DXFM_TESTREF%\%DIFF_ARG%"
|
|
) else (
|
|
for %%F in ("%DXFM_TESTREF%\*.csv") do call :diff_one "%%F"
|
|
)
|
|
|
|
echo.
|
|
if !DIFF_COUNT!==0 (
|
|
echo ================================================================
|
|
echo ERGEBNIS: KEINE UNTERSCHIEDE GEFUNDEN
|
|
echo ================================================================
|
|
) else (
|
|
echo ================================================================
|
|
echo ERGEBNIS: !DIFF_COUNT! DATEI^(EN^) MIT UNTERSCHIEDEN
|
|
echo ================================================================
|
|
)
|
|
)
|
|
|
|
exit /b 0
|
|
|
|
REM ----------------------------------------------------------------
|
|
REM :diff_one <referenzdatei>
|
|
REM Vergleicht eine Referenzdatei mit der gleichnamigen Output-Datei
|
|
REM und ruft bei Unterschieden das Diff-Tool auf.
|
|
REM ----------------------------------------------------------------
|
|
:diff_one
|
|
set "REF_FILE=%~1"
|
|
set "OUT_FILE=%DXFM_TESTOUT%\%~nx1"
|
|
if not exist "%OUT_FILE%" (
|
|
echo WARNUNG: Keine Output-Datei fuer %~nx1 gefunden - uebersprungen.
|
|
goto :eof
|
|
)
|
|
fc "%REF_FILE%" "%OUT_FILE%" >nul 2>nul
|
|
if errorlevel 1 (
|
|
set /a DIFF_COUNT+=1
|
|
echo Unterschied: %~nx1
|
|
"%DXFM_DIFFTOOL%" "%REF_FILE%" "%OUT_FILE%"
|
|
)
|
|
goto :eof
|
|
|
|
:show_help
|
|
echo.
|
|
echo Aufruf: bin\run_tests.bat --lisp
|
|
echo bin\run_tests.bat --check [testdatei]
|
|
echo bin\run_tests.bat --diff_references [csv-datei]
|
|
echo.
|
|
echo Schalter:
|
|
echo --lisp Startet BricsCAD headless, fuehrt TEST_UNIT aus
|
|
echo und wertet tests\output\unit_results.txt aus
|
|
echo --check Fuehrt pytest-Validierung fuer alle Module aus
|
|
echo --check test_kreisel.py Validiert nur Kreisel-Tests
|
|
echo --diff_references Vergleicht alle CSVs in tests\reference/output,
|
|
echo ruft bei Unterschieden meld auf
|
|
echo --diff_references datei.csv Vergleicht nur die angegebene CSV-Datei
|
|
echo.
|
|
echo Workflow:
|
|
echo 0. bin\run_tests.bat --lisp ^(reine LISP-Funktionen, ohne Zeichnung^)
|
|
echo 1. In BricsCAD: SSG_RUN_ALL_TESTS ausfuehren
|
|
echo 2. bin\run_tests.bat --check
|
|
echo 3. bin\run_tests.bat --diff_references
|
|
echo.
|
|
exit /b 1
|