From 9a72c73226ce193c733513484ecf9292bce8601b Mon Sep 17 00:00:00 2001 From: Pierre-Yves Siret Date: Tue, 24 Jan 2017 19:07:15 +0100 Subject: [PATCH] Added tests to verify the core sorter functionnality Issue #22 where a Sorter being disabled doesn't trigger a sort change is exposed. --- tests/SortFilterProxyModel.pro | 14 ++-- tests/indexsorter.cpp | 19 ++++++ tests/indexsorter.h | 20 ++++++ tests/tst_sorters.qml | 114 +++++++++++++++++++++++++++++++++ 4 files changed, 162 insertions(+), 5 deletions(-) create mode 100644 tests/indexsorter.cpp create mode 100644 tests/indexsorter.h create mode 100644 tests/tst_sorters.qml diff --git a/tests/SortFilterProxyModel.pro b/tests/SortFilterProxyModel.pro index a030797..7c23a69 100644 --- a/tests/SortFilterProxyModel.pro +++ b/tests/SortFilterProxyModel.pro @@ -5,11 +5,15 @@ CONFIG += c++11 warn_on qmltestcase qml_debug include(../SortFilterProxyModel.pri) -SOURCES += tst_sortfilterproxymodel.cpp +HEADERS += \ + indexsorter.h + +SOURCES += \ + tst_sortfilterproxymodel.cpp \ + indexsorter.cpp OTHER_FILES += \ tst_rangefilter.qml \ - tst_indexfilter.qml - -DISTFILES += \ - tst_sourceroles.qml + tst_indexfilter.qml \ + tst_sourceroles.qml \ + tst_sorters.qml diff --git a/tests/indexsorter.cpp b/tests/indexsorter.cpp new file mode 100644 index 0000000..6a9ce70 --- /dev/null +++ b/tests/indexsorter.cpp @@ -0,0 +1,19 @@ +#include "indexsorter.h" +#include + +int IndexSorter::compare(const QModelIndex &sourceLeft, const QModelIndex &sourceRight) const +{ + return sourceLeft.row() - sourceRight.row(); +} + +int ReverseIndexSorter::compare(const QModelIndex &sourceLeft, const QModelIndex &sourceRight) const +{ + return sourceRight.row() - sourceLeft.row(); +} + +void registerIndexSorterTypes() { + qmlRegisterType("SortFilterProxyModel.Test", 0, 2, "IndexSorter"); + qmlRegisterType("SortFilterProxyModel.Test", 0, 2, "ReverseIndexSorter"); +} + +Q_COREAPP_STARTUP_FUNCTION(registerIndexSorterTypes) diff --git a/tests/indexsorter.h b/tests/indexsorter.h new file mode 100644 index 0000000..05812e8 --- /dev/null +++ b/tests/indexsorter.h @@ -0,0 +1,20 @@ +#ifndef INDEXSORTER_H +#define INDEXSORTER_H + +#include + +class IndexSorter : public qqsfpm::Sorter +{ +public: + using qqsfpm::Sorter::Sorter; + int compare(const QModelIndex& sourceLeft, const QModelIndex& sourceRight) const override; +}; + +class ReverseIndexSorter : public qqsfpm::Sorter +{ +public: + using qqsfpm::Sorter::Sorter; + int compare(const QModelIndex& sourceLeft, const QModelIndex& sourceRight) const override; +}; + +#endif // INDEXSORTER_H diff --git a/tests/tst_sorters.qml b/tests/tst_sorters.qml new file mode 100644 index 0000000..74dbdf9 --- /dev/null +++ b/tests/tst_sorters.qml @@ -0,0 +1,114 @@ +import QtQuick 2.0 +import QtQml 2.2 +import QtTest 1.1 +import SortFilterProxyModel 0.2 +import SortFilterProxyModel.Test 0.2 + +Item { + ListModel { + id: listModel + ListElement { test: "first" } + ListElement { test: "second" } + ListElement { test: "third" } + ListElement { test: "fourth" } + } + + property list sorters: [ + QtObject { + property string tag: "no sorter" + property bool notASorter: true + property var expectedValues: ["first", "second", "third", "fourth"] + }, + IndexSorter { + property string tag: "Dummy IndexSorter" + property var expectedValues: ["first", "second", "third", "fourth"] + }, + ReverseIndexSorter { + property string tag: "Dummy ReverseIndexSorter" + property var expectedValues: ["fourth", "third", "second", "first"] + }, + IndexSorter { + property string tag: "Disabled dummy IndexSorter" + enabled: false + property var expectedValues: ["first", "second", "third", "fourth"] + }, + ReverseIndexSorter { + property string tag: "Disabled dummy ReverseIndexSorter" + enabled: false + property var expectedValues: ["first", "second", "third", "fourth"] + }, + IndexSorter { + property string tag: "Descending dummy IndexSorter" + ascendingOrder: false + property var expectedValues: ["fourth", "third", "second", "first"] + }, + ReverseIndexSorter { + property string tag: "Descending dummy ReverseIndexSorter" + ascendingOrder: false + property var expectedValues: ["first", "second", "third", "fourth"] + }, + IndexSorter { + property string tag: "Disabled descending dummy IndexSorter" + enabled: false + ascendingOrder: false + property var expectedValues: ["first", "second", "third", "fourth"] + }, + ReverseIndexSorter { + property string tag: "Disabled descending dummy ReverseIndexSorter" + enabled: false + ascendingOrder: false + property var expectedValues: ["first", "second", "third", "fourth"] + } + ] + ReverseIndexSorter { + id: reverseIndexSorter + } + SortFilterProxyModel { + id: testModel + sourceModel: listModel + } + + TestCase { + name: "SortersTests" + + function test_indexOrder_data() { + return sorters; + } + + function test_indexOrder(sorter) { + testModel.sorters = sorter; + verifyModelValues(testModel, sorter.expectedValues); + } + + function test_enablingSorter() { + reverseIndexSorter.enabled = false; + testModel.sorters = reverseIndexSorter; + var expectedValuesBeforeEnabling = ["first", "second", "third", "fourth"]; + var expectedValuesAfterEnabling = ["fourth", "third", "second", "first"]; + verifyModelValues(testModel, expectedValuesBeforeEnabling); + reverseIndexSorter.enabled = true; + verifyModelValues(testModel, expectedValuesAfterEnabling); + } + + function test_disablingSorter() { + reverseIndexSorter.enabled = true; + testModel.sorters = reverseIndexSorter; + var expectedValuesBeforeDisabling = ["fourth", "third", "second", "first"]; + var expectedValuesAfterDisabling = ["first", "second", "third", "fourth"]; + verifyModelValues(testModel, expectedValuesBeforeDisabling); + reverseIndexSorter.enabled = false; + verifyModelValues(testModel, expectedValuesAfterDisabling); + } + + function verifyModelValues(model, expectedValues) { + verify(model.count === expectedValues.length, + "Expected count " + expectedValues.length + ", actual count: " + model.count); + for (var i = 0; i < model.count; i++) + { + var modelValue = model.data(model.index(i, 0)); + verify(modelValue === expectedValues[i], + "Expected testModel value " + expectedValues[i] + ", actual: " + modelValue); + } + } + } +}