diff options
author | Sean Harmer <sean.harmer@kdab.com> | 2016-11-25 12:09:51 +0000 |
---|---|---|
committer | Jani Heikkinen <jani.heikkinen@qt.io> | 2016-12-07 05:53:54 +0000 |
commit | 22f6718ec4da3851de913d2de18dc0375574a458 (patch) | |
tree | 090c6d0c4baeabc91b16ddc2a721e1e4e8577a61 /tests/auto/input | |
parent | 073664d6d7cc5b2081c32c4a75b7a6d8030de859 (diff) |
Add plumbing and process AxisAccumulators each frame
Change-Id: I91a0f9384c7ef2ba642db1a2becdba1d2e374d87
Reviewed-by: Kevin Ottens <kevin.ottens@kdab.com>
Diffstat (limited to 'tests/auto/input')
-rw-r--r-- | tests/auto/input/axisaccumulator/tst_axisaccumulator.cpp | 110 | ||||
-rw-r--r-- | tests/auto/input/axisaccumulatorjob/axisaccumulatorjob.pro | 11 | ||||
-rw-r--r-- | tests/auto/input/axisaccumulatorjob/tst_axisaccumulatorjob.cpp | 101 | ||||
-rw-r--r-- | tests/auto/input/input.pro | 3 | ||||
-rw-r--r-- | tests/auto/input/qaxisaccumulator/tst_qaxisaccumulator.cpp | 11 |
5 files changed, 235 insertions, 1 deletions
diff --git a/tests/auto/input/axisaccumulator/tst_axisaccumulator.cpp b/tests/auto/input/axisaccumulator/tst_axisaccumulator.cpp index a1c769aaa..94cb71030 100644 --- a/tests/auto/input/axisaccumulator/tst_axisaccumulator.cpp +++ b/tests/auto/input/axisaccumulator/tst_axisaccumulator.cpp @@ -36,6 +36,7 @@ #include <Qt3DInput/private/axis_p.h> #include <Qt3DInput/private/axisaccumulator_p.h> #include <Qt3DInput/private/qabstractaxisinput_p.h> +#include <Qt3DInput/private/inputmanagers_p.h> #include <Qt3DInput/QAnalogAxisInput> #include <Qt3DInput/QAxis> #include <Qt3DInput/QAxisAccumulator> @@ -79,6 +80,7 @@ private Q_SLOTS: QVERIFY(backendAxisAccumulator.peerId().isNull()); QCOMPARE(backendAxisAccumulator.isEnabled(), false); QCOMPARE(backendAxisAccumulator.value(), 0.0f); + QCOMPARE(backendAxisAccumulator.velocity(), 0.0f); QCOMPARE(backendAxisAccumulator.scale(), 1.0f); QCOMPARE(backendAxisAccumulator.sourceAxisId(), Qt3DCore::QNodeId()); QCOMPARE(backendAxisAccumulator.sourceAxisType(), Qt3DInput::QAxisAccumulator::Velocity); @@ -99,6 +101,7 @@ private Q_SLOTS: // THEN QCOMPARE(backendAxisAccumulator.isEnabled(), false); QCOMPARE(backendAxisAccumulator.value(), 0.0f); + QCOMPARE(backendAxisAccumulator.velocity(), 0.0f); QCOMPARE(backendAxisAccumulator.scale(), 1.0f); QCOMPARE(backendAxisAccumulator.sourceAxisId(), Qt3DCore::QNodeId()); QCOMPARE(backendAxisAccumulator.sourceAxisType(), Qt3DInput::QAxisAccumulator::Velocity); @@ -177,6 +180,28 @@ private Q_SLOTS: QCOMPARE(arbiter.events.count(), 0); arbiter.events.clear(); + + + // WHEN + backendAxisAccumulator.setVelocity(383.0f); + + // THEN + QCOMPARE(backendAxisAccumulator.velocity(), 383.0f); + QCOMPARE(arbiter.events.count(), 1); + Qt3DCore::QPropertyUpdatedChangePtr velocityChange = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>(); + QCOMPARE(velocityChange->propertyName(), "velocity"); + QCOMPARE(velocityChange->value().toFloat(), backendAxisAccumulator.velocity()); + + arbiter.events.clear(); + + // WHEN + backendAxisAccumulator.setVelocity(383.0f); + + // THEN + QCOMPARE(backendAxisAccumulator.velocity(), 383.0f); + QCOMPARE(arbiter.events.count(), 0); + + arbiter.events.clear(); } void shouldNotChangeValueWhenDisabled() @@ -194,6 +219,91 @@ private Q_SLOTS: QCOMPARE(backendAxisAccumulator.value(), 0.0f); QCOMPARE(arbiter.events.count(), 0); } + + void checkIntegration_data() + { + QTest::addColumn<Qt3DInput::QAxisAccumulator::SourceAxisType>("sourceAxisType"); + QTest::addColumn<float>("axisValue"); + QTest::addColumn<float>("scale"); + QTest::addColumn<float>("dt"); + QTest::addColumn<float>("valueResult"); + QTest::addColumn<float>("velocityResult"); + + QTest::newRow("velocity=10, axis=1, dt=1") << Qt3DInput::QAxisAccumulator::Velocity + << 1.0f + << 10.0f + << 1.0f + << 10.0f + << 0.0f; + + QTest::newRow("velocity=10, axis=1, dt=0.2") << Qt3DInput::QAxisAccumulator::Velocity + << 1.0f + << 10.0f + << 0.2f + << 2.0f + << 0.0f; + + QTest::newRow("velocity=20, axis=1, dt=0.1") << Qt3DInput::QAxisAccumulator::Velocity + << 1.0f + << 20.0f + << 0.1f + << 2.0f + << 0.0f; + + QTest::newRow("velocity=10, axis=0.5, dt=1") << Qt3DInput::QAxisAccumulator::Velocity + << 0.5f + << 10.0f + << 1.0f + << 5.0f + << 0.0f; + + QTest::newRow("acceleration=10, axis=1, dt=1") << Qt3DInput::QAxisAccumulator::Acceleration + << 1.0f + << 10.0f + << 1.0f + << 10.0f + << 10.0f; + } + + void checkIntegration() + { + // GIVEN + QFETCH(Qt3DInput::QAxisAccumulator::SourceAxisType, sourceAxisType); + QFETCH(float, axisValue); + QFETCH(float, scale); + QFETCH(float, dt); + QFETCH(float, valueResult); + QFETCH(float, velocityResult); + + Qt3DInput::QAxis *axis = new Qt3DInput::QAxis; + Qt3DInput::Input::AxisManager axisManager; + Qt3DInput::Input::Axis *backendAxis = axisManager.getOrCreateResource(axis->id()); + Qt3DInput::QAxisAccumulator axisAccumulator; + Qt3DInput::Input::AxisAccumulator backendAxisAccumulator; + + // WHEN + backendAxis->setEnabled(true); + backendAxis->setAxisValue(axisValue); + axisAccumulator.setSourceAxis(axis); + axisAccumulator.setScale(scale); + axisAccumulator.setSourceAxisType(sourceAxisType); + axisAccumulator.setEnabled(true); + simulateInitialization(&axisAccumulator, &backendAxisAccumulator); + + backendAxisAccumulator.stepIntegration(&axisManager, dt); + + // THEN + switch (sourceAxisType) { + case Qt3DInput::QAxisAccumulator::Velocity: + QCOMPARE(backendAxisAccumulator.value(), valueResult); + break; + + case Qt3DInput::QAxisAccumulator::Acceleration: + QCOMPARE(backendAxisAccumulator.velocity(), velocityResult); + QCOMPARE(backendAxisAccumulator.value(), valueResult); + break; + } + } }; QTEST_APPLESS_MAIN(tst_AxisAccumulator) diff --git a/tests/auto/input/axisaccumulatorjob/axisaccumulatorjob.pro b/tests/auto/input/axisaccumulatorjob/axisaccumulatorjob.pro new file mode 100644 index 000000000..ad1a1a469 --- /dev/null +++ b/tests/auto/input/axisaccumulatorjob/axisaccumulatorjob.pro @@ -0,0 +1,11 @@ +TEMPLATE = app + +TARGET = tst_axisaccumulatorjob + +QT += core-private 3dcore 3dcore-private 3dinput 3dinput-private testlib + +CONFIG += testcase + +SOURCES += tst_axisaccumulatorjob.cpp + +include(../../core/common/common.pri) diff --git a/tests/auto/input/axisaccumulatorjob/tst_axisaccumulatorjob.cpp b/tests/auto/input/axisaccumulatorjob/tst_axisaccumulatorjob.cpp new file mode 100644 index 000000000..fa3bca3d2 --- /dev/null +++ b/tests/auto/input/axisaccumulatorjob/tst_axisaccumulatorjob.cpp @@ -0,0 +1,101 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB). +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt3D module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtTest/QTest> +#include <qbackendnodetester.h> +#include <Qt3DCore/private/qnode_p.h> +#include <Qt3DCore/private/qscene_p.h> +#include <Qt3DCore/qpropertyupdatedchange.h> +#include <Qt3DCore/qpropertynodeaddedchange.h> +#include <Qt3DCore/qpropertynoderemovedchange.h> +#include <Qt3DInput/private/axis_p.h> +#include <Qt3DInput/private/axisaccumulator_p.h> +#include <Qt3DInput/private/axisaccumulatorjob_p.h> +#include <Qt3DInput/private/qabstractaxisinput_p.h> +#include <Qt3DInput/private/inputmanagers_p.h> +#include <Qt3DInput/QAnalogAxisInput> +#include <Qt3DInput/QAxis> +#include <Qt3DInput/QAxisAccumulator> +#include <Qt3DCore/private/qbackendnode_p.h> +#include "testpostmanarbiter.h" + +class tst_AxisAccumulatorJob : public Qt3DCore::QBackendNodeTester +{ + Q_OBJECT + +private Q_SLOTS: + void checkIntegration() + { + // GIVEN + const auto sourceAxisType = Qt3DInput::QAxisAccumulator::Velocity; + const float axisValue = 1.0f; + const float scale = 10.0f; + const float dt = 0.1f; + const float valueResultEnabled = 1.0f; + const float valueResultDisabled = 0.0f; + + // Set up an axis + Qt3DInput::QAxis *axis = new Qt3DInput::QAxis; + Qt3DInput::Input::AxisManager axisManager; + Qt3DInput::Input::Axis *backendAxis = axisManager.getOrCreateResource(axis->id()); + backendAxis->setEnabled(true); + backendAxis->setAxisValue(axisValue); + + // Hook up a bunch of accumulators to this axis + Qt3DInput::Input::AxisAccumulatorManager axisAccumulatorManager; + QVector<Qt3DInput::Input::AxisAccumulator *> accumulators; + for (int i = 0; i < 10; ++i) { + auto axisAccumulator = new Qt3DInput::QAxisAccumulator; + Qt3DInput::Input::AxisAccumulator *backendAxisAccumulator + = axisAccumulatorManager.getOrCreateResource(axisAccumulator->id()); + accumulators.push_back(backendAxisAccumulator); + + axisAccumulator->setEnabled(i % 2 == 0); // Enable only even accumulators + axisAccumulator->setSourceAxis(axis); + axisAccumulator->setScale(scale); + axisAccumulator->setSourceAxisType(sourceAxisType); + simulateInitialization(axisAccumulator, backendAxisAccumulator); + } + + // WHEN + Qt3DInput::Input::AxisAccumulatorJob job(&axisAccumulatorManager, &axisManager); + job.setDeltaTime(dt); + job.run(); + + + // THEN + for (const auto accumulator : accumulators) { + QCOMPARE(accumulator->value(), accumulator->isEnabled() ? valueResultEnabled + : valueResultDisabled); + } + } +}; + +QTEST_APPLESS_MAIN(tst_AxisAccumulatorJob) + +#include "tst_axisaccumulatorjob.moc" diff --git a/tests/auto/input/input.pro b/tests/auto/input/input.pro index fdd7ed2f7..6169d3f7c 100644 --- a/tests/auto/input/input.pro +++ b/tests/auto/input/input.pro @@ -28,5 +28,6 @@ qtConfig(private_tests) { qmousedevice \ mousedevice \ utils \ - axisaccumulator + axisaccumulator \ + axisaccumulatorjob } diff --git a/tests/auto/input/qaxisaccumulator/tst_qaxisaccumulator.cpp b/tests/auto/input/qaxisaccumulator/tst_qaxisaccumulator.cpp index a98cf09a9..3df09a67a 100644 --- a/tests/auto/input/qaxisaccumulator/tst_qaxisaccumulator.cpp +++ b/tests/auto/input/qaxisaccumulator/tst_qaxisaccumulator.cpp @@ -183,6 +183,17 @@ private Q_SLOTS: // THEN QCOMPARE(value(), 383.0f); + QCOMPARE(velocity(), 0.0f); + + // WHEN + valueChange.reset(new Qt3DCore::QPropertyUpdatedChange(Qt3DCore::QNodeId())); + valueChange->setPropertyName("velocity"); + valueChange->setValue(123.0f); + sceneChangeEvent(valueChange); + + // THEN + QCOMPARE(value(), 383.0f); + QCOMPARE(velocity(), 123.0f); } void checkAxisInputBookkeeping() |