1
0
mirror of https://github.com/bec-project/bec_widgets.git synced 2025-12-28 09:51:19 +01:00
Files
bec_widgets/tests/unit_tests/test_widget_finder.py

118 lines
3.8 KiB
Python

import pytest
from qtpy.QtCore import QPoint, QSize, Qt
from qtpy.QtWidgets import QLabel, QPushButton, QVBoxLayout, QWidget
from bec_widgets.widgets.utility.widget_finder.widget_finder import WidgetFinderComboBox
from tests.unit_tests.conftest import create_widget
@pytest.fixture
def finder_fixture(qtbot):
central_widget = QWidget()
central_widget.layout = QVBoxLayout(central_widget)
# Create some buttons and a label under parent
btn1 = QPushButton("Button1", central_widget)
btn1.setObjectName("btn1")
btn2 = QPushButton("Button2", central_widget)
btn2.setObjectName("btn2")
lbl1 = QLabel("Label1", central_widget)
lbl1.setObjectName("lbl1")
# Instantiate finder to look for QPushButton
finder = WidgetFinderComboBox(central_widget, QPushButton)
# Add buttons and label to the layout
central_widget.layout.addWidget(btn1)
central_widget.layout.addWidget(btn2)
central_widget.layout.addWidget(lbl1)
central_widget.layout.addWidget(finder)
qtbot.addWidget(central_widget)
qtbot.waitExposed(central_widget)
return finder, central_widget, btn1, btn2, lbl1
def test_initial_list_contains_buttons_only(qtbot, finder_fixture):
finder, parent, btn1, btn2, lbl1 = finder_fixture
items = [finder.itemText(i) for i in range(finder.count())]
assert "btn1" in items
assert "btn2" in items
assert "lbl1" not in items
def test_refresh_and_show_popup_update_list(finder_fixture, qtbot):
finder, parent, btn1, btn2, lbl1 = finder_fixture
# Dynamically add a third button
btn3 = QPushButton("Button3", parent)
btn3.setObjectName("btn3")
# Manual refresh
qtbot.mouseClick(finder.refresh_button, Qt.LeftButton)
items = [finder.itemText(i) for i in range(finder.count())]
assert "btn3" in items
# And via showPopup
btn4 = QPushButton("Button4", parent)
btn4.setObjectName("btn4")
finder.showPopup()
items = [finder.itemText(i) for i in range(finder.count())]
assert "btn4" in items
def test_selected_widget_and_widget_class_name_setter(finder_fixture, qtbot):
finder, parent, btn1, btn2, lbl1 = finder_fixture
# Select btn2
idx = finder.findText("btn2")
finder.setCurrentIndex(idx)
qtbot.wait(200) # allow refresh_list to run
selected_widget = finder.selected_widget
assert selected_widget == btn2
# Now switch to QLabel via the property setter
finder.widget_class_name = "QLabel"
qtbot.wait(200) # allow refresh_list to run
items = [finder.itemText(i) for i in range(finder.count())]
assert "lbl1" in items
assert "btn1" not in items
def test_inspect_widget_highlights_button(qtbot, finder_fixture):
finder, parent, btn1, btn2, lbl1 = finder_fixture
# Select btn1 and inspect
idx = finder.findText("btn1")
finder.setCurrentIndex(idx)
finder.inspect_widget()
qtbot.wait(100) # allow highlighter to show
highlighter = finder.highlighter
assert highlighter.isVisible()
qtbot.wait(500) # wait ≥ pulse duration
# Highlighter should match the target widget size
expected_size = btn1.frameGeometry().size()
assert highlighter.geometry().size() == expected_size
def test_inspect_widget_highlights_label(qtbot, finder_fixture):
finder, parent, btn1, btn2, lbl1 = finder_fixture
# Switch to QLabel and inspect lbl1
finder.widget_class_name = "QLabel"
qtbot.wait(50) # allow refresh
idx = finder.findText("lbl1")
finder.setCurrentIndex(idx)
finder.inspect_widget()
qtbot.wait(100) # allow highlighter to show
highlighter = finder.highlighter
assert highlighter.isVisible()
qtbot.wait(500) # wait ≥ pulse duration
# Highlighter should match the target widget size
expected_size = lbl1.frameGeometry().size()
assert highlighter.geometry().size() == expected_size