From 38854a8dda4d57523ca9557e4c9a12d50195cdb6 Mon Sep 17 00:00:00 2001 From: Dale Glass <dale@daleglass.net> Date: Sun, 27 Nov 2022 13:47:58 +0100 Subject: [PATCH] Add the usage of the glTF-Sample-Models test models. --- tests/model-serializers/CMakeLists.txt | 13 +++++ .../src/ModelSerializersTests.cpp | 52 ++++++++++++++++--- 2 files changed, 58 insertions(+), 7 deletions(-) diff --git a/tests/model-serializers/CMakeLists.txt b/tests/model-serializers/CMakeLists.txt index 9049aee4eb..1072a87052 100644 --- a/tests/model-serializers/CMakeLists.txt +++ b/tests/model-serializers/CMakeLists.txt @@ -1,4 +1,7 @@ +include(ExternalProject) + + # Declare dependencies macro (setup_testcase_dependencies) @@ -70,6 +73,15 @@ macro (setup_testcase_dependencies) DOWNLOAD_NO_EXTRACT true CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" ) + ExternalProject_Add( + gltf_samples + PREFIX "models" + GIT_REPOSITORY "https://github.com/KhronosGroup/glTF-Sample-models" + GIT_TAG "master" + DOWNLOAD_NO_EXTRACT true CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" + ) + + add_dependencies(${TARGET_NAME} ukr_franny) add_dependencies(${TARGET_NAME} dragon_franny) @@ -77,6 +89,7 @@ macro (setup_testcase_dependencies) add_dependencies(${TARGET_NAME} madders1) add_dependencies(${TARGET_NAME} madders2) add_dependencies(${TARGET_NAME} broken) + add_dependencies(${TARGET_NAME} gltf_samples) endif() diff --git a/tests/model-serializers/src/ModelSerializersTests.cpp b/tests/model-serializers/src/ModelSerializersTests.cpp index 2d5e5133cd..6988b3761e 100644 --- a/tests/model-serializers/src/ModelSerializersTests.cpp +++ b/tests/model-serializers/src/ModelSerializersTests.cpp @@ -9,6 +9,14 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// This test checks a large amount of files. To debug more comfortably and avoid going through +// a lot of uninteresting data, QTest allows us to narrow down what gets run with command line +// arguments, like this: +// +// ./model-serializers-ModelSerializersTests loadGLTF:gltf2.0-RecursiveSkeletons.glb +// +// This will run only the loadGLTF test, and only on the gltf2.0-RecursiveSkeletons.glb file. + #include "ModelSerializersTests.h" #include "GLTFSerializer.h" #include "FBXSerializer.h" @@ -29,7 +37,7 @@ #include <QNetworkReply> #include <QByteArray> #include <QDebug> - +#include <QDirIterator> QTEST_MAIN(ModelSerializersTests) @@ -52,21 +60,45 @@ void ModelSerializersTests::initTestCase() { } void ModelSerializersTests::loadGLTF_data() { + // We feed a large amount of files into the test. Some we expect to fail, some we expect to load with issues. The + // added columns below indicate our expectations for each file. + + QTest::addColumn<QString>("filename"); + QTest::addColumn<bool>("expectParseFail"); QTest::addColumn<bool>("expectWarnings"); QTest::addColumn<bool>("expectErrors"); - QTest::newRow("ready-player-me-good1") << "models/src/DragonAvatar1.glb.gz" << false << false; - QTest::newRow("ready-player-me-good2") << "models/src/UkraineFranny.glb.gz" << false << false; - QTest::newRow("ready-player-me-good3") << "models/src/Franny.glb.gz" << false << false; - QTest::newRow("ready-player-me-good4") << "models/src/womanInTShirt.glb.gz" << false << false; - QTest::newRow("ready-player-me-good5") << "models/src/female-avatar-with-swords.glb.gz" << false << false; + QTest::newRow("ready-player-me-good1") << "models/src/DragonAvatar1.glb.gz" << false << false << false; + QTest::newRow("ready-player-me-good2") << "models/src/UkraineFranny.glb.gz" << false << false << false; + QTest::newRow("ready-player-me-good3") << "models/src/Franny.glb.gz" << false << false << false; + QTest::newRow("ready-player-me-good4") << "models/src/womanInTShirt.glb.gz" << false << false << false; + QTest::newRow("ready-player-me-good5") << "models/src/female-avatar-with-swords.glb.gz" << false << false << false; QTest::newRow("ready-player-me-broken1") << "models/src/broken-2022-11-27.glb.gz" << false << true; + + // We can't parse GLTF 1.0 at present, and probably not ever. We're expecting all these to fail. + QDirIterator it("models/src/gltf_samples/1.0", QStringList() << "*.glb", QDir::Files, QDirIterator::Subdirectories); + while(it.hasNext()) { + QString filename = it.next(); + QFileInfo fi(filename); + QString testname = "gltf1.0-" + fi.fileName(); + QTest::newRow(testname.toUtf8().data()) << filename << true << false << false; + } + + QDirIterator it2("models/src/gltf_samples/2.0", QStringList() << "*.glb", QDir::Files, QDirIterator::Subdirectories); + while(it2.hasNext()) { + QString filename = it2.next(); + QFileInfo fi(filename); + QString testname = "gltf2.0-" + fi.fileName(); + QTest::newRow(testname.toUtf8().data()) << filename << false << false << false; + } + } void ModelSerializersTests::loadGLTF() { QFETCH(QString, filename); + QFETCH(bool, expectParseFail); QFETCH(bool, expectWarnings); QFETCH(bool, expectErrors); @@ -110,7 +142,13 @@ void ModelSerializersTests::loadGLTF() { hfm::Model::Pointer model = loader.load(uncompressedData, serializerMapping, url, webMediaType); - QVERIFY(model); + QVERIFY(expectParseFail == !model); + + if (!model) { + // We expected this parse to fail, so nothing more to do here. + return; + } + QVERIFY(!model->meshes.empty()); QVERIFY(!model->joints.empty());