From 001e90a4c6d787f5b40c138228e339914d6dd0bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Cie=C5=9Blak?= Date: Tue, 16 Jan 2024 10:31:24 +0100 Subject: [PATCH] StatusQ: ModelSignalsSpy testing utility --- ui/StatusQ/tests/CMakeLists.txt | 18 +++--- .../tests/src/TestHelpers/modelsignalsspy.cpp | 59 +++++++++++++++++++ .../tests/src/TestHelpers/modelsignalsspy.h | 31 ++++++++++ 3 files changed, 100 insertions(+), 8 deletions(-) create mode 100644 ui/StatusQ/tests/src/TestHelpers/modelsignalsspy.cpp create mode 100644 ui/StatusQ/tests/src/TestHelpers/modelsignalsspy.h diff --git a/ui/StatusQ/tests/CMakeLists.txt b/ui/StatusQ/tests/CMakeLists.txt index 767902f436..0c377710d4 100644 --- a/ui/StatusQ/tests/CMakeLists.txt +++ b/ui/StatusQ/tests/CMakeLists.txt @@ -17,11 +17,13 @@ add_library(StatusQTestLib src/TestHelpers/listmodelwrapper.h src/TestHelpers/modelaccessobserverproxy.cpp src/TestHelpers/modelaccessobserverproxy.h + src/TestHelpers/modelsignalsspy.cpp + src/TestHelpers/modelsignalsspy.h src/TestHelpers/testmodel.cpp src/TestHelpers/testmodel.h ) -target_link_libraries(StatusQTestLib PUBLIC Qt5::Core Qt5::Quick) +target_link_libraries(StatusQTestLib PUBLIC Qt5::Core Qt5::Quick Qt5::Test) target_include_directories(StatusQTestLib PUBLIC src) enable_testing() @@ -51,31 +53,31 @@ add_test(NAME QmlTests WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ########### add_executable(RolesRenamingModelTest tst_RolesRenamingModel.cpp) -target_link_libraries(RolesRenamingModelTest PRIVATE Qt5::Test StatusQ StatusQTestLib) +target_link_libraries(RolesRenamingModelTest PRIVATE StatusQ StatusQTestLib) add_test(NAME RolesRenamingModelTest COMMAND RolesRenamingModelTest) add_executable(LeftJoinModelTest tst_LeftJoinModel.cpp) -target_link_libraries(LeftJoinModelTest PRIVATE Qt5::Test StatusQ StatusQTestLib) +target_link_libraries(LeftJoinModelTest PRIVATE StatusQ StatusQTestLib) add_test(NAME LeftJoinModelTest COMMAND LeftJoinModelTest) add_executable(SubmodelProxyModelTest tst_SubmodelProxyModel.cpp) -target_link_libraries(SubmodelProxyModelTest PRIVATE Qt5::Test StatusQ StatusQTestLib) +target_link_libraries(SubmodelProxyModelTest PRIVATE StatusQ StatusQTestLib) add_test(NAME SubmodelProxyModelTest COMMAND SubmodelProxyModelTest) add_executable(AggregatorTest tst_Aggregator.cpp) -target_link_libraries(AggregatorTest PRIVATE Qt5::Test StatusQ StatusQTestLib) +target_link_libraries(AggregatorTest PRIVATE StatusQ StatusQTestLib) add_test(NAME AggregatorTest COMMAND AggregatorTest) add_executable(SingleRoleAggregatorTest tst_SingleRoleAggregator.cpp) -target_link_libraries(SingleRoleAggregatorTest PRIVATE Qt5::Test StatusQ StatusQTestLib) +target_link_libraries(SingleRoleAggregatorTest PRIVATE StatusQ StatusQTestLib) add_test(NAME SingleRoleAggregatorTest COMMAND SingleRoleAggregatorTest) add_executable(SumAggregatorTest tst_SumAggregator.cpp) -target_link_libraries(SumAggregatorTest PRIVATE Qt5::Test StatusQ StatusQTestLib) +target_link_libraries(SumAggregatorTest PRIVATE StatusQ StatusQTestLib) add_test(NAME SumAggregatorTest COMMAND SumAggregatorTest) add_executable(ConcatModelTest tst_ConcatModel.cpp) -target_link_libraries(ConcatModelTest PRIVATE Qt5::Test StatusQ StatusQTestLib) +target_link_libraries(ConcatModelTest PRIVATE StatusQ StatusQTestLib) add_test(NAME ConcatModelTest COMMAND ConcatModelTest) add_executable(WritableProxyModelTest tst_WritableProxyModel.cpp) diff --git a/ui/StatusQ/tests/src/TestHelpers/modelsignalsspy.cpp b/ui/StatusQ/tests/src/TestHelpers/modelsignalsspy.cpp new file mode 100644 index 0000000000..592a8039ae --- /dev/null +++ b/ui/StatusQ/tests/src/TestHelpers/modelsignalsspy.cpp @@ -0,0 +1,59 @@ +#include "modelsignalsspy.h" + +namespace { + +using QAIM = QAbstractItemModel; + +void registerMetaTypes() { + // register types to avoid warnings regarding signal params + qRegisterMetaType>(); + qRegisterMetaType(); + qRegisterMetaType(); +} + +} // unnamed namespace + +ModelSignalsSpy::ModelSignalsSpy(QAbstractItemModel* model) + : columnsAboutToBeInsertedSpy((registerMetaTypes(), model), + &QAIM::columnsAboutToBeInserted), + columnsAboutToBeMovedSpy(model, &QAIM::columnsAboutToBeInserted), + columnsAboutToBeRemovedSpy(model, &QAIM::columnsAboutToBeRemoved), + columnsInsertedSpy(model, &QAIM::columnsInserted), + columnsMovedSpy(model, &QAIM::columnsMoved), + columnsRemovedSpy(model, &QAIM::columnsRemoved), + dataChangedSpy(model, &QAIM::dataChanged), + headerDataChangedSpy(model, &QAIM::headerDataChanged), + layoutAboutToBeChangedSpy(model, &QAIM::layoutAboutToBeChanged), + layoutChangedSpy(model, &QAIM::layoutChanged), + modelAboutToBeResetSpy(model, &QAIM::modelAboutToBeReset), + modelResetSpy(model, &QAIM::modelReset), + rowsAboutToBeInsertedSpy(model, &QAIM::rowsAboutToBeInserted), + rowsAboutToBeMovedSpy(model, &QAIM::rowsAboutToBeMoved), + rowsAboutToBeRemovedSpy(model, &QAIM::rowsAboutToBeRemoved), + rowsInsertedSpy(model, &QAIM::rowsInserted), + rowsMovedSpy(model, &QAIM::rowsMoved), + rowsRemovedSpy(model, &QAIM::rowsRemoved) +{ +} + +int ModelSignalsSpy::count() const +{ + return columnsAboutToBeInsertedSpy.count() + + columnsAboutToBeMovedSpy.count() + + columnsAboutToBeRemovedSpy.count() + + columnsInsertedSpy.count() + + columnsMovedSpy.count() + + columnsRemovedSpy.count() + + dataChangedSpy.count() + + headerDataChangedSpy.count() + + layoutAboutToBeChangedSpy.count() + + layoutChangedSpy.count() + + modelAboutToBeResetSpy.count() + + modelResetSpy.count() + + rowsAboutToBeInsertedSpy.count() + + rowsAboutToBeMovedSpy.count() + + rowsAboutToBeRemovedSpy.count() + + rowsInsertedSpy.count() + + rowsMovedSpy.count() + + rowsRemovedSpy.count(); +} diff --git a/ui/StatusQ/tests/src/TestHelpers/modelsignalsspy.h b/ui/StatusQ/tests/src/TestHelpers/modelsignalsspy.h new file mode 100644 index 0000000000..b17e1dcf55 --- /dev/null +++ b/ui/StatusQ/tests/src/TestHelpers/modelsignalsspy.h @@ -0,0 +1,31 @@ +#pragma once + +#include +#include + +class ModelSignalsSpy +{ +public: + explicit ModelSignalsSpy(QAbstractItemModel* model); + + const QSignalSpy columnsAboutToBeInsertedSpy; + const QSignalSpy columnsAboutToBeMovedSpy; + const QSignalSpy columnsAboutToBeRemovedSpy; + const QSignalSpy columnsInsertedSpy; + const QSignalSpy columnsMovedSpy; + const QSignalSpy columnsRemovedSpy; + const QSignalSpy dataChangedSpy; + const QSignalSpy headerDataChangedSpy; + const QSignalSpy layoutAboutToBeChangedSpy; + const QSignalSpy layoutChangedSpy; + const QSignalSpy modelAboutToBeResetSpy; + const QSignalSpy modelResetSpy; + const QSignalSpy rowsAboutToBeInsertedSpy; + const QSignalSpy rowsAboutToBeMovedSpy; + const QSignalSpy rowsAboutToBeRemovedSpy; + const QSignalSpy rowsInsertedSpy; + const QSignalSpy rowsMovedSpy; + const QSignalSpy rowsRemovedSpy; + + int count() const; +};