/ tests / tst_rolesorter.qml
tst_rolesorter.qml
 1  import QtQuick 2.0
 2  import SortFilterProxyModel 0.2
 3  import QtQml.Models 2.2
 4  import QtTest 1.1
 5  
 6  Item {
 7      property list<RoleSorter> sorters: [
 8          RoleSorter {
 9              property string tag: "intRole"
10              property var expectedValues: [1, 2, 3, 4, 5]
11              roleName: "intRole"
12          },
13          RoleSorter {
14              property string tag: "intRoleDescending"
15              property var expectedValues: [5, 4, 3, 2, 1]
16              roleName: "intRole"
17              sortOrder: Qt.DescendingOrder
18          },
19          RoleSorter {
20              property string tag: "stringRole"
21              property var expectedValues: ["a", "b", "c", "d", "e"]
22              roleName: "stringRole"
23          },
24          RoleSorter {
25              property string tag: "stringRoleDescending"
26              property var expectedValues: ["e", "d", "c", "b", "a"]
27              roleName: "stringRole"
28              sortOrder: Qt.DescendingOrder
29          },
30          RoleSorter {
31              property string tag: "mixedCaseStringRole"
32              property var expectedValues: ["A", "b", "C", "D", "e"]
33              roleName: "mixedCaseStringRole"
34          }
35      ]
36  
37      ListModel {
38          id: dataModel
39          ListElement { intRole: 5; stringRole: "c"; mixedCaseStringRole: "C" }
40          ListElement { intRole: 3; stringRole: "e"; mixedCaseStringRole: "e" }
41          ListElement { intRole: 1; stringRole: "d"; mixedCaseStringRole: "D" }
42          ListElement { intRole: 2; stringRole: "a"; mixedCaseStringRole: "A" }
43          ListElement { intRole: 4; stringRole: "b"; mixedCaseStringRole: "b" }
44      }
45  
46      SortFilterProxyModel {
47          id: testModel
48          sourceModel: dataModel
49      }
50  
51      TestCase {
52          name: "RoleSorterTests"
53  
54          function test_roleSorters_data() {
55              return sorters;
56          }
57  
58          function test_roleSorters(sorter) {
59              testModel.sorters = sorter;
60  
61              verify(testModel.count === sorter.expectedValues.length,
62                     "Expected count " + sorter.expectedValues.length + ", actual count: " + testModel.count);
63              let actualValues = [];
64              for (var i = 0; i < testModel.count; i++) {
65                  actualValues.push(testModel.get(i, sorter.roleName));
66              }
67              compare(actualValues, sorter.expectedValues);
68          }
69      }
70  }