From b1039a405aa7770a7d2f82ad7c580f8c349eec56 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Thu, 16 Nov 2023 08:43:08 +0100 Subject: [PATCH] SimpleTreeModel: 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. Change-Id: I6ea5d34308357409b9a13eb0271392c8d171addd Reviewed-by: Kai Köhne (cherry picked from commit d9c71b834ccd815b85e9589f21eba1f51c48614a) Reviewed-by: Qt Cherry-pick Bot --- examples/widgets/doc/src/simpletreemodel.qdoc | 16 +++++++++ .../itemviews/simpletreemodel/CMakeLists.txt | 28 ++++++++++++++- .../itemviews/simpletreemodel/test.cpp | 35 +++++++++++++++++++ 3 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 examples/widgets/itemviews/simpletreemodel/test.cpp diff --git a/examples/widgets/doc/src/simpletreemodel.qdoc b/examples/widgets/doc/src/simpletreemodel.qdoc index 715a0a87523..10e79e28452 100644 --- a/examples/widgets/doc/src/simpletreemodel.qdoc +++ b/examples/widgets/doc/src/simpletreemodel.qdoc @@ -319,4 +319,20 @@ To ensure that the model works correctly, it is only necessary to create instances of \c TreeItem with the correct data and parent item. + + \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/simpletreemodel/test.cpp 1 + + To create a test which can be run using the \c ctest executable, + \c add_test() is used: + + \snippet itemviews/simpletreemodel/CMakeLists.txt 1 */ diff --git a/examples/widgets/itemviews/simpletreemodel/CMakeLists.txt b/examples/widgets/itemviews/simpletreemodel/CMakeLists.txt index 519810f70ff..73a50dbbf13 100644 --- a/examples/widgets/itemviews/simpletreemodel/CMakeLists.txt +++ b/examples/widgets/itemviews/simpletreemodel/CMakeLists.txt @@ -10,7 +10,7 @@ endif() set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/itemviews/simpletreemodel") -find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets) +find_package(Qt6 REQUIRED COMPONENTS Core Gui Test Widgets) qt_standard_project_setup() @@ -48,3 +48,29 @@ install(TARGETS simpletreemodel BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" ) + +#! [1] +# Unit Test + +include(CTest) + +qt_add_executable(simpletreemodel_tester + test.cpp + treeitem.cpp treeitem.h + treemodel.cpp treemodel.h) + +target_link_libraries(simpletreemodel_tester PRIVATE + Qt6::Core + Qt6::Test +) + +qt_add_resources(simpletreemodel_tester "simpletreemodel" + PREFIX + "/" + FILES + ${simpletreemodel_resource_files} +) + +add_test(NAME simpletreemodel_tester + COMMAND simpletreemodel_tester) +#! [1] diff --git a/examples/widgets/itemviews/simpletreemodel/test.cpp b/examples/widgets/itemviews/simpletreemodel/test.cpp new file mode 100644 index 00000000000..7e9479a3968 --- /dev/null +++ b/examples/widgets/itemviews/simpletreemodel/test.cpp @@ -0,0 +1,35 @@ +// 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 TestSimpleTreeModel : public QObject +{ + Q_OBJECT + +private slots: + void testTreeModel(); +}; + +void TestSimpleTreeModel::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())); + TreeModel model(QString::fromUtf8(file.readAll())); + + QAbstractItemModelTester tester(&model); +} + +QTEST_APPLESS_MAIN(TestSimpleTreeModel) + +#include "test.moc" +//! [1]