Browse Source

AnySceneConverter,AnySceneImporter: expand tests with external plugins.

The AnyShaderConverter tests are doing this already anyway, so why not
here as well.
pull/527/head
Vladimír Vondruš 5 years ago
parent
commit
d6a3be571b
  1. 66
      src/MagnumPlugins/AnySceneConverter/Test/AnySceneConverterTest.cpp
  2. 6
      src/MagnumPlugins/AnySceneConverter/Test/CMakeLists.txt
  3. 15
      src/MagnumPlugins/AnySceneConverter/Test/configure.h.cmake
  4. 25
      src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp
  5. 5
      src/MagnumPlugins/AnySceneImporter/Test/CMakeLists.txt
  6. 15
      src/MagnumPlugins/AnySceneImporter/Test/configure.h.cmake
  7. BIN
      src/MagnumPlugins/AnySceneImporter/Test/triangle.ply

66
src/MagnumPlugins/AnySceneConverter/Test/AnySceneConverterTest.cpp

@ -25,12 +25,15 @@
#include <sstream>
#include <Corrade/Containers/StringView.h>
#include <Corrade/Containers/StringStl.h>
#include <Corrade/PluginManager/Manager.h>
#include <Corrade/TestSuite/Tester.h>
#include <Corrade/TestSuite/Compare/File.h>
#include <Corrade/Utility/Directory.h>
#include <Corrade/Utility/DebugStl.h>
#include <Corrade/Utility/FormatStl.h>
#include "Magnum/Math/Vector3.h"
#include "Magnum/Trade/AbstractSceneConverter.h"
#include "Magnum/Trade/MeshData.h"
@ -82,7 +85,33 @@ AnySceneConverterTest::AnySceneConverterTest() {
}
void AnySceneConverterTest::convert() {
CORRADE_SKIP("No scene converter plugin available to test.");
PluginManager::Manager<AbstractSceneConverter> manager{MAGNUM_PLUGINS_SCENECONVERTER_INSTALL_DIR};
#ifdef ANYSCENECONVERTER_PLUGIN_FILENAME
CORRADE_VERIFY(manager.load(ANYSCENECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
#endif
if(manager.loadState("StanfordSceneConverter") < PluginManager::LoadState::Loaded)
CORRADE_SKIP("StanfordSceneConverter plugin can't be loaded.");
const std::string filename = Utility::Directory::join(ANYSCENECONVERTER_TEST_OUTPUT_DIR, "file.ply");
if(Utility::Directory::exists(filename))
CORRADE_VERIFY(Utility::Directory::rm(filename));
const Vector3 positions[] {
{-0.5f, -0.5f, 0.0f},
{ 0.5f, -0.5f, 0.0f},
{ 0.0f, 0.5f, 0.0f}
};
const Trade::MeshData mesh{MeshPrimitive::Triangles, {}, positions, {
Trade::MeshAttributeData{Trade::MeshAttribute::Position, Containers::arrayView(positions)}
}};
Containers::Pointer<AbstractSceneConverter> converter = manager.instantiate("AnySceneConverter");
CORRADE_VERIFY(converter->convertToFile(mesh, filename));
/* This file is reused in AnySceneImporter tests, so it's worth to save it
here */
CORRADE_COMPARE_AS(filename, PLY_FILE, TestSuite::Compare::File);
}
void AnySceneConverterTest::detect() {
@ -115,7 +144,40 @@ void AnySceneConverterTest::unknown() {
}
void AnySceneConverterTest::propagateFlags() {
CORRADE_SKIP("No plugin available to test.");
PluginManager::Manager<AbstractSceneConverter> manager{MAGNUM_PLUGINS_SCENECONVERTER_INSTALL_DIR};
#ifdef ANYSCENECONVERTER_PLUGIN_FILENAME
CORRADE_VERIFY(manager.load(ANYSCENECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
#endif
if(manager.loadState("StanfordSceneConverter") < PluginManager::LoadState::Loaded)
CORRADE_SKIP("StanfordSceneConverter plugin can't be loaded.");
const std::string filename = Utility::Directory::join(ANYSCENECONVERTER_TEST_OUTPUT_DIR, "file.ply");
const Vector3 positions[] {
{-0.5f, -0.5f, 0.0f},
{ 0.5f, -0.5f, 0.0f},
{ 0.0f, 0.5f, 0.0f}
};
const Trade::MeshData mesh{MeshPrimitive::Triangles, {}, positions, {
Trade::MeshAttributeData{Trade::MeshAttribute::Position, Containers::arrayView(positions)}
}};
Containers::Pointer<AbstractSceneConverter> converter = manager.instantiate("AnySceneConverter");
converter->setFlags(SceneConverterFlag::Verbose);
std::ostringstream out;
{
Debug redirectOutput{&out};
CORRADE_VERIFY(converter->convertToFile(mesh, filename));
CORRADE_VERIFY(Utility::Directory::exists(filename));
}
CORRADE_COMPARE(out.str(),
"Trade::AnySceneConverter::convertToFile(): using StanfordSceneConverter\n");
/* We tested AnySceneConverter's verbose output, but can't actually test
the flag propagation in any way yet */
CORRADE_SKIP("No plugin with verbose output available to test flag propagation.");
}
}}}}

6
src/MagnumPlugins/AnySceneConverter/Test/CMakeLists.txt

@ -25,8 +25,10 @@
if(CORRADE_TARGET_EMSCRIPTEN OR CORRADE_TARGET_ANDROID)
set(ANYSCENECONVERTER_TEST_OUTPUT_DIR "write")
set(PLY_FILE triangle.ply)
else()
set(ANYSCENECONVERTER_TEST_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
set(PLY_FILE ${PROJECT_SOURCE_DIR}/src/MagnumPlugins/AnySceneImporter/Test/triangle.ply)
endif()
# CMake before 3.8 has broken $<TARGET_FILE*> expressions for iOS (see
@ -47,7 +49,9 @@ file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/configure.h
INPUT ${CMAKE_CURRENT_BINARY_DIR}/configure.h.in)
corrade_add_test(AnySceneConverterTest AnySceneConverterTest.cpp
LIBRARIES MagnumTrade)
LIBRARIES MagnumTrade
FILES
../../AnySceneImporter/Test/triangle.ply)
target_include_directories(AnySceneConverterTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>)
if(MAGNUM_ANYSCENECONVERTER_BUILD_STATIC)
target_link_libraries(AnySceneConverterTest PRIVATE AnySceneConverter)

