summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSvenn-Arne Dragly <s@dragly.com>2019-02-22 13:37:51 +0100
committerJani Heikkinen <jani.heikkinen@qt.io>2019-02-22 15:00:24 +0000
commit799bb8615c86b7713351851c6013821b523f8aa2 (patch)
tree9a0e96d9753e31facf556d6ec534e4ac4b675b15
parente5b256effa320fb7806205f5a37a4dc1943175f0 (diff)
Add test for component added to parent with pending backend creation
This test makes sure that the order of events is correct when a parentless component is added to an entity that does not yet have a backend node because it was created with a parent and thus has not yet called _q_postConstructorInit. Change-Id: I6d15003549cc9d327c5c2de84723e5f8897e4dcf Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
-rw-r--r--tests/auto/core/nodes/tst_nodes.cpp78
1 files changed, 76 insertions, 2 deletions
diff --git a/tests/auto/core/nodes/tst_nodes.cpp b/tests/auto/core/nodes/tst_nodes.cpp
index accd20ceb..0106d2dc3 100644
--- a/tests/auto/core/nodes/tst_nodes.cpp
+++ b/tests/auto/core/nodes/tst_nodes.cpp
@@ -87,7 +87,8 @@ private slots:
void checkSceneIsSetOnConstructionWithParent(); // QTBUG-69352
void appendingComponentToEntity();
- void appendingParentlessComponentToEntity();
+ void appendingParentlessComponentToEntityWithoutScene();
+ void appendingParentlessComponentToEntityWithScene();
void removingComponentFromEntity();
void changeCustomProperty();
@@ -1265,7 +1266,7 @@ void tst_Nodes::checkSceneIsSetOnConstructionWithParent()
QCOMPARE(spy.events.size(), 10); // 5 QComponentAddedChange(entity, cmp) and 5 QComponentAddedChange(cmp, entity)
}
-void tst_Nodes::appendingParentlessComponentToEntity()
+void tst_Nodes::appendingParentlessComponentToEntityWithoutScene()
{
// GIVEN
ObserverSpy entitySpy;
@@ -1321,6 +1322,79 @@ void tst_Nodes::appendingParentlessComponentToEntity()
}
}
+void tst_Nodes::appendingParentlessComponentToEntityWithScene()
+{
+ // GIVEN
+ ObserverSpy eventSpy;
+ Qt3DCore::QScene scene;
+
+ {
+ QScopedPointer<MyQEntity> entity(new MyQEntity());
+ entity->setArbiterAndScene(&eventSpy, &scene);
+ entity->setSimulateBackendCreated(true);
+
+ QCoreApplication::processEvents();
+
+ MyQComponent *comp = new MyQComponent();
+
+ // THEN
+ QVERIFY(entity->parentNode() == nullptr);
+ QVERIFY(entity->children().count() == 0);
+ QVERIFY(entity->components().empty());
+ QVERIFY(comp->parentNode() == nullptr);
+
+ // WHEN
+ entity->addComponent(comp);
+ QCoreApplication::processEvents();
+
+ // THEN
+ QVERIFY(entity->components().count() == 1);
+ QVERIFY(entity->components().first() == comp);
+ QVERIFY(comp->parentNode() == entity.data());
+
+ QCOMPARE(eventSpy.events.size(), 4);
+ // - entity created
+ // - child added
+ // - component added for entity
+ // - component added for compontent
+ QVERIFY(eventSpy.events.first().wasLocked());
+
+ {
+ const auto event = eventSpy.events.takeFirst().change().dynamicCast<Qt3DCore::QNodeCreatedChangeBase>();
+ QVERIFY(!event.isNull());
+ QCOMPARE(event->type(), Qt3DCore::NodeCreated);
+ QCOMPARE(event->subjectId(), comp->id());
+ }
+ {
+ const auto event = eventSpy.events.takeFirst().change().dynamicCast<Qt3DCore::QPropertyNodeAddedChange>();
+ QVERIFY(!event.isNull());
+ QCOMPARE(event->type(), Qt3DCore::PropertyValueAdded);
+ QCOMPARE(event->subjectId(), entity->id());
+ 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());
+ }
+ }
+}
+
+
void tst_Nodes::appendingComponentToEntity()
{
// GIVEN