mirror of
https://github.com/pyapp-kit/superqt.git
synced 2025-09-05 17:20:27 +02:00
* move to src layout * fix manifest and version * fix test structure * undo * undo * undo change * remove pyargs * waitsignal * update label test * soften eliding test * another fix * update again * more fixes * more skips * stupid fixes
130 lines
3.2 KiB
Python
130 lines
3.2 KiB
Python
from enum import Enum
|
|
|
|
import pytest
|
|
|
|
from superqt.combobox import QEnumComboBox
|
|
from superqt.combobox._enum_combobox import NONE_STRING
|
|
|
|
|
|
class Enum1(Enum):
|
|
a = 1
|
|
b = 2
|
|
c = 3
|
|
|
|
|
|
class Enum2(Enum):
|
|
d = 1
|
|
e = 2
|
|
f = 3
|
|
g = 4
|
|
|
|
|
|
class Enum3(Enum):
|
|
a = 1
|
|
b = 2
|
|
c = 3
|
|
|
|
def __str__(self):
|
|
return self.name + "1"
|
|
|
|
|
|
class Enum4(Enum):
|
|
a_1 = 1
|
|
b_2 = 2
|
|
c_3 = 3
|
|
|
|
|
|
def test_simple_create(qtbot):
|
|
enum = QEnumComboBox(enum_class=Enum1)
|
|
qtbot.addWidget(enum)
|
|
assert enum.count() == 3
|
|
assert [enum.itemText(i) for i in range(enum.count())] == ["a", "b", "c"]
|
|
|
|
|
|
def test_simple_create2(qtbot):
|
|
enum = QEnumComboBox()
|
|
qtbot.addWidget(enum)
|
|
assert enum.count() == 0
|
|
enum.setEnumClass(Enum1)
|
|
assert enum.count() == 3
|
|
assert [enum.itemText(i) for i in range(enum.count())] == ["a", "b", "c"]
|
|
|
|
|
|
def test_replace(qtbot):
|
|
enum = QEnumComboBox(enum_class=Enum1)
|
|
qtbot.addWidget(enum)
|
|
assert enum.count() == 3
|
|
assert enum.enumClass() == Enum1
|
|
assert isinstance(enum.currentEnum(), Enum1)
|
|
enum.setEnumClass(Enum2)
|
|
assert enum.enumClass() == Enum2
|
|
assert isinstance(enum.currentEnum(), Enum2)
|
|
assert enum.count() == 4
|
|
assert [enum.itemText(i) for i in range(enum.count())] == ["d", "e", "f", "g"]
|
|
|
|
|
|
def test_str_replace(qtbot):
|
|
enum = QEnumComboBox(enum_class=Enum3)
|
|
qtbot.addWidget(enum)
|
|
assert enum.count() == 3
|
|
assert [enum.itemText(i) for i in range(enum.count())] == ["a1", "b1", "c1"]
|
|
|
|
|
|
def test_underscore_replace(qtbot):
|
|
enum = QEnumComboBox(enum_class=Enum4)
|
|
qtbot.addWidget(enum)
|
|
assert enum.count() == 3
|
|
assert [enum.itemText(i) for i in range(enum.count())] == ["a 1", "b 2", "c 3"]
|
|
|
|
|
|
def test_change_value(qtbot):
|
|
enum = QEnumComboBox(enum_class=Enum1)
|
|
qtbot.addWidget(enum)
|
|
assert enum.currentEnum() == Enum1.a
|
|
with qtbot.waitSignal(
|
|
enum.currentEnumChanged, check_params_cb=lambda x: isinstance(x, Enum)
|
|
):
|
|
enum.setCurrentEnum(Enum1.c)
|
|
assert enum.currentEnum() == Enum1.c
|
|
|
|
|
|
def test_no_enum(qtbot):
|
|
enum = QEnumComboBox()
|
|
assert enum.enumClass() is None
|
|
qtbot.addWidget(enum)
|
|
assert enum.currentEnum() is None
|
|
|
|
|
|
def test_prohibited_methods(qtbot):
|
|
enum = QEnumComboBox(enum_class=Enum1)
|
|
qtbot.addWidget(enum)
|
|
with pytest.raises(RuntimeError):
|
|
enum.addItem("aaa")
|
|
with pytest.raises(RuntimeError):
|
|
enum.addItems(["aaa", "bbb"])
|
|
with pytest.raises(RuntimeError):
|
|
enum.insertItem(0, "aaa")
|
|
with pytest.raises(RuntimeError):
|
|
enum.insertItems(0, ["aaa", "bbb"])
|
|
assert enum.count() == 3
|
|
|
|
|
|
def test_optional(qtbot):
|
|
enum = QEnumComboBox(enum_class=Enum1, allow_none=True)
|
|
qtbot.addWidget(enum)
|
|
assert [enum.itemText(i) for i in range(enum.count())] == [
|
|
NONE_STRING,
|
|
"a",
|
|
"b",
|
|
"c",
|
|
]
|
|
assert enum.currentText() == NONE_STRING
|
|
assert enum.currentEnum() is None
|
|
enum.setCurrentEnum(Enum1.a)
|
|
assert enum.currentText() == "a"
|
|
assert enum.currentEnum() == Enum1.a
|
|
assert enum.enumClass() is Enum1
|
|
enum.setCurrentEnum(None)
|
|
assert enum.currentText() == NONE_STRING
|
|
assert enum.currentEnum() is None
|