e820c106af
- test_deck_stack_exists: _deck_stack present; default shows _control_deck. - test_pinning_two_panels_switches_to_split: pin 2 panels + refresh → stack shows _deck_split_container. Pin via _pinned flags directly (not the toggle handler) so no QSettings write leaks into other function-scoped windows; existing 6 tests run in default/tabbed state and still pass. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
73 lines
2.2 KiB
Python
73 lines
2.2 KiB
Python
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 test_window_constructs(win):
|
|
assert win.windowTitle().startswith("8-cut")
|
|
|
|
|
|
def test_status_bar_exists(win):
|
|
assert win.statusBar() is not None
|
|
|
|
|
|
def test_workers_spinbox_in_export_tab(win):
|
|
from PyQt6.QtWidgets import QSpinBox
|
|
assert win._spn_workers in win._tab_export.findChildren(QSpinBox)
|
|
|
|
|
|
def test_scan_button_in_scan_tab(win):
|
|
from PyQt6.QtWidgets import QPushButton
|
|
assert win._btn_scan in win._tab_scan.findChildren(QPushButton)
|
|
|
|
|
|
def test_portrait_combo_in_crop_tab(win):
|
|
from PyQt6.QtWidgets import QComboBox
|
|
assert win._cmb_portrait in win._tab_crop.findChildren(QComboBox)
|
|
|
|
|
|
def test_menu_only_buttons_not_in_deck(win):
|
|
from PyQt6.QtWidgets import QPushButton
|
|
deck_btns = win._control_deck.findChildren(QPushButton)
|
|
assert win._btn_train not in deck_btns
|
|
assert win._btn_scan_all not in deck_btns
|
|
assert win._btn_hide_subcats not in deck_btns
|
|
|
|
|
|
def test_deck_stack_exists(win):
|
|
# The deck is wrapped in a stack so it can swap tabbed <-> side-by-side.
|
|
# Default (nothing pinned) shows the tabbed control deck.
|
|
assert win._deck_stack is not None
|
|
assert win._deck_stack.currentWidget() is win._control_deck
|
|
|
|
|
|
def test_pinning_two_panels_switches_to_split(win):
|
|
# Pin two panels directly (avoid the toggle handler so no QSettings write
|
|
# leaks into other test windows) and refresh.
|
|
win._tab_export._pinned = True
|
|
win._tab_crop._pinned = True
|
|
win._refresh_deck_layout()
|
|
assert win._deck_stack.currentWidget() is win._deck_split_container
|