From a67755921bce085150f8cc17cf7b14628387b780 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Wed, 8 Jun 2022 12:42:20 +0200 Subject: [PATCH] AnySceneImporter: test meshAttribute[For]Name() propagation. It should work even if no file is opened, but that ... crashes. --- .../Test/AnySceneImporterTest.cpp | 33 +++++++++++++++- .../AnySceneImporter/Test/CMakeLists.txt | 1 + .../Test/mesh-custom-attribute.gltf | 38 +++++++++++++++++++ 3 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 src/MagnumPlugins/AnySceneImporter/Test/mesh-custom-attribute.gltf diff --git a/src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp b/src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp index 2542068a2..5416b2416 100644 --- a/src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp +++ b/src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp @@ -64,6 +64,9 @@ struct AnySceneImporterTest: TestSuite::Tester { void propagateConfigurationUnknown(); void propagateFileCallback(); + void meshAttributeName(); + void meshAttributeNameNoFileOpened(); + /* Explicitly forbid system-wide plugin dependencies */ PluginManager::Manager _manager{"nonexistent"}; }; @@ -108,7 +111,10 @@ AnySceneImporterTest::AnySceneImporterTest() { &AnySceneImporterTest::propagateFlags, &AnySceneImporterTest::propagateConfiguration, &AnySceneImporterTest::propagateConfigurationUnknown, - &AnySceneImporterTest::propagateFileCallback}); + &AnySceneImporterTest::propagateFileCallback, + + &AnySceneImporterTest::meshAttributeName, + &AnySceneImporterTest::meshAttributeNameNoFileOpened}); /* Load the plugin directly from the build tree. Otherwise it's static and already loaded. */ @@ -307,6 +313,31 @@ void AnySceneImporterTest::propagateFileCallback() { CORRADE_VERIFY(!importer->isOpened()); } +void AnySceneImporterTest::meshAttributeName() { + PluginManager::Manager manager{MAGNUM_PLUGINS_IMPORTER_INSTALL_DIR}; + #ifdef ANYSCENEIMPORTER_PLUGIN_FILENAME + CORRADE_VERIFY(manager.load(ANYSCENEIMPORTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); + #endif + + if(manager.load("GltfImporter") < PluginManager::LoadState::Loaded) + CORRADE_SKIP("GltfImporter plugin can't be loaded."); + + Containers::Pointer importer = manager.instantiate("AnySceneImporter"); + + CORRADE_VERIFY(importer->openFile(Utility::Path::join(ANYSCENEIMPORTER_TEST_DIR, "mesh-custom-attribute.gltf"))); + CORRADE_COMPARE(importer->meshAttributeForName("_TBN"), meshAttributeCustom(2)); + CORRADE_COMPARE(importer->meshAttributeForName("nonexistent"), MeshAttribute{}); + CORRADE_COMPARE(importer->meshAttributeName(meshAttributeCustom(2)), "_TBN"); + CORRADE_COMPARE(importer->meshAttributeName(meshAttributeCustom(3)), ""); +} + +void AnySceneImporterTest::meshAttributeNameNoFileOpened() { + Containers::Pointer importer = _manager.instantiate("AnySceneImporter"); + + CORRADE_COMPARE(importer->meshAttributeForName(""), MeshAttribute{}); + CORRADE_COMPARE(importer->meshAttributeName(meshAttributeCustom(0)), ""); +} + }}}} CORRADE_TEST_MAIN(Magnum::Trade::Test::AnySceneImporterTest) diff --git a/src/MagnumPlugins/AnySceneImporter/Test/CMakeLists.txt b/src/MagnumPlugins/AnySceneImporter/Test/CMakeLists.txt index e55e92eb7..33046b858 100644 --- a/src/MagnumPlugins/AnySceneImporter/Test/CMakeLists.txt +++ b/src/MagnumPlugins/AnySceneImporter/Test/CMakeLists.txt @@ -56,6 +56,7 @@ corrade_add_test(AnySceneImporterTest AnySceneImporterTest.cpp LIBRARIES MagnumTrade FILES ${PROJECT_SOURCE_DIR}/src/MagnumPlugins/ObjImporter/Test/pointMesh.obj + mesh-custom-attribute.gltf triangle.ply) target_include_directories(AnySceneImporterTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$) if(MAGNUM_ANYSCENEIMPORTER_BUILD_STATIC) diff --git a/src/MagnumPlugins/AnySceneImporter/Test/mesh-custom-attribute.gltf b/src/MagnumPlugins/AnySceneImporter/Test/mesh-custom-attribute.gltf new file mode 100644 index 000000000..dd2ba698b --- /dev/null +++ b/src/MagnumPlugins/AnySceneImporter/Test/mesh-custom-attribute.gltf @@ -0,0 +1,38 @@ +{ + "asset": { + "version": "2.0" + }, + "meshes": [ + { + "primitives": [ + { + "attributes": { + "_TBN": 0 + } + } + ] + } + ], + "accessors": [ + { + "bufferView": 0, + "componentType": 5120, + "normalized": true, + "count": 1, + "type": "MAT3" + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteLength": 36 + } + ], + "buffers": [ + { + "byteLength": 36, + "comment": "base64.b64encode(bytes(36))", + "uri": "data:application/octet-stream;base64,AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + ] +}