[TEST] Referenz-Namenskonvention vereinheitlicht + Kreisel/Omniflo-Referenzen abgenommen

Konvention: Eine Referenz traegt IMMER denselben Dateinamen wie das Ist-
Ergebnis in output/ (nur anderes Verzeichnis). Referenz festlegen = Datei aus
output/ unter gleichem Namen nach reference/ kopieren.

- tests/README.md: neuer Abschnitt "Referenz-Namenskonvention (vereinheitlicht)"
  mit Regel/Tabelle/copy-Beispiel; Namenskonventions-Tabelle, Fixture-Vorlage
  (<modul>_tests.dxf statt <modul>_ref.dxf) und die Workflow-Referenzabschnitte
  angeglichen.
- tests/conftest.py: kreisel_ref_dxf laedt reference/kreisel_tests.dxf
  (vorher kreisel_ref.dxf).
- tests/test_omniflo.py: Referenz reference/omniflo_export.csv
  (vorher omniflo_export_reference.csv).
- Referenzen abgenommen und in Git aufgenommen:
  reference/kreisel_tests.dxf (Umbenennung des Tippfehlers Kresel_ref.dxf),
  reference/omniflo_export.csv (aus geprueftem output/omniflo_export.csv).

Der Batch-Vergleich --diff_references matchte schon immer ueber identische
Basisnamen und bleibt unveraendert. Der Kreisel-Referenztest laeuft dadurch
jetzt statt zu skippen.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-04 14:28:19 +02:00
parent c88be420be
commit 40e8331695
5 changed files with 28294 additions and 12 deletions
+54 -7
View File
@@ -138,8 +138,8 @@ etc.) ist davon unberuehrt (GUI standardmaessig an).
3. **Kommandozeile**: Ergebnisse validieren:
- `bin\run_tests.bat --check` — pytest prueft die Ergebnisse aus `output/` gegen Testdefinitionen und Referenzdaten (optional: einzelnes Modul, z.B. `--check test_kreisel.py`)
- `bin\run_tests.bat --diff_references` — vergleicht die CSVs in `output/` gegen `reference/` und oeffnet bei Unterschieden das Diff-Tool (meld); optional eine einzelne Datei, z.B. `--diff_references kreisel_tests_export.csv`
- Referenz aktualisieren (nach geprueftem Lauf): die betreffende(n) Datei(en) aus `output/` manuell nach `reference/` kopieren (es gibt keinen eigenen Schalter dafuer)
- `bin\run_tests.bat --diff_references` — vergleicht die CSVs in `output/` gegen `reference/` (gleicher Dateiname, siehe Abschnitt "Referenz-Namenskonvention") und oeffnet bei Unterschieden das Diff-Tool (meld); optional eine einzelne Datei, z.B. `--diff_references kreisel_tests_export.csv`
- Referenz aktualisieren (nach geprueftem Lauf): die betreffende(n) Datei(en) aus `output/` unter DEMSELBEN Namen nach `reference/` kopieren (es gibt keinen eigenen Schalter dafuer)
## Verzeichnisstruktur
@@ -202,9 +202,45 @@ tests/
<basis>_export.csv # EXPORTCSV je Quelldatei, nur nach TEST_EXPORT_ALL
<basis>_sivas.csv # EXPORTSIVAS je Quelldatei, nur nach TEST_EXPORT_ALL
reference/ # Abgenommene Referenzdaten (in Git): *_results.json,
... # *_tests_export.csv / *_tests_sivas.csv, export_raw.json
... # *_tests_export.csv / *_tests_sivas.csv, *_tests.dxf,
... # omniflo_export.csv, export_raw.json
```
## Referenz-Namenskonvention (vereinheitlicht)
**Eine Referenz traegt IMMER denselben Dateinamen wie das zugehoerige Ist-Ergebnis
in `output/`.** Der einzige Unterschied ist das Verzeichnis:
```
output/<datei> # Ist-Ergebnis (bei jedem Lauf neu, nicht in Git)
reference/<datei> # abgenommener Soll-Stand (identischer Name, in Git)
```
Damit gilt durchgehend: **Referenz festlegen = Datei aus `output/` nach `reference/`
kopieren** - kein Umbenennen, kein Suffix. Beispiele:
| Ist-Ergebnis in `output/` | Referenz in `reference/` |
| --- | --- |
| `kreisel_tests.dxf` | `kreisel_tests.dxf` |
| `kreisel_tests_export.csv` | `kreisel_tests_export.csv` |
| `foerderer_results.json` | `foerderer_results.json` |
| `omniflo_export.csv` | `omniflo_export.csv` |
```cmd
copy tests\output\kreisel_tests.dxf tests\reference\kreisel_tests.dxf
```
Frueher gab es zwei Ausreisser, die bewusst auf dieses Schema gezogen wurden
(nicht mehr verwenden):
- `reference/kreisel_ref.dxf` (bzw. der Tippfehler `Kresel_ref.dxf`) -> jetzt
`reference/kreisel_tests.dxf`
- `reference/omniflo_export_reference.csv` -> jetzt `reference/omniflo_export.csv`
Die pytest-Fixtures und -Checks suchen ausschliesslich nach dem vereinheitlichten
Namen; fehlt die Referenz, wird der Vergleich mit einem Hinweis uebersprungen
(kein Fehler).
## Workflow
### 1. LISP-Tests in BricsCAD ausfuehren
@@ -274,13 +310,21 @@ Tests, deren Eingabedaten fehlen (z.B. kein BricsCAD-Lauf), werden automatisch u
### 3. Referenz erstellen/aktualisieren
Nach einem erfolgreichen, geprueften Testlauf die betreffende(n) Ergebnisdatei(en)
manuell aus `output/` nach `reference/` kopieren (nur bei bestandenen Tests). Es gibt
keinen eigenen Batch-Schalter dafuer.
manuell aus `output/` unter DEMSELBEN Dateinamen nach `reference/` kopieren (nur bei
bestandenen Tests, siehe Abschnitt "Referenz-Namenskonvention"). Es gibt keinen
eigenen Batch-Schalter dafuer.
```cmd
copy tests\output\<datei> tests\reference\<datei>
```
Beispiel (Kreisel-DXF und Omniflo-CSV als Referenz festlegen):
```cmd
copy tests\output\kreisel_tests.dxf tests\reference\kreisel_tests.dxf
copy tests\output\omniflo_export.csv tests\reference\omniflo_export.csv
```
Zum Vergleich der aktuellen CSVs gegen die Referenz (mit Diff-Tool meld):
```cmd
@@ -419,6 +463,7 @@ Aus dem Basisnamen `<name>` in `alltests.json` entstehen durch Konvention:
| 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` |
| Referenz (Soll) | `reference/<gleicher Name wie output>` | `reference/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.
@@ -487,9 +532,11 @@ def <modul>_dxf():
@pytest.fixture
def <modul>_ref_dxf():
path = os.path.join(_reference_dir(), "<modul>_ref.dxf")
# Konvention: Referenz = GLEICHER Dateiname wie das Ist-Ergebnis in output/.
path = os.path.join(_reference_dir(), "<modul>_tests.dxf")
if not os.path.exists(path):
pytest.skip("Referenz nicht vorhanden")
pytest.skip("reference/<modul>_tests.dxf nicht vorhanden - Referenz noch "
"nicht festgelegt (output/<modul>_tests.dxf nach reference/ kopieren)")
return ezdxf.readfile(path)
```