diff options
Diffstat (limited to 'tests')
6 files changed, 165 insertions, 3 deletions
diff --git a/tests/auto/animation/animationutils/animationutils.qrc b/tests/auto/animation/animationutils/animationutils.qrc index bbcd96524..ddaeab7f1 100644 --- a/tests/auto/animation/animationutils/animationutils.qrc +++ b/tests/auto/animation/animationutils/animationutils.qrc @@ -3,5 +3,6 @@ <file>clip1.json</file> <file>clip2.json</file> <file>clip3.json</file> + <file>clip4.json</file> </qresource> </RCC> diff --git a/tests/auto/animation/animationutils/clip4.json b/tests/auto/animation/animationutils/clip4.json new file mode 100644 index 000000000..0915294cd --- /dev/null +++ b/tests/auto/animation/animationutils/clip4.json @@ -0,0 +1,65 @@ +{ + "animations": [ + { + "animationName": "LinearTranslation", + "channels": [ + { + "channelComponents": [ + { + "channelComponentName": "Location X", + "keyFrames": [ + { + "coords": [ + 0.0, + 0.0 + ] + }, + { + "coords": [ + 10.0, + 5.0 + ] + } + ] + }, + { + "channelComponentName": "Location Y", + "keyFrames": [ + { + "coords": [ + 0.0, + 0.0 + ] + }, + { + "coords": [ + 10.0, + -2.0 + ] + } + ] + }, + { + "channelComponentName": "Location Z", + "keyFrames": [ + { + "coords": [ + 0.0, + 0.0 + ] + }, + { + "coords": [ + 10.0, + 6.0 + ] + } + ] + } + ], + "channelName": "Location" + } + ] + } + ] +} diff --git a/tests/auto/animation/animationutils/tst_animationutils.cpp b/tests/auto/animation/animationutils/tst_animationutils.cpp index a70fd271c..4c97cf7e5 100644 --- a/tests/auto/animation/animationutils/tst_animationutils.cpp +++ b/tests/auto/animation/animationutils/tst_animationutils.cpp @@ -42,6 +42,7 @@ #include <QtGui/qvector3d.h> #include <QtGui/qvector4d.h> #include <QtGui/qquaternion.h> +#include <QtGui/qcolor.h> #include <qbackendnodetester.h> #include <testpostmanarbiter.h> @@ -1000,7 +1001,7 @@ private Q_SLOTS: MappingData mapping; mapping.targetId = Qt3DCore::QNodeId::createId(); mapping.propertyName = "foo"; - mapping.type = static_cast<int>(QVariant::Vector2D); + mapping.type = static_cast<int>(QVariant::Vector4D); mapping.channelIndices = QVector<int>() << 0 << 1 << 2 << 3; mappingData.push_back(mapping); channelResults = QVector<float>() << 4.0f << 3.0f << 2.0f << 1.0f; @@ -1036,7 +1037,7 @@ private Q_SLOTS: auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(mapping.targetId); change->setDeliveryFlags(Qt3DCore::QSceneChange::DeliverToAll); change->setPropertyName(mapping.propertyName); - change->setValue(QVariant::fromValue(QQuaternion(1.0f, 0.0f, 0.0f, 1.0f))); + change->setValue(QVariant::fromValue(QQuaternion(1.0f, 0.0f, 0.0f, 1.0f).normalized())); expectedChanges.push_back(change); QTest::newRow("quaternion rotation") @@ -1047,6 +1048,34 @@ private Q_SLOTS: channelResults.clear(); expectedChanges.clear(); } + + // Single property, QColor + { + animatorId = Qt3DCore::QNodeId::createId(); + MappingData mapping; + mapping.targetId = Qt3DCore::QNodeId::createId(); + mapping.propertyName = "color"; + mapping.type = static_cast<int>(QVariant::Color); + mapping.channelIndices = QVector<int>() << 0 << 1 << 2; + mappingData.push_back(mapping); + channelResults = QVector<float>() << 0.5f << 0.4f << 0.3f; + finalFrame = false; + + auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(mapping.targetId); + change->setDeliveryFlags(Qt3DCore::QSceneChange::DeliverToAll); + change->setPropertyName(mapping.propertyName); + change->setValue(QVariant::fromValue(QColor::fromRgbF(0.5f, 0.4f, 0.3f))); + expectedChanges.push_back(change); + + QTest::newRow("QColor color") + << animatorId << mappingData << channelResults << finalFrame + << expectedChanges; + + mappingData.clear(); + channelResults.clear(); + expectedChanges.clear(); + } + } void checkPreparePropertyChanges() @@ -1067,7 +1096,7 @@ private Q_SLOTS: for (int i = 0; i < actualChanges.size(); ++i) { auto expectedChange = expectedChanges[i]; auto actualChange - = qSharedPointerCast<Qt3DCore::QPropertyUpdatedChange>(expectedChanges[i]); + = qSharedPointerCast<Qt3DCore::QPropertyUpdatedChange>(actualChanges[i]); QCOMPARE(actualChange->subjectId(), expectedChange->subjectId()); QCOMPARE(actualChange->deliveryFlags(), expectedChange->deliveryFlags()); @@ -1157,6 +1186,28 @@ private Q_SLOTS: << handler << clip << localTime << expectedResults; expectedResults.clear(); } + { + // a clip with linear interpolation + handler = new Handler(); + clip = createAnimationClipLoader(handler, QUrl("qrc:/clip4.json")); + localTime = clip->duration(); + expectedResults = QVector<float>() << 5.0 << -2.0f << 6.0f; + + QTest::newRow("clip4.json, linear, t = duration") + << handler << clip << localTime << expectedResults; + expectedResults.clear(); + } + { + // a clip with linear interpolation + handler = new Handler(); + clip = createAnimationClipLoader(handler, QUrl("qrc:/clip4.json")); + localTime = clip->duration() / 2.0f; + expectedResults = QVector<float>() << 2.5f << -1.0f << 3.0f; + + QTest::newRow("clip4.json, linear, t = duration/2") + << handler << clip << localTime << expectedResults; + expectedResults.clear(); + } } void checkEvaluateClipAtLocalTime() diff --git a/tests/auto/quick3d/quick3dnodeinstantiator/data/createNested.qml b/tests/auto/quick3d/quick3dnodeinstantiator/data/createNested.qml new file mode 100644 index 000000000..55be54297 --- /dev/null +++ b/tests/auto/quick3d/quick3dnodeinstantiator/data/createNested.qml @@ -0,0 +1,15 @@ +import QtQml 2.1 +import Qt3D.Core 2.0 + +Entity { + NodeInstantiator { + model: 3 + delegate: NodeInstantiator { + model: 4 + delegate: Entity { + property bool success: true + property int idx: index + } + } + } +} diff --git a/tests/auto/quick3d/quick3dnodeinstantiator/quick3dnodeinstantiator.pro b/tests/auto/quick3d/quick3dnodeinstantiator/quick3dnodeinstantiator.pro index 15435d13e..9026f91ff 100644 --- a/tests/auto/quick3d/quick3dnodeinstantiator/quick3dnodeinstantiator.pro +++ b/tests/auto/quick3d/quick3dnodeinstantiator/quick3dnodeinstantiator.pro @@ -12,6 +12,7 @@ OTHER_FILES = \ data/createMultiple.qml \ data/createNone.qml \ data/createSingle.qml \ + data/createNested.qml \ data/inactive.qml \ data/stringModel.qml diff --git a/tests/auto/quick3d/quick3dnodeinstantiator/tst_quick3dnodeinstantiator.cpp b/tests/auto/quick3d/quick3dnodeinstantiator/tst_quick3dnodeinstantiator.cpp index acaba6690..d4d0d56e2 100644 --- a/tests/auto/quick3d/quick3dnodeinstantiator/tst_quick3dnodeinstantiator.cpp +++ b/tests/auto/quick3d/quick3dnodeinstantiator/tst_quick3dnodeinstantiator.cpp @@ -50,6 +50,7 @@ private slots: void createNone(); void createSingle(); void createMultiple(); + void createNested(); void stringModel(); void activeProperty(); void intModelChange(); @@ -109,6 +110,34 @@ void tst_quick3dnodeinstantiator::createMultiple() } } +void tst_quick3dnodeinstantiator::createNested() +{ + QQmlEngine engine; + QQmlComponent component(&engine, testFileUrl("createNested.qml")); + const auto root = qobject_cast<Qt3DCore::QNode*>(component.create()); + QVERIFY(root != 0); + + auto instantiators = root->findChildren<Quick3DNodeInstantiator*>(); + QCOMPARE(instantiators.count(), 4); + + const auto outerInstantiator = instantiators.takeFirst(); + QCOMPARE(outerInstantiator->isActive(), true); + QCOMPARE(outerInstantiator->count(), 3); + + for (const auto instantiator : instantiators) { + QCOMPARE(instantiator->isActive(), true); + QCOMPARE(instantiator->count(), 4); + + for (int i = 0; i < 4; i++) { + auto object = instantiator->objectAt(i); + QVERIFY(object); + QCOMPARE(object->parent(), root); + QCOMPARE(object->property("success").toBool(), true); + QCOMPARE(object->property("idx").toInt(), i); + } + } +} + void tst_quick3dnodeinstantiator::stringModel() { QQmlEngine engine; |