diff options
author | Kevin Ottens <kevin.ottens@kdab.com> | 2016-08-23 10:19:36 +0200 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2016-08-24 19:33:22 +0000 |
commit | 81ecbf04bf7c8a091916f0fa4c8840d499099453 (patch) | |
tree | 083f31c212afb87771082dde153b9f9b9f2a88b7 | |
parent | 4aa0fffe553007cc0b8ec8aa0454d7824f1ca3cd (diff) |
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 <sean.harmer@kdab.com>
-rw-r--r-- | tests/auto/input/abstractaxisinput/abstractaxisinput.pro | 1 | ||||
-rw-r--r-- | tests/auto/input/actioninput/actioninput.pro | 1 | ||||
-rw-r--r-- | tests/auto/input/analogaxisinput/analogaxisinput.pro | 1 | ||||
-rw-r--r-- | tests/auto/input/buttonaxisinput/buttonaxisinput.pro | 1 | ||||
-rw-r--r-- | tests/auto/input/commons/commons.pri | 3 | ||||
-rw-r--r-- | tests/auto/input/commons/testdevice.h | 107 | ||||
-rw-r--r-- | tests/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 <Qt3DCore/private/qnode_p.h> #include <Qt3DInput/QAbstractPhysicalDevice> +#include <Qt3DInput/private/qabstractphysicaldevicebackendnode_p.h> +#include <Qt3DInput/private/qinputdeviceintegration_p.h> +#include <qbackendnodetester.h> 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<int, float> m_axisValues; + QHash<int, bool> 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<Qt3DCore::QAspectJobPtr> jobsToExecute(qint64 time) Q_DECL_FINAL + { + Q_UNUSED(time); + return QVector<Qt3DCore::QAspectJobPtr>(); + } + + 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<Qt3DCore::QNodeId> physicalDevices() const Q_DECL_FINAL + { + QVector<Qt3DCore::QNodeId> 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<Qt3DCore::QNode> m_devicesParent; + QVector<TestDevice*> m_devices; + QVector<TestDeviceBackendNode*> 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) |