summaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
authorChristian Strømme <christian.stromme@qt.io>2018-06-14 11:55:52 +0200
committerLaszlo Agocs <laszlo.agocs@qt.io>2018-06-18 12:52:06 +0000
commit54aad416c1e919445d24fc4e1c666a1bf9ca97d6 (patch)
tree66d2f7abe8a9373fb1b4a7bc9b144e2c13f36609 /tests/auto
parentaf413e6913b0de5a127ef53a913b6aa07b5d5678 (diff)
Don't use a slide's time value to update the component player
The two time-lines are not necessarily synced up, or have the same duration, so when a component player is not playing, use the component players previous position to update the visibility of its nodes. Change-Id: Id959bd78e4d5ce9622001d47b1deff82c77780cb Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/slides/tst_q3dsslides.cpp117
1 files changed, 102 insertions, 15 deletions
diff --git a/tests/auto/slides/tst_q3dsslides.cpp b/tests/auto/slides/tst_q3dsslides.cpp
index 6326fe9..5863b8e 100644
--- a/tests/auto/slides/tst_q3dsslides.cpp
+++ b/tests/auto/slides/tst_q3dsslides.cpp
@@ -86,6 +86,12 @@ private:
Q3DSSlide *m_componentSlide2 = nullptr;
Q3DSSlide *m_componentSlide3 = nullptr;
+ // Slide 5 ComponentSlides
+ Q3DSSlide *m_componentSlide5MasterSlide = nullptr;
+ Q3DSSlide *m_componentSlide51 = nullptr;
+ Q3DSSlide *m_componentSlide52 = nullptr;
+ Q3DSSlide *m_componentSlide53 = nullptr;
+
// Deep Component Slides
Q3DSSlide *m_deepComponentMasterSlide = nullptr;
Q3DSSlide *m_deepComponentSlide1 = nullptr;
@@ -105,8 +111,9 @@ private:
// Component Objects
Q3DSModelNode *m_componentMasterCube = nullptr;
- Q3DSModelNode *m_componentMasterCubeSlide5 = nullptr;
Q3DSModelNode *m_componentSlide1Cone = nullptr;
+ Q3DSModelNode *m_componentMasterCubeSlide5 = nullptr;
+ Q3DSModelNode *m_componentSlide5Slide1Cone = nullptr;
Q3DSTextNode *m_componentSlide2Text = nullptr;
Q3DSComponentNode *m_componentSlide3Component = nullptr;
@@ -195,17 +202,28 @@ void tst_Q3DSSlides::initTestCase()
m_componentSlide3 = static_cast<Q3DSSlide *>(m_componentSlide2->nextSibling());
QVERIFY(m_componentSlide3);
+ m_componentSlide5MasterSlide = m_slide5Component->masterSlide();
+ QVERIFY(m_componentSlide5MasterSlide);
+ m_componentSlide51 = static_cast<Q3DSSlide *>(m_componentSlide5MasterSlide->firstChild());
+ QVERIFY(m_componentSlide51);
+ m_componentSlide52 = static_cast<Q3DSSlide *>(m_componentSlide51->nextSibling());
+ QVERIFY(m_componentSlide52);
+ m_componentSlide53 = static_cast<Q3DSSlide *>(m_componentSlide52->nextSibling());
+ QVERIFY(m_componentSlide53);
+
// Component Objects
m_componentMasterCube = getModelWithName(QStringLiteral("ComponentMasterCube"), m_slide3Component);
QVERIFY(m_componentMasterCube);
- m_componentMasterCubeSlide5 = getModelWithName(QStringLiteral("ComponentMasterCube"), m_slide5Component);
- QVERIFY(m_componentMasterCubeSlide5);
m_componentSlide1Cone = getModelWithName(QStringLiteral("ComponentSlide1Cone"), m_componentMasterCube);
QVERIFY(m_componentSlide1Cone);
m_componentSlide2Text = getTextNodeWithName(QStringLiteral("ComponentSlide2Text"), m_slide3Component);
QVERIFY(m_componentSlide2Text);
m_componentSlide3Component = getComponentWithName(QStringLiteral("ComponentSlide3Component"), m_slide3Component);
QVERIFY(m_componentSlide3Component);
+ m_componentMasterCubeSlide5 = getModelWithName(QStringLiteral("ComponentMasterCube"), m_slide5Component);
+ QVERIFY(m_componentMasterCubeSlide5);
+ m_componentSlide5Slide1Cone = getModelWithName(QStringLiteral("ComponentSlide1Cone"), m_componentMasterCubeSlide5);
+ QVERIFY(m_componentSlide5Slide1Cone);
// Deep Component Slides
m_deepComponentMasterSlide = m_componentSlide3Component->masterSlide();
@@ -587,17 +605,17 @@ void tst_Q3DSSlides::testTimeLineVisibility()
QVERIFY(updateSpy.wait(5000));
};
- Q3DSSlide *compMasterSlide = m_slide5Component->masterSlide();
- Q_ASSERT(compMasterSlide);
- Q3DSSlidePlayer *compPlayer = compMasterSlide->attached<Q3DSSlideAttached>()->slidePlayer;
+ m_sceneManager->setComponentCurrentSlide(m_componentSlide51);
+ Q_ASSERT(m_componentSlide5MasterSlide == m_slide5Component->masterSlide());
+ Q3DSSlidePlayer *compPlayer = m_componentSlide5MasterSlide->attached<Q3DSSlideAttached>()->slidePlayer;
compPlayer->stop();
QVERIFY(compPlayer);
QSignalSpy compPositionChangedSpy(compPlayer, &Q3DSSlidePlayer::positionChanged);
- const auto seekAndWaitForComp = [player, &updateSpy, &compPositionChangedSpy](int value) {
+ const auto seekAndWaitForComp = [compPlayer, &updateSpy, &compPositionChangedSpy](int value) {
const float t = value;
- player->seek(t);
+ compPlayer->seek(t);
QVERIFY(compPositionChangedSpy.wait(5000));
QVERIFY(updateSpy.wait(5000));
};
@@ -623,6 +641,8 @@ void tst_Q3DSSlides::testTimeLineVisibility()
QVERIFY(!isNodeVisible(m_componentMasterCubeSlide5));
seekAndWait(1500);
+ // Sync up the comp player
+ seekAndWaitForComp(1500);
// Everything now visible
QVERIFY(isNodeVisible(m_masterCylinder));
@@ -636,6 +656,8 @@ void tst_Q3DSSlides::testTimeLineVisibility()
seekAndWaitForComp(1501);
seekAndWait(2000);
+ // Sync up the comp player
+ seekAndWaitForComp(2000);
// Everything still visible
QVERIFY(isNodeVisible(m_masterCylinder));
@@ -646,6 +668,8 @@ void tst_Q3DSSlides::testTimeLineVisibility()
QVERIFY(isNodeVisible(m_componentMasterCubeSlide5));
seekAndWait(2001);
+ // Sync up the comp player
+ seekAndWaitForComp(2001);
// Neither rect nor sphere are visible
QVERIFY(isNodeVisible(m_masterCylinder));
@@ -656,6 +680,8 @@ void tst_Q3DSSlides::testTimeLineVisibility()
QVERIFY(isNodeVisible(m_componentMasterCubeSlide5));
seekAndWait(2885);
+ // Sync up the comp player
+ seekAndWaitForComp(2885);
// Neither rect nor sphere are visible
QVERIFY(isNodeVisible(m_masterCylinder));
@@ -665,7 +691,66 @@ void tst_Q3DSSlides::testTimeLineVisibility()
QVERIFY(!isNodeVisible(m_slide5Component));
QVERIFY(!isNodeVisible(m_componentMasterCubeSlide5));
+ // Now test time lines that are out of sync
+ // Start by a know state with all visible
+ seekAndWait(1500);
+ // Sync up the comp player
+ seekAndWaitForComp(1500);
+
+ // Everything now visible
+ QVERIFY(isNodeVisible(m_masterCylinder));
+ QVERIFY(isNodeVisible(m_dynamicSphere));
+ QVERIFY(isNodeVisible(m_slide5Rect));
+ QVERIFY(isNodeVisible(m_slide5Sphere));
+ QVERIFY(isNodeVisible(m_slide5Component));
+ QVERIFY(isNodeVisible(m_componentMasterCubeSlide5));
+
+ seekAndWaitForComp(0);
+ QVERIFY(isNodeVisible(m_slide5Component));
+ QVERIFY(!isNodeVisible(m_componentMasterCubeSlide5));
+ QVERIFY(!isNodeVisible(m_componentSlide5Slide1Cone));
+
+ seekAndWaitForComp(1300);
+ QVERIFY(isNodeVisible(m_slide5Component));
+ QVERIFY(isNodeVisible(m_componentMasterCubeSlide5));
+ QVERIFY(isNodeVisible(m_componentSlide5Slide1Cone));
+
+ seekAndWait(3000);
+ QVERIFY(!isNodeVisible(m_slide5Component));
+ // Component nodes should be hidden by parent.
+ QVERIFY(!isNodeVisible(m_componentMasterCubeSlide5));
+ QVERIFY(!isNodeVisible(m_componentSlide5Slide1Cone));
+
+ seekAndWait(1500);
+ QVERIFY(isNodeVisible(m_slide5Component));
+ // Component nodes should be made visible by parent.
+ QVERIFY(isNodeVisible(m_componentMasterCubeSlide5));
+ QVERIFY(isNodeVisible(m_componentSlide5Slide1Cone));
+
+ seekAndWait(3000);
+ QVERIFY(!isNodeVisible(m_slide5Component));
+ // Make the parent make the component nodes hidden again
+ QVERIFY(!isNodeVisible(m_componentMasterCubeSlide5));
+ QVERIFY(!isNodeVisible(m_componentSlide5Slide1Cone));
+
+ seekAndWaitForComp(1000);
+ // Component should not make its nodes visible.
+ QVERIFY(!isNodeVisible(m_componentMasterCubeSlide5));
+ QVERIFY(!isNodeVisible(m_componentSlide5Slide1Cone));
+
+ seekAndWaitForComp(100);
+ // Hidden by component
+ QVERIFY(!isNodeVisible(m_componentMasterCubeSlide5));
+ QVERIFY(!isNodeVisible(m_componentSlide5Slide1Cone));
+
+ seekAndWait(1500);
+ // ... Now make sure the parent doesn't make the component nodes visible!
+ QVERIFY(!isNodeVisible(m_componentMasterCubeSlide5));
+ QVERIFY(!isNodeVisible(m_componentSlide5Slide1Cone));
+
seekAndWait(0);
+ // Sync up the comp player
+ seekAndWaitForComp(0);
// Back to the beginning
QVERIFY(isNodeVisible(m_masterCylinder));
@@ -720,20 +805,22 @@ Q3DSTextNode *tst_Q3DSSlides::getTextNodeWithName(const QString &name, Q3DSGraph
bool tst_Q3DSSlides::isNodeVisible(Q3DSNode *node)
{
- if (!node) {
+ if (!node)
return false;
- }
- auto nodeAttached = static_cast<Q3DSNodeAttached *>(node->attached());
+ auto nodeAttached = node->attached<Q3DSNodeAttached>();
auto entity = nodeAttached->entity;
if (!entity)
return false;
- auto layerAttached = static_cast<Q3DSLayerAttached *>(nodeAttached->layer3DS->attached());
- if (entity->components().contains(layerAttached->opaqueTag) || entity->components().contains(layerAttached->transparentTag))
- return true;
+ auto layerAttached = nodeAttached->layer3DS->attached<Q3DSLayerAttached>();
+ Q_ASSERT(layerAttached->opaqueTag || layerAttached->transparentTag);
+
+ const bool visible = (nodeAttached->visibilityTag == Q3DSGraphObjectAttached::Visible);
+ // These should be in sync, or we're in trouble.
+ Q_ASSERT(visible == (entity->components().contains(layerAttached->opaqueTag) || entity->components().contains(layerAttached->transparentTag)));
- return false;
+ return visible;
}
QTEST_MAIN(tst_Q3DSSlides);