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 }