Files
superqt/tests/test_enum_comb_box.py
Talley Lambert 67035a0f0b move to src layout (#32)
* 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
2021-10-13 09:33:46 -04:00

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