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 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
|
# SPDX-License-Identifier: GPL-2.0-only
from typing import Dict, List, Final
import pytest
from pytestqt.qtbot import QtBot
from setoolsgui.widgets.criteria.checkboxset import CheckboxSetWidget
CHECKBOXES = ("cb1", "cb2", "cb3")
@pytest.fixture
def widget(mock_query, request: pytest.FixtureRequest, qtbot: QtBot) -> CheckboxSetWidget:
"""Pytest fixture to set up the widget."""
marker = request.node.get_closest_marker("obj_args")
kwargs = marker.kwargs if marker else {}
w = CheckboxSetWidget(request.node.name, mock_query, "checkboxes", CHECKBOXES, **kwargs)
qtbot.addWidget(w)
w.show()
return w
def test_base_settings(widget: CheckboxSetWidget) -> None:
"""Test base properties of CheckboxSetCriteriaWidget."""
assert widget.attrname == "checkboxes"
assert len(widget.criteria) == len(CHECKBOXES)
@pytest.mark.obj_args(num_cols=3)
def test_3across_layout(widget: CheckboxSetWidget) -> None:
"""Test three checkboxes all in one row layout."""
# validate widget item positions
assert widget.top_layout.itemAtPosition(0, 0).widget() == widget.criteria["cb1"]
assert widget.top_layout.itemAtPosition(0, 1).widget() == widget.criteria["cb2"]
assert widget.top_layout.itemAtPosition(0, 2).widget() == widget.criteria["cb3"]
assert widget.top_layout.itemAtPosition(0, 3).widget() == widget.clear_criteria
assert not widget.top_layout.itemAtPosition(1, 0)
assert not widget.top_layout.itemAtPosition(1, 1)
assert not widget.top_layout.itemAtPosition(1, 2)
assert widget.top_layout.itemAtPosition(1, 3).widget() == widget.invert_criteria
@pytest.mark.obj_args(num_cols=2)
def test_2across_layout(widget: CheckboxSetWidget) -> None:
"""Test two columns of checkboxes layout."""
# validate widget item positions
assert widget.top_layout.itemAtPosition(0, 0).widget() == widget.criteria["cb1"]
assert widget.top_layout.itemAtPosition(0, 1).widget() == widget.criteria["cb2"]
assert widget.top_layout.itemAtPosition(0, 2).widget() == widget.clear_criteria
assert widget.top_layout.itemAtPosition(1, 0).widget() == widget.criteria["cb3"]
assert not widget.top_layout.itemAtPosition(1, 1)
assert widget.top_layout.itemAtPosition(1, 2).widget() == widget.invert_criteria
@pytest.mark.obj_args(num_cols=1)
def test_1across_layout(widget: CheckboxSetWidget) -> None:
"""Test one column of checkboxes layout."""
# validate widget item positions
assert widget.top_layout.itemAtPosition(0, 0).widget() == widget.criteria["cb1"]
assert widget.top_layout.itemAtPosition(0, 1).widget() == widget.clear_criteria
assert widget.top_layout.itemAtPosition(1, 0).widget() == widget.criteria["cb2"]
assert widget.top_layout.itemAtPosition(1, 1).widget() == widget.invert_criteria
assert widget.top_layout.itemAtPosition(2, 0).widget() == widget.criteria["cb3"]
assert not widget.top_layout.itemAtPosition(2, 1)
def test_selection(widget: CheckboxSetWidget, mock_query) -> None:
"""Test checked boxes are reflected in the query."""
assert not widget.criteria["cb1"].isChecked()
assert not widget.criteria["cb2"].isChecked()
assert not widget.criteria["cb3"].isChecked()
widget.criteria["cb1"].setChecked(True)
widget.criteria["cb2"].setChecked(False)
widget.criteria["cb3"].setChecked(True)
assert widget.selection() == ["cb1", "cb3"]
assert mock_query.checkboxes == ["cb1", "cb3"]
def test_set_selection(widget: CheckboxSetWidget, mock_query) -> None:
"""Test set_selection method."""
# This to verify the current selection is cleared.
widget.criteria["cb1"].setChecked(True)
widget.set_selection(["cb2", "cb3"])
assert not widget.criteria["cb1"].isChecked()
assert widget.criteria["cb2"].isChecked()
assert widget.criteria["cb3"].isChecked()
assert widget.selection() == ["cb2", "cb3"]
assert mock_query.checkboxes == ["cb2", "cb3"]
def test_clear_selection(widget: CheckboxSetWidget, mock_query) -> None:
"""Test clear selection button."""
widget.set_selection(["cb1", "cb2"])
widget.clear_criteria.click()
assert not widget.criteria["cb1"].isChecked()
assert not widget.criteria["cb2"].isChecked()
assert not widget.criteria["cb3"].isChecked()
assert widget.selection() == []
assert mock_query.checkboxes == []
def test_invert_selection(widget: CheckboxSetWidget, mock_query) -> None:
"""Test clear selection button."""
widget.set_selection(["cb1", "cb2"])
widget.invert_criteria.click()
assert not widget.criteria["cb1"].isChecked()
assert not widget.criteria["cb2"].isChecked()
assert widget.criteria["cb3"].isChecked()
assert widget.selection() == ["cb3"]
assert mock_query.checkboxes == ["cb3"]
def test_save(widget: CheckboxSetWidget) -> None:
"""Test save."""
selection = ["cb2", "cb3"]
expected: Final = {"checkboxes": selection}
widget.set_selection(selection)
settings: Dict[str, List[str]] = {}
widget.save(settings)
assert expected == settings
def test_load(widget: CheckboxSetWidget) -> None:
"""Test load."""
selection = ["cb1", "cb3"]
settings: Final = {"checkboxes": selection}
widget.load(settings)
assert widget.selection() == selection
def test_set_selection_disabled(widget: CheckboxSetWidget, mock_query) -> None:
"""Test set_selection method, ignoring disabled boxes."""
widget.criteria["cb2"].setDisabled(True)
widget.set_selection(["cb2", "cb3"])
assert not widget.criteria["cb1"].isChecked()
assert not widget.criteria["cb2"].isChecked()
assert widget.criteria["cb3"].isChecked()
assert widget.selection() == ["cb3"]
assert mock_query.checkboxes == ["cb3"]
def test_clear_selection_disabled(widget: CheckboxSetWidget, mock_query) -> None:
"""Test clear selection button, ignoring disabled boxes."""
widget.set_selection(["cb1", "cb2"])
widget.criteria["cb2"].setDisabled(True)
widget.clear_criteria.click()
assert not widget.criteria["cb1"].isChecked()
assert widget.criteria["cb2"].isChecked()
assert not widget.criteria["cb3"].isChecked()
assert widget.selection() == ["cb2"]
assert mock_query.checkboxes == ["cb2"]
def test_invert_selection_disabled(widget: CheckboxSetWidget, mock_query) -> None:
"""Test clear selection button, ignoring disabled boxes."""
widget.set_selection(["cb1", "cb2"])
widget.criteria["cb2"].setDisabled(True)
widget.invert_criteria.click()
assert not widget.criteria["cb1"].isChecked()
assert widget.criteria["cb2"].isChecked()
assert widget.criteria["cb3"].isChecked()
assert widget.selection() == ["cb2", "cb3"]
assert mock_query.checkboxes == ["cb2", "cb3"]
|