From 283cdcd3d5fad368c9df1bcae69cbfbf9ade623f Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 28 Nov 2023 13:57:47 +0100 Subject: EditableTreeModel: Add a test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add a test running QAbstractItemModelTester on the model. Pick-to: 6.6 Change-Id: I40c141c7e754ca05234da611534bd65e456be2fb Reviewed-by: Kai Köhne --- examples/widgets/doc/src/editabletreemodel.qdoc | 15 +++++++++ .../itemviews/editabletreemodel/CMakeLists.txt | 28 +++++++++++++++- .../widgets/itemviews/editabletreemodel/test.cpp | 37 ++++++++++++++++++++++ 3 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 examples/widgets/itemviews/editabletreemodel/test.cpp (limited to 'examples') diff --git a/examples/widgets/doc/src/editabletreemodel.qdoc b/examples/widgets/doc/src/editabletreemodel.qdoc index 58cd544694..22ff7b574e 100644 --- a/examples/widgets/doc/src/editabletreemodel.qdoc +++ b/examples/widgets/doc/src/editabletreemodel.qdoc @@ -419,4 +419,19 @@ \target TreeModel::data \target TreeModel::setupModelData + \section1 Testing the model + + Correctly implementing an item model can be challenging. The class + \l QAbstractItemModelTester from the \l{Qt Test} module checks for model + consistency, like the model index creation and parent-child relationships. + + You can test your model by just passing a model instance to the class + constructor, for instance as part of a Qt unit test: + + \snippet itemviews/editabletreemodel/test.cpp 1 + + To create a test which can be run using the \c ctest executable, + \c add_test() is used: + + \snippet itemviews/editabletreemodel/CMakeLists.txt 1 */ diff --git a/examples/widgets/itemviews/editabletreemodel/CMakeLists.txt b/examples/widgets/itemviews/editabletreemodel/CMakeLists.txt index eb616b9f85..9c98b49626 100644 --- a/examples/widgets/itemviews/editabletreemodel/CMakeLists.txt +++ b/examples/widgets/itemviews/editabletreemodel/CMakeLists.txt @@ -10,7 +10,7 @@ endif() set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/itemviews/editabletreemodel") -find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets) +find_package(Qt6 REQUIRED COMPONENTS Core Gui Test Widgets) qt_standard_project_setup() @@ -49,3 +49,29 @@ install(TARGETS editabletreemodel BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" ) + +#! [1] +# Unit Test + +include(CTest) + +qt_add_executable(editabletreemodel_tester + test.cpp + treeitem.cpp treeitem.h + treemodel.cpp treemodel.h) + +target_link_libraries(editabletreemodel_tester PRIVATE + Qt6::Core + Qt6::Test +) + +qt_add_resources(editabletreemodel_tester "editabletreemodel" + PREFIX + "/" + FILES + ${editabletreemodel_resource_files} +) + +add_test(NAME editabletreemodel_tester + COMMAND editabletreemodel_tester) +#! [1] diff --git a/examples/widgets/itemviews/editabletreemodel/test.cpp b/examples/widgets/itemviews/editabletreemodel/test.cpp new file mode 100644 index 0000000000..c041fe9402 --- /dev/null +++ b/examples/widgets/itemviews/editabletreemodel/test.cpp @@ -0,0 +1,37 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + +#include "treemodel.h" + +#include +#include +#include + +using namespace Qt::StringLiterals; + +//! [1] +class TestEditableTreeModel : public QObject +{ + Q_OBJECT + +private slots: + void testTreeModel(); +}; + +void TestEditableTreeModel::testTreeModel() +{ + constexpr auto fileName = ":/default.txt"_L1; + QFile file(fileName); + QVERIFY2(file.open(QIODevice::ReadOnly | QIODevice::Text), + qPrintable(fileName + " cannot be opened: "_L1 + file.errorString())); + + const QStringList headers{"column1"_L1, "column2"_L1}; + TreeModel model(headers, QString::fromUtf8(file.readAll())); + + QAbstractItemModelTester tester(&model); +} + +QTEST_APPLESS_MAIN(TestEditableTreeModel) + +#include "test.moc" +//! [1] -- cgit v1.2.3