diff options
author | Christian Strømme <christian.stromme@qt.io> | 2019-01-22 12:33:42 +0100 |
---|---|---|
committer | Christian Strømme <christian.stromme@qt.io> | 2019-01-28 10:56:30 +0000 |
commit | bbf69f613e0be819871b859ca900149d93f1fa8c (patch) | |
tree | 4838ccb60afb7148cfe11529e35d10fdb3fa9afb /tests | |
parent | f187bed25ce9edb683da205bd5accfd4d953a721 (diff) |
Fix and simplify the visibility update
Components should, once created, handle the visibility of it's own
objects instead of having a hybrid solution where it's sometimes handled
by the parent.
Change-Id: I5f4c95dce2573da821a0498c7c40f6cdff9b245d
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/slides/tst_q3dsslides.cpp | 72 |
1 files changed, 63 insertions, 9 deletions
diff --git a/tests/auto/slides/tst_q3dsslides.cpp b/tests/auto/slides/tst_q3dsslides.cpp index 8f0035a..23149a3 100644 --- a/tests/auto/slides/tst_q3dsslides.cpp +++ b/tests/auto/slides/tst_q3dsslides.cpp @@ -257,11 +257,11 @@ void tst_Q3DSSlides::setPresentationSlides() { QVERIFY(m_sceneManager->currentSlide() == m_presentationSlide1); // For the first check we have to wait from the first frame update - QSignalSpy m_updateSpy(m_engine, SIGNAL(nextFrameStarting())); - m_updateSpy.wait(30); + QSignalSpy updateSpy(m_engine, SIGNAL(nextFrameStarting())); + updateSpy.wait(30); Q3DSAbstractSlidePlayer *player = m_sceneManager->slidePlayer(); - player->stop(); + player->pause(); QVERIFY(player); // Check starting state @@ -274,6 +274,7 @@ void tst_Q3DSSlides::setPresentationSlides() // Set second slide m_sceneManager->setCurrentSlide(m_presentationSlide2, true); + QVERIFY(updateSpy.wait(500)); // Verify second slide state QCOMPARE(player->duration(), 10000); // MasterCylinder should be visible @@ -285,6 +286,7 @@ void tst_Q3DSSlides::setPresentationSlides() // Go back to first slide m_sceneManager->setCurrentSlide(m_presentationSlide1, true); + QVERIFY(updateSpy.wait(500)); // Check first slide state QCOMPARE(player->duration(), 10000); // MasterCylinder should be visible @@ -297,6 +299,7 @@ void tst_Q3DSSlides::setPresentationSlides() // Set 3rd Slide (with Component) m_sceneManager->setCurrentSlide(m_presentationSlide3, true); + QVERIFY(updateSpy.wait(500)); QCOMPARE(player->duration(), 10000); // MasterCylinder should be visible QVERIFY(isNodeVisible(m_masterCylinder)); @@ -309,6 +312,7 @@ void tst_Q3DSSlides::setPresentationSlides() // Set 4th Slide (from Component) m_sceneManager->setCurrentSlide(m_presentationSlide4, true); + QVERIFY(updateSpy.wait(500)); QCOMPARE(player->duration(), 12028); // MasterCylinder should be visible QVERIFY(isNodeVisible(m_masterCylinder)); @@ -323,6 +327,7 @@ void tst_Q3DSSlides::setPresentationSlides() // Set the same slide again m_sceneManager->setCurrentSlide(m_presentationSlide4, true); + QVERIFY(updateSpy.wait(500)); QCOMPARE(player->duration(), 12028); // MasterCylinder should be visible QVERIFY(isNodeVisible(m_masterCylinder)); @@ -338,8 +343,12 @@ void tst_Q3DSSlides::setPresentationSlides() void tst_Q3DSSlides::presentationRollback() { + QSignalSpy updateSpy(m_engine, SIGNAL(nextFrameStarting())); + updateSpy.wait(30); + // Go back to first slide m_sceneManager->setCurrentSlide(m_presentationSlide1, true); + QVERIFY(updateSpy.wait(500)); // DynamicSphere exists on the master slide (visible by default) // DynamicSphere has eyeball set to false on Slides 2 and 4 @@ -347,30 +356,39 @@ void tst_Q3DSSlides::presentationRollback() // Go to Second Slide m_sceneManager->setCurrentSlide(m_presentationSlide2, true); + QVERIFY(updateSpy.wait(500)); QVERIFY(!isNodeVisible(m_dynamicSphere)); // Go to Third Slide (requires rollback) m_sceneManager->setCurrentSlide(m_presentationSlide3, true); + QVERIFY(updateSpy.wait(500)); QVERIFY(isNodeVisible(m_dynamicSphere)); // Go to Forth Slide m_sceneManager->setCurrentSlide(m_presentationSlide4, true); + QVERIFY(updateSpy.wait(500)); QVERIFY(!isNodeVisible(m_dynamicSphere)); // Go to another slide with eyeball false (no rollback) m_sceneManager->setCurrentSlide(m_presentationSlide2, true); + QVERIFY(updateSpy.wait(500)); QVERIFY(!isNodeVisible(m_dynamicSphere)); // Make sure rollback still works m_sceneManager->setCurrentSlide(m_presentationSlide1, true); + QVERIFY(updateSpy.wait(500)); QVERIFY(isNodeVisible(m_dynamicSphere)); } void tst_Q3DSSlides::setComponentSlides() { + QSignalSpy updateSpy(m_engine, SIGNAL(nextFrameStarting())); + updateSpy.wait(30); + // Set the presentation slide to Slide3 (contains component) m_sceneManager->setCurrentSlide(m_presentationSlide3, true); + QVERIFY(updateSpy.wait(500)); QVERIFY(isNodeVisible(m_slide3Component)); // Initial slide should be m_componentSlide1 @@ -381,6 +399,7 @@ void tst_Q3DSSlides::setComponentSlides() // Switch to Component Slide 2 (text) m_sceneManager->setComponentCurrentSlide(m_componentSlide2, true); + QVERIFY(updateSpy.wait(500)); QVERIFY(!isNodeVisible(m_componentMasterCube)); QVERIFY(!isNodeVisible(m_componentSlide1Cone)); QVERIFY(isNodeVisible(m_componentSlide2Text)); @@ -388,6 +407,7 @@ void tst_Q3DSSlides::setComponentSlides() // Switch back to Component Slide 1 m_sceneManager->setComponentCurrentSlide(m_componentSlide1, true); + QVERIFY(updateSpy.wait(500)); QVERIFY(isNodeVisible(m_componentMasterCube)); QVERIFY(isNodeVisible(m_componentSlide1Cone)); QVERIFY(!isNodeVisible(m_componentSlide2Text)); @@ -395,6 +415,7 @@ void tst_Q3DSSlides::setComponentSlides() // Switch to Component Slide 3 (deep component) m_sceneManager->setComponentCurrentSlide(m_componentSlide3, true); + QVERIFY(updateSpy.wait(500)); QVERIFY(isNodeVisible(m_componentMasterCube)); QVERIFY(!isNodeVisible(m_componentSlide1Cone)); QVERIFY(!isNodeVisible(m_componentSlide2Text)); @@ -402,6 +423,7 @@ void tst_Q3DSSlides::setComponentSlides() // Switch to same slide m_sceneManager->setComponentCurrentSlide(m_componentSlide3, true); + QVERIFY(updateSpy.wait(500)); QVERIFY(isNodeVisible(m_componentMasterCube)); QVERIFY(!isNodeVisible(m_componentSlide1Cone)); QVERIFY(!isNodeVisible(m_componentSlide2Text)); @@ -410,35 +432,47 @@ void tst_Q3DSSlides::setComponentSlides() void tst_Q3DSSlides::componentRollback() { + QSignalSpy updateSpy(m_engine, SIGNAL(nextFrameStarting())); + updateSpy.wait(30); + // Set the presentation slide to Slide3 (contains component) m_sceneManager->setCurrentSlide(m_presentationSlide3, true); + QVERIFY(updateSpy.wait(500)); QVERIFY(isNodeVisible(m_slide3Component)); // Set first slide which contains "Master Cube" m_sceneManager->setComponentCurrentSlide(m_componentSlide1, true); + QVERIFY(updateSpy.wait(500)); QVERIFY(isNodeVisible(m_componentMasterCube)); // Second slide sets Master Cube eyeball to false m_sceneManager->setComponentCurrentSlide(m_componentSlide2, true); + QVERIFY(updateSpy.wait(500)); QVERIFY(!isNodeVisible(m_componentMasterCube)); // Switch back to first slide (requires rollback) m_sceneManager->setComponentCurrentSlide(m_componentSlide1, true); + QVERIFY(updateSpy.wait(500)); QVERIFY(isNodeVisible(m_componentMasterCube)); // Move to slide 3 (no change) m_sceneManager->setComponentCurrentSlide(m_componentSlide3, true); + QVERIFY(updateSpy.wait(500)); QVERIFY(isNodeVisible(m_componentMasterCube)); } void tst_Q3DSSlides::setDeepComponentSlides() { + QSignalSpy updateSpy(m_engine, SIGNAL(nextFrameStarting())); + updateSpy.wait(30); // Deep Component is a nested component Slide // PresentationSlide3 -> ComponentSlide3 -> DeepComponentSlide[n] // Set the presentation slide to Slide3 (contains component) m_sceneManager->setCurrentSlide(m_presentationSlide3, true); + QVERIFY(updateSpy.wait(500)); QVERIFY(isNodeVisible(m_slide3Component)); m_sceneManager->setComponentCurrentSlide(m_componentSlide3, true); + QVERIFY(updateSpy.wait(500)); QVERIFY(isNodeVisible(m_componentSlide3Component)); // At this point the first slide of deep component should be active @@ -449,18 +483,21 @@ void tst_Q3DSSlides::setDeepComponentSlides() // Switch to second deep component slide m_sceneManager->setComponentCurrentSlide(m_deepComponentSlide2, true); + QVERIFY(updateSpy.wait(500)); QVERIFY(!isNodeVisible(m_deepComponentSlide1Cylinder)); QVERIFY(isNodeVisible(m_deepComponentSlide2Sphere)); QVERIFY(isNodeVisible(m_deepComponentSlide2Moon)); // Switch back to deep component first slide m_sceneManager->setComponentCurrentSlide(m_deepComponentSlide1, true); + QVERIFY(updateSpy.wait(500)); QVERIFY(isNodeVisible(m_deepComponentSlide1Cylinder)); QVERIFY(!isNodeVisible(m_deepComponentSlide2Sphere)); QVERIFY(!isNodeVisible(m_deepComponentSlide2Moon)); // Set same slide again m_sceneManager->setComponentCurrentSlide(m_deepComponentSlide1, true); + QVERIFY(updateSpy.wait(500)); QVERIFY(isNodeVisible(m_deepComponentSlide1Cylinder)); QVERIFY(!isNodeVisible(m_deepComponentSlide2Sphere)); QVERIFY(!isNodeVisible(m_deepComponentSlide2Moon)); @@ -468,29 +505,38 @@ void tst_Q3DSSlides::setDeepComponentSlides() void tst_Q3DSSlides::deepComponentRollback() { + QSignalSpy updateSpy(m_engine, SIGNAL(nextFrameStarting())); + updateSpy.wait(30); // Deep Component is a nested component Slide // PresentationSlide3 -> ComponentSlide3 -> DeepComponentSlide[n] // Set the presentation slide to Slide3 (contains component) m_sceneManager->setCurrentSlide(m_presentationSlide3, true); + QVERIFY(updateSpy.wait(500)); QVERIFY(isNodeVisible(m_slide3Component)); m_sceneManager->setComponentCurrentSlide(m_componentSlide3, true); + QVERIFY(updateSpy.wait(500)); QVERIFY(isNodeVisible(m_componentSlide3Component)); // First slide has "master text" active m_sceneManager->setComponentCurrentSlide(m_deepComponentSlide1, true); + QVERIFY(updateSpy.wait(500)); QVERIFY(isNodeVisible(m_deepComponentMasterText)); // Second slide has eyeball set to false for master text m_sceneManager->setComponentCurrentSlide(m_deepComponentSlide2, true); + QVERIFY(updateSpy.wait(500)); QVERIFY(!isNodeVisible(m_deepComponentMasterText)); // Switch back to first slide to perform rollback m_sceneManager->setComponentCurrentSlide(m_deepComponentSlide1, true); + QVERIFY(updateSpy.wait(500)); QVERIFY(isNodeVisible(m_deepComponentMasterText)); } void tst_Q3DSSlides::setNonVisibleComponentSlides() { + QSignalSpy updateSpy(m_engine, SIGNAL(nextFrameStarting())); + updateSpy.wait(30); // It is possible to change component slides even though components // are not visible. This is useful because when you do switch to a // slide where components contents are shown they will be in the @@ -499,12 +545,14 @@ void tst_Q3DSSlides::setNonVisibleComponentSlides() // Select a presentation slide that does not have a component m_sceneManager->setCurrentSlide(m_presentationSlide1, true); + QVERIFY(updateSpy.wait(500)); QVERIFY(!isNodeVisible(m_slide3Component)); // m_slide3Component is only visible on m_presentationSlide3 // change m_slide3Component's slides and make sure the contents // do not become visible. m_sceneManager->setComponentCurrentSlide(m_componentSlide1, true); + QVERIFY(updateSpy.wait(500)); QVERIFY(!isNodeVisible(m_componentMasterCube)); QVERIFY(!isNodeVisible(m_componentSlide1Cone)); QVERIFY(!isNodeVisible(m_componentSlide2Text)); @@ -515,6 +563,7 @@ void tst_Q3DSSlides::setNonVisibleComponentSlides() QVERIFY(!isNodeVisible(m_deepComponentMasterText)); m_sceneManager->setComponentCurrentSlide(m_componentSlide2, true); + QVERIFY(updateSpy.wait(500)); QVERIFY(!isNodeVisible(m_componentMasterCube)); QVERIFY(!isNodeVisible(m_componentSlide1Cone)); QVERIFY(!isNodeVisible(m_componentSlide2Text)); @@ -525,6 +574,7 @@ void tst_Q3DSSlides::setNonVisibleComponentSlides() QVERIFY(!isNodeVisible(m_deepComponentMasterText)); m_sceneManager->setComponentCurrentSlide(m_componentSlide3, true); + QVERIFY(updateSpy.wait(500)); QVERIFY(!isNodeVisible(m_componentMasterCube)); QVERIFY(!isNodeVisible(m_componentSlide1Cone)); QVERIFY(!isNodeVisible(m_componentSlide2Text)); @@ -536,6 +586,7 @@ void tst_Q3DSSlides::setNonVisibleComponentSlides() // also change deep compoents slides (now active in component slide3) m_sceneManager->setComponentCurrentSlide(m_deepComponentSlide1, true); + QVERIFY(updateSpy.wait(500)); QVERIFY(!isNodeVisible(m_componentMasterCube)); QVERIFY(!isNodeVisible(m_componentSlide1Cone)); QVERIFY(!isNodeVisible(m_componentSlide2Text)); @@ -546,6 +597,7 @@ void tst_Q3DSSlides::setNonVisibleComponentSlides() QVERIFY(!isNodeVisible(m_deepComponentMasterText)); m_sceneManager->setComponentCurrentSlide(m_deepComponentSlide2, true); + QVERIFY(updateSpy.wait(500)); QVERIFY(!isNodeVisible(m_componentMasterCube)); QVERIFY(!isNodeVisible(m_componentSlide1Cone)); QVERIFY(!isNodeVisible(m_componentSlide2Text)); @@ -557,6 +609,7 @@ void tst_Q3DSSlides::setNonVisibleComponentSlides() // Now make component visible by switching to slide 3 m_sceneManager->setCurrentSlide(m_presentationSlide3, true); + QVERIFY(updateSpy.wait(500)); QVERIFY(isNodeVisible(m_slide3Component)); QVERIFY(isNodeVisible(m_componentMasterCube)); QVERIFY(!isNodeVisible(m_componentSlide1Cone)); @@ -569,6 +622,7 @@ void tst_Q3DSSlides::setNonVisibleComponentSlides() // make sure that they go away again m_sceneManager->setCurrentSlide(m_presentationSlide1, true); + QVERIFY(updateSpy.wait(500)); QVERIFY(!isNodeVisible(m_slide3Component)); QVERIFY(!isNodeVisible(m_componentMasterCube)); QVERIFY(!isNodeVisible(m_componentSlide1Cone)); @@ -584,29 +638,29 @@ void tst_Q3DSSlides::testTimeLineVisibility() { // Select a presentation slide that has items with different starttimes // and endtimes than the slide they are on + QSignalSpy updateSpy(m_engine, SIGNAL(nextFrameStarting())); m_sceneManager->setCurrentSlide(m_presentationSlide5, true); - + QVERIFY(updateSpy.wait(500)); QVERIFY(isNodeVisible(m_masterCylinder)); QVERIFY(isNodeVisible(m_dynamicSphere)); QVERIFY(!isNodeVisible(m_slide5Rect)); QVERIFY(isNodeVisible(m_slide5Sphere)); Q3DSAbstractSlidePlayer *player = m_sceneManager->slidePlayer(); - player->stop(); + player->pause(); QVERIFY(player); - QSignalSpy updateSpy(m_engine, SIGNAL(nextFrameStarting())); QSignalSpy positionChangedSpy(player, &Q3DSSlidePlayer::positionChanged); - const auto seekAndWait = [player](int value) { player->seek(value); }; + const auto seekAndWait = [player, &updateSpy](int value) { player->seek(value); QVERIFY(updateSpy.wait(1000));}; m_sceneManager->setComponentCurrentSlide(m_componentSlide51); Q_ASSERT(m_componentSlide5MasterSlide == m_slide5Component->masterSlide()); Q3DSAbstractSlidePlayer *compPlayer = m_componentSlide5MasterSlide->attached<Q3DSSlideAttached>()->slidePlayer; - compPlayer->stop(); + compPlayer->pause(); QVERIFY(compPlayer); - const auto seekAndWaitForComp = [compPlayer](int value) { compPlayer->seek(value); }; + const auto seekAndWaitForComp = [compPlayer, &updateSpy](int value) { compPlayer->seek(value); QVERIFY(updateSpy.wait(30));}; seekAndWait(999); |