/ tests / tst_rangefilter.qml
tst_rangefilter.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<RangeFilter> filters: [
 8          RangeFilter {
 9              property string tag: "inclusive"
10              property int expectedModelCount: 3
11              property var expectedValues: [3, 2, 4]
12              property QtObject dataModel: dataModel0
13              roleName: "value"; minimumValue: 2; maximumValue: 4
14          },
15          RangeFilter {
16              property string tag: "explicitInclusive"
17              property int expectedModelCount: 3
18              property var expectedValues: [3, 2, 4]
19              property QtObject dataModel: dataModel0
20              roleName: "value"; minimumValue: 2; maximumValue: 4; minimumInclusive: true; maximumInclusive: true
21          },
22          RangeFilter {
23              property string tag: "inclusiveMinExclusiveMax"
24              property int expectedModelCount: 2
25              property var expectedValues: [2, 3]
26              property QtObject dataModel: dataModel1
27              roleName: "value"; minimumValue: 2; maximumValue: 4; minimumInclusive: true; maximumInclusive: false
28          },
29          RangeFilter {
30              property string tag: "exclusiveMinInclusiveMax"
31              property int expectedModelCount: 2
32              property var expectedValues: [3, 4]
33              property QtObject dataModel: dataModel1
34              roleName: "value"; minimumValue: 2; maximumValue: 4; minimumInclusive: false; maximumInclusive: true
35          },
36          RangeFilter {
37              property string tag: "exclusive"
38              property int expectedModelCount: 1
39              property var expectedValues: [3]
40              property QtObject dataModel: dataModel1
41              roleName: "value"; minimumValue: 2; maximumValue: 4; minimumInclusive: false; maximumInclusive: false
42          },
43          RangeFilter {
44              property string tag: "outOfBoundsRange"
45              property var expectedValues: []
46              property QtObject dataModel: dataModel1
47              roleName: "value"; minimumValue: 4; maximumValue: 2
48          },
49          RangeFilter {
50              objectName: tag
51              property string tag: "noMinimum"
52              property var expectedValues: [3, 1, 2]
53              property QtObject dataModel: dataModel0
54              roleName: "value"; maximumValue: 3
55          }
56      ]
57  
58      ListModel {
59          id: dataModel0
60          ListElement { value: 5 }
61          ListElement { value: 3 }
62          ListElement { value: 1 }
63          ListElement { value: 2 }
64          ListElement { value: 4 }
65      }
66  
67      ListModel {
68          id: dataModel1
69          ListElement { value: 5 }
70          ListElement { value: 2 }
71          ListElement { value: 3 }
72          ListElement { value: 1 }
73          ListElement { value: 4 }
74      }
75  
76      SortFilterProxyModel { id: testModel }
77  
78      TestCase {
79          name:"RangeFilterTests"
80  
81          function test_minMax_data() {
82              return filters;
83          }
84  
85          function test_minMax(filter) {
86              testModel.sourceModel = filter.dataModel;
87              testModel.filters = filter;
88  
89              verify(testModel.count === filter.expectedValues.length,
90                     "Expected count " + filter.expectedValues.length + ", actual count: " + testModel.count);
91              for (var i = 0; i < testModel.count; i++)
92              {
93                  var modelValue = testModel.get(i, filter.roleName);
94                  verify(modelValue === filter.expectedValues[i],
95                         "Expected testModel value " + filter.expectedValues[i] + ", actual: " + modelValue);
96              }
97          }
98      }
99  }