diff --git a/src/Magnum/SceneTools/Implementation/sceneConverterUtilities.h b/src/Magnum/SceneTools/Implementation/sceneConverterUtilities.h index 0aaa75310..8da0fc95c 100644 --- a/src/Magnum/SceneTools/Implementation/sceneConverterUtilities.h +++ b/src/Magnum/SceneTools/Implementation/sceneConverterUtilities.h @@ -564,6 +564,11 @@ bool printInfo(const Debug::Flags useColor, const bool useColor24, const Utility imageInfos = Trade::Implementation::imageInfo(importer, error, importTime); } + /* Print default scene also if sceneInfos is empty (for example due to an + import failure) */ + if((args.isSet("info") || args.isSet("info-scenes")) && importer.defaultScene() != -1) + Debug{useColor} << Debug::boldColor(Debug::Color::Default) << "Default scene:" << Debug::resetColor << importer.defaultScene(); + std::size_t totalSceneDataSize = 0; for(const SceneInfo& info: sceneInfos) { Debug d{useColor}; diff --git a/src/Magnum/SceneTools/Test/CMakeLists.txt b/src/Magnum/SceneTools/Test/CMakeLists.txt index d341c3439..e74989316 100644 --- a/src/Magnum/SceneTools/Test/CMakeLists.txt +++ b/src/Magnum/SceneTools/Test/CMakeLists.txt @@ -67,8 +67,9 @@ corrade_add_test(SceneToolsSceneConverterImple___Test SceneConverterImplementati SceneConverterImplementationTestFiles/info-meshes.txt SceneConverterImplementationTestFiles/info-objects.txt SceneConverterImplementationTestFiles/info-references.txt - SceneConverterImplementationTestFiles/info-scenes-objects.txt SceneConverterImplementationTestFiles/info-scenes.txt + SceneConverterImplementationTestFiles/info-scenes-no-default.txt + SceneConverterImplementationTestFiles/info-scenes-objects.txt SceneConverterImplementationTestFiles/info-skins.txt SceneConverterImplementationTestFiles/info-textures.txt) target_include_directories(SceneToolsSceneConverterImple___Test PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$) diff --git a/src/Magnum/SceneTools/Test/SceneConverterImplementationTest.cpp b/src/Magnum/SceneTools/Test/SceneConverterImplementationTest.cpp index fbfe112f5..507f729a9 100644 --- a/src/Magnum/SceneTools/Test/SceneConverterImplementationTest.cpp +++ b/src/Magnum/SceneTools/Test/SceneConverterImplementationTest.cpp @@ -77,11 +77,13 @@ const struct { const char* name; const char* arg; const char* expected; + Int defaultScene; bool printVisualCheck; } InfoScenesObjectsData[]{ - {"", "--info", "info-scenes-objects.txt", true}, - {"only scenes", "--info-scenes", "info-scenes.txt", false}, - {"only objects", "--info-objects", "info-objects.txt", false}, + {"", "--info", "info-scenes-objects.txt", 1, true}, + {"only scenes", "--info-scenes", "info-scenes.txt", 0, false}, + {"only scenes, no default scene", "--info-scenes", "info-scenes-no-default.txt", -1, false}, + {"only objects", "--info-objects", "info-objects.txt", 1, false} }; const struct { @@ -197,6 +199,8 @@ void SceneConverterImplementationTest::infoScenesObjects() { setTestCaseDescription(data.name); struct Importer: Trade::AbstractImporter { + explicit Importer(Int defaultScene): _defaultScene{defaultScene} {} + Trade::ImporterFeatures doFeatures() const override { return {}; } bool doIsOpened() const override { return true; } void doClose() override {} @@ -205,6 +209,9 @@ void SceneConverterImplementationTest::infoScenesObjects() { thus not listed. Object 5 has no fields and thus not listed either. */ UnsignedLong doObjectCount() const override { return 10; } UnsignedInt doSceneCount() const override { return 2; } + Int doDefaultScene() const override { + return _defaultScene; + } Containers::String doSceneName(UnsignedInt id) override { return id == 0 ? "A simple scene" : ""; } @@ -262,7 +269,9 @@ void SceneConverterImplementationTest::infoScenesObjects() { /* No need to fill the data, zero-init is fine */ {7, 3}, {}, {2, 4, 4}, {} }}; - } importer; + + Int _defaultScene; + } importer{data.defaultScene}; const char* argv[]{"", data.arg}; CORRADE_VERIFY(_infoArgs.tryParse(Containers::arraySize(argv), argv)); @@ -1185,6 +1194,8 @@ void SceneConverterImplementationTest::infoError() { return {}; } + Int doDefaultScene() const override { return 1; } + UnsignedInt doAnimationCount() const override { return 2; } Containers::Optional doAnimation(UnsignedInt id) override { Error{} << "Animation" << id << "error!"; @@ -1293,6 +1304,9 @@ void SceneConverterImplementationTest::infoError() { "Can't import 2D image 0 level 0\n" "Image 1 error!\n" "Can't import 2D image 1 level 0\n" + /* It should print the default scene even if all of them failed to + import */ + "Default scene: 1\n" /* ... and it should print all info output after the errors */ "Object 0: A name\n"); } diff --git a/src/Magnum/SceneTools/Test/SceneConverterImplementationTestFiles/info-scenes-no-default.txt b/src/Magnum/SceneTools/Test/SceneConverterImplementationTestFiles/info-scenes-no-default.txt new file mode 100644 index 000000000..acd050cc3 --- /dev/null +++ b/src/Magnum/SceneTools/Test/SceneConverterImplementationTestFiles/info-scenes-no-default.txt @@ -0,0 +1,11 @@ +Scene 0: A simple scene + Bound: 4 objects @ UnsignedInt (0.1 kB) + Fields: + Parent @ Int, 3 entries + Mesh @ UnsignedInt, OrderedMapping, 4 entries +Scene 1: + Bound: 8 objects @ UnsignedByte (0.0 kB, ExternallyOwned|Mutable) + Fields: + Custom(42:) @ Double, 2 entries + Custom(1337:DirectionVector) @ Short[3], 3 entries +Total scene data size: 0.1 kB diff --git a/src/Magnum/SceneTools/Test/SceneConverterImplementationTestFiles/info-scenes-objects.txt b/src/Magnum/SceneTools/Test/SceneConverterImplementationTestFiles/info-scenes-objects.txt index 781d20482..1faf222df 100644 --- a/src/Magnum/SceneTools/Test/SceneConverterImplementationTestFiles/info-scenes-objects.txt +++ b/src/Magnum/SceneTools/Test/SceneConverterImplementationTestFiles/info-scenes-objects.txt @@ -1,3 +1,4 @@ +Default scene: 1 Scene 0: A simple scene Bound: 4 objects @ UnsignedInt (0.1 kB) Fields: diff --git a/src/Magnum/SceneTools/Test/SceneConverterImplementationTestFiles/info-scenes.txt b/src/Magnum/SceneTools/Test/SceneConverterImplementationTestFiles/info-scenes.txt index acd050cc3..be4b3da29 100644 --- a/src/Magnum/SceneTools/Test/SceneConverterImplementationTestFiles/info-scenes.txt +++ b/src/Magnum/SceneTools/Test/SceneConverterImplementationTestFiles/info-scenes.txt @@ -1,3 +1,4 @@ +Default scene: 0 Scene 0: A simple scene Bound: 4 objects @ UnsignedInt (0.1 kB) Fields: