From 480673d8be6be379523343d39e65fd7506a84f35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Cie=C5=9Blak?= Date: Tue, 19 Dec 2023 16:24:31 +0100 Subject: [PATCH] feat(StatusQ): Test utility for tracking qt model access --- ui/StatusQ/tests/CMakeLists.txt | 2 ++ ui/StatusQ/tests/main.cpp | 2 ++ .../TestHelpers/modelaccessobserverproxy.cpp | 20 +++++++++++++++++++ .../TestHelpers/modelaccessobserverproxy.h | 16 +++++++++++++++ 4 files changed, 40 insertions(+) create mode 100644 ui/StatusQ/tests/src/TestHelpers/modelaccessobserverproxy.cpp create mode 100644 ui/StatusQ/tests/src/TestHelpers/modelaccessobserverproxy.h diff --git a/ui/StatusQ/tests/CMakeLists.txt b/ui/StatusQ/tests/CMakeLists.txt index 1f55ba64c5..a5f0821542 100644 --- a/ui/StatusQ/tests/CMakeLists.txt +++ b/ui/StatusQ/tests/CMakeLists.txt @@ -13,6 +13,8 @@ find_package(Qt5 COMPONENTS QuickTest Qml Quick WebEngine REQUIRED) add_library(StatusQTestLib src/TestHelpers/MonitorQtOutput.cpp src/TestHelpers/MonitorQtOutput.h + src/TestHelpers/modelaccessobserverproxy.cpp + src/TestHelpers/modelaccessobserverproxy.h ) target_link_libraries(StatusQTestLib PUBLIC Qt5::Core Qt5::Quick) diff --git a/ui/StatusQ/tests/main.cpp b/ui/StatusQ/tests/main.cpp index 069184b29a..c271286a6e 100644 --- a/ui/StatusQ/tests/main.cpp +++ b/ui/StatusQ/tests/main.cpp @@ -4,6 +4,7 @@ #include #include "TestHelpers/MonitorQtOutput.h" +#include "TestHelpers/modelaccessobserverproxy.h" class RunBeforeQApplicationIsInitialized { public: @@ -27,6 +28,7 @@ public slots: // TODO: Alternative to not yet supported QML_ELEMENT qmlRegisterType("StatusQ.TestHelpers", 0, 1, "MonitorQtOutput"); + qmlRegisterType("StatusQ.TestHelpers", 0, 1, "ModelAccessObserverProxy"); } }; diff --git a/ui/StatusQ/tests/src/TestHelpers/modelaccessobserverproxy.cpp b/ui/StatusQ/tests/src/TestHelpers/modelaccessobserverproxy.cpp new file mode 100644 index 0000000000..12969ba5f7 --- /dev/null +++ b/ui/StatusQ/tests/src/TestHelpers/modelaccessobserverproxy.cpp @@ -0,0 +1,20 @@ +#include "modelaccessobserverproxy.h" + + +ModelAccessObserverProxy::ModelAccessObserverProxy(QObject* parent) + : QIdentityProxyModel{parent} +{ +} + +QVariant ModelAccessObserverProxy::data(const QModelIndex& index, int role) const +{ + QVariant result; + + if (checkIndex(index)) + result = QIdentityProxyModel::data(index, role); + + emit const_cast(this)->dataAccessed( + index.row(), role, result); + + return result; +} diff --git a/ui/StatusQ/tests/src/TestHelpers/modelaccessobserverproxy.h b/ui/StatusQ/tests/src/TestHelpers/modelaccessobserverproxy.h new file mode 100644 index 0000000000..5df5e7b9fb --- /dev/null +++ b/ui/StatusQ/tests/src/TestHelpers/modelaccessobserverproxy.h @@ -0,0 +1,16 @@ +#pragma once + +#include + +class ModelAccessObserverProxy : public QIdentityProxyModel +{ + Q_OBJECT + +public: + explicit ModelAccessObserverProxy(QObject* parent = nullptr); + + QVariant data(const QModelIndex& index, int role) const override; + +signals: + void dataAccessed(int row, int role, const QVariant& value); +};