From 3869f8b62464f9ce641a12583e62ed30259fc855 Mon Sep 17 00:00:00 2001 From: Michael Stangl Date: Thu, 2 Jul 2026 14:03:55 +0200 Subject: [PATCH] omniflo unittest liest aktuell nur die json Exports von Bricscad --- tests/README.md | 9 ++++----- tests/conftest.py | 37 ++++++++++++++++++++----------------- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/tests/README.md b/tests/README.md index 68cd40d..8e3658e 100644 --- a/tests/README.md +++ b/tests/README.md @@ -29,7 +29,6 @@ tests/output/ | (keine Zeichnung) (save: null) | omniflo_results.json (immer) | omniflo_tests.dxf (save: dxf) | - omniflo_export.csv | | bin\run_tests.bat --runall | @@ -105,7 +104,6 @@ tests/ kseinaus_tests.dxf omniflo_results.json omniflo_tests.dxf - omniflo_export.csv # CSV-Export (Omniflo-spezifisch) reference/ # Abgenommene Referenzdaten (in Git) kreisel_ref.dxf ... @@ -173,7 +171,7 @@ Die Python-Tests pruefen: - **Attribut-Werte** gegen die Testdefinitionen (JSON) - **DXF-Geometrie** mit ezdxf (Bloecke, Positionen, Radien) - **Referenz-Vergleich** gegen abgenommene Referenz-DXF -- **CSV-Export** (Omniflo: Spalten, Merkmale, Datentypen) +- **CSV-Export** ueber `lib/export_csv.py` (Omniflo: Spalten, Merkmale, Sum-Zeile, Datentypen) Tests, deren Eingabedaten fehlen (z.B. kein BricsCAD-Lauf), werden automatisch uebersprungen (`pytest.skip`). @@ -381,8 +379,9 @@ def _ref_dxf(): | Klasse | Prueft | |---|---| -| `TestOmnifloExportUnit` | Mock-Export: Merkmale, Datentypen, Vollstaendigkeit (ohne BricsCAD) | -| `TestOmnifloExportCSV` | CSV aus BricsCAD: Header, Spalten, JSON-Merkmale | +| `TestOmnifloExportUnit` | Mock-Export ueber `lib/export_csv.py`: Merkmale, Datentypen, Sum-Zeile, Vollstaendigkeit (ohne BricsCAD) | +| `TestOmnifloResults` | omniflo_results.json aus BricsCAD: Testfaelle vollstaendig, Status OK, Hoehe | +| `TestOmnifloReferenceCSV` | CSV-Export aus `lib/export_csv.py` gegen abgenommene Referenz-CSV | ## Umgebungsvariablen diff --git a/tests/conftest.py b/tests/conftest.py index 045825b..9112419 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -32,8 +32,18 @@ def _reference_dir(): def _load_json(path): - with open(path, "r", encoding="utf-8") as f: - return json.load(f) + """Laedt JSON, tolerant gegenueber BricsCAD-Ausgaben. + + AutoLISP schreibt Dateien (write-line) im ANSI-Codepage des Systems, + nicht in UTF-8 - Sonderzeichen (z.B. Grad-Zeichen in Beschreibungen) + koennen daher nicht als UTF-8 dekodierbar sein. Fallback auf cp1252. + """ + try: + with open(path, "r", encoding="utf-8") as f: + return json.load(f) + except UnicodeDecodeError: + with open(path, "r", encoding="cp1252") as f: + return json.load(f) # --- Foerderer Fixtures --- @@ -68,22 +78,15 @@ def omniflo_testdata(): @pytest.fixture -def omniflo_csv(): - """Laedt den Inhalt der omniflo_export.csv aus output/.""" - import csv as _csv - path = os.path.join(_output_dir(), "omniflo_export.csv") +def omniflo_results(): + """Laedt die Omniflo-Ergebnisse aus output/omniflo_results.json.""" + path = os.path.join(_output_dir(), "omniflo_results.json") if not os.path.exists(path): - pytest.skip( - "omniflo_export.csv nicht vorhanden - " - "TEST_OMNIFLO_EXPORT in BricsCAD ausfuehren" - ) - rows = [] - with open(path, "r", encoding="utf-8") as f: - reader = _csv.reader(f, delimiter=";") - header = next(reader) - for row in reader: - rows.append(row) - return {"header": header, "rows": rows} + pytest.skip("omniflo_results.json nicht vorhanden - TEST_OMNIFLO in BricsCAD ausfuehren") + data = _load_json(path) + if not data: + pytest.skip("omniflo_results.json ist leer") + return data # --- Kreisel Fixtures ---