@ -34,6 +34,7 @@
# include "Magnum/FileCallback.h"
# include "Magnum/FileCallback.h"
# include "Magnum/Trade/AbstractImporter.h"
# include "Magnum/Trade/AbstractImporter.h"
# include "Magnum/Trade/AnimationData.h"
# include "Magnum/Trade/AnimationData.h"
# include "Magnum/Trade/ArrayAllocator.h"
# include "Magnum/Trade/CameraData.h"
# include "Magnum/Trade/CameraData.h"
# include "Magnum/Trade/ImageData.h"
# include "Magnum/Trade/ImageData.h"
# include "Magnum/Trade/LightData.h"
# include "Magnum/Trade/LightData.h"
@ -107,6 +108,7 @@ struct AbstractImporterTest: TestSuite::Tester {
void animationNoFile ( ) ;
void animationNoFile ( ) ;
void animationOutOfRange ( ) ;
void animationOutOfRange ( ) ;
void animationNonOwningDeleters ( ) ;
void animationNonOwningDeleters ( ) ;
void animationGrowableDeleters ( ) ;
void animationCustomDataDeleter ( ) ;
void animationCustomDataDeleter ( ) ;
void animationCustomTrackDeleter ( ) ;
void animationCustomTrackDeleter ( ) ;
@ -170,6 +172,7 @@ struct AbstractImporterTest: TestSuite::Tester {
void meshNoFile ( ) ;
void meshNoFile ( ) ;
void meshOutOfRange ( ) ;
void meshOutOfRange ( ) ;
void meshNonOwningDeleters ( ) ;
void meshNonOwningDeleters ( ) ;
void meshGrowableDeleters ( ) ;
void meshCustomIndexDataDeleter ( ) ;
void meshCustomIndexDataDeleter ( ) ;
void meshCustomVertexDataDeleter ( ) ;
void meshCustomVertexDataDeleter ( ) ;
void meshCustomAttributesDeleter ( ) ;
void meshCustomAttributesDeleter ( ) ;
@ -243,6 +246,7 @@ struct AbstractImporterTest: TestSuite::Tester {
void image1DOutOfRange ( ) ;
void image1DOutOfRange ( ) ;
void image1DLevelOutOfRange ( ) ;
void image1DLevelOutOfRange ( ) ;
void image1DNonOwningDeleter ( ) ;
void image1DNonOwningDeleter ( ) ;
void image1DGrowableDeleter ( ) ;
void image1DCustomDeleter ( ) ;
void image1DCustomDeleter ( ) ;
void image2D ( ) ;
void image2D ( ) ;
@ -262,6 +266,7 @@ struct AbstractImporterTest: TestSuite::Tester {
void image2DOutOfRange ( ) ;
void image2DOutOfRange ( ) ;
void image2DLevelOutOfRange ( ) ;
void image2DLevelOutOfRange ( ) ;
void image2DNonOwningDeleter ( ) ;
void image2DNonOwningDeleter ( ) ;
void image2DGrowableDeleter ( ) ;
void image2DCustomDeleter ( ) ;
void image2DCustomDeleter ( ) ;
void image3D ( ) ;
void image3D ( ) ;
@ -281,6 +286,7 @@ struct AbstractImporterTest: TestSuite::Tester {
void image3DOutOfRange ( ) ;
void image3DOutOfRange ( ) ;
void image3DLevelOutOfRange ( ) ;
void image3DLevelOutOfRange ( ) ;
void image3DNonOwningDeleter ( ) ;
void image3DNonOwningDeleter ( ) ;
void image3DGrowableDeleter ( ) ;
void image3DCustomDeleter ( ) ;
void image3DCustomDeleter ( ) ;
void importerState ( ) ;
void importerState ( ) ;
@ -346,6 +352,7 @@ AbstractImporterTest::AbstractImporterTest() {
& AbstractImporterTest : : animationNoFile ,
& AbstractImporterTest : : animationNoFile ,
& AbstractImporterTest : : animationOutOfRange ,
& AbstractImporterTest : : animationOutOfRange ,
& AbstractImporterTest : : animationNonOwningDeleters ,
& AbstractImporterTest : : animationNonOwningDeleters ,
& AbstractImporterTest : : animationGrowableDeleters ,
& AbstractImporterTest : : animationCustomDataDeleter ,
& AbstractImporterTest : : animationCustomDataDeleter ,
& AbstractImporterTest : : animationCustomTrackDeleter ,
& AbstractImporterTest : : animationCustomTrackDeleter ,
@ -409,6 +416,7 @@ AbstractImporterTest::AbstractImporterTest() {
& AbstractImporterTest : : meshNoFile ,
& AbstractImporterTest : : meshNoFile ,
& AbstractImporterTest : : meshOutOfRange ,
& AbstractImporterTest : : meshOutOfRange ,
& AbstractImporterTest : : meshNonOwningDeleters ,
& AbstractImporterTest : : meshNonOwningDeleters ,
& AbstractImporterTest : : meshGrowableDeleters ,
& AbstractImporterTest : : meshCustomIndexDataDeleter ,
& AbstractImporterTest : : meshCustomIndexDataDeleter ,
& AbstractImporterTest : : meshCustomVertexDataDeleter ,
& AbstractImporterTest : : meshCustomVertexDataDeleter ,
& AbstractImporterTest : : meshCustomAttributesDeleter ,
& AbstractImporterTest : : meshCustomAttributesDeleter ,
@ -482,6 +490,7 @@ AbstractImporterTest::AbstractImporterTest() {
& AbstractImporterTest : : image1DOutOfRange ,
& AbstractImporterTest : : image1DOutOfRange ,
& AbstractImporterTest : : image1DLevelOutOfRange ,
& AbstractImporterTest : : image1DLevelOutOfRange ,
& AbstractImporterTest : : image1DNonOwningDeleter ,
& AbstractImporterTest : : image1DNonOwningDeleter ,
& AbstractImporterTest : : image1DGrowableDeleter ,
& AbstractImporterTest : : image1DCustomDeleter ,
& AbstractImporterTest : : image1DCustomDeleter ,
& AbstractImporterTest : : image2D ,
& AbstractImporterTest : : image2D ,
@ -501,6 +510,7 @@ AbstractImporterTest::AbstractImporterTest() {
& AbstractImporterTest : : image2DOutOfRange ,
& AbstractImporterTest : : image2DOutOfRange ,
& AbstractImporterTest : : image2DLevelOutOfRange ,
& AbstractImporterTest : : image2DLevelOutOfRange ,
& AbstractImporterTest : : image2DNonOwningDeleter ,
& AbstractImporterTest : : image2DNonOwningDeleter ,
& AbstractImporterTest : : image2DGrowableDeleter ,
& AbstractImporterTest : : image2DCustomDeleter ,
& AbstractImporterTest : : image2DCustomDeleter ,
& AbstractImporterTest : : image3D ,
& AbstractImporterTest : : image3D ,
@ -520,6 +530,7 @@ AbstractImporterTest::AbstractImporterTest() {
& AbstractImporterTest : : image3DOutOfRange ,
& AbstractImporterTest : : image3DOutOfRange ,
& AbstractImporterTest : : image3DLevelOutOfRange ,
& AbstractImporterTest : : image3DLevelOutOfRange ,
& AbstractImporterTest : : image3DNonOwningDeleter ,
& AbstractImporterTest : : image3DNonOwningDeleter ,
& AbstractImporterTest : : image3DGrowableDeleter ,
& AbstractImporterTest : : image3DCustomDeleter ,
& AbstractImporterTest : : image3DCustomDeleter ,
& AbstractImporterTest : : importerState ,
& AbstractImporterTest : : importerState ,
@ -1405,6 +1416,25 @@ void AbstractImporterTest::animationNonOwningDeleters() {
CORRADE_COMPARE ( static_cast < const void * > ( data - > data ( ) ) , importer . data ) ;
CORRADE_COMPARE ( static_cast < const void * > ( data - > data ( ) ) , importer . data ) ;
}
}
void AbstractImporterTest : : animationGrowableDeleters ( ) {
struct : AbstractImporter {
ImporterFeatures doFeatures ( ) const override { return { } ; }
bool doIsOpened ( ) const override { return true ; }
void doClose ( ) override { }
UnsignedInt doAnimationCount ( ) const override { return 1 ; }
Containers : : Optional < AnimationData > doAnimation ( UnsignedInt ) override {
Containers : : Array < char > data ;
Containers : : arrayAppend < ArrayAllocator > ( data , ' \x37 ' ) ;
return AnimationData { std : : move ( data ) , { AnimationTrackData { } } } ;
}
} importer ;
auto data = importer . animation ( 0 ) ;
CORRADE_VERIFY ( data ) ;
CORRADE_COMPARE ( data - > data ( ) [ 0 ] , ' \x37 ' ) ;
}
void AbstractImporterTest : : animationCustomDataDeleter ( ) {
void AbstractImporterTest : : animationCustomDataDeleter ( ) {
struct : AbstractImporter {
struct : AbstractImporter {
ImporterFeatures doFeatures ( ) const override { return { } ; }
ImporterFeatures doFeatures ( ) const override { return { } ; }
@ -2300,6 +2330,33 @@ void AbstractImporterTest::meshNonOwningDeleters() {
CORRADE_COMPARE ( static_cast < const void * > ( data - > indexData ( ) ) , importer . indexData ) ;
CORRADE_COMPARE ( static_cast < const void * > ( data - > indexData ( ) ) , importer . indexData ) ;
}
}
void AbstractImporterTest : : meshGrowableDeleters ( ) {
struct : AbstractImporter {
ImporterFeatures doFeatures ( ) const override { return { } ; }
bool doIsOpened ( ) const override { return true ; }
void doClose ( ) override { }
UnsignedInt doMeshCount ( ) const override { return 1 ; }
Containers : : Optional < MeshData > doMesh ( UnsignedInt ) override {
Containers : : Array < char > indexData ;
Containers : : arrayAppend < ArrayAllocator > ( indexData , ' \xab ' ) ;
Containers : : Array < Vector3 > vertexData ;
Containers : : arrayAppend < ArrayAllocator > ( vertexData , Vector3 { } ) ;
MeshIndexData indices { MeshIndexType : : UnsignedByte , indexData } ;
MeshAttributeData positions { MeshAttribute : : Position , Containers : : arrayView ( vertexData ) } ;
return MeshData { MeshPrimitive : : Triangles ,
std : : move ( indexData ) , indices ,
Containers : : arrayAllocatorCast < char , ArrayAllocator > ( std : : move ( vertexData ) ) , { positions } } ;
}
} importer ;
auto data = importer . mesh ( 0 ) ;
CORRADE_VERIFY ( data ) ;
CORRADE_COMPARE ( data - > indexData ( ) [ 0 ] , ' \xab ' ) ;
CORRADE_COMPARE ( data - > vertexData ( ) . size ( ) , 12 ) ;
}
void AbstractImporterTest : : meshCustomIndexDataDeleter ( ) {
void AbstractImporterTest : : meshCustomIndexDataDeleter ( ) {
struct : AbstractImporter {
struct : AbstractImporter {
ImporterFeatures doFeatures ( ) const override { return { } ; }
ImporterFeatures doFeatures ( ) const override { return { } ; }
@ -3344,6 +3401,25 @@ void AbstractImporterTest::image1DNonOwningDeleter() {
CORRADE_COMPARE ( static_cast < const void * > ( data - > data ( ) ) , importer . data ) ;
CORRADE_COMPARE ( static_cast < const void * > ( data - > data ( ) ) , importer . data ) ;
}
}
void AbstractImporterTest : : image1DGrowableDeleter ( ) {
struct : AbstractImporter {
ImporterFeatures doFeatures ( ) const override { return { } ; }
bool doIsOpened ( ) const override { return true ; }
void doClose ( ) override { }
UnsignedInt doImage1DCount ( ) const override { return 1 ; }
Containers : : Optional < ImageData1D > doImage1D ( UnsignedInt , UnsignedInt ) override {
Containers : : Array < char > data ;
Containers : : arrayAppend < ArrayAllocator > ( data , ' \xff ' ) ;
return ImageData1D { PixelFormat : : RGBA8Unorm , { } , std : : move ( data ) } ;
}
} importer ;
auto data = importer . image1D ( 0 ) ;
CORRADE_VERIFY ( data ) ;
CORRADE_COMPARE ( data - > data ( ) [ 0 ] , ' \xff ' ) ;
}
void AbstractImporterTest : : image1DCustomDeleter ( ) {
void AbstractImporterTest : : image1DCustomDeleter ( ) {
struct : AbstractImporter {
struct : AbstractImporter {
ImporterFeatures doFeatures ( ) const override { return { } ; }
ImporterFeatures doFeatures ( ) const override { return { } ; }
@ -3630,6 +3706,25 @@ void AbstractImporterTest::image2DNonOwningDeleter() {
CORRADE_COMPARE ( static_cast < const void * > ( data - > data ( ) ) , importer . data ) ;
CORRADE_COMPARE ( static_cast < const void * > ( data - > data ( ) ) , importer . data ) ;
}
}
void AbstractImporterTest : : image2DGrowableDeleter ( ) {
struct : AbstractImporter {
ImporterFeatures doFeatures ( ) const override { return { } ; }
bool doIsOpened ( ) const override { return true ; }
void doClose ( ) override { }
UnsignedInt doImage2DCount ( ) const override { return 1 ; }
Containers : : Optional < ImageData2D > doImage2D ( UnsignedInt , UnsignedInt ) override {
Containers : : Array < char > data ;
Containers : : arrayAppend < ArrayAllocator > ( data , ' \xff ' ) ;
return ImageData2D { PixelFormat : : RGBA8Unorm , { } , std : : move ( data ) } ;
}
} importer ;
auto data = importer . image2D ( 0 ) ;
CORRADE_VERIFY ( data ) ;
CORRADE_COMPARE ( data - > data ( ) [ 0 ] , ' \xff ' ) ;
}
void AbstractImporterTest : : image2DCustomDeleter ( ) {
void AbstractImporterTest : : image2DCustomDeleter ( ) {
struct : AbstractImporter {
struct : AbstractImporter {
ImporterFeatures doFeatures ( ) const override { return { } ; }
ImporterFeatures doFeatures ( ) const override { return { } ; }
@ -3917,6 +4012,25 @@ void AbstractImporterTest::image3DNonOwningDeleter() {
CORRADE_COMPARE ( static_cast < const void * > ( data - > data ( ) ) , importer . data ) ;
CORRADE_COMPARE ( static_cast < const void * > ( data - > data ( ) ) , importer . data ) ;
}
}
void AbstractImporterTest : : image3DGrowableDeleter ( ) {
struct : AbstractImporter {
ImporterFeatures doFeatures ( ) const override { return { } ; }
bool doIsOpened ( ) const override { return true ; }
void doClose ( ) override { }
UnsignedInt doImage3DCount ( ) const override { return 1 ; }
Containers : : Optional < ImageData3D > doImage3D ( UnsignedInt , UnsignedInt ) override {
Containers : : Array < char > data ;
Containers : : arrayAppend < ArrayAllocator > ( data , ' \xff ' ) ;
return ImageData3D { PixelFormat : : RGBA8Unorm , { } , std : : move ( data ) } ;
}
} importer ;
auto data = importer . image3D ( 0 ) ;
CORRADE_VERIFY ( data ) ;
CORRADE_COMPARE ( data - > data ( ) [ 0 ] , ' \xff ' ) ;
}
void AbstractImporterTest : : image3DCustomDeleter ( ) {
void AbstractImporterTest : : image3DCustomDeleter ( ) {
struct : AbstractImporter {
struct : AbstractImporter {
ImporterFeatures doFeatures ( ) const override { return { } ; }
ImporterFeatures doFeatures ( ) const override { return { } ; }