mirror of
https://github.com/pyapp-kit/superqt.git
synced 2025-07-21 12:11:07 +02:00
* add ability to change icon * fix icon setting so it will load properly on start up * remove check on icon length. not necessary anymore * fix test * reduce duplicate code. expose _COLLAPSED and _EXPANDED to user on creation of QCollapsible widget * add ability to set icon with string or icon. * add tests for adding, setting icons * fix test. * fix test for icons * move file * fix test * remove hardcoded size. Use font size * add test docstring * fix test. chnage expanded/collapsed names * remove unnecessary strings * update example. add getter functions. remove lines. change function name * put default string in init. add getter tests * update test * cleanup typing and fix set setCollapsedIcon Co-authored-by: Talley Lambert <talley.lambert@gmail.com>
140 lines
3.9 KiB
Python
140 lines
3.9 KiB
Python
"""A test module for testing collapsible"""
|
|
|
|
from qtpy.QtCore import QEasingCurve, Qt
|
|
from qtpy.QtGui import QIcon
|
|
from qtpy.QtWidgets import QPushButton, QStyle, QWidget
|
|
|
|
from superqt import QCollapsible
|
|
|
|
|
|
def _get_builtin_icon(name: str) -> QIcon:
|
|
"""Get a built-in icon from the Qt library."""
|
|
widget = QWidget()
|
|
try:
|
|
pixmap = getattr(QStyle.StandardPixmap, f"SP_{name}")
|
|
except AttributeError:
|
|
pixmap = getattr(QStyle, f"SP_{name}")
|
|
|
|
return widget.style().standardIcon(pixmap)
|
|
|
|
|
|
def test_checked_initialization(qtbot):
|
|
"""Test simple collapsible"""
|
|
wdg1 = QCollapsible("Advanced analysis")
|
|
wdg1.expand(False)
|
|
assert wdg1.isExpanded()
|
|
assert wdg1._content.maximumHeight() > 0
|
|
|
|
wdg2 = QCollapsible("Advanced analysis")
|
|
wdg1.collapse(False)
|
|
assert not wdg2.isExpanded()
|
|
assert wdg2._content.maximumHeight() == 0
|
|
|
|
|
|
def test_content_hide_show(qtbot):
|
|
"""Test collapsible with content"""
|
|
|
|
# Create child component
|
|
collapsible = QCollapsible("Advanced analysis")
|
|
for i in range(10):
|
|
collapsible.addWidget(QPushButton(f"Content button {i + 1}"))
|
|
|
|
collapsible.collapse(False)
|
|
assert not collapsible.isExpanded()
|
|
assert collapsible._content.maximumHeight() == 0
|
|
|
|
collapsible.expand(False)
|
|
assert collapsible.isExpanded()
|
|
assert collapsible._content.maximumHeight() > 0
|
|
|
|
|
|
def test_locking(qtbot):
|
|
"""Test locking collapsible"""
|
|
wdg1 = QCollapsible()
|
|
assert wdg1.locked() is False
|
|
wdg1.setLocked(True)
|
|
assert wdg1.locked() is True
|
|
assert not wdg1.isExpanded()
|
|
|
|
wdg1._toggle_btn.setChecked(True)
|
|
assert not wdg1.isExpanded()
|
|
|
|
wdg1._toggle()
|
|
assert not wdg1.isExpanded()
|
|
|
|
wdg1.expand()
|
|
assert not wdg1.isExpanded()
|
|
|
|
wdg1._toggle_btn.setChecked(False)
|
|
assert not wdg1.isExpanded()
|
|
|
|
wdg1.setLocked(False)
|
|
wdg1.expand()
|
|
assert wdg1.isExpanded()
|
|
assert wdg1._toggle_btn.isChecked()
|
|
|
|
|
|
def test_changing_animation_settings(qtbot):
|
|
"""Quick test for changing animation settings"""
|
|
wdg = QCollapsible()
|
|
wdg.setDuration(600)
|
|
wdg.setEasingCurve(QEasingCurve.Type.InElastic)
|
|
assert wdg._animation.easingCurve() == QEasingCurve.Type.InElastic
|
|
assert wdg._animation.duration() == 600
|
|
|
|
|
|
def test_changing_content(qtbot):
|
|
"""Test changing the content"""
|
|
content = QPushButton()
|
|
wdg = QCollapsible()
|
|
wdg.setContent(content)
|
|
assert wdg._content == content
|
|
|
|
|
|
def test_changing_text(qtbot):
|
|
"""Test changing the content"""
|
|
wdg = QCollapsible()
|
|
wdg.setText("Hi new text")
|
|
assert wdg.text() == "Hi new text"
|
|
assert wdg._toggle_btn.text() == "Hi new text"
|
|
|
|
|
|
def test_toggle_signal(qtbot):
|
|
"""Test that signal is emitted when widget expanded/collapsed."""
|
|
wdg = QCollapsible()
|
|
with qtbot.waitSignal(wdg.toggled, timeout=500):
|
|
qtbot.mouseClick(wdg._toggle_btn, Qt.LeftButton)
|
|
|
|
with qtbot.waitSignal(wdg.toggled, timeout=500):
|
|
wdg.expand()
|
|
|
|
with qtbot.waitSignal(wdg.toggled, timeout=500):
|
|
wdg.collapse()
|
|
|
|
|
|
def test_getting_icon(qtbot):
|
|
"""Test setting string as toggle button."""
|
|
wdg = QCollapsible("test")
|
|
assert isinstance(wdg.expandedIcon(), QIcon)
|
|
assert isinstance(wdg.collapsedIcon(), QIcon)
|
|
|
|
|
|
def test_setting_icon(qtbot):
|
|
"""Test setting icon for toggle button."""
|
|
icon1 = _get_builtin_icon("ArrowRight")
|
|
icon2 = _get_builtin_icon("ArrowDown")
|
|
wdg = QCollapsible("test", expandedIcon=icon1, collapsedIcon=icon2)
|
|
assert wdg._expanded_icon == icon1
|
|
assert wdg._collapsed_icon == icon2
|
|
|
|
|
|
def test_setting_symbol_icon(qtbot):
|
|
"""Test setting string as toggle button."""
|
|
wdg = QCollapsible("test")
|
|
icon1 = wdg._convert_string_to_icon("+")
|
|
icon2 = wdg._convert_string_to_icon("-")
|
|
wdg.setCollapsedIcon(icon=icon1)
|
|
assert wdg._collapsed_icon == icon1
|
|
wdg.setExpandedIcon(icon=icon2)
|
|
assert wdg._expanded_icon == icon2
|