/ tests / tst_builtins.qml
tst_builtins.qml
  1  import QtQuick 2.0
  2  import QtQml 2.2
  3  import QtTest 1.1
  4  import SortFilterProxyModel 0.2
  5  
  6  Item {
  7      ListModel {
  8          id: testModel
  9          ListElement{role1: 1; role2: 1}
 10          ListElement{role1: 2; role2: 1}
 11          ListElement{role1: 3; role2: 2}
 12          ListElement{role1: 4; role2: 2}
 13      }
 14      ListModel {
 15          id: noRolesFirstTestModel_1
 16          function initModel() {
 17              append({role1: 1, role2: 1 })
 18              append({role1: 2, role2: 1 })
 19              append({role1: 3, role2: 2 })
 20              append({role1: 4, role2: 2 })
 21          }
 22      }
 23      ListModel {
 24          id: noRolesFirstTestModel_2
 25          function initModel() {
 26              append({role1: 3, role2: 2 })
 27              append({role1: 4, role2: 2 })
 28          }
 29      }
 30      ListModel {
 31          id: noRolesFirstTestModel_3
 32          function initModel() {
 33              append({role1: 3, role2: 2 })
 34              append({role1: 4, role2: 2 })
 35          }
 36      }
 37      SortFilterProxyModel {
 38          id: testProxyModel
 39          property string tag: "testProxyModel"
 40          sourceModel: testModel
 41          filterRoleName: "role2"
 42          filterValue: 2
 43          property var expectedData: ([{role1: 3, role2: 2}, {role1: 4, role2: 2}])
 44      }
 45      SortFilterProxyModel {
 46          id: noRolesFirstTestProxyModel
 47          property string tag: "noRolesFirstTestProxyModel"
 48          sourceModel: noRolesFirstTestModel_1
 49          filterRoleName: "role2"
 50          filterValue: 2
 51          property var expectedData: ([{role1: 3, role2: 2}, {role1: 4, role2: 2}])
 52      }
 53      SortFilterProxyModel {
 54          id: noRolesFirstTestProxyModelWithProxyRoles
 55          property string tag: "noRolesFirstTestProxyModelWithProxyRoles"
 56          sourceModel: noRolesFirstTestModel_2
 57          property var expectedData: ([{role1: 3, role2: 2, proxyRole: 42}, {role1: 4, role2: 2, proxyRole: 42}])
 58  
 59          proxyRoles: ExpressionRole {
 60              name: "proxyRole"
 61              expression: 42
 62          }
 63      }
 64      SortFilterProxyModel {
 65          id: noRolesFirstTestProxyModelWithProxyRolesNested
 66          property string tag: "noRolesFirstTestProxyModelWithProxyRolesNested"
 67  
 68          property var nested: SortFilterProxyModel {
 69              id: nested
 70  
 71              function initModel() {
 72                  sourceModel.initModel();
 73              }
 74  
 75              sourceModel: noRolesFirstTestModel_3
 76  
 77              proxyRoles: ExpressionRole {
 78                  name: "proxyRole"
 79                  expression: 42
 80              }
 81          }
 82  
 83          sourceModel: nested
 84          property var expectedData: ([{role1: 3, role2: 2, proxyRole: 42}, {role1: 4, role2: 2, proxyRole: 42}])
 85      }
 86      TestCase {
 87          name: "BuiltinsFilterTests"
 88          function test_filterValue_data() {
 89              return [testProxyModel, noRolesFirstTestProxyModel,
 90                      noRolesFirstTestProxyModelWithProxyRoles,
 91                      noRolesFirstTestProxyModelWithProxyRolesNested];
 92          }
 93  
 94          function test_filterValue(proxyModel) {
 95              if (proxyModel.sourceModel.initModel)
 96                  proxyModel.sourceModel.initModel()
 97              var data = [];
 98              for (var i = 0; i < proxyModel.count; i++)
 99                  data.push(proxyModel.get(i));
100  
101              compare(data, proxyModel.expectedData);
102          }
103      }
104  }