feat/plotly-canvas #5
1 changed files with 22 additions and 0 deletions
test: isolate QSettings so user preferences cannot fail GUI tests
MainWindow persists preferences (window layout, canvas backend) through
QSettings("OTKO", "OTKO"), so tests constructing it were reading the
developer's real settings: after switching to the Plotly backend the
PyVista-specific viewport-axis tests failed with "PlotlyCanvas has no
attribute renderer". A session fixture now redirects QSettings into a
temp dir and is skipped when Qt is not installed, keeping the headless
job Qt-free.
commit
40a673c562
|
|
@ -11,6 +11,7 @@ domain after every test. The import is inside the teardown so that
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
import importlib.util
|
||||
import os
|
||||
from collections.abc import Iterator
|
||||
|
||||
|
|
@ -19,6 +20,27 @@ import pytest
|
|||
os.environ.setdefault("QT_QPA_PLATFORM", "offscreen")
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True, scope="session")
|
||||
def _isolate_qsettings(tmp_path_factory: pytest.TempPathFactory) -> Iterator[None]:
|
||||
"""Redirect ``QSettings`` to a temp dir so tests never touch user state.
|
||||
|
||||
``MainWindow`` persists preferences (window layout, canvas backend) under
|
||||
``QSettings("OTKO", "OTKO")``. Without redirection a developer who, say,
|
||||
switched to the Plotly backend would see PyVista-specific GUI tests fail
|
||||
against their real settings. Skipped entirely when Qt is not installed, so
|
||||
the headless job stays free of Qt.
|
||||
"""
|
||||
if importlib.util.find_spec("PySide6") is None:
|
||||
yield
|
||||
return
|
||||
from PySide6.QtCore import QSettings
|
||||
|
||||
settings_dir = tmp_path_factory.mktemp("qsettings")
|
||||
for fmt in (QSettings.Format.NativeFormat, QSettings.Format.IniFormat):
|
||||
QSettings.setPath(fmt, QSettings.Scope.UserScope, str(settings_dir))
|
||||
yield
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def _wipe_opensees_domain() -> Iterator[None]:
|
||||
"""Wipe the OpenseesPy domain after a test if the solver was imported."""
|
||||
|
|
|
|||
Loading…
Reference in a new issue