diff options
author | Laszlo Agocs <laszlo.agocs@qt.io> | 2018-08-17 14:50:10 +0200 |
---|---|---|
committer | Laszlo Agocs <laszlo.agocs@qt.io> | 2018-08-17 14:30:51 +0000 |
commit | 82c126ff968e09cc25be6381dc218d6bee2a5494 (patch) | |
tree | 6515ffac134270e7f87bf314a8c74994b38addd1 /tests | |
parent | e4465ae2e136645c1060a9be58f53bea8f7baef3 (diff) |
Add Object3D tests covering object ordering
...and fix a small glitch that prevented objects being detached from the
parent when m_layer was null (because the object was never attached to a
live Layer3D).
Change-Id: I2479d255aa150bae085d845dd36061b4ffbf19a9
Reviewed-by: Christian Stromme <christian.stromme@qt.io>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/studio3dengine/tst_studio3dengine.cpp | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/tests/auto/studio3dengine/tst_studio3dengine.cpp b/tests/auto/studio3dengine/tst_studio3dengine.cpp index 4694e81..423757a 100644 --- a/tests/auto/studio3dengine/tst_studio3dengine.cpp +++ b/tests/auto/studio3dengine/tst_studio3dengine.cpp @@ -52,6 +52,7 @@ private Q_SLOTS: void testSimple(); void testReparent(); void testReparentSubTree(); + void testParentingOrder(); void testEngineChangeToNullAndBack(); void testLayerParentNullAndBack(); }; @@ -271,6 +272,109 @@ void tst_Studio3DEngine::testReparentSubTree() QCOMPARE(group3d_3->layer(), layer3d); } +void tst_Studio3DEngine::testParentingOrder() +{ + QQuickView view; + view.setResizeMode(QQuickView::SizeRootObjectToView); + view.setSource(QUrl(QLatin1String("qrc:/data/simple.qml"))); + + view.resize(600, 500); + view.show(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); + + if (view.rendererInterface()->graphicsApi() != QSGRendererInterface::OpenGL) + QSKIP("This test needs Qt Quick on OpenGL"); + + Q3DSLayer3D *layer3d = qobject_cast<Q3DSLayer3D *>(view.rootObject()->childItems()[1]); + Q3DSLayerNode *layer3DS = layer3d->layerNode(); + Q3DSGroup3D *group3d_1 = qobject_cast<Q3DSGroup3D *>(layer3d->childItems()[0]); + Q3DSGroupNode *group3DS_1 = static_cast<Q3DSGroupNode *>(group3d_1->object()); + Q3DSGroup3D *group3d_2 = qobject_cast<Q3DSGroup3D *>(group3d_1->childItems()[0]); + Q3DSGroupNode *group3DS_2 = static_cast<Q3DSGroupNode *>(group3d_2->object()); + + // Layer(Group1(Group2)) + QCOMPARE(group3DS_2->parent(), group3DS_1); + QCOMPARE(group3DS_1->parent(), layer3DS); + QCOMPARE(layer3d->slide()->objects().count(), 3); + QCOMPARE(group3d_1->layer(), layer3d); + QCOMPARE(group3d_2->layer(), layer3d); + + // Layer Group1 Group2 + group3d_1->setParentItem(nullptr); + QVERIFY(!group3DS_1->parent()); + QVERIFY(!group3DS_1->nextSibling()); + QVERIFY(!group3d_1->layer()); + group3d_2->setParentItem(nullptr); + QVERIFY(!group3DS_2->parent()); + QVERIFY(!group3DS_2->nextSibling()); + QVERIFY(!group3d_2->layer()); + + // Layer Group1(Group4 Group3 Group5) Group2 + Q3DSGroup3D *group3d_3 = new Q3DSGroup3D; + Q3DSGroup3D *group3d_4 = new Q3DSGroup3D; + Q3DSGroup3D *group3d_5 = new Q3DSGroup3D; + group3d_4->setParentItem(group3d_1); + QVERIFY(!group3d_4->object()); + group3d_3->setParentItem(group3d_1); + QVERIFY(!group3d_3->object()); + group3d_5->setParentItem(group3d_1); + QVERIFY(!group3d_5->object()); + + // Layer(Group1(Group4 Group3 Group5)) Group2 + group3d_1->setParentItem(layer3d); + Q3DSGroupNode *group3DS_4 = group3d_4->groupNode(); + Q3DSGroupNode *group3DS_3 = group3d_3->groupNode(); + Q3DSGroupNode *group3DS_5 = group3d_5->groupNode(); + QVERIFY(group3DS_4); + QVERIFY(group3DS_3); + QVERIFY(group3DS_5); + QCOMPARE(group3d_4->layer(), layer3d); + QCOMPARE(group3d_3->layer(), layer3d); + QCOMPARE(group3d_5->layer(), layer3d); + QCOMPARE(group3DS_4->parent(), group3DS_1); + QCOMPARE(group3DS_3->parent(), group3DS_1); + QCOMPARE(group3DS_5->parent(), group3DS_1); + QCOMPARE(group3DS_4->nextSibling(), group3DS_3); + QCOMPARE(group3DS_3->nextSibling(), group3DS_5); + QCOMPARE(group3DS_5->nextSibling(), nullptr); + QCOMPARE(group3DS_1->childCount(), 3); + QCOMPARE(layer3d->slide()->objects().count(), 5); + + // Layer(Group1(Group4 Group3 Group5)) Group2(Group6 Group7(Group8)) + Q3DSGroup3D *group3d_6 = new Q3DSGroup3D; + Q3DSGroup3D *group3d_7 = new Q3DSGroup3D; + Q3DSGroup3D *group3d_8 = new Q3DSGroup3D; + group3d_6->setParentItem(group3d_2); + QVERIFY(!group3d_6->object()); + group3d_7->setParentItem(group3d_2); + QVERIFY(!group3d_7->object()); + group3d_8->setParentItem(group3d_7); + QVERIFY(!group3d_8->object()); + + // Layer(Group1(Group4 Group3 Group5) Group2(Group6 Group7(Group8))) + group3d_2->setParentItem(layer3d); + Q3DSGroupNode *group3DS_6 = group3d_6->groupNode(); + Q3DSGroupNode *group3DS_7 = group3d_7->groupNode(); + Q3DSGroupNode *group3DS_8 = group3d_8->groupNode(); + QVERIFY(group3DS_6); + QVERIFY(group3DS_7); + QVERIFY(group3DS_8); + QCOMPARE(group3d_6->layer(), layer3d); + QCOMPARE(group3d_7->layer(), layer3d); + QCOMPARE(group3d_8->layer(), layer3d); + QCOMPARE(group3DS_2->parent(), layer3DS); + QCOMPARE(group3DS_1->nextSibling(), group3DS_2); + QCOMPARE(group3DS_2->nextSibling(), nullptr); + QCOMPARE(group3DS_2->previousSibling(), group3DS_1); + QCOMPARE(layer3d->slide()->objects().count(), 9); + QCOMPARE(group3DS_6->parent(), group3DS_2); + QCOMPARE(group3DS_7->parent(), group3DS_2); + QCOMPARE(group3DS_8->parent(), group3DS_7); + QCOMPARE(group3DS_6->nextSibling(), group3DS_7); + QCOMPARE(group3DS_7->nextSibling(), nullptr); + QCOMPARE(group3DS_8->nextSibling(), nullptr); +} + void tst_Studio3DEngine::testEngineChangeToNullAndBack() { QQuickView view; |