45 lines
1.7 KiB
Python
45 lines
1.7 KiB
Python
"""
|
|
Test configuration for python/tests.
|
|
|
|
Sets up sys.modules stubs for heavy KiCAD modules (pcbnew, skip) before any
|
|
test module can trigger their import, preventing crashes on systems where the
|
|
real KiCAD environment is not fully initialised for testing.
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
import types
|
|
from unittest.mock import MagicMock
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# pcbnew stub — kicad_interface.py accesses pcbnew.__file__ and
|
|
# pcbnew.GetBuildVersion() at module level. Use MagicMock so that any
|
|
# attribute access (pcbnew.BOARD, pcbnew.PCB_TRACK, …) returns a mock
|
|
# rather than raising AttributeError.
|
|
# ---------------------------------------------------------------------------
|
|
if os.environ.get("KICAD_USE_REAL_PCBNEW") != "1":
|
|
_pcbnew = MagicMock(name="pcbnew")
|
|
_pcbnew.__file__ = "/fake/pcbnew.cpython-313-x86_64-linux-gnu.so"
|
|
_pcbnew.__name__ = "pcbnew"
|
|
_pcbnew.__spec__ = None
|
|
_pcbnew.GetBuildVersion.return_value = "9.0.0-stub"
|
|
sys.modules["pcbnew"] = _pcbnew
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Stub: skip (kicad-skip — use real module if available, stub otherwise)
|
|
# ---------------------------------------------------------------------------
|
|
try:
|
|
import skip as _skip_test # noqa: F401 — try importing real skip
|
|
except ImportError:
|
|
skip_mod = types.ModuleType("skip")
|
|
|
|
class _FakeSchematic:
|
|
"""Minimal stand-in for skip.Schematic used in PinLocator cache."""
|
|
|
|
def __init__(self, path: str):
|
|
self.path = path
|
|
self.symbol = []
|
|
|
|
skip_mod.Schematic = _FakeSchematic # type: ignore[attr-defined]
|
|
sys.modules["skip"] = skip_mod
|