diff --git a/conftest.py b/conftest.py index 9f9667e..a41ef67 100644 --- a/conftest.py +++ b/conftest.py @@ -1,2 +1,6 @@ import sys, os sys.path.insert(0, os.path.dirname(__file__)) + + +def pytest_configure(config): + config.addinivalue_line("markers", "gui: constructs Qt widgets; needs a display") diff --git a/tests/test_ui_structure.py b/tests/test_ui_structure.py new file mode 100644 index 0000000..0d47388 --- /dev/null +++ b/tests/test_ui_structure.py @@ -0,0 +1,35 @@ +import os +import pytest + +# A real platform is needed because MpvWidget creates a GL context. +# If construction fails for any environment reason, skip — this test is a +# best-effort structural net, not a gate on core/ tests. +pytestmark = pytest.mark.gui + + +@pytest.fixture(scope="module") +def app(): + from PyQt6.QtWidgets import QApplication + inst = QApplication.instance() or QApplication([]) + yield inst + + +@pytest.fixture +def win(app): + try: + from main import MainWindow + w = MainWindow() + except Exception as e: # GL/mpv/display unavailable, etc. + pytest.skip(f"MainWindow could not be constructed here: {e}") + yield w + w.close() + w.deleteLater() + + +def _descendant_object_names(widget): + """All objectNames in a widget's child tree (for containment asserts).""" + return {c.objectName() for c in widget.findChildren(object) if c.objectName()} + + +def test_window_constructs(win): + assert win.windowTitle() == "8-cut"