#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ conftest.py - pytest Fixtures fuer SSG_LIB Tests. Stellt gemeinsame Fixtures bereit: - Pfade zu testdata/, output/, reference/ - Laden von JSON-Testdefinitionen und -Ergebnissen - Laden von DXF-Dateien mit ezdxf """ import json import os import pytest import ezdxf def _tests_dir(): return os.getenv("DXFM_TESTS", os.path.dirname(os.path.abspath(__file__))) def _testdata_dir(): return os.getenv("DXFM_TESTDATA", os.path.join(_tests_dir(), "testdata")) def _output_dir(): return os.getenv("DXFM_TESTOUT", os.path.join(_tests_dir(), "output")) def _reference_dir(): return os.getenv("DXFM_TESTREF", os.path.join(_tests_dir(), "reference")) def _load_json(path): with open(path, "r", encoding="utf-8") as f: return json.load(f) # --- Omniflo Fixtures --- @pytest.fixture def omniflo_testdata(): """Laedt die Omniflo-Testdefinitionen aus testdata/omniflo_tests.json.""" path = os.path.join(_testdata_dir(), "omniflo_tests.json") return _load_json(path) @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") 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} # --- Kreisel Fixtures --- @pytest.fixture def kreisel_testdata(): """Laedt die Kreisel-Testdefinitionen aus testdata/kreisel_tests.json.""" path = os.path.join(_testdata_dir(), "kreisel_tests.json") return _load_json(path) @pytest.fixture def kreisel_results(): """Laedt die Kreisel-Ergebnisse aus output/kreisel_results.json.""" path = os.path.join(_output_dir(), "kreisel_results.json") if not os.path.exists(path): pytest.skip("kreisel_results.json nicht vorhanden - TEST_KREISEL in BricsCAD ausfuehren") data = _load_json(path) if not data: pytest.skip("kreisel_results.json ist leer - TEST_KREISEL in BricsCAD ausfuehren") return data @pytest.fixture def kreisel_dxf(): """Laedt die erzeugte Kreisel-DXF aus output/kreisel_tests.dxf.""" path = os.path.join(_output_dir(), "kreisel_tests.dxf") if not os.path.exists(path): pytest.skip("kreisel_tests.dxf nicht vorhanden - TESTRUN in BricsCAD ausfuehren") return ezdxf.readfile(path) @pytest.fixture def kreisel_ref_dxf(): """Laedt die Referenz-DXF aus reference/kreisel_ref.dxf.""" path = os.path.join(_reference_dir(), "kreisel_ref.dxf") if not os.path.exists(path): pytest.skip("kreisel_ref.dxf nicht vorhanden - Referenz noch nicht erstellt") return ezdxf.readfile(path)