File: test_collapsible.py

package info (click to toggle)
superqt 0.7.7-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,320 kB
  • sloc: python: 9,108; makefile: 16; sh: 12
file content (139 lines) | stat: -rw-r--r-- 3,957 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
"""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