summaryrefslogtreecommitdiffstats
path: root/tests/auto/core
diff options
context:
space:
mode:
authorMike Krus <mike.krus@kdab.com>2019-09-17 15:47:59 +0100
committerMike Krus <mike.krus@kdab.com>2019-10-04 07:10:20 +0100
commit53efe4ea5a26e67b5a37a7a79744872af1ec34bb (patch)
treed513b42dfabcb87cbb40e9f9a3397a2555ecfda2 /tests/auto/core
parent703f7964f88df116d0dd3fdd0a8005b9abef8737 (diff)
Remove use of node/components added/removed messages
Introduce mechanism to notify backend nodes of changes in relationship between nodes. If a component is added or removed from an entity, or if a node is added or removed from a property of another node, then just rely on the node being marked as dirty when syncing takes place. For nodes that do not support syncing, messages are delivered as before but allocated on the stack rather than the heap. Change-Id: I06affac77e42a9998d9c7f44e231c7724c52b320 Reviewed-by: Mike Krus <mike.krus@kdab.com>
Diffstat (limited to 'tests/auto/core')
-rw-r--r--tests/auto/core/common/testpostmanarbiter.cpp7
-rw-r--r--tests/auto/core/common/testpostmanarbiter.h2
-rw-r--r--tests/auto/core/nodes/tst_nodes.cpp142
3 files changed, 51 insertions, 100 deletions
diff --git a/tests/auto/core/common/testpostmanarbiter.cpp b/tests/auto/core/common/testpostmanarbiter.cpp
index 3fd8c80d1..5869cbad3 100644
--- a/tests/auto/core/common/testpostmanarbiter.cpp
+++ b/tests/auto/core/common/testpostmanarbiter.cpp
@@ -94,6 +94,13 @@ void TestArbiter::addDirtyFrontEndNode(Qt3DCore::QNode *node)
dirtyNodes << node;
}
+void TestArbiter::addDirtyFrontEndNode(Qt3DCore::QNode *node, Qt3DCore::QNode *subNode, const char *property, Qt3DCore::ChangeFlag change)
+{
+ if (!dirtyNodes.contains(node))
+ dirtyNodes << node;
+ dirtySubNodes.push_back({node, subNode, change, property});
+}
+
void TestArbiter::removeDirtyFrontEndNode(Qt3DCore::QNode *node)
{
dirtyNodes.removeOne(node);
diff --git a/tests/auto/core/common/testpostmanarbiter.h b/tests/auto/core/common/testpostmanarbiter.h
index e79283763..cecc24f93 100644
--- a/tests/auto/core/common/testpostmanarbiter.h
+++ b/tests/auto/core/common/testpostmanarbiter.h
@@ -66,9 +66,11 @@ public:
QVector<Qt3DCore::QSceneChangePtr> events;
QVector<Qt3DCore::QNode *> dirtyNodes;
+ QVector<Qt3DCore::NodeRelationshipChange> dirtySubNodes;
void setArbiterOnNode(Qt3DCore::QNode *node);
void addDirtyFrontEndNode(Qt3DCore::QNode *node) final;
+ void addDirtyFrontEndNode(Qt3DCore::QNode *node, Qt3DCore::QNode *subNode, const char *property, Qt3DCore::ChangeFlag change) final;
void removeDirtyFrontEndNode(Qt3DCore::QNode *node) final;
private:
diff --git a/tests/auto/core/nodes/tst_nodes.cpp b/tests/auto/core/nodes/tst_nodes.cpp
index 3da3e97e0..3b93e7715 100644
--- a/tests/auto/core/nodes/tst_nodes.cpp
+++ b/tests/auto/core/nodes/tst_nodes.cpp
@@ -179,11 +179,18 @@ public:
dirtyNodes << node;
}
+ void addDirtyFrontEndNode(Qt3DCore::QNode *node, Qt3DCore::QNode *subNode, const char *property, Qt3DCore::ChangeFlag change) final {
+ if (!dirtyNodes.contains(node))
+ dirtyNodes << node;
+ dirtySubNodes.push_back({node, subNode, change, property});
+ }
+
void removeDirtyFrontEndNode(Qt3DCore::QNode *node) final {
dirtyNodes.removeOne(node);
- };
+ }
QVector<Qt3DCore::QNode *> dirtyNodes;
+ QVector<Qt3DCore::NodeRelationshipChange> dirtySubNodes;
QList<ChangeRecord> events;
QScopedPointer<SimplePostman> m_postman;
};
@@ -1594,7 +1601,8 @@ void tst_Nodes::checkSceneIsSetOnConstructionWithParent()
}
// THEN
- QCOMPARE(spy.events.size(), 10); // 5 QComponentAddedChange(entity, cmp) and 5 QComponentAddedChange(cmp, entity)
+ QCOMPARE(spy.events.size(), 0);
+ QCOMPARE(spy.dirtySubNodes.size(), 5); // 5 entities changed
}
void tst_Nodes::appendingParentlessComponentToEntityWithoutScene()
@@ -1623,33 +1631,21 @@ void tst_Nodes::appendingParentlessComponentToEntityWithoutScene()
QVERIFY(entity->components().count() == 1);
QVERIFY(entity->components().first() == comp);
QVERIFY(comp->parentNode() == entity.data());
- QCOMPARE(entitySpy.events.size(), 1);
- QVERIFY(entitySpy.events.first().wasLocked());
- QCOMPARE(componentSpy.events.size(), 1);
+ QCOMPARE(entitySpy.events.size(), 0);
+ QCOMPARE(entitySpy.dirtyNodes.size(), 1);
+ QCOMPARE(entitySpy.dirtySubNodes.size(), 1);
+
+ const auto event = entitySpy.dirtySubNodes.first();
+ QCOMPARE(event.change, Qt3DCore::ComponentAdded);
+ QCOMPARE(event.node, entity.data());
+ QCOMPARE(event.subNode, comp);
+ QCOMPARE(event.property, nullptr);
// Note: since QEntity has no scene in this test case, we only have the
// ComponentAdded event In theory we should also get the NodeCreated event
// when setting the parent but that doesn't happen since no scene is
// actually set on the entity and that QNodePrivate::_q_addChild will
// return early in such a case.
-
- // Check that we received ComponentAdded
- {
- const auto event = entitySpy.events.takeFirst().change().dynamicCast<Qt3DCore::QComponentAddedChange>();
- QCOMPARE(event->type(), Qt3DCore::ComponentAdded);
- QCOMPARE(event->subjectId(), entity->id());
- QCOMPARE(event->entityId(), entity->id());
- QCOMPARE(event->componentId(), comp->id());
- QCOMPARE(event->componentMetaObject(), comp->metaObject());
- }
- {
- const auto event = componentSpy.events.takeFirst().change().dynamicCast<Qt3DCore::QComponentAddedChange>();
- QCOMPARE(event->type(), Qt3DCore::ComponentAdded);
- QCOMPARE(event->subjectId(), comp->id());
- QCOMPARE(event->entityId(), entity->id());
- QCOMPARE(event->componentId(), comp->id());
- QCOMPARE(event->componentMetaObject(), comp->metaObject());
- }
}
}
@@ -1687,10 +1683,8 @@ void tst_Nodes::appendingParentlessComponentToNonRootEntity()
QVERIFY(entity->components().first() == comp);
QVERIFY(comp->parentNode() == entity.data());
- QCOMPARE(eventSpy.events.size(), 3);
+ QCOMPARE(eventSpy.events.size(), 1);
// - entity added as child to root
- // - component added for entity
- // - component added for compontent
QVERIFY(eventSpy.events.first().wasLocked());
QVERIFY(Qt3DCore::QNodePrivate::get(entity.data())->m_hasBackendNode);
@@ -1704,24 +1698,6 @@ void tst_Nodes::appendingParentlessComponentToNonRootEntity()
QCOMPARE(event->propertyName(), QByteArrayLiteral("children"));
QCOMPARE(event->addedNodeId(), entity->id());
}
- {
- const auto event = eventSpy.events.takeFirst().change().dynamicCast<Qt3DCore::QComponentAddedChange>();
- QVERIFY(!event.isNull());
- QCOMPARE(event->type(), Qt3DCore::ComponentAdded);
- QCOMPARE(event->subjectId(), entity->id());
- QCOMPARE(event->entityId(), entity->id());
- QCOMPARE(event->componentId(), comp->id());
- QCOMPARE(event->componentMetaObject(), comp->metaObject());
- }
- {
- const auto event = eventSpy.events.takeFirst().change().dynamicCast<Qt3DCore::QComponentAddedChange>();
- QVERIFY(!event.isNull());
- QCOMPARE(event->type(), Qt3DCore::ComponentAdded);
- QCOMPARE(event->subjectId(), comp->id());
- QCOMPARE(event->entityId(), entity->id());
- QCOMPARE(event->componentId(), comp->id());
- QCOMPARE(event->componentMetaObject(), comp->metaObject());
- }
}
}
@@ -1755,10 +1731,8 @@ void tst_Nodes::appendingParentlessComponentToEntityWithScene()
QVERIFY(entity->components().first() == comp);
QVERIFY(comp->parentNode() == entity.data());
- QCOMPARE(eventSpy.events.size(), 3);
+ QCOMPARE(eventSpy.events.size(), 1);
// - child added
- // - component added for entity
- // - component added for compontent
QVERIFY(eventSpy.events.first().wasLocked());
{
@@ -1769,24 +1743,6 @@ void tst_Nodes::appendingParentlessComponentToEntityWithScene()
QCOMPARE(event->propertyName(), QByteArrayLiteral("children"));
QCOMPARE(event->addedNodeId(), comp->id());
}
- {
- const auto event = eventSpy.events.takeFirst().change().dynamicCast<Qt3DCore::QComponentAddedChange>();
- QVERIFY(!event.isNull());
- QCOMPARE(event->type(), Qt3DCore::ComponentAdded);
- QCOMPARE(event->subjectId(), entity->id());
- QCOMPARE(event->entityId(), entity->id());
- QCOMPARE(event->componentId(), comp->id());
- QCOMPARE(event->componentMetaObject(), comp->metaObject());
- }
- {
- const auto event = eventSpy.events.takeFirst().change().dynamicCast<Qt3DCore::QComponentAddedChange>();
- QVERIFY(!event.isNull());
- QCOMPARE(event->type(), Qt3DCore::ComponentAdded);
- QCOMPARE(event->subjectId(), comp->id());
- QCOMPARE(event->entityId(), entity->id());
- QCOMPARE(event->componentId(), comp->id());
- QCOMPARE(event->componentMetaObject(), comp->metaObject());
- }
}
}
@@ -1816,24 +1772,15 @@ void tst_Nodes::appendingComponentToEntity()
QVERIFY(entity->components().count() == 1);
QVERIFY(entity->components().first() == comp);
QVERIFY(comp->parentNode() == entity.data());
- QCOMPARE(entitySpy.events.size(), 1);
- QVERIFY(entitySpy.events.first().wasLocked());
- {
- const auto event = entitySpy.events.takeFirst().change().dynamicCast<Qt3DCore::QComponentAddedChange>();
- QCOMPARE(event->type(), Qt3DCore::ComponentAdded);
- QCOMPARE(event->subjectId(), entity->id());
- QCOMPARE(event->entityId(), entity->id());
- QCOMPARE(event->componentId(), comp->id());
- QCOMPARE(event->componentMetaObject(), comp->metaObject());
- }
- {
- const auto event = componentSpy.events.takeFirst().change().dynamicCast<Qt3DCore::QComponentAddedChange>();
- QCOMPARE(event->type(), Qt3DCore::ComponentAdded);
- QCOMPARE(event->subjectId(), comp->id());
- QCOMPARE(event->entityId(), entity->id());
- QCOMPARE(event->componentId(), comp->id());
- QCOMPARE(event->componentMetaObject(), comp->metaObject());
- }
+ QCOMPARE(entitySpy.events.size(), 0);
+ QCOMPARE(entitySpy.dirtyNodes.size(), 1);
+ QCOMPARE(entitySpy.dirtySubNodes.size(), 1);
+ QCOMPARE(entitySpy.dirtyNodes.first(), entity.data());
+ const auto event = entitySpy.dirtySubNodes.takeFirst();
+ QCOMPARE(event.node, entity.data());
+ QCOMPARE(event.subNode, comp);
+ QCOMPARE(event.change, Qt3DCore::ComponentAdded);
+ QCOMPARE(event.property, nullptr);
}
}
@@ -1858,6 +1805,8 @@ void tst_Nodes::removingComponentFromEntity()
// WHEN
entitySpy.events.clear();
+ entitySpy.dirtyNodes.clear();
+ entitySpy.dirtySubNodes.clear();
componentSpy.events.clear();
entity->removeComponent(comp);
@@ -1865,24 +1814,17 @@ void tst_Nodes::removingComponentFromEntity()
QVERIFY(entity->components().count() == 0);
QVERIFY(comp->parent() == entity.data());
QVERIFY(entity->children().count() == 1);
- QCOMPARE(entitySpy.events.size(), 1);
- QVERIFY(entitySpy.events.first().wasLocked());
- QCOMPARE(componentSpy.events.size(), 1);
- {
- const auto event = entitySpy.events.takeFirst().change().dynamicCast<Qt3DCore::QComponentRemovedChange>();
- QCOMPARE(event->type(), Qt3DCore::ComponentRemoved);
- QCOMPARE(event->subjectId(), entity->id());
- QCOMPARE(event->entityId(), entity->id());
- QCOMPARE(event->componentId(), comp->id());
- QCOMPARE(event->componentMetaObject(), comp->metaObject());
- }
+ QCOMPARE(entitySpy.events.size(), 0);
+ QCOMPARE(entitySpy.dirtyNodes.size(), 1);
+ QCOMPARE(entitySpy.dirtySubNodes.size(), 1);
+ QCOMPARE(componentSpy.events.size(), 0);
{
- const auto event = componentSpy.events.takeFirst().change().dynamicCast<Qt3DCore::QComponentRemovedChange>();
- QCOMPARE(event->type(), Qt3DCore::ComponentRemoved);
- QCOMPARE(event->subjectId(), comp->id());
- QCOMPARE(event->entityId(), entity->id());
- QCOMPARE(event->componentId(), comp->id());
- QCOMPARE(event->componentMetaObject(), comp->metaObject());
+ const auto event = entitySpy.dirtySubNodes.takeFirst();
+ qDebug() << event.change;
+ QCOMPARE(event.change, Qt3DCore::ComponentRemoved);
+ QCOMPARE(event.node, entity.data());
+ QCOMPARE(event.subNode, comp);
+ QCOMPARE(event.property, nullptr);
}
}
}