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]