From 81ecbf04bf7c8a091916f0fa4c8840d499099453 Mon Sep 17 00:00:00 2001 From: Kevin Ottens Date: Tue, 23 Aug 2016 10:19:36 +0200 Subject: Complete the test harness around physical devices Now it also comes with a backend node and a device integration implementation so that one can simulate button presses for instance. Change-Id: I87a3ecf9e68904fdd52f7c94f55abbfed28c6e9c Reviewed-by: Sean Harmer --- .../input/abstractaxisinput/abstractaxisinput.pro | 1 - tests/auto/input/actioninput/actioninput.pro | 1 - .../auto/input/analogaxisinput/analogaxisinput.pro | 1 - .../auto/input/buttonaxisinput/buttonaxisinput.pro | 1 - tests/auto/input/commons/commons.pri | 3 + tests/auto/input/commons/testdevice.h | 107 +++++++++++++++++++++ .../auto/input/keyboardhandler/keyboardhandler.pro | 1 - 7 files changed, 110 insertions(+), 5 deletions(-) diff --git a/tests/auto/input/abstractaxisinput/abstractaxisinput.pro b/tests/auto/input/abstractaxisinput/abstractaxisinput.pro index 3f9c521de..574b9af9e 100644 --- a/tests/auto/input/abstractaxisinput/abstractaxisinput.pro +++ b/tests/auto/input/abstractaxisinput/abstractaxisinput.pro @@ -8,5 +8,4 @@ CONFIG += testcase SOURCES += tst_abstractaxisinput.cpp -include(../../core/common/common.pri) include(../commons/commons.pri) diff --git a/tests/auto/input/actioninput/actioninput.pro b/tests/auto/input/actioninput/actioninput.pro index 169154323..1091f2b76 100644 --- a/tests/auto/input/actioninput/actioninput.pro +++ b/tests/auto/input/actioninput/actioninput.pro @@ -8,5 +8,4 @@ CONFIG += testcase SOURCES += tst_actioninput.cpp -include(../../core/common/common.pri) include(../commons/commons.pri) diff --git a/tests/auto/input/analogaxisinput/analogaxisinput.pro b/tests/auto/input/analogaxisinput/analogaxisinput.pro index 7bd0a9865..16d237bf9 100644 --- a/tests/auto/input/analogaxisinput/analogaxisinput.pro +++ b/tests/auto/input/analogaxisinput/analogaxisinput.pro @@ -8,5 +8,4 @@ CONFIG += testcase SOURCES += tst_analogaxisinput.cpp -include(../../core/common/common.pri) include(../commons/commons.pri) diff --git a/tests/auto/input/buttonaxisinput/buttonaxisinput.pro b/tests/auto/input/buttonaxisinput/buttonaxisinput.pro index f012ca1d3..1aa492aa4 100644 --- a/tests/auto/input/buttonaxisinput/buttonaxisinput.pro +++ b/tests/auto/input/buttonaxisinput/buttonaxisinput.pro @@ -8,5 +8,4 @@ CONFIG += testcase SOURCES += tst_buttonaxisinput.cpp -include(../../core/common/common.pri) include(../commons/commons.pri) diff --git a/tests/auto/input/commons/commons.pri b/tests/auto/input/commons/commons.pri index cc65e8a41..ccc14075b 100644 --- a/tests/auto/input/commons/commons.pri +++ b/tests/auto/input/commons/commons.pri @@ -1,3 +1,6 @@ HEADERS += $$PWD/testdevice.h INCLUDEPATH += $$PWD + +include(../../core/common/common.pri) + diff --git a/tests/auto/input/commons/testdevice.h b/tests/auto/input/commons/testdevice.h index c58835a38..c6fc4995b 100644 --- a/tests/auto/input/commons/testdevice.h +++ b/tests/auto/input/commons/testdevice.h @@ -28,6 +28,9 @@ #include #include +#include +#include +#include class TestDevice : public Qt3DInput::QAbstractPhysicalDevice { @@ -43,4 +46,108 @@ public: QStringList buttonNames() const Q_DECL_FINAL { return QStringList(); } int axisIdentifier(const QString &name) const Q_DECL_FINAL { Q_UNUSED(name) return 0; } int buttonIdentifier(const QString &name) const Q_DECL_FINAL { Q_UNUSED(name) return 0; } + +private: + friend class TestDeviceBackendNode; +}; + +class TestDeviceBackendNode : public Qt3DInput::QAbstractPhysicalDeviceBackendNode +{ +public: + explicit TestDeviceBackendNode(TestDevice *device) + : Qt3DInput::QAbstractPhysicalDeviceBackendNode(ReadOnly) + { + Qt3DCore::QBackendNodeTester().simulateInitialization(device, this); + } + + float axisValue(int axisIdentifier) const Q_DECL_FINAL + { + return m_axisValues.value(axisIdentifier); + } + + void setAxisValue(int axisIdentifier, float value) + { + m_axisValues.insert(axisIdentifier, value); + } + + bool isButtonPressed(int buttonIdentifier) const Q_DECL_FINAL + { + return m_buttonStates.value(buttonIdentifier); + } + + void setButtonPressed(int buttonIdentifier, bool pressed) + { + m_buttonStates.insert(buttonIdentifier, pressed); + } + +private: + QHash m_axisValues; + QHash m_buttonStates; +}; + +class TestDeviceIntegration : public Qt3DInput::QInputDeviceIntegration +{ + Q_OBJECT +public: + explicit TestDeviceIntegration(QObject *parent = nullptr) + : Qt3DInput::QInputDeviceIntegration(parent), + m_devicesParent(new Qt3DCore::QNode) + { + } + + ~TestDeviceIntegration() + { + qDeleteAll(m_deviceBackendNodes); + } + + QVector jobsToExecute(qint64 time) Q_DECL_FINAL + { + Q_UNUSED(time); + return QVector(); + } + + TestDevice *createPhysicalDevice(const QString &name) Q_DECL_FINAL + { + Q_ASSERT(!deviceNames().contains(name)); + auto device = new TestDevice(m_devicesParent.data()); // Avoids unwanted reparenting + device->setObjectName(name); + m_devices.append(device); + m_deviceBackendNodes.append(new TestDeviceBackendNode(device)); + return device; + } + + QVector physicalDevices() const Q_DECL_FINAL + { + QVector ids; + std::transform(m_devices.constBegin(), m_devices.constEnd(), + std::back_inserter(ids), + [] (TestDevice *device) { return device->id(); }); + return ids; + } + + TestDeviceBackendNode *physicalDevice(Qt3DCore::QNodeId id) const Q_DECL_FINAL + { + auto it = std::find_if(m_deviceBackendNodes.constBegin(), m_deviceBackendNodes.constEnd(), + [id] (TestDeviceBackendNode *node) { return node->peerId() == id; }); + if (it == m_deviceBackendNodes.constEnd()) + return nullptr; + else + return *it; + } + + QStringList deviceNames() const Q_DECL_FINAL + { + QStringList names; + std::transform(m_devices.constBegin(), m_devices.constEnd(), + std::back_inserter(names), + [] (TestDevice *device) { return device->objectName(); }); + return names; + } + +private: + void onInitialize() Q_DECL_FINAL {} + + QScopedPointer m_devicesParent; + QVector m_devices; + QVector m_deviceBackendNodes; }; diff --git a/tests/auto/input/keyboardhandler/keyboardhandler.pro b/tests/auto/input/keyboardhandler/keyboardhandler.pro index f3f7b6c63..2e28c5045 100644 --- a/tests/auto/input/keyboardhandler/keyboardhandler.pro +++ b/tests/auto/input/keyboardhandler/keyboardhandler.pro @@ -8,5 +8,4 @@ CONFIG += testcase SOURCES += tst_keyboardhandler.cpp -include(../../core/common/common.pri) include(../commons/commons.pri) -- cgit v1.2.3