summaryrefslogtreecommitdiffstats
path: root/tests/auto/viewer/tst_qt3dsviewer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/viewer/tst_qt3dsviewer.cpp')
-rw-r--r--tests/auto/viewer/tst_qt3dsviewer.cpp191
1 files changed, 80 insertions, 111 deletions
diff --git a/tests/auto/viewer/tst_qt3dsviewer.cpp b/tests/auto/viewer/tst_qt3dsviewer.cpp
index 333ac950..d261c2a9 100644
--- a/tests/auto/viewer/tst_qt3dsviewer.cpp
+++ b/tests/auto/viewer/tst_qt3dsviewer.cpp
@@ -102,7 +102,7 @@ void tst_qt3dsviewer::init()
void tst_qt3dsviewer::cleanup()
{
- deleteCreatedElements(0);
+ deleteCreatedElements();
if (!m_ignoreError)
QCOMPARE(m_studio3DItem->property("error").toString(), {});
m_studio3DItem = nullptr;
@@ -185,14 +185,16 @@ void tst_qt3dsviewer::testCreateElement()
QSignalSpy spyExited(m_presentation,
SIGNAL(slideExited(const QString &, unsigned int, const QString &)));
- QSignalSpy spyElemCreated(m_presentation, SIGNAL(elementCreated(const QString &,
- const QString &)));
-
- QObject::connect(m_presentation, &Q3DSPresentation::elementCreated,
- [this](const QString &elementName, const QString &error) {
- QVERIFY(error.isEmpty());
- if (!m_createdElements.contains(elementName))
- QVERIFY(false);
+ QSignalSpy spyElemCreated(m_presentation, SIGNAL(elementsCreated(const QStringList &,
+ const QString &)));
+
+ QObject::connect(m_presentation, &Q3DSPresentation::elementsCreated,
+ [this](const QStringList &elementNames, const QString &error) {
+ QCOMPARE(error, QString());
+ for (auto &elementName : elementNames) {
+ if (!m_createdElements.contains(elementName))
+ QVERIFY(false);
+ }
});
int animValue = 0;
@@ -304,45 +306,32 @@ void tst_qt3dsviewer::testCreateElement()
// Switch to slide 1
QVERIFY(spyExited.wait(20000));
- QTimer createTimer;
- createTimer.setInterval(0);
- static int elemCounter = 0;
QRandomGenerator rnd;
-
- auto createElementsConnection = QObject::connect(&createTimer, &QTimer::timeout, [&]() {
- // Create a bunch of elements to slide 2 in small batches to avoid slowdown
- for (int i = 0; i < 5; ++i) {
- ++elemCounter;
- data.clear();
- QString elementName = QStringLiteral("MassElement_%1").arg(elemCounter);
- data.insert(QStringLiteral("name"), elementName);
- data.insert(QStringLiteral("sourcepath"),
- elemCounter % 2 ? QStringLiteral("#Cube") : QStringLiteral("#Cone"));
- data.insert(QStringLiteral("material"),
- elemCounter % 2 ? QStringLiteral("Basic Green")
- : QStringLiteral("Basic Red"));
- data.insert(QStringLiteral("position"),
- QVariant::fromValue<QVector3D>(QVector3D(rnd.bounded(-600, 600),
- rnd.bounded(-600, 600),
- rnd.bounded(800, 1200))));
-
- createElement(QStringLiteral("Scene.Layer"), QStringLiteral("Slide2"), data);
- }
- if (elemCounter >= 1000) {
- qDebug() << "Extra elements created:" << elemCounter;
- createTimer.stop();
- }
- });
- qDebug() << "Start creating extra elements";
- createTimer.start();
+ QVector<QHash<QString, QVariant>> massProps;
+ for (int i = 0; i < 1000; ++i) {
+ data.clear();
+ QString elementName = QStringLiteral("MassElement_%1").arg(i);
+ data.insert(QStringLiteral("name"), elementName);
+ data.insert(QStringLiteral("sourcepath"),
+ i % 2 ? QStringLiteral("#Cube") : QStringLiteral("#Cone"));
+ data.insert(QStringLiteral("material"),
+ i % 2 ? QStringLiteral("Basic Green") : QStringLiteral("Basic Red"));
+ data.insert(QStringLiteral("position"),
+ QVariant::fromValue<QVector3D>(QVector3D(rnd.bounded(-600, 600),
+ rnd.bounded(-600, 600),
+ rnd.bounded(800, 1200))));
+ massProps << data;
+ m_createdElements << QStringLiteral("Scene.Layer.") + elementName;
+ }
+ m_presentation->createElements(QStringLiteral("Scene.Layer"), QStringLiteral("Slide2"),
+ massProps);
// Switch to slide 2
QVERIFY(spyExited.wait(20000));
- QObject::disconnect(createElementsConnection);
QTest::qWait(500);
- QCOMPARE(spyElemCreated.count(), m_createdElements.count());
- deleteCreatedElements(1);
+ QCOMPARE(spyElemCreated.count(), 7);
+ deleteCreatedElements();
// Switch to slide 1
QVERIFY(spyExited.wait(20000));
@@ -358,19 +347,16 @@ void tst_qt3dsviewer::testCreateMaterial()
QSignalSpy spyExited(m_presentation,
SIGNAL(slideExited(const QString &, unsigned int, const QString &)));
- QSignalSpy spyMatCreated(m_presentation, SIGNAL(materialCreated(const QString &,
- const QString &)));
- QSignalSpy spyElemCreated(m_presentation, SIGNAL(elementCreated(const QString &,
- const QString &)));
+ QSignalSpy spyMatCreated(m_presentation, SIGNAL(materialsCreated(const QStringList &,
+ const QString &)));
+ QSignalSpy spyElemCreated(m_presentation, SIGNAL(elementsCreated(const QStringList &,
+ const QString &)));
+
+ QStringList materialDefinitions;
// Create material via .materialdef file in resources
- m_presentation->createMaterial(
- QStringLiteral("Scene"),
- QStringLiteral(
- ":/scenes/simple_cube_animation/materials/Basic Blue.materialdef"));
- m_presentation->createMaterial(
- QStringLiteral("Scene"),
- QStringLiteral(
- ":/scenes/simple_cube_animation/materials/Basic Texture.materialdef"));
+ materialDefinitions
+ << QStringLiteral(":/scenes/simple_cube_animation/materials/Basic Blue.materialdef")
+ << QStringLiteral(":/scenes/simple_cube_animation/materials/Basic Texture.materialdef");
// Create material directly from materialdef content
auto loadMatDefFile = [&](const QString &fileName) -> QString {
@@ -384,46 +370,47 @@ void tst_qt3dsviewer::testCreateMaterial()
QString matDef = loadMatDefFile(
QStringLiteral(":/scenes/simple_cube_animation/materials/Copper.materialdef"));
QVERIFY(!matDef.isEmpty());
+ materialDefinitions << matDef;
- m_presentation->createMaterial(QStringLiteral("Scene"), matDef);
-
- QObject::connect(m_presentation, &Q3DSPresentation::materialCreated,
- [this](const QString &name, const QString &error) {
- QHash<QString, QVariant> data;
+ m_presentation->createMaterials(QStringLiteral("Scene"), materialDefinitions);
+ QObject::connect(m_presentation, &Q3DSPresentation::materialsCreated,
+ [this](const QStringList &materialNames, const QString &error) {
QVERIFY(error.isEmpty());
-
- if (name == QLatin1String("materials/Basic Blue")) {
- data.insert(QStringLiteral("name"), QStringLiteral("Blue Cylinder"));
- data.insert(QStringLiteral("sourcepath"), QStringLiteral("#Cylinder"));
- data.insert(QStringLiteral("material"), name);
- data.insert(QStringLiteral("position"),
- QVariant::fromValue<QVector3D>(QVector3D(200, 300, 200)));
- createElement(QStringLiteral("Scene.Layer"), QStringLiteral("Slide1"), data);
- } else if (name == QLatin1String("materials/Basic Texture")) {
- data.insert(QStringLiteral("name"), QStringLiteral("Textured Cone"));
- data.insert(QStringLiteral("sourcepath"), QStringLiteral("#Cone"));
- data.insert(QStringLiteral("material"), name);
- data.insert(QStringLiteral("position"),
- QVariant::fromValue<QVector3D>(QVector3D(-200, -300, 200)));
- createElement(QStringLiteral("Scene.Layer"), QStringLiteral("Slide1"), data);
- } else if (name == QLatin1String("materials/Copper")) {
- data.insert(QStringLiteral("name"), QStringLiteral("Copper Sphere"));
- data.insert(QStringLiteral("sourcepath"), QStringLiteral("#Sphere"));
- data.insert(QStringLiteral("material"), name);
- data.insert(QStringLiteral("position"),
- QVariant::fromValue<QVector3D>(QVector3D(-200, 300, 200)));
- createElement(QStringLiteral("Scene.Layer"), QStringLiteral("Slide1"), data);
- } else if (name == QLatin1String("materials/Just Yellow")) {
+ for (auto &name : materialNames) {
QHash<QString, QVariant> data;
- data.insert(QStringLiteral("name"), QStringLiteral("Yellow Cube"));
- data.insert(QStringLiteral("sourcepath"), QStringLiteral("#Cube"));
- data.insert(QStringLiteral("material"), name);
- data.insert(QStringLiteral("position"),
- QVariant::fromValue<QVector3D>(QVector3D(200, -300, 200)));
- createElement(QStringLiteral("Scene.Layer"), QStringLiteral("Slide1"), data);
- } else {
- QVERIFY(false);
+ if (name == QLatin1String("materials/Basic Blue")) {
+ data.insert(QStringLiteral("name"), QStringLiteral("Blue Cylinder"));
+ data.insert(QStringLiteral("sourcepath"), QStringLiteral("#Cylinder"));
+ data.insert(QStringLiteral("material"), name);
+ data.insert(QStringLiteral("position"),
+ QVariant::fromValue<QVector3D>(QVector3D(200, 300, 200)));
+ createElement(QStringLiteral("Scene.Layer"), QStringLiteral("Slide1"), data);
+ } else if (name == QLatin1String("materials/Basic Texture")) {
+ data.insert(QStringLiteral("name"), QStringLiteral("Textured Cone"));
+ data.insert(QStringLiteral("sourcepath"), QStringLiteral("#Cone"));
+ data.insert(QStringLiteral("material"), name);
+ data.insert(QStringLiteral("position"),
+ QVariant::fromValue<QVector3D>(QVector3D(-200, -300, 200)));
+ createElement(QStringLiteral("Scene.Layer"), QStringLiteral("Slide1"), data);
+ } else if (name == QLatin1String("materials/Copper")) {
+ data.insert(QStringLiteral("name"), QStringLiteral("Copper Sphere"));
+ data.insert(QStringLiteral("sourcepath"), QStringLiteral("#Sphere"));
+ data.insert(QStringLiteral("material"), name);
+ data.insert(QStringLiteral("position"),
+ QVariant::fromValue<QVector3D>(QVector3D(-200, 300, 200)));
+ createElement(QStringLiteral("Scene.Layer"), QStringLiteral("Slide1"), data);
+ } else if (name == QLatin1String("materials/Just Yellow")) {
+ QHash<QString, QVariant> data;
+ data.insert(QStringLiteral("name"), QStringLiteral("Yellow Cube"));
+ data.insert(QStringLiteral("sourcepath"), QStringLiteral("#Cube"));
+ data.insert(QStringLiteral("material"), name);
+ data.insert(QStringLiteral("position"),
+ QVariant::fromValue<QVector3D>(QVector3D(200, -300, 200)));
+ createElement(QStringLiteral("Scene.Layer"), QStringLiteral("Slide1"), data);
+ } else {
+ QVERIFY(false);
+ }
}
});
@@ -439,32 +426,14 @@ void tst_qt3dsviewer::testCreateMaterial()
});
QVERIFY(spyExited.wait(20000));
- QCOMPARE(spyMatCreated.count(), 4);
+ QCOMPARE(spyMatCreated.count(), 2);
QCOMPARE(spyElemCreated.count(), 4);
QTest::qWait(200); // Extra wait to verify slide change visually
}
-void tst_qt3dsviewer::deleteCreatedElements(int interval)
+void tst_qt3dsviewer::deleteCreatedElements()
{
- QTimer deleteTimer;
- deleteTimer.setInterval(interval);
- int elemCounter = m_createdElements.size() - 1;
- QObject::connect(&deleteTimer, &QTimer::timeout, [&]() {
- // Delete all elements we created previously
- if (elemCounter >= 0) {
- m_presentation->deleteElement(m_createdElements[elemCounter]);
- --elemCounter;
- } else {
- qDebug() << "Extra elements deleted";
- deleteTimer.stop();
- }
- });
- qDebug() << "Start deleting extra elements";
- deleteTimer.start();
-
- while (deleteTimer.isActive())
- QTest::qWait(20);
-
+ m_presentation->deleteElements(m_createdElements);
m_createdElements.clear();
}