@ -27,6 +27,7 @@
# include <Corrade/Containers/Optional.h>
# include <Corrade/Containers/Optional.h>
# include <Corrade/PluginManager/Manager.h>
# include <Corrade/PluginManager/Manager.h>
# include <Corrade/TestSuite/Tester.h>
# include <Corrade/TestSuite/Tester.h>
# include <Corrade/Utility/Format.h>
# include "Magnum/Math/Vector3.h"
# include "Magnum/Math/Vector3.h"
# include "Magnum/Trade/AbstractImporter.h"
# include "Magnum/Trade/AbstractImporter.h"
@ -39,7 +40,8 @@ namespace Magnum { namespace Trade { namespace Test { namespace {
struct AnySceneImporterTest : TestSuite : : Tester {
struct AnySceneImporterTest : TestSuite : : Tester {
explicit AnySceneImporterTest ( ) ;
explicit AnySceneImporterTest ( ) ;
void obj ( ) ;
void load ( ) ;
void detect ( ) ;
void unknown ( ) ;
void unknown ( ) ;
@ -47,10 +49,37 @@ struct AnySceneImporterTest: TestSuite::Tester {
PluginManager : : Manager < AbstractImporter > _manager { " nonexistent " } ;
PluginManager : : Manager < AbstractImporter > _manager { " nonexistent " } ;
} ;
} ;
constexpr struct {
const char * name ;
const char * filename ;
} LoadData [ ] {
{ " OBJ " , OBJ_FILE } ,
} ;
constexpr struct {
const char * name ;
const char * filename ;
const char * plugin ;
} DetectData [ ] {
{ " Blender " , " suzanne.blend " , " BlenderImporter " } ,
{ " COLLADA " , " xml.dae " , " ColladaImporter " } ,
{ " FBX " , " autodesk.fbx " , " FbxImporter " } ,
{ " glTF " , " khronos.gltf " , " GltfImporter " } ,
{ " glTF binary " , " khronos.glb " , " GlbImporter " } ,
{ " OpenGEX " , " eric.ogex " , " OpenGexImporter " } ,
{ " Stanford PLY " , " bunny.ply " , " StanfordImporter " } ,
{ " STL " , " robot.stl " , " StlImporter " } ,
/* Not testing everything, only the most important ones */
} ;
AnySceneImporterTest : : AnySceneImporterTest ( ) {
AnySceneImporterTest : : AnySceneImporterTest ( ) {
addTests ( { & AnySceneImporterTest : : obj ,
addInstancedTests ( { & AnySceneImporterTest : : load } ,
Containers : : arraySize ( LoadData ) ) ;
addInstancedTests ( { & AnySceneImporterTest : : detect } ,
Containers : : arraySize ( DetectData ) ) ;
& AnySceneImporterTest : : unknown } ) ;
addTests ( { & AnySceneImporterTest : : unknown } ) ;
/* Load the plugin directly from the build tree. Otherwise it's static and
/* Load the plugin directly from the build tree. Otherwise it's static and
already loaded . */
already loaded . */
@ -63,12 +92,15 @@ AnySceneImporterTest::AnySceneImporterTest() {
# endif
# endif
}
}
void AnySceneImporterTest : : obj ( ) {
void AnySceneImporterTest : : load ( ) {
auto & & data = LoadData [ testCaseInstanceId ( ) ] ;
setTestCaseDescription ( data . name ) ;
if ( ! ( _manager . loadState ( " ObjImporter " ) & PluginManager : : LoadState : : Loaded ) )
if ( ! ( _manager . loadState ( " ObjImporter " ) & PluginManager : : LoadState : : Loaded ) )
CORRADE_SKIP ( " ObjImporter plugin not enabled, cannot test " ) ;
CORRADE_SKIP ( " ObjImporter plugin not enabled, cannot test " ) ;
Containers : : Pointer < AbstractImporter > importer = _manager . instantiate ( " AnySceneImporter " ) ;
Containers : : Pointer < AbstractImporter > importer = _manager . instantiate ( " AnySceneImporter " ) ;
CORRADE_VERIFY ( importer - > openFile ( OBJ_FILE ) ) ;
CORRADE_VERIFY ( importer - > openFile ( data . filename ) ) ;
/* Check only size, as it is good enough proof that it is working */
/* Check only size, as it is good enough proof that it is working */
Containers : : Optional < MeshData3D > mesh = importer - > mesh3D ( 0 ) ;
Containers : : Optional < MeshData3D > mesh = importer - > mesh3D ( 0 ) ;
@ -76,6 +108,25 @@ void AnySceneImporterTest::obj() {
CORRADE_COMPARE ( mesh - > positions ( 0 ) . size ( ) , 3 ) ;
CORRADE_COMPARE ( mesh - > positions ( 0 ) . size ( ) , 3 ) ;
}
}
void AnySceneImporterTest : : detect ( ) {
auto & & data = DetectData [ testCaseInstanceId ( ) ] ;
setTestCaseDescription ( data . name ) ;
Containers : : Pointer < AbstractImporter > importer = _manager . instantiate ( " AnySceneImporter " ) ;
std : : ostringstream out ;
Error redirectError { & out } ;
CORRADE_VERIFY ( ! importer - > openFile ( data . filename ) ) ;
/* Can't use raw string literals in macros on GCC 4.8 */
# ifndef CORRADE_PLUGINMANAGER_NO_DYNAMIC_PLUGIN_SUPPORT
CORRADE_COMPARE ( out . str ( ) , Utility : : formatString (
" PluginManager::Manager::load(): plugin {0} is not static and was not found in nonexistent \n Trade::AnySceneImporter::openFile(): cannot load {0} plugin \n " , data . plugin ) ) ;
# else
CORRADE_COMPARE ( out . str ( ) , Utility : : formatString (
" PluginManager::Manager::load(): plugin {0} was not found \n Trade::AnySceneImporter::openFile(): cannot load {0} plugin \n " , data . plugin ) ) ;
# endif
}
void AnySceneImporterTest : : unknown ( ) {
void AnySceneImporterTest : : unknown ( ) {
std : : ostringstream output ;
std : : ostringstream output ;
Error redirectError { & output } ;
Error redirectError { & output } ;