Neuer Abschnitt 'alltests.json — Testregistry' erklaert Zweck, Format und save-Optionen. Workflow-Abschnitt aktualisiert: korrekte Beschreibung von SSG_RUN_ALL_TESTS, Vergleichstabelle vs. Einzeltest, und Namenskonventionen fuer LISP-Datei, Befehl und Export-Funktion.
This commit is contained in:
+83
-20
@@ -8,6 +8,9 @@ Die Tests folgen einer **zweistufigen Architektur**:
|
||||
2. **Python-Validierung** (`.py`) — pruefen die Ergebnisse mit pytest + ezdxf
|
||||
|
||||
```
|
||||
tests/alltests.json
|
||||
|
|
||||
v
|
||||
BricsCAD Kommandozeile
|
||||
| |
|
||||
| SSG_RUN_ALL_TESTS |
|
||||
@@ -18,14 +21,14 @@ BricsCAD Kommandozeile
|
||||
| | |
|
||||
v v |
|
||||
tests/output/ |
|
||||
kreisel_results.json |
|
||||
kreisel_tests.dxf |
|
||||
foerderer_results.json |
|
||||
foerderer_tests.dxf |
|
||||
kseinaus_results.json |
|
||||
kseinaus_tests.dxf |
|
||||
omniflo_results.json |
|
||||
omniflo_tests.dxf |
|
||||
kreisel_results.json (immer) |
|
||||
kreisel_tests.dxf (save: dxf) |
|
||||
foerderer_results.json (immer) |
|
||||
foerderer_tests.dwg (save: dwg) |
|
||||
kseinaus_results.json (immer) |
|
||||
(keine Zeichnung) (save: null) |
|
||||
omniflo_results.json (immer) |
|
||||
omniflo_tests.dxf (save: dxf) |
|
||||
omniflo_export.csv |
|
||||
|
|
||||
bin\run_tests.bat --runall
|
||||
@@ -36,6 +39,36 @@ tests/output/ |
|
||||
test_omniflo.py
|
||||
```
|
||||
|
||||
## alltests.json — Testregistry
|
||||
|
||||
Die Datei `tests/alltests.json` ist die zentrale Registry aller Test-Module.
|
||||
`SSG_RUN_ALL_TESTS` liest sie beim Start — die Testliste ist **nicht** hartcodiert in `test_run_all.lsp`.
|
||||
|
||||
```json
|
||||
[
|
||||
{ "name": "kreisel", "save": "dxf" },
|
||||
{ "name": "foerderer", "save": "dwg" },
|
||||
{ "name": "kseinaus", "save": null },
|
||||
{ "name": "omniflo", "save": "dxf" }
|
||||
]
|
||||
```
|
||||
|
||||
Felder pro Eintrag:
|
||||
|
||||
| Feld | Typ | Bedeutung |
|
||||
| --- | --- | --- |
|
||||
| `name` | String | Basisname des Testmoduls (Pflicht) |
|
||||
| `save` | `"dxf"` / `"dwg"` / `null` | Ob und als welches Format die Zeichnung gespeichert wird |
|
||||
|
||||
**JSON-Export laeuft immer** — unabhaengig vom `save`-Feld. Die Datei `<name>_results.json`
|
||||
wird in `tests/output/` geschrieben, sobald der Test abgeschlossen ist.
|
||||
|
||||
**Wann welches `save` verwenden:**
|
||||
|
||||
- `"dxf"` — wenn ein Python-Test (ezdxf) die Geometrie der Zeichnung pruefen soll
|
||||
- `"dwg"` — wenn die Zeichnung zur manuellen Kontrolle oder als DWG-Referenz erhalten bleiben soll
|
||||
- `null` (oder Feld weglassen) — wenn nur der JSON-Export benoetigt wird
|
||||
|
||||
## Ablauf fuer den Anwender
|
||||
|
||||
1. **BricsCAD starten** (ueber `bin\start_briscad.bat`) und die LISP-Testrunner ausfuehren (siehe Abschnitt "LISP-Tests in BricsCAD ausfuehren"). Die Testrunner erzeugen Bloecke in der Zeichnung und speichern Ergebnisse nach `tests/output/`.
|
||||
@@ -96,22 +129,33 @@ Dann alle Tests auf einmal ausfuehren:
|
||||
SSG_RUN_ALL_TESTS
|
||||
```
|
||||
|
||||
Oder einen einzelnen Test:
|
||||
`SSG_RUN_ALL_TESTS` liest die Testliste aus `tests/alltests.json` und fuehrt fuer jedes Modul aus:
|
||||
|
||||
1. Zeichnung leeren (ERASE ALL + PURGE x5) — saubere Basis fuer jeden Test
|
||||
2. `test_<name>.lsp` laden und `TEST_<NAME>` ausfuehren
|
||||
3. JSON-Export aufrufen: `<name>:export-results` — **immer**, unabhaengig von `save`
|
||||
4. Zeichnung speichern — nur wenn `"save"` in `alltests.json` gesetzt ist (`"dxf"` oder `"dwg"`)
|
||||
5. Bei Fehler: weiter mit naechstem Test (`vl-catch-all-apply`)
|
||||
|
||||
**Einzeltest** (z.B. nur Kreisel pruefen):
|
||||
|
||||
```lisp
|
||||
;; Einzeltest (z.B. Kreisel)
|
||||
;; Test-Datei laden und Befehl ausfuehren
|
||||
(load (strcat (getenv "DXFMAKRO") "/tests/test_kreisel.lsp"))
|
||||
TEST_KREISEL
|
||||
;; Ergebnisse manuell exportieren:
|
||||
;; JSON-Export manuell aufrufen:
|
||||
(kreisel:export-results (strcat (getenv "DXFMAKRO") "/tests/output"))
|
||||
```
|
||||
|
||||
`SSG_RUN_ALL_TESTS` fuehrt fuer jedes Modul in `*test-module*` folgendes aus:
|
||||
- Zeichnung leeren (ERASE + PURGE)
|
||||
- Testdatei laden und Befehl ausfuehren
|
||||
- JSON-Export aufrufen (`<name>:export-results`)
|
||||
- DXF speichern (`<name>_tests.dxf`)
|
||||
- Bei Fehler: weiter mit naechstem Test (vl-catch-all-apply)
|
||||
**Unterschied SSG_RUN_ALL_TESTS vs. Einzeltest:**
|
||||
|
||||
| | SSG_RUN_ALL_TESTS | Einzeltest |
|
||||
| --- | --- | --- |
|
||||
| Testliste | aus `alltests.json` | manuell gewaehlter Test |
|
||||
| Zeichnung leeren | automatisch vor jedem Test | nein (Zeichnung bleibt) |
|
||||
| JSON-Export | automatisch nach jedem Test | manuell aufrufen |
|
||||
| DXF/DWG speichern | gemaess `save` in `alltests.json` | manuell (SAVEAS / DXFOUT) |
|
||||
| Fehlerisolation | ja (Fehler unterbricht nicht weitere Tests) | nein |
|
||||
|
||||
### 2. Python-Validierung ausfuehren
|
||||
|
||||
@@ -229,13 +273,32 @@ Fuer ein neues Modul eine neue `.lsp`-Datei erstellen nach dem Muster:
|
||||
)
|
||||
```
|
||||
|
||||
Dann den Basisnamen in `*test-module*` (in `test_run_all.lsp`) eintragen:
|
||||
Dann den Basisnamen in `tests/alltests.json` eintragen:
|
||||
|
||||
```lisp
|
||||
(setq *test-module* '("kreisel" "foerderer" "kseinaus" "omniflo" "<modul>"))
|
||||
```json
|
||||
{ "name": "<modul>", "save": "dxf" }
|
||||
```
|
||||
|
||||
`"save"` waehlen je nach Bedarf (`"dxf"`, `"dwg"` oder `null`).
|
||||
`test_run_all.lsp` leitet alle Namen aus dem `"name"`-Feld ab — **nichts** in `test_run_all.lsp` aendern.
|
||||
|
||||
### Namenskonventionen (werden von test_run_all.lsp automatisch abgeleitet)
|
||||
|
||||
Aus dem Basisnamen `<name>` in `alltests.json` entstehen durch Konvention:
|
||||
|
||||
| Element | Schema | Beispiel fuer `"name": "kreisel"` |
|
||||
| --- | --- | --- |
|
||||
| LISP-Datei | `tests/test_<name>.lsp` | `tests/test_kreisel.lsp` |
|
||||
| BricsCAD-Befehl | `TEST_<NAME>` (Grossbuchstaben) | `TEST_KREISEL` |
|
||||
| Export-Funktion | `<name>:export-results` | `kreisel:export-results` |
|
||||
| JSON-Ergebnis | `output/<name>_results.json` | `output/kreisel_results.json` |
|
||||
| DXF/DWG-Datei | `output/<name>_tests.dxf/.dwg` | `output/kreisel_tests.dxf` |
|
||||
|
||||
Die Export-Funktion **muss** exakt so heissen: `<name>:export-results` (Namespace-Notation mit Doppelpunkt).
|
||||
Sie nimmt genau einen Parameter entgegen: den Pfad zum Output-Verzeichnis.
|
||||
|
||||
Wichtig:
|
||||
|
||||
- `omni:load-json` erwartet ein **flaches JSON-Array** mit flachen Objekten (kein Nesting)
|
||||
- `omni:val` liest Werte aus den geladenen Eintraegen
|
||||
- Script-Funktionen (z.B. `kreisel-insert-script`) muessen **ohne User-Interaktion** funktionieren
|
||||
|
||||
Reference in New Issue
Block a user