summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Ottens <kevin.ottens@kdab.com>2016-08-23 10:19:36 +0200
committerSean Harmer <sean.harmer@kdab.com>2016-08-24 19:33:22 +0000
commit81ecbf04bf7c8a091916f0fa4c8840d499099453 (patch)
tree083f31c212afb87771082dde153b9f9b9f2a88b7
parent4aa0fffe553007cc0b8ec8aa0454d7824f1ca3cd (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.pro1
-rw-r--r--tests/auto/input/actioninput/actioninput.pro1
-rw-r--r--tests/auto/input/analogaxisinput/analogaxisinput.pro1
-rw-r--r--tests/auto/input/buttonaxisinput/buttonaxisinput.pro1
-rw-r--r--tests/auto/input/commons/commons.pri3
-rw-r--r--tests/auto/input/commons/testdevice.h107
-rw-r--r--tests/auto/input/keyboardhandler/keyboardhandler.pro1
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)