1from unittest import TestCase
2
3from PyQt5.QtCore import Qt, QModelIndex
4
5from UM.Qt.ListModel import ListModel
6from copy import deepcopy
7
8class TestListModel(TestCase):
9
10    list_model = None  # type: ListModel
11
12    test_data = [{"name": "yay", "data": 12}, {"name": "omg", "data": 13}, {"name":"zomg", "data": 14}]
13    NameRole = Qt.UserRole + 1
14    DataRole = Qt.UserRole + 2
15
16    def setUp(self):
17        self.list_model = ListModel()
18        self.list_model.addRoleName(self.NameRole, "name")
19        self.list_model.addRoleName(self.DataRole, "data")
20
21        self.list_model.setItems(deepcopy(self.test_data))
22
23    def test_getItem(self):
24        assert self.list_model.getItem(0) == {"name": "yay", "data": 12}
25        assert self.list_model.getItem(9001) == {}
26
27    def test_items(self):
28        assert self.list_model.items == self.test_data
29
30    def test_insertItem(self):
31        self.list_model.insertItem(0, {"name": "zomg!", "data": "yay"})
32        assert self.list_model.getItem(0) == {"name": "zomg!", "data": "yay"}
33        # Check if the previously first item is now the second one.
34        assert self.list_model.getItem(1) == {"name": "yay", "data": 12}
35
36    def test_removeItem(self):
37        self.list_model.removeItem(1)
38        assert self.list_model.getItem(1) == {"name":"zomg", "data": 14}
39
40    def test_clear(self):
41        assert self.list_model.count == 3
42        self.list_model.clear()
43        assert self.list_model.count == 0
44
45    def test_appendItem(self):
46        self.list_model.appendItem({"name":"!", "data": 9001})
47        assert self.list_model.count == 4
48        assert self.list_model.getItem(3) == {"name":"!", "data": 9001}
49
50    def test_setProperty(self):
51        self.list_model.setProperty(0, "name", "new_data")
52        assert self.list_model.getItem(0)["name"] == "new_data"
53
54    def test_find(self):
55        assert self.list_model.find("name", "omg") == 1
56        assert self.list_model.find("data", 13) == 1
57        assert self.list_model.find("name", "zomg") == 2
58
59        assert self.list_model.find("name", "UNKNOWN") == -1
60
61    def test_setItems(self):
62        self.list_model.setItems([{"name": "zomg!", "data": "yay"}])
63        assert self.list_model.items == [{"name": "zomg!", "data": "yay"}]
64
65    def test_sort(self):
66        self.list_model.sort(lambda i: -i["data"])
67
68        assert self.list_model.getItem(0) == {"name":"zomg", "data": 14}
69        assert self.list_model.getItem(2) == {"name": "yay", "data": 12}