15
src/MagnumPlugins/AnySceneConverter/Test/configure.h.cmake

@ -25,3 +25,18 @@
#cmakedefine ANYSCENECONVERTER_PLUGIN_FILENAME "${ANYSCENECONVERTER_PLUGIN_FILENAME}"
#define ANYSCENECONVERTER_TEST_OUTPUT_DIR "${ANYSCENECONVERTER_TEST_OUTPUT_DIR}"
#define PLY_FILE "${PLY_FILE}"
#ifdef CORRADE_TARGET_WINDOWS
#ifdef CORRADE_IS_DEBUG_BUILD
#define MAGNUM_PLUGINS_SCENECONVERTER_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${MAGNUM_PLUGINS_SCENECONVERTER_DEBUG_BINARY_INSTALL_DIR}"
#else
#define MAGNUM_PLUGINS_SCENECONVERTER_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${MAGNUM_PLUGINS_SCENECONVERTER_RELEASE_BINARY_INSTALL_DIR}"
#endif
#else
#ifdef CORRADE_IS_DEBUG_BUILD
#define MAGNUM_PLUGINS_SCENECONVERTER_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${MAGNUM_PLUGINS_SCENECONVERTER_DEBUG_LIBRARY_INSTALL_DIR}"
#else
#define MAGNUM_PLUGINS_SCENECONVERTER_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${MAGNUM_PLUGINS_SCENECONVERTER_RELEASE_LIBRARY_INSTALL_DIR}"
#endif
#endif

25
src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp

