From 7b2a56a5e9ada4d591b46c2af7d35229421d26aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Thu, 7 Apr 2022 20:56:46 +0200 Subject: [PATCH] Trade: test growable and non-owning deleters in all SceneConverter cases. --- .../Trade/Test/AbstractSceneConverterTest.cpp | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/Magnum/Trade/Test/AbstractSceneConverterTest.cpp b/src/Magnum/Trade/Test/AbstractSceneConverterTest.cpp index 31241c3b9..7a5818138 100644 --- a/src/Magnum/Trade/Test/AbstractSceneConverterTest.cpp +++ b/src/Magnum/Trade/Test/AbstractSceneConverterTest.cpp @@ -66,6 +66,8 @@ struct AbstractSceneConverterTest: TestSuite::Tester { void convertMeshToData(); void convertMeshToDataNotImplemented(); + void convertMeshToDataNonOwningDeleter(); + void convertMeshToDataGrowableDeleter(); void convertMeshToDataCustomDeleter(); void convertMeshToFile(); @@ -102,6 +104,8 @@ AbstractSceneConverterTest::AbstractSceneConverterTest() { &AbstractSceneConverterTest::convertMeshToData, &AbstractSceneConverterTest::convertMeshToDataNotImplemented, + &AbstractSceneConverterTest::convertMeshToDataNonOwningDeleter, + &AbstractSceneConverterTest::convertMeshToDataGrowableDeleter, &AbstractSceneConverterTest::convertMeshToDataCustomDeleter, &AbstractSceneConverterTest::convertMeshToFile, @@ -421,6 +425,44 @@ void AbstractSceneConverterTest::convertMeshToDataNotImplemented() { CORRADE_COMPARE(out.str(), "Trade::AbstractSceneConverter::convertToData(): mesh conversion advertised but not implemented\n"); } +void AbstractSceneConverterTest::convertMeshToDataNonOwningDeleter() { + struct: AbstractSceneConverter { + SceneConverterFeatures doFeatures() const override { return SceneConverterFeature::ConvertMeshToData; } + + Containers::Optional> doConvertToData(const MeshData&) override { + return Containers::Array{data, 5, Implementation::nonOwnedArrayDeleter}; + } + + char data[5]{'h', 'e', 'l', 'l', 'o'}; + } converter; + + Containers::Optional> data = converter.convertToData(MeshData{MeshPrimitive::Triangles, 6}); + CORRADE_VERIFY(data); + CORRADE_COMPARE_AS(*data, + Containers::arrayView({'h', 'e', 'l', 'l', 'o'}), + TestSuite::Compare::Container); +} + +void AbstractSceneConverterTest::convertMeshToDataGrowableDeleter() { + struct: AbstractSceneConverter { + SceneConverterFeatures doFeatures() const override { return SceneConverterFeature::ConvertMeshToData; } + + Containers::Optional> doConvertToData(const MeshData&) override { + Containers::Array out; + Containers::arrayAppend(out, {'h', 'e', 'l', 'l', 'o'}); + + /* GCC 4.8 and Clang 3.8 need extra help here */ + return Containers::optional(std::move(out)); + } + } converter; + + Containers::Optional> data = converter.convertToData(MeshData{MeshPrimitive::Triangles, 6}); + CORRADE_VERIFY(data); + CORRADE_COMPARE_AS(*data, + Containers::arrayView({'h', 'e', 'l', 'l', 'o'}), + TestSuite::Compare::Container); +} + void AbstractSceneConverterTest::convertMeshToDataCustomDeleter() { #ifdef CORRADE_NO_ASSERT CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions");