diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2019-08-28 08:05:58 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2019-08-28 08:05:58 +0200 |
commit | a936ddd7acb3fb91d50f1d586fd770a1637f8166 (patch) | |
tree | 3f4bf866e16a1863f8b3d1e2dcb7d39bd7f8aa9b /tests/auto/core | |
parent | 3dcc9719808a77ab644921df38ea82c268ea7a97 (diff) | |
parent | f3268fcb2a4e73d99dbd66aa5e262a118b5a5480 (diff) |
Merge remote-tracking branch 'qt-gerrit/wip/refactor' into HEAD
Change-Id: Id73bbecd18edaf46ba481aa018e837a336860223
Diffstat (limited to 'tests/auto/core')
-rw-r--r-- | tests/auto/core/common/testpostmanarbiter.cpp | 13 | ||||
-rw-r--r-- | tests/auto/core/common/testpostmanarbiter.h | 3 | ||||
-rw-r--r-- | tests/auto/core/nodes/tst_nodes.cpp | 129 | ||||
-rw-r--r-- | tests/auto/core/qarmature/tst_qarmature.cpp | 23 | ||||
-rw-r--r-- | tests/auto/core/qchangearbiter/tst_qchangearbiter.cpp | 36 | ||||
-rw-r--r-- | tests/auto/core/qjoint/tst_qjoint.cpp | 52 | ||||
-rw-r--r-- | tests/auto/core/qscene/qscene.pro | 2 | ||||
-rw-r--r-- | tests/auto/core/qscene/tst_qscene.cpp | 17 | ||||
-rw-r--r-- | tests/auto/core/qskeleton/tst_qskeleton.cpp | 23 | ||||
-rw-r--r-- | tests/auto/core/qskeletonloader/tst_qskeletonloader.cpp | 29 | ||||
-rw-r--r-- | tests/auto/core/qtransform/tst_qtransform.cpp | 52 |
11 files changed, 191 insertions, 188 deletions
diff --git a/tests/auto/core/common/testpostmanarbiter.cpp b/tests/auto/core/common/testpostmanarbiter.cpp index ffc5bce5f..3fd8c80d1 100644 --- a/tests/auto/core/common/testpostmanarbiter.cpp +++ b/tests/auto/core/common/testpostmanarbiter.cpp @@ -72,7 +72,7 @@ void TestArbiter::sceneChangeEventWithLock(const Qt3DCore::QSceneChangePtr &e) void TestArbiter::sceneChangeEventWithLock(const Qt3DCore::QSceneChangeList &e) { - events += QVector<Qt3DCore::QSceneChangePtr>::fromStdVector(e); + events += QVector<Qt3DCore::QSceneChangePtr>(e.begin(), e.end()); } Qt3DCore::QAbstractPostman *TestArbiter::postman() const @@ -88,4 +88,15 @@ void TestArbiter::setArbiterOnNode(Qt3DCore::QNode *node) setArbiterOnNode(n); } +void TestArbiter::addDirtyFrontEndNode(Qt3DCore::QNode *node) +{ + if (!dirtyNodes.contains(node)) + dirtyNodes << node; +} + +void TestArbiter::removeDirtyFrontEndNode(Qt3DCore::QNode *node) +{ + dirtyNodes.removeOne(node); +} + QT_END_NAMESPACE diff --git a/tests/auto/core/common/testpostmanarbiter.h b/tests/auto/core/common/testpostmanarbiter.h index 7d7e4e49b..8dfb5874e 100644 --- a/tests/auto/core/common/testpostmanarbiter.h +++ b/tests/auto/core/common/testpostmanarbiter.h @@ -66,8 +66,11 @@ public: Qt3DCore::QAbstractPostman *postman() const final; QVector<Qt3DCore::QSceneChangePtr> events; + QVector<Qt3DCore::QNode *> dirtyNodes; void setArbiterOnNode(Qt3DCore::QNode *node); + void addDirtyFrontEndNode(Qt3DCore::QNode *node) final; + void removeDirtyFrontEndNode(Qt3DCore::QNode *node) final; private: TestPostman *m_postman; diff --git a/tests/auto/core/nodes/tst_nodes.cpp b/tests/auto/core/nodes/tst_nodes.cpp index d8ffbc361..dd6cc4892 100644 --- a/tests/auto/core/nodes/tst_nodes.cpp +++ b/tests/auto/core/nodes/tst_nodes.cpp @@ -103,6 +103,8 @@ private slots: void checkEnabledUpdate(); void checkPropertyTrackModeUpdate(); void checkTrackedPropertyNamesUpdate(); + + void checkNodeRemovedFromDirtyListOnDestruction(); }; class ObserverSpy; @@ -113,8 +115,8 @@ public: : m_spy(spy) {} - void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &) final {}; - void setScene(Qt3DCore::QScene *) final {}; + void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &) final {} + void setScene(Qt3DCore::QScene *) final {} void notifyBackend(const Qt3DCore::QSceneChangePtr &change) final; bool shouldNotifyFrontend(const Qt3DCore::QSceneChangePtr &changee) final { Q_UNUSED(changee); return false; } @@ -143,9 +145,7 @@ public: { } - ~ObserverSpy() - { - } + ~ObserverSpy(); void sceneChangeEventWithLock(const Qt3DCore::QSceneChangePtr &e) override { @@ -169,10 +169,24 @@ public: return m_postman.data(); } + void addDirtyFrontEndNode(Qt3DCore::QNode *node) final { + if (!dirtyNodes.contains(node)) + dirtyNodes << node; + } + + void removeDirtyFrontEndNode(Qt3DCore::QNode *node) final { + dirtyNodes.removeOne(node); + }; + + QVector<Qt3DCore::QNode *> dirtyNodes; QList<ChangeRecord> events; QScopedPointer<SimplePostman> m_postman; }; +ObserverSpy::~ObserverSpy() +{ +} + void SimplePostman::notifyBackend(const Qt3DCore::QSceneChangePtr &change) { m_spy->sceneChangeEventWithLock(change); @@ -299,7 +313,7 @@ class MyQEntity : public Qt3DCore::QEntity { Q_OBJECT public: - explicit MyQEntity(Qt3DCore::QNode *parent = 0) + explicit MyQEntity(Qt3DCore::QNode *parent = nullptr) : QEntity(parent) {} @@ -1244,10 +1258,10 @@ void tst_Nodes::checkConstructionWithParent() root->setNodeProperty(node); // THEN we should get one creation change, one child added change - // and one property change event, in that order. + // in that order. QCoreApplication::processEvents(); QCOMPARE(root->children().count(), 1); - QCOMPARE(spy.events.size(), 3); // 1 creation change, 1 child added change, 1 property change + QCOMPARE(spy.events.size(), 2); // 1 creation change, 1 child added change // Ensure first event is child node's creation change const auto creationEvent = spy.events.takeFirst().change().dynamicCast<Qt3DCore::QNodeCreatedChangeBase>(); @@ -1260,12 +1274,15 @@ void tst_Nodes::checkConstructionWithParent() QCOMPARE(newChildEvent->propertyName(), "children"); QCOMPARE(newChildEvent->addedNodeId(), node->id()); - // Ensure second and last event is property set change - const auto propertyEvent = spy.events.takeFirst().change().dynamicCast<Qt3DCore::QPropertyUpdatedChange>(); - QVERIFY(!propertyEvent.isNull()); - QCOMPARE(propertyEvent->subjectId(), root->id()); - QCOMPARE(propertyEvent->propertyName(), "nodeProperty"); - QCOMPARE(propertyEvent->value().value<Qt3DCore::QNodeId>(), node->id()); + // Ensure the parent node is dirty + QCOMPARE(spy.dirtyNodes.size(), 1); + QCOMPARE(spy.dirtyNodes.front(), root.data()); + +// const auto propertyEvent = spy.events.takeFirst().change().dynamicCast<Qt3DCore::QPropertyUpdatedChange>(); +// QVERIFY(!propertyEvent.isNull()); +// QCOMPARE(propertyEvent->subjectId(), root->id()); +// QCOMPARE(propertyEvent->propertyName(), "nodeProperty"); +// QCOMPARE(propertyEvent->value().value<Qt3DCore::QNodeId>(), node->id()); } void tst_Nodes::checkConstructionWithNonRootParent() @@ -1298,7 +1315,7 @@ void tst_Nodes::checkConstructionWithNonRootParent() QCOMPARE(root->children().count(), 1); QCOMPARE(parent->children().count(), 1); - QCOMPARE(spy.events.size(), 4); // 2 creation changes, 1 child added changes, 1 property change + QCOMPARE(spy.events.size(), 3); // 2 creation changes, 1 child added changes // Ensure first event is parent node's creation change const auto parentCreationEvent = spy.events.takeFirst().change().dynamicCast<Qt3DCore::QNodeCreatedChangeBase>(); @@ -1316,11 +1333,8 @@ void tst_Nodes::checkConstructionWithNonRootParent() QCOMPARE(parentNewChildEvent->addedNodeId(), parent->id()); // Ensure second and last event is property set change - const auto propertyEvent = spy.events.takeFirst().change().dynamicCast<Qt3DCore::QPropertyUpdatedChange>(); - QVERIFY(!propertyEvent.isNull()); - QCOMPARE(propertyEvent->subjectId(), root->id()); - QCOMPARE(propertyEvent->propertyName(), "nodeProperty"); - QCOMPARE(propertyEvent->value().value<Qt3DCore::QNodeId>(), child->id()); + QCOMPARE(spy.dirtyNodes.size(), 1); + QCOMPARE(spy.dirtyNodes.front(), root.data()); } void tst_Nodes::checkConstructionAsListElement() @@ -1730,12 +1744,8 @@ void tst_Nodes::changeCustomProperty() // WHEN node->setCustomProperty(QStringLiteral("foo")); // THEN - QCOMPARE(spy.events.size(), 1); - QVERIFY(spy.events.first().wasLocked()); - Qt3DCore::QPropertyUpdatedChangePtr event = spy.events.takeFirst().change().dynamicCast<Qt3DCore::QPropertyUpdatedChange>(); - QCOMPARE(event->type(), Qt3DCore::PropertyUpdated); - QCOMPARE(event->propertyName(), "customProperty"); - QCOMPARE(event->value().toString(), QString("foo")); + QCOMPARE(spy.dirtyNodes.size(), 1); + QCOMPARE(spy.dirtyNodes.front(), node.data()); } void tst_Nodes::checkDestruction() @@ -1918,25 +1928,22 @@ void tst_Nodes::checkEnabledUpdate() { // WHEN node.setEnabled(false); - QCoreApplication::processEvents(); // THEN - QCOMPARE(arbiter.events.size(), 1); - auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>(); - QCOMPARE(change->propertyName(), "enabled"); - QCOMPARE(change->value().value<bool>(), node.isEnabled()); - QCOMPARE(change->type(), Qt3DCore::PropertyUpdated); + QCOMPARE(arbiter.events.size(), 0); + QCOMPARE(arbiter.dirtyNodes.size(), 1); + QCOMPARE(arbiter.dirtyNodes.front(), &node); - arbiter.events.clear(); + arbiter.dirtyNodes.clear(); } { // WHEN node.setEnabled(false); - QCoreApplication::processEvents(); // THEN QCOMPARE(arbiter.events.size(), 0); + QCOMPARE(arbiter.dirtyNodes.size(), 0); } } @@ -1995,6 +2002,60 @@ void tst_Nodes::checkTrackedPropertyNamesUpdate() } +void tst_Nodes::checkNodeRemovedFromDirtyListOnDestruction() +{ + // GIVEN + TestArbiter arbiter; + Qt3DCore::QScene scene; + + { + // GIVEN + QScopedPointer<MyQNode> node(new MyQNode()); + node->setArbiterAndScene(&arbiter, &scene); + + // WHEN + node->setEnabled(false); + + // THEN + QCOMPARE(arbiter.events.size(), 0); + QCOMPARE(arbiter.dirtyNodes.size(), 1); + QCOMPARE(arbiter.dirtyNodes.front(), node.data()); + + // WHEN + // scene should be unset and node removed from arbiter dirtyList + node.reset(); + + // THEN + QCOMPARE(arbiter.events.size(), 0); + QCOMPARE(arbiter.dirtyNodes.size(), 0); + } + { + // GIVEN + QScopedPointer<MyQNode> node(new MyQNode()); + node->setArbiterAndScene(&arbiter, &scene); + + + Qt3DCore::QNode *child = new Qt3DCore::QNode(node.data()); + // Wait for deferred initialization of child node + QCoreApplication::processEvents(); + + // WHEN + child->setEnabled(false); + + // THEN + QCOMPARE(arbiter.events.size(), 2); // nodeCreated + childAdded + QCOMPARE(arbiter.dirtyNodes.size(), 1); + QCOMPARE(arbiter.dirtyNodes.front(), child); + + // WHEN + // scene should be unset and child node removed from arbiter dirtyList + node.reset(); + + // THEN + QCOMPARE(arbiter.events.size(), 2); // childRemoved + nodeDestroyed + QCOMPARE(arbiter.dirtyNodes.size(), 0); + } +} QTEST_MAIN(tst_Nodes) diff --git a/tests/auto/core/qarmature/tst_qarmature.cpp b/tests/auto/core/qarmature/tst_qarmature.cpp index f624b998f..b64757b5c 100644 --- a/tests/auto/core/qarmature/tst_qarmature.cpp +++ b/tests/auto/core/qarmature/tst_qarmature.cpp @@ -98,33 +98,22 @@ private Q_SLOTS: // WHEN QSkeleton *skeleton = new QSkeleton(armature.data()); - QCoreApplication::processEvents(); - arbiter.events.clear(); - armature->setSkeleton(skeleton); - QCoreApplication::processEvents(); // THEN - QCOMPARE(arbiter.events.size(), 1); - QPropertyUpdatedChangePtr change = arbiter.events.first().staticCast<QPropertyUpdatedChange>(); - QCOMPARE(change->propertyName(), "skeleton"); - QCOMPARE(change->value().value<QNodeId>(), skeleton->id()); - QCOMPARE(change->type(), PropertyUpdated); + QCOMPARE(arbiter.dirtyNodes.size(), 1); + QCOMPARE(arbiter.dirtyNodes.front(), armature.data()); - arbiter.events.clear(); + arbiter.dirtyNodes.clear(); // WHEN armature->setSkeleton(nullptr); - QCoreApplication::processEvents(); // THEN - QCOMPARE(arbiter.events.size(), 1); - change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>(); - QCOMPARE(change->propertyName(), "skeleton"); - QCOMPARE(change->value().value<QNodeId>(), QNodeId()); - QCOMPARE(change->type(), Qt3DCore::PropertyUpdated); + QCOMPARE(arbiter.dirtyNodes.size(), 1); + QCOMPARE(arbiter.dirtyNodes.front(), armature.data()); - arbiter.events.clear(); + arbiter.dirtyNodes.clear(); } void checkSkeletonBookkeeping() diff --git a/tests/auto/core/qchangearbiter/tst_qchangearbiter.cpp b/tests/auto/core/qchangearbiter/tst_qchangearbiter.cpp index 6574a91d9..e1b92f797 100644 --- a/tests/auto/core/qchangearbiter/tst_qchangearbiter.cpp +++ b/tests/auto/core/qchangearbiter/tst_qchangearbiter.cpp @@ -810,25 +810,19 @@ void tst_QChangeArbiter::distributePropertyChanges() // WHEN root->setProp1(root->prop1() + 1); - arbiter->syncChanges(); // THEN - QVERIFY(!rootObserver->lastChange().isNull()); - QCOMPARE(rootObserver->lastChange()->type(), Qt3DCore::PropertyUpdated); - Qt3DCore::QPropertyUpdatedChangePtr propChange = qSharedPointerDynamicCast<Qt3DCore::QPropertyUpdatedChange>(rootObserver->lastChange()); - QCOMPARE(root->id(), propChange->subjectId()); - QCOMPARE(QString(propChange->propertyName()), QString("prop1")); + auto dirtyNodes = arbiter->takeDirtyFrontEndNodes(); + QCOMPARE(dirtyNodes.size(), 1); + QCOMPARE(dirtyNodes.front(), root); // WHEN root->setProp2(root->prop2() + 1.f); - arbiter->syncChanges(); // THEN - QVERIFY(!rootObserver->lastChange().isNull()); - QCOMPARE(rootObserver->lastChange()->type(), Qt3DCore::PropertyUpdated); - propChange = qSharedPointerDynamicCast<Qt3DCore::QPropertyUpdatedChange>(rootObserver->lastChange()); - QCOMPARE(root->id(), propChange->subjectId()); - QCOMPARE(QString(propChange->propertyName()), QString("prop2")); + dirtyNodes = arbiter->takeDirtyFrontEndNodes(); + QCOMPARE(dirtyNodes.size(), 1); + QCOMPARE(dirtyNodes.front(), root); // Test change notifications made to an entity that was added to the scene // via QNode::setParent() @@ -839,14 +833,11 @@ void tst_QChangeArbiter::distributePropertyChanges() tst_SimpleObserver *setParentChildObserver = new tst_SimpleObserver(); arbiter->registerObserver(setParentChildObserver, setParentChild->id()); setParentChild->setProp2(setParentChild->prop2() + 1.f); - arbiter->syncChanges(); // THEN - QVERIFY(!setParentChildObserver->lastChange().isNull()); - QCOMPARE(setParentChildObserver->lastChange()->type(), Qt3DCore::PropertyUpdated); - propChange = qSharedPointerDynamicCast<Qt3DCore::QPropertyUpdatedChange>(setParentChildObserver->lastChange()); - QCOMPARE(setParentChild->id(), propChange->subjectId()); - QCOMPARE(QString(propChange->propertyName()), QString("prop2")); + dirtyNodes = arbiter->takeDirtyFrontEndNodes(); + QCOMPARE(dirtyNodes.size(), 1); + QCOMPARE(dirtyNodes.front(), setParentChild); // Test change notifications made to an entity that was added to the scene // via the QNode() constructor parent parameter @@ -857,14 +848,11 @@ void tst_QChangeArbiter::distributePropertyChanges() tst_SimpleObserver *directChildObserver = new tst_SimpleObserver(); arbiter->registerObserver(directChildObserver, directChild->id()); directChild->setProp1(directChild->prop1() + 1); - arbiter->syncChanges(); // THEN - QVERIFY(!directChildObserver->lastChange().isNull()); - QCOMPARE(directChildObserver->lastChange()->type(), Qt3DCore::PropertyUpdated); - propChange = qSharedPointerDynamicCast<Qt3DCore::QPropertyUpdatedChange>(directChildObserver->lastChange()); - QCOMPARE(directChild->id(), propChange->subjectId()); - QCOMPARE(QString(propChange->propertyName()), QString("prop1")); + dirtyNodes = arbiter->takeDirtyFrontEndNodes(); + QCOMPARE(dirtyNodes.size(), 1); + QCOMPARE(dirtyNodes.front(), directChild); Qt3DCore::QChangeArbiter::destroyThreadLocalChangeQueue(arbiter.data()); } diff --git a/tests/auto/core/qjoint/tst_qjoint.cpp b/tests/auto/core/qjoint/tst_qjoint.cpp index ec1a45f90..436814f7f 100644 --- a/tests/auto/core/qjoint/tst_qjoint.cpp +++ b/tests/auto/core/qjoint/tst_qjoint.cpp @@ -317,69 +317,54 @@ private Q_SLOTS: { // WHEN joint.setScale(QVector3D(2.0f, 1.0f, 3.0f)); - QCoreApplication::processEvents(); // THEN - QCOMPARE(arbiter.events.size(), 1); - auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>(); - QCOMPARE(change->propertyName(), "scale"); - QCOMPARE(change->type(), Qt3DCore::PropertyUpdated); - QCOMPARE(change->value().value<QVector3D>(), joint.scale()); + QCOMPARE(arbiter.dirtyNodes.size(), 1); + QCOMPARE(arbiter.dirtyNodes.front(), &joint); - arbiter.events.clear(); + arbiter.dirtyNodes.clear(); // WHEN joint.setScale(QVector3D(2.0f, 1.0f, 3.0f)); - QCoreApplication::processEvents(); // THEN - QCOMPARE(arbiter.events.size(), 0); + QCOMPARE(arbiter.dirtyNodes.size(), 0); } { // WHEN const auto newValue = QQuaternion::fromAxisAndAngle(1.0f, 1.0f, 1.0f, 45.0f); joint.setRotation(newValue); - QCoreApplication::processEvents(); // THEN - QCOMPARE(arbiter.events.size(), 1); - auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>(); - QCOMPARE(change->propertyName(), "rotation"); - QCOMPARE(change->type(), Qt3DCore::PropertyUpdated); - QCOMPARE(change->value().value<QQuaternion>(), newValue); + QCOMPARE(arbiter.dirtyNodes.size(), 1); + QCOMPARE(arbiter.dirtyNodes.front(), &joint); - arbiter.events.clear(); + arbiter.dirtyNodes.clear(); // WHEN joint.setRotation(newValue); - QCoreApplication::processEvents(); // THEN - QCOMPARE(arbiter.events.size(), 0); + QCOMPARE(arbiter.dirtyNodes.size(), 0); } { // WHEN const QVector3D newValue(1.0f, 2.0f, 3.0f); joint.setTranslation(newValue); - QCoreApplication::processEvents(); // THEN - QCOMPARE(arbiter.events.size(), 1); - auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>(); - QCOMPARE(change->propertyName(), "translation"); - QCOMPARE(change->type(), Qt3DCore::PropertyUpdated); - QCOMPARE(change->value().value<QVector3D>(), newValue); + QCOMPARE(arbiter.dirtyNodes.size(), 1); + QCOMPARE(arbiter.dirtyNodes.front(), &joint); - arbiter.events.clear(); + arbiter.dirtyNodes.clear(); // WHEN joint.setTranslation(newValue); - QCoreApplication::processEvents(); // THEN - QCOMPARE(arbiter.events.size(), 0); + QCOMPARE(arbiter.dirtyNodes.size(), 0); } { @@ -387,23 +372,18 @@ private Q_SLOTS: QMatrix4x4 newValue; newValue.rotate(90.0f, 1.0f, 0.0f, 0.0f); joint.setInverseBindMatrix(newValue); - QCoreApplication::processEvents(); // THEN - QCOMPARE(arbiter.events.size(), 1); - auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>(); - QCOMPARE(change->propertyName(), "inverseBindMatrix"); - QCOMPARE(change->type(), Qt3DCore::PropertyUpdated); - QCOMPARE(change->value().value<QMatrix4x4>(), newValue); + QCOMPARE(arbiter.dirtyNodes.size(), 1); + QCOMPARE(arbiter.dirtyNodes.front(), &joint); - arbiter.events.clear(); + arbiter.dirtyNodes.clear(); // WHEN joint.setInverseBindMatrix(newValue); - QCoreApplication::processEvents(); // THEN - QCOMPARE(arbiter.events.size(), 0); + QCOMPARE(arbiter.dirtyNodes.size(), 0); } } }; diff --git a/tests/auto/core/qscene/qscene.pro b/tests/auto/core/qscene/qscene.pro index 829130997..150b86f71 100644 --- a/tests/auto/core/qscene/qscene.pro +++ b/tests/auto/core/qscene/qscene.pro @@ -6,3 +6,5 @@ QT += testlib core-private 3dcore 3dcore-private SOURCES += \ tst_qscene.cpp + +include(../common/common.pri) diff --git a/tests/auto/core/qscene/tst_qscene.cpp b/tests/auto/core/qscene/tst_qscene.cpp index 0a7e6d9b8..9a50d2abc 100644 --- a/tests/auto/core/qscene/tst_qscene.cpp +++ b/tests/auto/core/qscene/tst_qscene.cpp @@ -34,6 +34,7 @@ #include <Qt3DCore/private/qobservableinterface_p.h> #include <Qt3DCore/private/qlockableobserverinterface_p.h> #include <private/qnode_p.h> +#include "testpostmanarbiter.h" class tst_QScene : public QObject { @@ -60,14 +61,6 @@ private slots: void nodeUpdatePropertyTrackData(); }; -class tst_LockableObserver : public Qt3DCore::QLockableObserverInterface -{ -public: - void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &) override {} - void sceneChangeEventWithLock(const Qt3DCore::QSceneChangePtr &) override {} - void sceneChangeEventWithLock(const Qt3DCore::QSceneChangeList &) override {} -}; - class tst_Observable : public Qt3DCore::QObservableInterface { public: @@ -111,7 +104,7 @@ void tst_QScene::addObservable() observables.append(new tst_Observable()); Qt3DCore::QScene *scene = new Qt3DCore::QScene; - scene->setArbiter(new tst_LockableObserver); + scene->setArbiter(new TestArbiter); // WHEN for (int i = 0; i < 5; i++) @@ -146,7 +139,7 @@ void tst_QScene::addNodeObservable() nodes.append(new tst_Node()); Qt3DCore::QScene *scene = new Qt3DCore::QScene; - scene->setArbiter(new tst_LockableObserver); + scene->setArbiter(new TestArbiter); // WHEN for (int i = 0; i < 10; i++) @@ -171,7 +164,7 @@ void tst_QScene::removeObservable() observables.append(new tst_Observable()); Qt3DCore::QScene *scene = new Qt3DCore::QScene; - scene->setArbiter(new tst_LockableObserver); + scene->setArbiter(new TestArbiter); // WHEN for (int i = 0; i < 5; i++) @@ -222,7 +215,7 @@ void tst_QScene::removeNodeObservable() observables.append(new tst_Observable()); Qt3DCore::QScene *scene = new Qt3DCore::QScene; - scene->setArbiter(new tst_LockableObserver); + scene->setArbiter(new TestArbiter); // WHEN scene->addObservable(node1); diff --git a/tests/auto/core/qskeleton/tst_qskeleton.cpp b/tests/auto/core/qskeleton/tst_qskeleton.cpp index f66e07cbe..6ad6e538c 100644 --- a/tests/auto/core/qskeleton/tst_qskeleton.cpp +++ b/tests/auto/core/qskeleton/tst_qskeleton.cpp @@ -109,33 +109,24 @@ private Q_SLOTS: // WHEN QJoint *joint = new QJoint(skeleton.data()); - QCoreApplication::processEvents(); - arbiter.events.clear(); + arbiter.dirtyNodes.clear(); skeleton->setRootJoint(joint); - QCoreApplication::processEvents(); // THEN - QCOMPARE(arbiter.events.size(), 1); - QPropertyUpdatedChangePtr change = arbiter.events.first().staticCast<QPropertyUpdatedChange>(); - QCOMPARE(change->propertyName(), "rootJoint"); - QCOMPARE(change->value().value<QNodeId>(), joint->id()); - QCOMPARE(change->type(), PropertyUpdated); + QCOMPARE(arbiter.dirtyNodes.size(), 1); + QCOMPARE(arbiter.dirtyNodes.front(), skeleton.data()); - arbiter.events.clear(); + arbiter.dirtyNodes.clear(); // WHEN skeleton->setRootJoint(nullptr); - QCoreApplication::processEvents(); // THEN - QCOMPARE(arbiter.events.size(), 1); - change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>(); - QCOMPARE(change->propertyName(), "rootJoint"); - QCOMPARE(change->value().value<QNodeId>(), QNodeId()); - QCOMPARE(change->type(), Qt3DCore::PropertyUpdated); + QCOMPARE(arbiter.dirtyNodes.size(), 1); + QCOMPARE(arbiter.dirtyNodes.front(), skeleton.data()); - arbiter.events.clear(); + arbiter.dirtyNodes.clear(); } void checkRootJointBookkeeping() diff --git a/tests/auto/core/qskeletonloader/tst_qskeletonloader.cpp b/tests/auto/core/qskeletonloader/tst_qskeletonloader.cpp index 1386429d4..7fcdc4bbe 100644 --- a/tests/auto/core/qskeletonloader/tst_qskeletonloader.cpp +++ b/tests/auto/core/qskeletonloader/tst_qskeletonloader.cpp @@ -169,12 +169,11 @@ private Q_SLOTS: QCoreApplication::processEvents(); // THEN - QCOMPARE(arbiter.events.size(), 1); - auto change = arbiter.events.first().staticCast<QPropertyUpdatedChange>(); - QCOMPARE(change->propertyName(), "source"); - QCOMPARE(change->type(), PropertyUpdated); + QCOMPARE(arbiter.events.size(), 0); + QCOMPARE(arbiter.dirtyNodes.size(), 1); + QCOMPARE(arbiter.dirtyNodes[0], &skeleton); - arbiter.events.clear(); + arbiter.dirtyNodes.clear(); } { @@ -184,21 +183,20 @@ private Q_SLOTS: // THEN QCOMPARE(arbiter.events.size(), 0); + QCOMPARE(arbiter.dirtyNodes.size(), 0); } - { // WHEN skeleton.setCreateJointsEnabled(true); QCoreApplication::processEvents(); // THEN - QCOMPARE(arbiter.events.size(), 1); - auto change = arbiter.events.first().staticCast<QPropertyUpdatedChange>(); - QCOMPARE(change->propertyName(), "createJointsEnabled"); - QCOMPARE(change->type(), PropertyUpdated); + QCOMPARE(arbiter.events.size(), 0); + QCOMPARE(arbiter.dirtyNodes.size(), 1); + QCOMPARE(arbiter.dirtyNodes[0], &skeleton); - arbiter.events.clear(); + arbiter.dirtyNodes.clear(); } { @@ -208,6 +206,7 @@ private Q_SLOTS: // THEN QCOMPARE(arbiter.events.size(), 0); + QCOMPARE(arbiter.events.size(), 0); } } @@ -242,6 +241,9 @@ private Q_SLOTS: QCOMPARE(spy.count(), 0); QCOMPARE(arbiter.events.size(), 0); QCOMPARE(status(), newStatus); + + // Cleanup + QNodePrivate::get(this)->setArbiter(nullptr); } void checkRootJointPropertyUpdate() @@ -266,8 +268,11 @@ private Q_SLOTS: // THEN QCOMPARE(spy.count(), 1); - QCOMPARE(arbiter.events.size(), 1); + QCOMPARE(arbiter.dirtyNodes.size(), 1); QVERIFY(rootJoint() != nullptr); + + // Cleanup + QNodePrivate::get(this)->setArbiter(nullptr); } }; diff --git a/tests/auto/core/qtransform/tst_qtransform.cpp b/tests/auto/core/qtransform/tst_qtransform.cpp index dbdda1ce1..dd13b28f7 100644 --- a/tests/auto/core/qtransform/tst_qtransform.cpp +++ b/tests/auto/core/qtransform/tst_qtransform.cpp @@ -134,74 +134,54 @@ private Q_SLOTS: // WHEN transform->setTranslation(QVector3D(454.0f, 427.0f, 383.0f)); - QCoreApplication::processEvents(); // THEN - Qt3DCore::QPropertyUpdatedChangePtr change; - QCOMPARE(arbiter.events.size(), 1); - change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>(); - QCOMPARE(change->propertyName(), "translation"); - QCOMPARE(change->value().value<QVector3D>(), QVector3D(454.0f, 427.0f, 383.0f)); + QCOMPARE(arbiter.dirtyNodes.size(), 1); + QCOMPARE(arbiter.dirtyNodes.front(), transform.data()); - arbiter.events.clear(); + arbiter.dirtyNodes.clear(); // WHEN QQuaternion q = Qt3DCore::QTransform::fromAxisAndAngle(QVector3D(0.0f, 1.0f, 0.0f), 90.0f); transform->setRotation(q); - QCoreApplication::processEvents(); // THEN - QCOMPARE(arbiter.events.size(), 1); - change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>(); - QCOMPARE(change->propertyName(), "rotation"); - QCOMPARE(change->value().value<QQuaternion>(), q); + QCOMPARE(arbiter.dirtyNodes.size(), 1); + QCOMPARE(arbiter.dirtyNodes.front(), transform.data()); - arbiter.events.clear(); + arbiter.dirtyNodes.clear(); // WHEN transform->setScale3D(QVector3D(883.0f, 1200.0f, 1340.0f)); QCoreApplication::processEvents(); // THEN - QCOMPARE(arbiter.events.size(), 1); - change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>(); - QCOMPARE(change->propertyName(), "scale3D"); - QCOMPARE(change->value().value<QVector3D>(), QVector3D(883.0f, 1200.0f, 1340.0f)); + QCOMPARE(arbiter.dirtyNodes.size(), 1); + QCOMPARE(arbiter.dirtyNodes.front(), transform.data()); - arbiter.events.clear(); + arbiter.dirtyNodes.clear(); // WHEN // Force the transform to update its matrix (void)transform->matrix(); transform->setMatrix(QMatrix4x4()); - QCoreApplication::processEvents(); // THEN - QCOMPARE(arbiter.events.size(), 3); - change = arbiter.events.takeFirst().staticCast<Qt3DCore::QPropertyUpdatedChange>(); - QCOMPARE(change->propertyName(), "scale3D"); - QCOMPARE(change->value().value<QVector3D>(), QVector3D(1.0f, 1.0f, 1.0f)); - change = arbiter.events.takeFirst().staticCast<Qt3DCore::QPropertyUpdatedChange>(); - QCOMPARE(change->propertyName(), "rotation"); - QCOMPARE(change->value().value<QQuaternion>(), QQuaternion()); - change = arbiter.events.takeFirst().staticCast<Qt3DCore::QPropertyUpdatedChange>(); - QCOMPARE(change->propertyName(), "translation"); - QCOMPARE(change->value().value<QVector3D>(), QVector3D()); - - arbiter.events.clear(); + QCOMPARE(arbiter.dirtyNodes.size(), 1); + QCOMPARE(arbiter.dirtyNodes.front(), transform.data()); + + arbiter.dirtyNodes.clear(); // WHEN transform->setRotationX(20.0f); QCoreApplication::processEvents(); // THEN - QCOMPARE(arbiter.events.size(), 1); - change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>(); - QCOMPARE(change->propertyName(), "rotation"); - QCOMPARE(change->value().value<QQuaternion>().toEulerAngles().x(), 20.0f); + QCOMPARE(arbiter.dirtyNodes.size(), 1); + QCOMPARE(arbiter.dirtyNodes.front(), transform.data()); - arbiter.events.clear(); + arbiter.dirtyNodes.clear(); } void checkSignalEmittion() |