fix(device_manager): compare SortTableItem by text when it has no sort data

This commit is contained in:
wyzula_j authored and Jan Wyzula committed 2026-10-16 16:31:27 +02:00
1 parent 9c8800a8fa
commit 68d5093002
2 files changed
+22 -3

No files matched your search

@@ -148,7 +148,7 @@ class SortTableItem(QtWidgets.QTableWidgetItem):
"""
Table item that sorts by the value stored under the UserRole data role.
Items without UserRole data fall back to the QTableWidgetItem comparison.
If either item has no UserRole data, the items are compared by their text.
Args:
*args: Positional arguments forwarded to QTableWidgetItem.
@@ -178,7 +178,7 @@ class SortTableItem(QtWidgets.QTableWidgetItem):
values = self._sort_values(other)
if values is not None:
return values[0] < values[1]
return super().__lt__(other)
return self.text() < other.text()
def __gt__(self, other: QtWidgets.QTableWidgetItem) -> bool:
"""Override greater-than operator for sorting."""
@@ -187,7 +187,7 @@ class SortTableItem(QtWidgets.QTableWidgetItem):
values = self._sort_values(other)
if values is not None:
return values[0] > values[1]
return super().__gt__(other)
return self.text() > other.text()
class DeviceTable(BECWidget, QtWidgets.QWidget):
@@ -315,6 +315,25 @@ class TestSortTableItem:
assert high > low
assert not high < low
def test_falls_back_to_text_without_data(self):
"""Items without UserRole data are compared by their text."""
a, b = self._item(text="a"), self._item(text="b")
assert a < b and b > a
assert not b < a and not a > b
assert self._item(1, text="b") > QtWidgets.QTableWidgetItem("a")
assert self._item(1, text="b") < self._item(text="c")
def test_table_sorts_items_without_data(self, qtbot):
"""A table of items without UserRole data sorts by text in both directions."""
table = QtWidgets.QTableWidget(3, 1)
qtbot.addWidget(table)
for row, text in enumerate(["b", "c", "a"]):
table.setItem(row, 0, SortTableItem(text))
table.sortItems(0, QtCore.Qt.SortOrder.AscendingOrder)
assert [table.item(row, 0).text() for row in range(3)] == ["a", "b", "c"]
table.sortItems(0, QtCore.Qt.SortOrder.DescendingOrder)
assert [table.item(row, 0).text() for row in range(3)] == ["c", "b", "a"]
def test_sort_key(self):
"""A sort key maps the UserRole data before comparing."""