@ -182,24 +182,31 @@ void AnySceneImporterTest::unknown() {
}
void AnySceneImporterTest::propagateFlags() {
if(!(_manager.loadState("ObjImporter") & PluginManager::LoadState::Loaded))
CORRADE_SKIP("ObjImporter plugin not enabled, cannot test");
PluginManager::Manager<AbstractImporter> manager{MAGNUM_PLUGINS_IMPORTER_INSTALL_DIR};
#ifdef ANYSCENEIMPORTER_PLUGIN_FILENAME
CORRADE_VERIFY(manager.load(ANYSCENEIMPORTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
#endif
Containers::Pointer<AbstractImporter> importer = _manager.instantiate("AnySceneImporter");
if(manager.load("AssimpImporter") < PluginManager::LoadState::Loaded)
CORRADE_SKIP("AssimpImporter plugin can't be loaded.");
/* Ensure Assimp is used for PLY files and not our StanfordImporter */
manager.setPreferredPlugins("StanfordImporter", {"AssimpImporter"});
Containers::Pointer<AbstractImporter> importer = manager.instantiate("AnySceneImporter");
importer->setFlags(ImporterFlag::Verbose);
std::ostringstream out;
{
Debug redirectOutput{&out};
CORRADE_VERIFY(importer->openFile(OBJ_FILE));
CORRADE_VERIFY(importer->openFile(PLY_FILE));
CORRADE_VERIFY(importer->mesh(0));
}
CORRADE_COMPARE(out.str(),
"Trade::AnySceneImporter::openFile(): using ObjImporter\n");
/* We tested AnySceneImporter's verbose output, but can't actually test
the flag propagation in any way yet */
CORRADE_SKIP("No plugin with verbose output available to test flag propagation.");
Containers::StringView expected =
"Trade::AnySceneImporter::openFile(): using StanfordImporter (provided by AssimpImporter)\n"
"Trade::AssimpImporter: Info, T0: Load " PLY_FILE "\n";
/** @todo use Compare::StringPrefix(?) when it exists */
CORRADE_COMPARE(out.str().substr(0, expected.size()), expected);
}
}}}}

5
src/MagnumPlugins/AnySceneImporter/Test/CMakeLists.txt

@ -25,8 +25,10 @@
if(CORRADE_TARGET_EMSCRIPTEN OR CORRADE_TARGET_ANDROID)
set(OBJ_FILE pointMesh.obj)
set(PLY_FILE triangle.ply)
else()
set(OBJ_FILE ${PROJECT_SOURCE_DIR}/src/MagnumPlugins/ObjImporter/Test/pointMesh.obj)
set(PLY_FILE ${CMAKE_CURRENT_SOURCE_DIR}/triangle.ply)
endif()
# CMake before 3.8 has broken $<TARGET_FILE*> expressions for iOS (see
@ -49,7 +51,8 @@ file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/configure.h
corrade_add_test(AnySceneImporterTest AnySceneImporterTest.cpp
LIBRARIES MagnumTrade
FILES
../../ObjImporter/Test/pointMesh.obj)
../../ObjImporter/Test/pointMesh.obj
triangle.ply)
target_include_directories(AnySceneImporterTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>)
if(MAGNUM_ANYSCENEIMPORTER_BUILD_STATIC)
target_link_libraries(AnySceneImporterTest PRIVATE AnySceneImporter)

15
src/MagnumPlugins/AnySceneImporter/Test/configure.h.cmake

@ -26,3 +26,18 @@
#cmakedefine ANYSCENEIMPORTER_PLUGIN_FILENAME "${ANYSCENEIMPORTER_PLUGIN_FILENAME}"
#cmakedefine OBJIMPORTER_PLUGIN_FILENAME "${OBJIMPORTER_PLUGIN_FILENAME}"
#define OBJ_FILE "${OBJ_FILE}"
#define PLY_FILE "${PLY_FILE}"
#ifdef CORRADE_TARGET_WINDOWS
#ifdef CORRADE_IS_DEBUG_BUILD
#define MAGNUM_PLUGINS_IMPORTER_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${MAGNUM_PLUGINS_IMPORTER_DEBUG_BINARY_INSTALL_DIR}"
#else
#define MAGNUM_PLUGINS_IMPORTER_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${MAGNUM_PLUGINS_IMPORTER_RELEASE_BINARY_INSTALL_DIR}"
#endif
#else
#ifdef CORRADE_IS_DEBUG_BUILD
#define MAGNUM_PLUGINS_IMPORTER_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${MAGNUM_PLUGINS_IMPORTER_DEBUG_LIBRARY_INSTALL_DIR}"
#else
#define MAGNUM_PLUGINS_IMPORTER_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${MAGNUM_PLUGINS_IMPORTER_RELEASE_LIBRARY_INSTALL_DIR}"
#endif
#endif

BIN
src/MagnumPlugins/AnySceneImporter/Test/triangle.ply

Binary file not shown.
Loading…
Cancel
Save