diff options
author | Ivan Solovev <ivan.solovev@qt.io> | 2020-12-14 14:35:07 +0100 |
---|---|---|
committer | Ivan Solovev <ivan.solovev@qt.io> | 2021-05-04 22:58:59 +0200 |
commit | 8161a9e5c0bd7430ab450801a144bd5a5e786408 (patch) | |
tree | 2f63c908085caebd0d6f015e4cf22cae23ad2e25 /tests | |
parent | 0fb77f80b81e09945a9e6e660c915c765415eb39 (diff) |
QAbstractProxyModel: port to new property system
The biggest trick here is the getter (QAbstractProxyModel::sourceModel),
which is returning nullptr, while internally using a global
staticEmptyModel() instance.
This lead to inconsistency while binding to a proxy model without
source model. The bound object would point to staticEmptyModel()
instance, while sourceModel() getter returns nullptr.
To solve this issue a custom QBindableInterface is implemented.
Task-number: QTBUG-85520
Change-Id: I597df891c7e425d51b55f50ccbacabdfe935cbac
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/corelib/itemmodels/qabstractproxymodel/CMakeLists.txt | 3 | ||||
-rw-r--r-- | tests/auto/corelib/itemmodels/qabstractproxymodel/tst_qabstractproxymodel.cpp | 32 |
2 files changed, 33 insertions, 2 deletions
diff --git a/tests/auto/corelib/itemmodels/qabstractproxymodel/CMakeLists.txt b/tests/auto/corelib/itemmodels/qabstractproxymodel/CMakeLists.txt index 277556b915..6c782326cb 100644 --- a/tests/auto/corelib/itemmodels/qabstractproxymodel/CMakeLists.txt +++ b/tests/auto/corelib/itemmodels/qabstractproxymodel/CMakeLists.txt @@ -9,6 +9,7 @@ qt_internal_add_test(tst_qabstractproxymodel tst_qabstractproxymodel.cpp DEFINES QT_DISABLE_DEPRECATED_BEFORE=0 - PUBLIC_LIBRARIES + LIBRARIES Qt::Gui + Qt::TestPrivate ) diff --git a/tests/auto/corelib/itemmodels/qabstractproxymodel/tst_qabstractproxymodel.cpp b/tests/auto/corelib/itemmodels/qabstractproxymodel/tst_qabstractproxymodel.cpp index b6ee3c5d4a..dced357d61 100644 --- a/tests/auto/corelib/itemmodels/qabstractproxymodel/tst_qabstractproxymodel.cpp +++ b/tests/auto/corelib/itemmodels/qabstractproxymodel/tst_qabstractproxymodel.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the test suite of the Qt Toolkit. @@ -27,6 +27,7 @@ ****************************************************************************/ #include <QTest> +#include <QtTest/private/qpropertytesthelper_p.h> #include <qabstractproxymodel.h> #include <QItemSelection> #include <qstandarditemmodel.h> @@ -60,6 +61,7 @@ private slots: void testRoleNames(); void testSwappingRowsProxy(); void testDragAndDrop(); + void sourceModelBinding(); }; // Subclass that exposes the protected functions. @@ -500,6 +502,34 @@ void tst_QAbstractProxyModel::testDragAndDrop() QCOMPARE(proxy.supportedDropActions(), sourceModel.supportedDropActions()); } +void tst_QAbstractProxyModel::sourceModelBinding() +{ + SubQAbstractProxyModel proxy; + QStandardItemModel model1; + QStandardItemModel model2; + QTestPrivate::testReadWritePropertyBasics<QAbstractProxyModel, QAbstractItemModel *>( + proxy, &model1, &model2, "sourceModel"); + if (QTest::currentTestFailed()) { + qDebug("Failed model - model test"); + return; + } + + proxy.setSourceModel(&model2); + QTestPrivate::testReadWritePropertyBasics<QAbstractProxyModel, QAbstractItemModel *>( + proxy, &model1, nullptr, "sourceModel"); + if (QTest::currentTestFailed()) { + qDebug("Failed model - nullptr test"); + return; + } + + proxy.setSourceModel(&model1); + QTestPrivate::testReadWritePropertyBasics<QAbstractProxyModel, QAbstractItemModel *>( + proxy, nullptr, &model2, "sourceModel"); + if (QTest::currentTestFailed()) { + qDebug("Failed nullptr - model test"); + return; + } +} QTEST_MAIN(tst_QAbstractProxyModel) #include "tst_qabstractproxymodel.moc" |