diff options
author | Svenn-Arne Dragly <s@dragly.com> | 2019-02-22 13:37:51 +0100 |
---|---|---|
committer | Jani Heikkinen <jani.heikkinen@qt.io> | 2019-02-22 15:00:24 +0000 |
commit | 799bb8615c86b7713351851c6013821b523f8aa2 (patch) | |
tree | 9a0e96d9753e31facf556d6ec534e4ac4b675b15 /tests | |
parent | e5b256effa320fb7806205f5a37a4dc1943175f0 (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>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/core/nodes/tst_nodes.cpp | 78 |
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 |