Browse Source

ShaderTools,Trade: properly test failure states of all plugin APIs.

Until now, these were only transitively tested in concrete plugin
implementations, meaning that if the base implementation would have an
error (such as accessing a null optional), it would only get discovered
when building a plugin, worst case a plugin in a completely different
repo.
pull/559/head
Vladimír Vondruš 4 years ago
parent
commit
ee27d42a37
  1. 185
      src/Magnum/ShaderTools/Test/AbstractConverterTest.cpp
  2. 618
      src/Magnum/Trade/Test/AbstractImageConverterTest.cpp
  3. 330
      src/Magnum/Trade/Test/AbstractImporterTest.cpp
  4. 82
      src/Magnum/Trade/Test/AbstractSceneConverterTest.cpp

185
src/Magnum/ShaderTools/Test/AbstractConverterTest.cpp

@ -70,12 +70,14 @@ struct AbstractConverterTest: TestSuite::Tester {
void setDebugInfoLevelNotImplemented(); void setDebugInfoLevelNotImplemented();
void validateData(); void validateData();
void validateDataFailed();
void validateDataNotSupported(); void validateDataNotSupported();
void validateDataNotImplemented(); void validateDataNotImplemented();
void validateDataPreprocessOnly(); void validateDataPreprocessOnly();
void validateDataCustomStringDeleter(); void validateDataCustomStringDeleter();
void validateFile(); void validateFile();
void validateFileFailed();
void validateFileAsData(); void validateFileAsData();
void validateFileAsDataNotFound(); void validateFileAsDataNotFound();
void validateFileNotSupported(); void validateFileNotSupported();
@ -84,6 +86,7 @@ struct AbstractConverterTest: TestSuite::Tester {
void validateFileCustomStringDeleter(); void validateFileCustomStringDeleter();
void convertDataToData(); void convertDataToData();
void convertDataToDataFailed();
void convertDataToDataNotSupported(); void convertDataToDataNotSupported();
void convertDataToDataNotImplemented(); void convertDataToDataNotImplemented();
void convertDataToDataCustomDeleter(); void convertDataToDataCustomDeleter();
@ -94,13 +97,16 @@ struct AbstractConverterTest: TestSuite::Tester {
void convertDataToFileNotImplemented(); void convertDataToFileNotImplemented();
void convertFileToFile(); void convertFileToFile();
void convertFileToFileFailed();
void convertFileToFileThroughData(); void convertFileToFileThroughData();
void convertFileToFileThroughDataNotFound(); void convertFileToFileThroughDataNotFound();
void convertFileToFileThroughDataFailed(); void convertFileToFileThroughDataFailed();
void convertFileToFileThroughDataNotWritable(); void convertFileToFileThroughDataNotWritable();
void convertFileToFileNotSupported(); void convertFileToFileNotSupported();
void convertFileToFileNotImplemented(); void convertFileToFileNotImplemented();
void convertFileToData(); void convertFileToData();
void convertFileToDataFailed();
void convertFileToDataAsData(); void convertFileToDataAsData();
void convertFileToDataAsDataNotFound(); void convertFileToDataAsDataNotFound();
void convertFileToDataNotSupported(); void convertFileToDataNotSupported();
@ -108,6 +114,7 @@ struct AbstractConverterTest: TestSuite::Tester {
void convertFileToDataCustomDeleter(); void convertFileToDataCustomDeleter();
void linkDataToData(); void linkDataToData();
void linkDataToDataFailed();
void linkDataToDataNotSupported(); void linkDataToDataNotSupported();
void linkDataToDataNotImplemented(); void linkDataToDataNotImplemented();
void linkDataToDataPreprocessOnly(); void linkDataToDataPreprocessOnly();
@ -122,6 +129,7 @@ struct AbstractConverterTest: TestSuite::Tester {
void linkDataToFileNoData(); void linkDataToFileNoData();
void linkFilesToFile(); void linkFilesToFile();
void linkFilesToFileFailed();
void linkFilesToFileThroughData(); void linkFilesToFileThroughData();
void linkFilesToFileThroughDataNotFound(); void linkFilesToFileThroughDataNotFound();
void linkFilesToFileThroughDataFailed(); void linkFilesToFileThroughDataFailed();
@ -130,7 +138,9 @@ struct AbstractConverterTest: TestSuite::Tester {
void linkFilesToFileNotImplemented(); void linkFilesToFileNotImplemented();
void linkFilesToFilePreprocessOnly(); void linkFilesToFilePreprocessOnly();
void linkFilesToFileNoFile(); void linkFilesToFileNoFile();
void linkFilesToData(); void linkFilesToData();
void linkFilesToDataFailed();
void linkFilesToDataAsData(); void linkFilesToDataAsData();
void linkFilesToDataAsDataNotFound(); void linkFilesToDataAsDataNotFound();
void linkFilesToDataNotSupported(); void linkFilesToDataNotSupported();
@ -210,12 +220,14 @@ AbstractConverterTest::AbstractConverterTest() {
&AbstractConverterTest::setDebugInfoLevelNotImplemented, &AbstractConverterTest::setDebugInfoLevelNotImplemented,
&AbstractConverterTest::validateData, &AbstractConverterTest::validateData,
&AbstractConverterTest::validateDataFailed,
&AbstractConverterTest::validateDataNotSupported, &AbstractConverterTest::validateDataNotSupported,
&AbstractConverterTest::validateDataNotImplemented, &AbstractConverterTest::validateDataNotImplemented,
&AbstractConverterTest::validateDataPreprocessOnly, &AbstractConverterTest::validateDataPreprocessOnly,
&AbstractConverterTest::validateDataCustomStringDeleter, &AbstractConverterTest::validateDataCustomStringDeleter,
&AbstractConverterTest::validateFile, &AbstractConverterTest::validateFile,
&AbstractConverterTest::validateFileFailed,
&AbstractConverterTest::validateFileAsData, &AbstractConverterTest::validateFileAsData,
&AbstractConverterTest::validateFileAsDataNotFound, &AbstractConverterTest::validateFileAsDataNotFound,
&AbstractConverterTest::validateFileNotSupported, &AbstractConverterTest::validateFileNotSupported,
@ -224,6 +236,7 @@ AbstractConverterTest::AbstractConverterTest() {
&AbstractConverterTest::validateFileCustomStringDeleter, &AbstractConverterTest::validateFileCustomStringDeleter,
&AbstractConverterTest::convertDataToData, &AbstractConverterTest::convertDataToData,
&AbstractConverterTest::convertDataToDataFailed,
&AbstractConverterTest::convertDataToDataNotSupported, &AbstractConverterTest::convertDataToDataNotSupported,
&AbstractConverterTest::convertDataToDataNotImplemented, &AbstractConverterTest::convertDataToDataNotImplemented,
&AbstractConverterTest::convertDataToDataCustomDeleter, &AbstractConverterTest::convertDataToDataCustomDeleter,
@ -234,13 +247,16 @@ AbstractConverterTest::AbstractConverterTest() {
&AbstractConverterTest::convertDataToFileNotImplemented, &AbstractConverterTest::convertDataToFileNotImplemented,
&AbstractConverterTest::convertFileToFile, &AbstractConverterTest::convertFileToFile,
&AbstractConverterTest::convertFileToFileFailed,
&AbstractConverterTest::convertFileToFileThroughData, &AbstractConverterTest::convertFileToFileThroughData,
&AbstractConverterTest::convertFileToFileThroughDataNotFound, &AbstractConverterTest::convertFileToFileThroughDataNotFound,
&AbstractConverterTest::convertFileToFileThroughDataFailed, &AbstractConverterTest::convertFileToFileThroughDataFailed,
&AbstractConverterTest::convertFileToFileThroughDataNotWritable, &AbstractConverterTest::convertFileToFileThroughDataNotWritable,
&AbstractConverterTest::convertFileToFileNotSupported, &AbstractConverterTest::convertFileToFileNotSupported,
&AbstractConverterTest::convertFileToFileNotImplemented, &AbstractConverterTest::convertFileToFileNotImplemented,
&AbstractConverterTest::convertFileToData, &AbstractConverterTest::convertFileToData,
&AbstractConverterTest::convertFileToDataFailed,
&AbstractConverterTest::convertFileToDataAsData, &AbstractConverterTest::convertFileToDataAsData,
&AbstractConverterTest::convertFileToDataAsDataNotFound, &AbstractConverterTest::convertFileToDataAsDataNotFound,
&AbstractConverterTest::convertFileToDataNotSupported, &AbstractConverterTest::convertFileToDataNotSupported,
@ -248,6 +264,7 @@ AbstractConverterTest::AbstractConverterTest() {
&AbstractConverterTest::convertFileToDataCustomDeleter, &AbstractConverterTest::convertFileToDataCustomDeleter,
&AbstractConverterTest::linkDataToData, &AbstractConverterTest::linkDataToData,
&AbstractConverterTest::linkDataToDataFailed,
&AbstractConverterTest::linkDataToDataNotSupported, &AbstractConverterTest::linkDataToDataNotSupported,
&AbstractConverterTest::linkDataToDataNotImplemented, &AbstractConverterTest::linkDataToDataNotImplemented,
&AbstractConverterTest::linkDataToDataPreprocessOnly, &AbstractConverterTest::linkDataToDataPreprocessOnly,
@ -262,6 +279,7 @@ AbstractConverterTest::AbstractConverterTest() {
&AbstractConverterTest::linkDataToFileNoData, &AbstractConverterTest::linkDataToFileNoData,
&AbstractConverterTest::linkFilesToFile, &AbstractConverterTest::linkFilesToFile,
&AbstractConverterTest::linkFilesToFileFailed,
&AbstractConverterTest::linkFilesToFileThroughData, &AbstractConverterTest::linkFilesToFileThroughData,
&AbstractConverterTest::linkFilesToFileThroughDataNotFound, &AbstractConverterTest::linkFilesToFileThroughDataNotFound,
&AbstractConverterTest::linkFilesToFileThroughDataFailed, &AbstractConverterTest::linkFilesToFileThroughDataFailed,
@ -270,7 +288,9 @@ AbstractConverterTest::AbstractConverterTest() {
&AbstractConverterTest::linkFilesToFileNotImplemented, &AbstractConverterTest::linkFilesToFileNotImplemented,
&AbstractConverterTest::linkFilesToFilePreprocessOnly, &AbstractConverterTest::linkFilesToFilePreprocessOnly,
&AbstractConverterTest::linkFilesToFileNoFile, &AbstractConverterTest::linkFilesToFileNoFile,
&AbstractConverterTest::linkFilesToData, &AbstractConverterTest::linkFilesToData,
&AbstractConverterTest::linkFilesToDataFailed,
&AbstractConverterTest::linkFilesToDataAsData, &AbstractConverterTest::linkFilesToDataAsData,
&AbstractConverterTest::linkFilesToDataAsDataNotFound, &AbstractConverterTest::linkFilesToDataAsDataNotFound,
&AbstractConverterTest::linkFilesToDataNotSupported, &AbstractConverterTest::linkFilesToDataNotSupported,
@ -690,6 +710,26 @@ void AbstractConverterTest::validateData() {
CORRADE_COMPARE(out.second(), "Yes, this is valid"); CORRADE_COMPARE(out.second(), "Yes, this is valid");
} }
void AbstractConverterTest::validateDataFailed() {
struct: AbstractConverter {
ConverterFeatures doFeatures() const override {
return ConverterFeature::ValidateData;
}
void doSetInputFormat(Format, Containers::StringView) override {}
void doSetOutputFormat(Format, Containers::StringView) override {}
Containers::Pair<bool, Containers::String> doValidateData(Stage, Containers::ArrayView<const char>) override {
return {};
}
} converter;
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.validateData(Stage::MeshTask, nullptr).first());
CORRADE_COMPARE(out.str(), "");
}
void AbstractConverterTest::validateDataNotSupported() { void AbstractConverterTest::validateDataNotSupported() {
#ifdef CORRADE_NO_ASSERT #ifdef CORRADE_NO_ASSERT
CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions"); CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions");
@ -789,6 +829,26 @@ void AbstractConverterTest::validateFile() {
CORRADE_COMPARE(out.second(), "Yes, this is valid"); CORRADE_COMPARE(out.second(), "Yes, this is valid");
} }
void AbstractConverterTest::validateFileFailed() {
struct: AbstractConverter {
ConverterFeatures doFeatures() const override {
return ConverterFeature::ValidateFile;
}
void doSetInputFormat(Format, Containers::StringView) override {}
void doSetOutputFormat(Format, Containers::StringView) override {}
Containers::Pair<bool, Containers::String> doValidateFile(Stage, Containers::StringView) override {
return {};
}
} converter;
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.validateFile(Stage::MeshTask, {}).first());
CORRADE_COMPARE(out.str(), "");
}
void AbstractConverterTest::validateFileAsData() { void AbstractConverterTest::validateFileAsData() {
struct: AbstractConverter { struct: AbstractConverter {
ConverterFeatures doFeatures() const override { ConverterFeatures doFeatures() const override {
@ -933,6 +993,26 @@ void AbstractConverterTest::convertDataToData() {
TestSuite::Compare::Container); TestSuite::Compare::Container);
} }
void AbstractConverterTest::convertDataToDataFailed() {
struct: AbstractConverter {
ConverterFeatures doFeatures() const override {
return ConverterFeature::ConvertData;
}
void doSetInputFormat(Format, Containers::StringView) override {}
void doSetOutputFormat(Format, Containers::StringView) override {}
Containers::Optional<Containers::Array<char>> doConvertDataToData(Stage, Containers::ArrayView<const char>) override {
return {};
}
} converter;
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convertDataToData({}, nullptr));
CORRADE_COMPARE(out.str(), "");
}
void AbstractConverterTest::convertDataToDataNotSupported() { void AbstractConverterTest::convertDataToDataNotSupported() {
#ifdef CORRADE_NO_ASSERT #ifdef CORRADE_NO_ASSERT
CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions"); CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions");
@ -1132,6 +1212,26 @@ void AbstractConverterTest::convertFileToFile() {
TestSuite::Compare::FileToString); TestSuite::Compare::FileToString);
} }
void AbstractConverterTest::convertFileToFileFailed() {
struct: AbstractConverter {
ConverterFeatures doFeatures() const override {
return ConverterFeature::ConvertFile;
}
void doSetInputFormat(Format, Containers::StringView) override {}
void doSetOutputFormat(Format, Containers::StringView) override {}
bool doConvertFileToFile(Stage, Containers::StringView, Containers::StringView) override {
return {};
}
} converter;
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convertFileToFile({}, Utility::Path::join(SHADERTOOLS_TEST_DIR, "file.dat"), Utility::Path::join(SHADERTOOLS_TEST_OUTPUT_DIR, "file.dat")));
CORRADE_COMPARE(out.str(), "");
}
void AbstractConverterTest::convertFileToFileThroughData() { void AbstractConverterTest::convertFileToFileThroughData() {
struct: AbstractConverter { struct: AbstractConverter {
ConverterFeatures doFeatures() const override { ConverterFeatures doFeatures() const override {
@ -1287,6 +1387,26 @@ void AbstractConverterTest::convertFileToData() {
TestSuite::Compare::Container); TestSuite::Compare::Container);
} }
void AbstractConverterTest::convertFileToDataFailed() {
struct: AbstractConverter {
ConverterFeatures doFeatures() const override {
return ConverterFeature::ConvertData;
}
void doSetInputFormat(Format, Containers::StringView) override {}
void doSetOutputFormat(Format, Containers::StringView) override {}
Containers::Optional<Containers::Array<char>> doConvertFileToData(Stage, Containers::StringView) override {
return {};
}
} converter;
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convertFileToData({}, Utility::Path::join(SHADERTOOLS_TEST_DIR, "file.dat")));
CORRADE_COMPARE(out.str(), "");
}
void AbstractConverterTest::convertFileToDataAsData() { void AbstractConverterTest::convertFileToDataAsData() {
struct: AbstractConverter { struct: AbstractConverter {
ConverterFeatures doFeatures() const override { ConverterFeatures doFeatures() const override {
@ -1419,6 +1539,27 @@ void AbstractConverterTest::linkDataToData() {
TestSuite::Compare::Container); TestSuite::Compare::Container);
} }
void AbstractConverterTest::linkDataToDataFailed() {
struct: AbstractConverter {
ConverterFeatures doFeatures() const override {
return ConverterFeature::LinkData;
}
void doSetInputFormat(Format, Containers::StringView) override {}
void doSetOutputFormat(Format, Containers::StringView) override {}
Containers::Optional<Containers::Array<char>> doLinkDataToData(Containers::ArrayView<const Containers::Pair<Stage, Containers::ArrayView<const char>>>) override {
return {};
}
} converter;
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
/* {{}} makes GCC 4.8 warn about zero as null pointer constant */
converter.linkDataToData({Containers::Pair<Stage, Containers::ArrayView<const void>>{}});
CORRADE_COMPARE(out.str(), "");
}
void AbstractConverterTest::linkDataToDataNotSupported() { void AbstractConverterTest::linkDataToDataNotSupported() {
#ifdef CORRADE_NO_ASSERT #ifdef CORRADE_NO_ASSERT
CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions"); CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions");
@ -1715,6 +1856,28 @@ void AbstractConverterTest::linkFilesToFile() {
TestSuite::Compare::FileToString); TestSuite::Compare::FileToString);
} }
void AbstractConverterTest::linkFilesToFileFailed() {
struct: AbstractConverter {
ConverterFeatures doFeatures() const override {
return ConverterFeature::LinkFile;
}
void doSetInputFormat(Format, Containers::StringView) override {}
void doSetOutputFormat(Format, Containers::StringView) override {}
bool doLinkFilesToFile(Containers::ArrayView<const Containers::Pair<Stage, Containers::StringView>>, Containers::StringView) override {
return {};
}
} converter;
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.linkFilesToFile({
{Stage::Vertex, Utility::Path::join(SHADERTOOLS_TEST_DIR, "another.dat")}
}, Utility::Path::join(SHADERTOOLS_TEST_OUTPUT_DIR, "file.dat")));
CORRADE_COMPARE(out.str(), "");
}
void AbstractConverterTest::linkFilesToFileThroughData() { void AbstractConverterTest::linkFilesToFileThroughData() {
struct: AbstractConverter { struct: AbstractConverter {
ConverterFeatures doFeatures() const override { ConverterFeatures doFeatures() const override {
@ -1933,6 +2096,28 @@ void AbstractConverterTest::linkFilesToData() {
TestSuite::Compare::Container); TestSuite::Compare::Container);
} }
void AbstractConverterTest::linkFilesToDataFailed() {
struct: AbstractConverter {
ConverterFeatures doFeatures() const override {
return ConverterFeature::LinkData;
}
void doSetInputFormat(Format, Containers::StringView) override {}
void doSetOutputFormat(Format, Containers::StringView) override {}
Containers::Optional<Containers::Array<char>> doLinkFilesToData(Containers::ArrayView<const Containers::Pair<Stage, Containers::StringView>>) override {
return {};
}
} converter;
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.linkFilesToData({
{Stage::Vertex, Utility::Path::join(SHADERTOOLS_TEST_DIR, "another.dat")}
}));
CORRADE_COMPARE(out.str(), "");
}
void AbstractConverterTest::linkFilesToDataAsData() { void AbstractConverterTest::linkFilesToDataAsData() {
struct: AbstractConverter { struct: AbstractConverter {
ConverterFeatures doFeatures() const override { ConverterFeatures doFeatures() const override {

618
src/Magnum/Trade/Test/AbstractImageConverterTest.cpp

@ -59,6 +59,9 @@ struct AbstractImageConverterTest: TestSuite::Tester {
void convert1D(); void convert1D();
void convert2D(); void convert2D();
void convert3D(); void convert3D();
void convert1DFailed();
void convert2DFailed();
void convert3DFailed();
void convert1DNotImplemented(); void convert1DNotImplemented();
void convert2DNotImplemented(); void convert2DNotImplemented();
void convert3DNotImplemented(); void convert3DNotImplemented();
@ -69,6 +72,9 @@ struct AbstractImageConverterTest: TestSuite::Tester {
void convertCompressed1D(); void convertCompressed1D();
void convertCompressed2D(); void convertCompressed2D();
void convertCompressed3D(); void convertCompressed3D();
void convertCompressed1DFailed();
void convertCompressed2DFailed();
void convertCompressed3DFailed();
void convertCompressed1DNotImplemented(); void convertCompressed1DNotImplemented();
void convertCompressed2DNotImplemented(); void convertCompressed2DNotImplemented();
void convertCompressed3DNotImplemented(); void convertCompressed3DNotImplemented();
@ -83,6 +89,9 @@ struct AbstractImageConverterTest: TestSuite::Tester {
void convert1DToData(); void convert1DToData();
void convert2DToData(); void convert2DToData();
void convert3DToData(); void convert3DToData();
void convert1DToDataFailed();
void convert2DToDataFailed();
void convert3DToDataFailed();
/* 1D/2D/3D share the same image validity check function, so only verify /* 1D/2D/3D share the same image validity check function, so only verify
one dimension thoroughly and for others just that the check is used */ one dimension thoroughly and for others just that the check is used */
void convert1DToDataInvalidImage(); void convert1DToDataInvalidImage();
@ -99,6 +108,9 @@ struct AbstractImageConverterTest: TestSuite::Tester {
void convertCompressed1DToData(); void convertCompressed1DToData();
void convertCompressed2DToData(); void convertCompressed2DToData();
void convertCompressed3DToData(); void convertCompressed3DToData();
void convertCompressed1DToDataFailed();
void convertCompressed2DToDataFailed();
void convertCompressed3DToDataFailed();
/* Compressed share the same image validity check function with /* Compressed share the same image validity check function with
uncompressed, so only verify it's used */ uncompressed, so only verify it's used */
void convertCompressed1DToDataInvalidImage(); void convertCompressed1DToDataInvalidImage();
@ -118,6 +130,9 @@ struct AbstractImageConverterTest: TestSuite::Tester {
void convertLevels1DToData(); void convertLevels1DToData();
void convertLevels2DToData(); void convertLevels2DToData();
void convertLevels3DToData(); void convertLevels3DToData();
void convertLevels1DToDataFailed();
void convertLevels2DToDataFailed();
void convertLevels3DToDataFailed();
/* 1D/2D/3D share the same image list validity check function, so only /* 1D/2D/3D share the same image list validity check function, so only
verify one dimension thoroughly and for others just that the check is verify one dimension thoroughly and for others just that the check is
used */ used */
@ -138,6 +153,9 @@ struct AbstractImageConverterTest: TestSuite::Tester {
void convertCompressedLevels1DToData(); void convertCompressedLevels1DToData();
void convertCompressedLevels2DToData(); void convertCompressedLevels2DToData();
void convertCompressedLevels3DToData(); void convertCompressedLevels3DToData();
void convertCompressedLevels1DToDataFailed();
void convertCompressedLevels2DToDataFailed();
void convertCompressedLevels3DToDataFailed();
/* Compressed have different format checks for uncompressed so it's tested /* Compressed have different format checks for uncompressed so it's tested
again; 1D/2D/3D share the same image list validity check function, so again; 1D/2D/3D share the same image list validity check function, so
only verify one dimension thoroughly and for others just that the check only verify one dimension thoroughly and for others just that the check
@ -166,6 +184,9 @@ struct AbstractImageConverterTest: TestSuite::Tester {
void convert1DToFile(); void convert1DToFile();
void convert2DToFile(); void convert2DToFile();
void convert3DToFile(); void convert3DToFile();
void convert1DToFileFailed();
void convert2DToFileFailed();
void convert3DToFileFailed();
void convert1DToFileThroughData(); void convert1DToFileThroughData();
void convert2DToFileThroughData(); void convert2DToFileThroughData();
void convert3DToFileThroughData(); void convert3DToFileThroughData();
@ -187,6 +208,9 @@ struct AbstractImageConverterTest: TestSuite::Tester {
void convertCompressed1DToFile(); void convertCompressed1DToFile();
void convertCompressed2DToFile(); void convertCompressed2DToFile();
void convertCompressed3DToFile(); void convertCompressed3DToFile();
void convertCompressed1DToFileFailed();
void convertCompressed2DToFileFailed();
void convertCompressed3DToFileFailed();
void convertCompressed1DToFileThroughData(); void convertCompressed1DToFileThroughData();
void convertCompressed2DToFileThroughData(); void convertCompressed2DToFileThroughData();
void convertCompressed3DToFileThroughData(); void convertCompressed3DToFileThroughData();
@ -212,6 +236,9 @@ struct AbstractImageConverterTest: TestSuite::Tester {
void convertLevels1DToFile(); void convertLevels1DToFile();
void convertLevels2DToFile(); void convertLevels2DToFile();
void convertLevels3DToFile(); void convertLevels3DToFile();
void convertLevels1DToFileFailed();
void convertLevels2DToFileFailed();
void convertLevels3DToFileFailed();
void convertLevels1DToFileThroughData(); void convertLevels1DToFileThroughData();
void convertLevels2DToFileThroughData(); void convertLevels2DToFileThroughData();
void convertLevels3DToFileThroughData(); void convertLevels3DToFileThroughData();
@ -233,6 +260,9 @@ struct AbstractImageConverterTest: TestSuite::Tester {
void convertCompressedLevels1DToFile(); void convertCompressedLevels1DToFile();
void convertCompressedLevels2DToFile(); void convertCompressedLevels2DToFile();
void convertCompressedLevels3DToFile(); void convertCompressedLevels3DToFile();
void convertCompressedLevels1DToFileFailed();
void convertCompressedLevels2DToFileFailed();
void convertCompressedLevels3DToFileFailed();
void convertCompressedLevels1DToFileThroughData(); void convertCompressedLevels1DToFileThroughData();
void convertCompressedLevels2DToFileThroughData(); void convertCompressedLevels2DToFileThroughData();
void convertCompressedLevels3DToFileThroughData(); void convertCompressedLevels3DToFileThroughData();
@ -278,6 +308,9 @@ AbstractImageConverterTest::AbstractImageConverterTest() {
&AbstractImageConverterTest::convert1D, &AbstractImageConverterTest::convert1D,
&AbstractImageConverterTest::convert2D, &AbstractImageConverterTest::convert2D,
&AbstractImageConverterTest::convert3D, &AbstractImageConverterTest::convert3D,
&AbstractImageConverterTest::convert1DFailed,
&AbstractImageConverterTest::convert2DFailed,
&AbstractImageConverterTest::convert3DFailed,
&AbstractImageConverterTest::convert1DNotImplemented, &AbstractImageConverterTest::convert1DNotImplemented,
&AbstractImageConverterTest::convert2DNotImplemented, &AbstractImageConverterTest::convert2DNotImplemented,
&AbstractImageConverterTest::convert3DNotImplemented, &AbstractImageConverterTest::convert3DNotImplemented,
@ -288,6 +321,9 @@ AbstractImageConverterTest::AbstractImageConverterTest() {
&AbstractImageConverterTest::convertCompressed1D, &AbstractImageConverterTest::convertCompressed1D,
&AbstractImageConverterTest::convertCompressed2D, &AbstractImageConverterTest::convertCompressed2D,
&AbstractImageConverterTest::convertCompressed3D, &AbstractImageConverterTest::convertCompressed3D,
&AbstractImageConverterTest::convertCompressed1DFailed,
&AbstractImageConverterTest::convertCompressed2DFailed,
&AbstractImageConverterTest::convertCompressed3DFailed,
&AbstractImageConverterTest::convertCompressed1DNotImplemented, &AbstractImageConverterTest::convertCompressed1DNotImplemented,
&AbstractImageConverterTest::convertCompressed2DNotImplemented, &AbstractImageConverterTest::convertCompressed2DNotImplemented,
&AbstractImageConverterTest::convertCompressed3DNotImplemented, &AbstractImageConverterTest::convertCompressed3DNotImplemented,
@ -302,6 +338,9 @@ AbstractImageConverterTest::AbstractImageConverterTest() {
&AbstractImageConverterTest::convert1DToData, &AbstractImageConverterTest::convert1DToData,
&AbstractImageConverterTest::convert2DToData, &AbstractImageConverterTest::convert2DToData,
&AbstractImageConverterTest::convert3DToData, &AbstractImageConverterTest::convert3DToData,
&AbstractImageConverterTest::convert1DToDataFailed,
&AbstractImageConverterTest::convert2DToDataFailed,
&AbstractImageConverterTest::convert3DToDataFailed,
&AbstractImageConverterTest::convert1DToDataInvalidImage, &AbstractImageConverterTest::convert1DToDataInvalidImage,
&AbstractImageConverterTest::convert2DToDataZeroSize, &AbstractImageConverterTest::convert2DToDataZeroSize,
&AbstractImageConverterTest::convert2DToDataNullptr, &AbstractImageConverterTest::convert2DToDataNullptr,
@ -316,6 +355,9 @@ AbstractImageConverterTest::AbstractImageConverterTest() {
&AbstractImageConverterTest::convertCompressed1DToData, &AbstractImageConverterTest::convertCompressed1DToData,
&AbstractImageConverterTest::convertCompressed2DToData, &AbstractImageConverterTest::convertCompressed2DToData,
&AbstractImageConverterTest::convertCompressed3DToData, &AbstractImageConverterTest::convertCompressed3DToData,
&AbstractImageConverterTest::convertCompressed1DToDataFailed,
&AbstractImageConverterTest::convertCompressed2DToDataFailed,
&AbstractImageConverterTest::convertCompressed3DToDataFailed,
&AbstractImageConverterTest::convertCompressed1DToDataInvalidImage, &AbstractImageConverterTest::convertCompressed1DToDataInvalidImage,
&AbstractImageConverterTest::convertCompressed2DToDataInvalidImage, &AbstractImageConverterTest::convertCompressed2DToDataInvalidImage,
&AbstractImageConverterTest::convertCompressed3DToDataInvalidImage, &AbstractImageConverterTest::convertCompressed3DToDataInvalidImage,
@ -333,6 +375,9 @@ AbstractImageConverterTest::AbstractImageConverterTest() {
&AbstractImageConverterTest::convertLevels1DToData, &AbstractImageConverterTest::convertLevels1DToData,
&AbstractImageConverterTest::convertLevels2DToData, &AbstractImageConverterTest::convertLevels2DToData,
&AbstractImageConverterTest::convertLevels3DToData, &AbstractImageConverterTest::convertLevels3DToData,
&AbstractImageConverterTest::convertLevels1DToDataFailed,
&AbstractImageConverterTest::convertLevels2DToDataFailed,
&AbstractImageConverterTest::convertLevels3DToDataFailed,
&AbstractImageConverterTest::convertLevels1DToDataInvalidImage, &AbstractImageConverterTest::convertLevels1DToDataInvalidImage,
&AbstractImageConverterTest::convertLevels2DToDataNoLevels, &AbstractImageConverterTest::convertLevels2DToDataNoLevels,
&AbstractImageConverterTest::convertLevels2DToDataZeroSize, &AbstractImageConverterTest::convertLevels2DToDataZeroSize,
@ -350,6 +395,9 @@ AbstractImageConverterTest::AbstractImageConverterTest() {
&AbstractImageConverterTest::convertCompressedLevels1DToData, &AbstractImageConverterTest::convertCompressedLevels1DToData,
&AbstractImageConverterTest::convertCompressedLevels2DToData, &AbstractImageConverterTest::convertCompressedLevels2DToData,
&AbstractImageConverterTest::convertCompressedLevels3DToData, &AbstractImageConverterTest::convertCompressedLevels3DToData,
&AbstractImageConverterTest::convertCompressedLevels1DToDataFailed,
&AbstractImageConverterTest::convertCompressedLevels2DToDataFailed,
&AbstractImageConverterTest::convertCompressedLevels3DToDataFailed,
&AbstractImageConverterTest::convertCompressedLevels1DToDataInvalidImage, &AbstractImageConverterTest::convertCompressedLevels1DToDataInvalidImage,
&AbstractImageConverterTest::convertCompressedLevels2DToDataNoLevels, &AbstractImageConverterTest::convertCompressedLevels2DToDataNoLevels,
&AbstractImageConverterTest::convertCompressedLevels2DToDataZeroSize, &AbstractImageConverterTest::convertCompressedLevels2DToDataZeroSize,
@ -374,6 +422,9 @@ AbstractImageConverterTest::AbstractImageConverterTest() {
&AbstractImageConverterTest::convert1DToFile, &AbstractImageConverterTest::convert1DToFile,
&AbstractImageConverterTest::convert2DToFile, &AbstractImageConverterTest::convert2DToFile,
&AbstractImageConverterTest::convert3DToFile, &AbstractImageConverterTest::convert3DToFile,
&AbstractImageConverterTest::convert1DToFileFailed,
&AbstractImageConverterTest::convert2DToFileFailed,
&AbstractImageConverterTest::convert3DToFileFailed,
&AbstractImageConverterTest::convert1DToFileThroughData, &AbstractImageConverterTest::convert1DToFileThroughData,
&AbstractImageConverterTest::convert2DToFileThroughData, &AbstractImageConverterTest::convert2DToFileThroughData,
&AbstractImageConverterTest::convert3DToFileThroughData, &AbstractImageConverterTest::convert3DToFileThroughData,
@ -393,6 +444,9 @@ AbstractImageConverterTest::AbstractImageConverterTest() {
&AbstractImageConverterTest::convertCompressed1DToFile, &AbstractImageConverterTest::convertCompressed1DToFile,
&AbstractImageConverterTest::convertCompressed2DToFile, &AbstractImageConverterTest::convertCompressed2DToFile,
&AbstractImageConverterTest::convertCompressed3DToFile, &AbstractImageConverterTest::convertCompressed3DToFile,
&AbstractImageConverterTest::convertCompressed1DToFileFailed,
&AbstractImageConverterTest::convertCompressed2DToFileFailed,
&AbstractImageConverterTest::convertCompressed3DToFileFailed,
&AbstractImageConverterTest::convertCompressed1DToFileThroughData, &AbstractImageConverterTest::convertCompressed1DToFileThroughData,
&AbstractImageConverterTest::convertCompressed2DToFileThroughData, &AbstractImageConverterTest::convertCompressed2DToFileThroughData,
&AbstractImageConverterTest::convertCompressed3DToFileThroughData, &AbstractImageConverterTest::convertCompressed3DToFileThroughData,
@ -416,6 +470,9 @@ AbstractImageConverterTest::AbstractImageConverterTest() {
&AbstractImageConverterTest::convertLevels1DToFile, &AbstractImageConverterTest::convertLevels1DToFile,
&AbstractImageConverterTest::convertLevels2DToFile, &AbstractImageConverterTest::convertLevels2DToFile,
&AbstractImageConverterTest::convertLevels3DToFile, &AbstractImageConverterTest::convertLevels3DToFile,
&AbstractImageConverterTest::convertLevels1DToFileFailed,
&AbstractImageConverterTest::convertLevels2DToFileFailed,
&AbstractImageConverterTest::convertLevels3DToFileFailed,
&AbstractImageConverterTest::convertLevels1DToFileThroughData, &AbstractImageConverterTest::convertLevels1DToFileThroughData,
&AbstractImageConverterTest::convertLevels2DToFileThroughData, &AbstractImageConverterTest::convertLevels2DToFileThroughData,
&AbstractImageConverterTest::convertLevels3DToFileThroughData, &AbstractImageConverterTest::convertLevels3DToFileThroughData,
@ -435,6 +492,9 @@ AbstractImageConverterTest::AbstractImageConverterTest() {
&AbstractImageConverterTest::convertCompressedLevels1DToFile, &AbstractImageConverterTest::convertCompressedLevels1DToFile,
&AbstractImageConverterTest::convertCompressedLevels2DToFile, &AbstractImageConverterTest::convertCompressedLevels2DToFile,
&AbstractImageConverterTest::convertCompressedLevels3DToFile, &AbstractImageConverterTest::convertCompressedLevels3DToFile,
&AbstractImageConverterTest::convertCompressedLevels1DToFileFailed,
&AbstractImageConverterTest::convertCompressedLevels2DToFileFailed,
&AbstractImageConverterTest::convertCompressedLevels3DToFileFailed,
&AbstractImageConverterTest::convertCompressedLevels1DToFileThroughData, &AbstractImageConverterTest::convertCompressedLevels1DToFileThroughData,
&AbstractImageConverterTest::convertCompressedLevels2DToFileThroughData, &AbstractImageConverterTest::convertCompressedLevels2DToFileThroughData,
&AbstractImageConverterTest::convertCompressedLevels3DToFileThroughData, &AbstractImageConverterTest::convertCompressedLevels3DToFileThroughData,
@ -645,6 +705,57 @@ void AbstractImageConverterTest::convert3D() {
CORRADE_COMPARE(actual->size(), (Vector3i{4, 6, 1})); CORRADE_COMPARE(actual->size(), (Vector3i{4, 6, 1}));
} }
void AbstractImageConverterTest::convert1DFailed() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override {
return ImageConverterFeature::Convert1D;
}
Containers::Optional<ImageData1D> doConvert(const ImageView1D&) override {
return {};
}
} converter;
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convert(ImageView1D{PixelFormat::RGBA8Unorm, 1, {nullptr, 4}}));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImageConverterTest::convert2DFailed() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override {
return ImageConverterFeature::Convert2D;
}
Containers::Optional<ImageData2D> doConvert(const ImageView2D&) override {
return {};
}
} converter;
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convert(ImageView2D{PixelFormat::RGBA8Unorm, {1, 1}, {nullptr, 4}}));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImageConverterTest::convert3DFailed() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override {
return ImageConverterFeature::Convert3D;
}
Containers::Optional<ImageData3D> doConvert(const ImageView3D&) override {
return {};
}
} converter;
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convert(ImageView3D{PixelFormat::RGBA8Unorm, {1, 1, 1}, {nullptr, 4}}));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImageConverterTest::convert1DNotImplemented() { void AbstractImageConverterTest::convert1DNotImplemented() {
#ifdef CORRADE_NO_ASSERT #ifdef CORRADE_NO_ASSERT
CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions"); CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions");
@ -789,6 +900,57 @@ void AbstractImageConverterTest::convertCompressed3D() {
CORRADE_COMPARE(actual->size(), (Vector3i{16, 8, 1})); CORRADE_COMPARE(actual->size(), (Vector3i{16, 8, 1}));
} }
void AbstractImageConverterTest::convertCompressed1DFailed() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override {
return ImageConverterFeature::ConvertCompressed1D;
}
Containers::Optional<ImageData1D> doConvert(const CompressedImageView1D&) override {
return {};
}
} converter;
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convert(CompressedImageView1D{CompressedPixelFormat::Bc1RGBAUnorm, 1, {nullptr, 4*4}}));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImageConverterTest::convertCompressed2DFailed() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override {
return ImageConverterFeature::ConvertCompressed2D;
}
Containers::Optional<ImageData2D> doConvert(const CompressedImageView2D&) override {
return {};
}
} converter;
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convert(CompressedImageView2D{CompressedPixelFormat::Bc1RGBAUnorm, {1, 1}, {nullptr, 4*4}}));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImageConverterTest::convertCompressed3DFailed() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override {
return ImageConverterFeature::ConvertCompressed3D;
}
Containers::Optional<ImageData3D> doConvert(const CompressedImageView3D&) override {
return {};
}
} converter;
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convert(CompressedImageView3D{CompressedPixelFormat::Bc1RGBAUnorm, {1, 1, 1}, {nullptr, 4*4}}));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImageConverterTest::convertCompressed1DNotImplemented() { void AbstractImageConverterTest::convertCompressed1DNotImplemented() {
#ifdef CORRADE_NO_ASSERT #ifdef CORRADE_NO_ASSERT
CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions"); CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions");
@ -1026,6 +1188,63 @@ void AbstractImageConverterTest::convert3DToData() {
CORRADE_COMPARE(actual->size(), 48); CORRADE_COMPARE(actual->size(), 48);
} }
void AbstractImageConverterTest::convert1DToDataFailed() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override {
return ImageConverterFeature::Convert1DToData;
}
Containers::Optional<Containers::Array<char>> doConvertToData(const ImageView1D&) override {
return {};
}
} converter;
const char imageData[4]{};
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convertToData(ImageView1D{PixelFormat::RGBA8Unorm, 1, imageData}));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImageConverterTest::convert2DToDataFailed() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override {
return ImageConverterFeature::Convert2DToData;
}
Containers::Optional<Containers::Array<char>> doConvertToData(const ImageView2D&) override {
return {};
}
} converter;
const char imageData[4]{};
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convertToData(ImageView2D{PixelFormat::RGBA8Unorm, {1, 1}, imageData}));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImageConverterTest::convert3DToDataFailed() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override {
return ImageConverterFeature::Convert3DToData;
}
Containers::Optional<Containers::Array<char>> doConvertToData(const ImageView3D&) override {
return {};
}
} converter;
const char imageData[4]{};
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convertToData(ImageView3D{PixelFormat::RGBA8Unorm, {1, 1, 1}, imageData}));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImageConverterTest::convert1DToDataInvalidImage() { void AbstractImageConverterTest::convert1DToDataInvalidImage() {
#ifdef CORRADE_NO_ASSERT #ifdef CORRADE_NO_ASSERT
CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions"); CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions");
@ -1234,6 +1453,63 @@ void AbstractImageConverterTest::convertCompressed3DToData() {
CORRADE_COMPARE(actual->size(), 256); CORRADE_COMPARE(actual->size(), 256);
} }
void AbstractImageConverterTest::convertCompressed1DToDataFailed() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override {
return ImageConverterFeature::ConvertCompressed1DToData;
}
Containers::Optional<Containers::Array<char>> doConvertToData(const CompressedImageView1D&) override {
return {};
}
} converter;
const char imageData[4*4]{};
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convertToData(CompressedImageView1D{CompressedPixelFormat::Bc1RGBAUnorm, 1, imageData}));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImageConverterTest::convertCompressed2DToDataFailed() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override {
return ImageConverterFeature::ConvertCompressed2DToData;
}
Containers::Optional<Containers::Array<char>> doConvertToData(const CompressedImageView2D&) override {
return {};
}
} converter;
const char imageData[4*4]{};
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convertToData(CompressedImageView2D{CompressedPixelFormat::Bc1RGBAUnorm, {1, 1}, imageData}));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImageConverterTest::convertCompressed3DToDataFailed() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override {
return ImageConverterFeature::ConvertCompressed3DToData;
}
Containers::Optional<Containers::Array<char>> doConvertToData(const CompressedImageView3D&) override {
return {};
}
} converter;
const char imageData[4*4]{};
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convertToData(CompressedImageView3D{CompressedPixelFormat::Bc1RGBAUnorm, {1, 1, 1}, imageData}));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImageConverterTest::convertCompressed1DToDataInvalidImage() { void AbstractImageConverterTest::convertCompressed1DToDataInvalidImage() {
#ifdef CORRADE_NO_ASSERT #ifdef CORRADE_NO_ASSERT
CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions"); CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions");
@ -1545,6 +1821,63 @@ void AbstractImageConverterTest::convertLevels3DToData() {
CORRADE_COMPARE(actual->size(), 48*3); CORRADE_COMPARE(actual->size(), 48*3);
} }
void AbstractImageConverterTest::convertLevels1DToDataFailed() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override {
return ImageConverterFeature::ConvertLevels1DToData;
}
Containers::Optional<Containers::Array<char>> doConvertToData(Containers::ArrayView<const ImageView1D>) override {
return {};
}
} converter;
const char imageData[4]{};
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convertToData({ImageView1D{PixelFormat::RGBA8Unorm, 1, imageData}}));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImageConverterTest::convertLevels2DToDataFailed() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override {
return ImageConverterFeature::ConvertLevels2DToData;
}
Containers::Optional<Containers::Array<char>> doConvertToData(Containers::ArrayView<const ImageView2D>) override {
return {};
}
} converter;
const char imageData[4]{};
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convertToData({ImageView2D{PixelFormat::RGBA8Unorm, {1, 1}, imageData}}));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImageConverterTest::convertLevels3DToDataFailed() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override {
return ImageConverterFeature::ConvertLevels3DToData;
}
Containers::Optional<Containers::Array<char>> doConvertToData(Containers::ArrayView<const ImageView3D>) override {
return {};
}
} converter;
const char imageData[4]{};
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convertToData({ImageView3D{PixelFormat::RGBA8Unorm, {1, 1, 1}, imageData}}));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImageConverterTest::convertLevels1DToDataInvalidImage() { void AbstractImageConverterTest::convertLevels1DToDataInvalidImage() {
#ifdef CORRADE_NO_ASSERT #ifdef CORRADE_NO_ASSERT
CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions"); CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions");
@ -1830,6 +2163,63 @@ void AbstractImageConverterTest::convertCompressedLevels3DToData() {
CORRADE_COMPARE(actual->size(), 256*3); CORRADE_COMPARE(actual->size(), 256*3);
} }
void AbstractImageConverterTest::convertCompressedLevels1DToDataFailed() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override {
return ImageConverterFeature::ConvertCompressedLevels1DToData;
}
Containers::Optional<Containers::Array<char>> doConvertToData(Containers::ArrayView<const CompressedImageView1D>) override {
return {};
}
} converter;
const char imageData[4*4]{};
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convertToData({CompressedImageView1D{CompressedPixelFormat::Bc1RGBAUnorm, 1, imageData}}));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImageConverterTest::convertCompressedLevels2DToDataFailed() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override {
return ImageConverterFeature::ConvertCompressedLevels2DToData;
}
Containers::Optional<Containers::Array<char>> doConvertToData(Containers::ArrayView<const CompressedImageView2D>) override {
return {};
}
} converter;
const char imageData[4*4]{};
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convertToData({CompressedImageView2D{CompressedPixelFormat::Bc1RGBAUnorm, {1, 1}, imageData}}));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImageConverterTest::convertCompressedLevels3DToDataFailed() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override {
return ImageConverterFeature::ConvertCompressedLevels3DToData;
}
Containers::Optional<Containers::Array<char>> doConvertToData(Containers::ArrayView<const CompressedImageView3D>) override {
return {};
}
} converter;
const char imageData[4*4]{};
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convertToData({CompressedImageView3D{CompressedPixelFormat::Bc1RGBAUnorm, {1, 1, 1}, imageData}}));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImageConverterTest::convertCompressedLevels1DToDataInvalidImage() { void AbstractImageConverterTest::convertCompressedLevels1DToDataInvalidImage() {
#ifdef CORRADE_NO_ASSERT #ifdef CORRADE_NO_ASSERT
CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions"); CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions");
@ -2179,6 +2569,63 @@ void AbstractImageConverterTest::convert3DToFile() {
"\x0f\x0d\x02", TestSuite::Compare::FileToString); "\x0f\x0d\x02", TestSuite::Compare::FileToString);
} }
void AbstractImageConverterTest::convert1DToFileFailed() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override {
return ImageConverterFeature::Convert1DToFile;
}
bool doConvertToFile(const ImageView1D&, Containers::StringView) override {
return {};
}
} converter;
const char imageData[4]{};
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convertToFile(ImageView1D{PixelFormat::RGBA8Unorm, 1, imageData}, Utility::Path::join(TRADE_TEST_OUTPUT_DIR, "image.out")));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImageConverterTest::convert2DToFileFailed() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override {
return ImageConverterFeature::Convert2DToFile;
}
bool doConvertToFile(const ImageView2D&, Containers::StringView) override {
return {};
}
} converter;
const char imageData[4]{};
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convertToFile(ImageView2D{PixelFormat::RGBA8Unorm, {1, 1}, imageData}, Utility::Path::join(TRADE_TEST_OUTPUT_DIR, "image.out")));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImageConverterTest::convert3DToFileFailed() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override {
return ImageConverterFeature::Convert3DToFile;
}
bool doConvertToFile(const ImageView3D&, Containers::StringView) override {
return {};
}
} converter;
const char imageData[4]{};
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convertToFile(ImageView3D{PixelFormat::RGBA8Unorm, {1, 1, 1}, imageData}, Utility::Path::join(TRADE_TEST_OUTPUT_DIR, "image.out")));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImageConverterTest::convert1DToFileThroughData() { void AbstractImageConverterTest::convert1DToFileThroughData() {
struct: AbstractImageConverter { struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::Convert1DToData; } ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::Convert1DToData; }
@ -2518,6 +2965,63 @@ void AbstractImageConverterTest::convertCompressed3DToFile() {
"\x0f\x0d\x02", TestSuite::Compare::FileToString); "\x0f\x0d\x02", TestSuite::Compare::FileToString);
} }
void AbstractImageConverterTest::convertCompressed1DToFileFailed() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override {
return ImageConverterFeature::ConvertCompressed1DToFile;
}
bool doConvertToFile(const CompressedImageView1D&, Containers::StringView) override {
return {};
}
} converter;
const char imageData[4*4]{};
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convertToFile(CompressedImageView1D{CompressedPixelFormat::Bc1RGBAUnorm, 1, imageData}, Utility::Path::join(TRADE_TEST_OUTPUT_DIR, "image.out")));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImageConverterTest::convertCompressed2DToFileFailed() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override {
return ImageConverterFeature::ConvertCompressed2DToFile;
}
bool doConvertToFile(const CompressedImageView2D&, Containers::StringView) override {
return {};
}
} converter;
const char imageData[4*4]{};
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convertToFile(CompressedImageView2D{CompressedPixelFormat::Bc1RGBAUnorm, {1, 1}, imageData}, Utility::Path::join(TRADE_TEST_OUTPUT_DIR, "image.out")));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImageConverterTest::convertCompressed3DToFileFailed() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override {
return ImageConverterFeature::ConvertCompressed3DToFile;
}
bool doConvertToFile(const CompressedImageView3D&, Containers::StringView) override {
return {};
}
} converter;
const char imageData[4*4]{};
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convertToFile(CompressedImageView3D{CompressedPixelFormat::Bc1RGBAUnorm, {1, 1, 1}, imageData}, Utility::Path::join(TRADE_TEST_OUTPUT_DIR, "image.out")));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImageConverterTest::convertCompressed1DToFileThroughData() { void AbstractImageConverterTest::convertCompressed1DToFileThroughData() {
struct: AbstractImageConverter { struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressed1DToData; } ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressed1DToData; }
@ -2914,6 +3418,63 @@ void AbstractImageConverterTest::convertLevels3DToFile() {
"\x0f\x0d\x0e\x02", TestSuite::Compare::FileToString); "\x0f\x0d\x0e\x02", TestSuite::Compare::FileToString);
} }
void AbstractImageConverterTest::convertLevels1DToFileFailed() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override {
return ImageConverterFeature::ConvertLevels1DToFile;
}
bool doConvertToFile(Containers::ArrayView<const ImageView1D>, Containers::StringView) override {
return {};
}
} converter;
const char imageData[4]{};
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convertToFile({ImageView1D{PixelFormat::RGBA8Unorm, 1, imageData}}, Utility::Path::join(TRADE_TEST_OUTPUT_DIR, "image.out")));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImageConverterTest::convertLevels2DToFileFailed() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override {
return ImageConverterFeature::ConvertLevels2DToFile;
}
bool doConvertToFile(Containers::ArrayView<const ImageView2D>, Containers::StringView) override {
return {};
}
} converter;
const char imageData[4]{};
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convertToFile({ImageView2D{PixelFormat::RGBA8Unorm, {1, 1}, imageData}}, Utility::Path::join(TRADE_TEST_OUTPUT_DIR, "image.out")));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImageConverterTest::convertLevels3DToFileFailed() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override {
return ImageConverterFeature::ConvertLevels3DToFile;
}
bool doConvertToFile(Containers::ArrayView<const ImageView3D>, Containers::StringView) override {
return {};
}
} converter;
const char imageData[4]{};
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convertToFile({ImageView3D{PixelFormat::RGBA8Unorm, {1, 1, 1}, imageData}}, Utility::Path::join(TRADE_TEST_OUTPUT_DIR, "image.out")));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImageConverterTest::convertLevels1DToFileThroughData() { void AbstractImageConverterTest::convertLevels1DToFileThroughData() {
struct: AbstractImageConverter { struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels1DToData; } ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels1DToData; }
@ -3280,6 +3841,63 @@ void AbstractImageConverterTest::convertCompressedLevels3DToFile() {
"\x0f\x0d\x0e\x02", TestSuite::Compare::FileToString); "\x0f\x0d\x0e\x02", TestSuite::Compare::FileToString);
} }
void AbstractImageConverterTest::convertCompressedLevels1DToFileFailed() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override {
return ImageConverterFeature::ConvertCompressedLevels1DToFile;
}
bool doConvertToFile(Containers::ArrayView<const CompressedImageView1D>, Containers::StringView) override {
return {};
}
} converter;
const char imageData[4*4]{};
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convertToFile({CompressedImageView1D{CompressedPixelFormat::Bc1RGBAUnorm, 1, imageData}}, Utility::Path::join(TRADE_TEST_OUTPUT_DIR, "image.out")));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImageConverterTest::convertCompressedLevels2DToFileFailed() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override {
return ImageConverterFeature::ConvertCompressedLevels2DToFile;
}
bool doConvertToFile(Containers::ArrayView<const CompressedImageView2D>, Containers::StringView) override {
return {};
}
} converter;
const char imageData[4*4]{};
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convertToFile({CompressedImageView2D{CompressedPixelFormat::Bc1RGBAUnorm, {1, 1}, imageData}}, Utility::Path::join(TRADE_TEST_OUTPUT_DIR, "image.out")));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImageConverterTest::convertCompressedLevels3DToFileFailed() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override {
return ImageConverterFeature::ConvertCompressedLevels3DToFile;
}
bool doConvertToFile(Containers::ArrayView<const CompressedImageView3D>, Containers::StringView) override {
return {};
}
} converter;
const char imageData[4]{};
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convertToFile({CompressedImageView3D{CompressedPixelFormat::Bc1RGBAUnorm, {1, 1, 1}, imageData}}, Utility::Path::join(TRADE_TEST_OUTPUT_DIR, "image.out")));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImageConverterTest::convertCompressedLevels1DToFileThroughData() { void AbstractImageConverterTest::convertCompressedLevels1DToFileThroughData() {
struct: AbstractImageConverter { struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels1DToData; } ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels1DToData; }

330
src/Magnum/Trade/Test/AbstractImporterTest.cpp

@ -80,14 +80,18 @@ struct AbstractImporterTest: TestSuite::Tester {
void setFlagsNotImplemented(); void setFlagsNotImplemented();
void openData(); void openData();
void openDataFailed();
#ifdef MAGNUM_BUILD_DEPRECATED #ifdef MAGNUM_BUILD_DEPRECATED
void openDataDeprecatedFallback(); void openDataDeprecatedFallback();
#endif #endif
void openMemory(); void openMemory();
void openMemoryFailed();
void openFile(); void openFile();
void openFileFailed();
void openFileAsData(); void openFileAsData();
void openFileAsDataNotFound(); void openFileAsDataNotFound();
void openState(); void openState();
void openStateFailed();
void openFileNotImplemented(); void openFileNotImplemented();
void openDataNotSupported(); void openDataNotSupported();
@ -121,6 +125,7 @@ struct AbstractImporterTest: TestSuite::Tester {
void defaultSceneOutOfRange(); void defaultSceneOutOfRange();
void scene(); void scene();
void sceneFailed();
void object(); void object();
#ifdef MAGNUM_BUILD_DEPRECATED #ifdef MAGNUM_BUILD_DEPRECATED
void sceneDeprecatedFallback2D(); void sceneDeprecatedFallback2D();
@ -155,6 +160,7 @@ struct AbstractImporterTest: TestSuite::Tester {
void sceneFieldNameCustomDeleter(); void sceneFieldNameCustomDeleter();
void animation(); void animation();
void animationFailed();
void animationNameNotImplemented(); void animationNameNotImplemented();
void animationForNameOutOfRange(); void animationForNameOutOfRange();
void animationNameOutOfRange(); void animationNameOutOfRange();
@ -167,6 +173,7 @@ struct AbstractImporterTest: TestSuite::Tester {
void animationCustomTrackDeleter(); void animationCustomTrackDeleter();
void light(); void light();
void lightFailed();
void lightNameNotImplemented(); void lightNameNotImplemented();
void lightForNameOutOfRange(); void lightForNameOutOfRange();
void lightNameOutOfRange(); void lightNameOutOfRange();
@ -175,6 +182,7 @@ struct AbstractImporterTest: TestSuite::Tester {
void lightOutOfRange(); void lightOutOfRange();
void camera(); void camera();
void cameraFailed();
void cameraNameNotImplemented(); void cameraNameNotImplemented();
void cameraForNameOutOfRange(); void cameraForNameOutOfRange();
void cameraNameOutOfRange(); void cameraNameOutOfRange();
@ -213,6 +221,7 @@ struct AbstractImporterTest: TestSuite::Tester {
#endif #endif
void skin2D(); void skin2D();
void skin2DFailed();
void skin2DNameNotImplemented(); void skin2DNameNotImplemented();
void skin2DForNameOutOfRange(); void skin2DForNameOutOfRange();
void skin2DNameOutOfRange(); void skin2DNameOutOfRange();
@ -224,6 +233,7 @@ struct AbstractImporterTest: TestSuite::Tester {
void skin2DCustomInverseBindMatrixDataDeleter(); void skin2DCustomInverseBindMatrixDataDeleter();
void skin3D(); void skin3D();
void skin3DFailed();
void skin3DNameNotImplemented(); void skin3DNameNotImplemented();
void skin3DForNameOutOfRange(); void skin3DForNameOutOfRange();
void skin3DNameOutOfRange(); void skin3DNameOutOfRange();
@ -235,6 +245,7 @@ struct AbstractImporterTest: TestSuite::Tester {
void skin3DCustomInverseBindMatrixDataDeleter(); void skin3DCustomInverseBindMatrixDataDeleter();
void mesh(); void mesh();
void meshFailed();
#ifdef MAGNUM_BUILD_DEPRECATED #ifdef MAGNUM_BUILD_DEPRECATED
void meshDeprecatedFallback(); void meshDeprecatedFallback();
#endif #endif
@ -286,6 +297,7 @@ struct AbstractImporterTest: TestSuite::Tester {
#endif #endif
void material(); void material();
void materialFailed();
#ifdef MAGNUM_BUILD_DEPRECATED #ifdef MAGNUM_BUILD_DEPRECATED
void materialDeprecatedFallback(); void materialDeprecatedFallback();
#endif #endif
@ -300,6 +312,7 @@ struct AbstractImporterTest: TestSuite::Tester {
void materialCustomLayerDataDeleter(); void materialCustomLayerDataDeleter();
void texture(); void texture();
void textureFailed();
void textureForNameOutOfRange(); void textureForNameOutOfRange();
void textureNameNotImplemented(); void textureNameNotImplemented();
void textureNameOutOfRange(); void textureNameOutOfRange();
@ -308,6 +321,7 @@ struct AbstractImporterTest: TestSuite::Tester {
void textureOutOfRange(); void textureOutOfRange();
void image1D(); void image1D();
void image1DFailed();
void image1DLevelCountNotImplemented(); void image1DLevelCountNotImplemented();
void image1DLevelCountOutOfRange(); void image1DLevelCountOutOfRange();
void image1DLevelCountZero(); void image1DLevelCountZero();
@ -323,6 +337,7 @@ struct AbstractImporterTest: TestSuite::Tester {
void image1DCustomDeleter(); void image1DCustomDeleter();
void image2D(); void image2D();
void image2DFailed();
void image2DLevelCountNotImplemented(); void image2DLevelCountNotImplemented();
void image2DLevelCountOutOfRange(); void image2DLevelCountOutOfRange();
void image2DLevelCountZero(); void image2DLevelCountZero();
@ -338,6 +353,7 @@ struct AbstractImporterTest: TestSuite::Tester {
void image2DCustomDeleter(); void image2DCustomDeleter();
void image3D(); void image3D();
void image3DFailed();
void image3DLevelCountNotImplemented(); void image3DLevelCountNotImplemented();
void image3DLevelCountOutOfRange(); void image3DLevelCountOutOfRange();
void image3DLevelCountZero(); void image3DLevelCountZero();
@ -381,14 +397,18 @@ AbstractImporterTest::AbstractImporterTest() {
&AbstractImporterTest::setFlagsNotImplemented, &AbstractImporterTest::setFlagsNotImplemented,
&AbstractImporterTest::openData, &AbstractImporterTest::openData,
&AbstractImporterTest::openDataFailed,
#ifdef MAGNUM_BUILD_DEPRECATED #ifdef MAGNUM_BUILD_DEPRECATED
&AbstractImporterTest::openDataDeprecatedFallback, &AbstractImporterTest::openDataDeprecatedFallback,
#endif #endif
&AbstractImporterTest::openMemory, &AbstractImporterTest::openMemory,
&AbstractImporterTest::openMemoryFailed,
&AbstractImporterTest::openFile, &AbstractImporterTest::openFile,
&AbstractImporterTest::openFileFailed,
&AbstractImporterTest::openFileAsData, &AbstractImporterTest::openFileAsData,
&AbstractImporterTest::openFileAsDataNotFound, &AbstractImporterTest::openFileAsDataNotFound,
&AbstractImporterTest::openState, &AbstractImporterTest::openState,
&AbstractImporterTest::openStateFailed,
&AbstractImporterTest::openFileNotImplemented, &AbstractImporterTest::openFileNotImplemented,
&AbstractImporterTest::openDataNotSupported, &AbstractImporterTest::openDataNotSupported,
@ -425,6 +445,7 @@ AbstractImporterTest::AbstractImporterTest() {
&AbstractImporterTest::defaultSceneNotImplemented, &AbstractImporterTest::defaultSceneNotImplemented,
&AbstractImporterTest::scene, &AbstractImporterTest::scene,
&AbstractImporterTest::sceneFailed,
&AbstractImporterTest::object, &AbstractImporterTest::object,
#ifdef MAGNUM_BUILD_DEPRECATED #ifdef MAGNUM_BUILD_DEPRECATED
&AbstractImporterTest::sceneDeprecatedFallback2D, &AbstractImporterTest::sceneDeprecatedFallback2D,
@ -459,6 +480,7 @@ AbstractImporterTest::AbstractImporterTest() {
&AbstractImporterTest::sceneFieldNameCustomDeleter, &AbstractImporterTest::sceneFieldNameCustomDeleter,
&AbstractImporterTest::animation, &AbstractImporterTest::animation,
&AbstractImporterTest::animationFailed,
&AbstractImporterTest::animationForNameOutOfRange, &AbstractImporterTest::animationForNameOutOfRange,
&AbstractImporterTest::animationNameNotImplemented, &AbstractImporterTest::animationNameNotImplemented,
&AbstractImporterTest::animationNameOutOfRange, &AbstractImporterTest::animationNameOutOfRange,
@ -471,6 +493,7 @@ AbstractImporterTest::AbstractImporterTest() {
&AbstractImporterTest::animationCustomTrackDeleter, &AbstractImporterTest::animationCustomTrackDeleter,
&AbstractImporterTest::light, &AbstractImporterTest::light,
&AbstractImporterTest::lightFailed,
&AbstractImporterTest::lightForNameOutOfRange, &AbstractImporterTest::lightForNameOutOfRange,
&AbstractImporterTest::lightNameNotImplemented, &AbstractImporterTest::lightNameNotImplemented,
&AbstractImporterTest::lightNameOutOfRange, &AbstractImporterTest::lightNameOutOfRange,
@ -479,6 +502,7 @@ AbstractImporterTest::AbstractImporterTest() {
&AbstractImporterTest::lightOutOfRange, &AbstractImporterTest::lightOutOfRange,
&AbstractImporterTest::camera, &AbstractImporterTest::camera,
&AbstractImporterTest::cameraFailed,
&AbstractImporterTest::cameraForNameOutOfRange, &AbstractImporterTest::cameraForNameOutOfRange,
&AbstractImporterTest::cameraNameNotImplemented, &AbstractImporterTest::cameraNameNotImplemented,
&AbstractImporterTest::cameraNameOutOfRange, &AbstractImporterTest::cameraNameOutOfRange,
@ -523,6 +547,7 @@ AbstractImporterTest::AbstractImporterTest() {
#endif #endif
addTests({&AbstractImporterTest::skin2D, addTests({&AbstractImporterTest::skin2D,
&AbstractImporterTest::skin2DFailed,
&AbstractImporterTest::skin2DForNameOutOfRange, &AbstractImporterTest::skin2DForNameOutOfRange,
&AbstractImporterTest::skin2DNameNotImplemented, &AbstractImporterTest::skin2DNameNotImplemented,
&AbstractImporterTest::skin2DNameOutOfRange, &AbstractImporterTest::skin2DNameOutOfRange,
@ -534,6 +559,7 @@ AbstractImporterTest::AbstractImporterTest() {
&AbstractImporterTest::skin2DCustomInverseBindMatrixDataDeleter, &AbstractImporterTest::skin2DCustomInverseBindMatrixDataDeleter,
&AbstractImporterTest::skin3D, &AbstractImporterTest::skin3D,
&AbstractImporterTest::skin3DFailed,
&AbstractImporterTest::skin3DForNameOutOfRange, &AbstractImporterTest::skin3DForNameOutOfRange,
&AbstractImporterTest::skin3DNameNotImplemented, &AbstractImporterTest::skin3DNameNotImplemented,
&AbstractImporterTest::skin3DNameOutOfRange, &AbstractImporterTest::skin3DNameOutOfRange,
@ -545,6 +571,7 @@ AbstractImporterTest::AbstractImporterTest() {
&AbstractImporterTest::skin3DCustomInverseBindMatrixDataDeleter, &AbstractImporterTest::skin3DCustomInverseBindMatrixDataDeleter,
&AbstractImporterTest::mesh, &AbstractImporterTest::mesh,
&AbstractImporterTest::meshFailed,
#ifdef MAGNUM_BUILD_DEPRECATED #ifdef MAGNUM_BUILD_DEPRECATED
&AbstractImporterTest::meshDeprecatedFallback, &AbstractImporterTest::meshDeprecatedFallback,
#endif #endif
@ -596,6 +623,7 @@ AbstractImporterTest::AbstractImporterTest() {
#endif #endif
&AbstractImporterTest::material, &AbstractImporterTest::material,
&AbstractImporterTest::materialFailed,
#ifdef MAGNUM_BUILD_DEPRECATED #ifdef MAGNUM_BUILD_DEPRECATED
&AbstractImporterTest::materialDeprecatedFallback, &AbstractImporterTest::materialDeprecatedFallback,
#endif #endif
@ -610,6 +638,7 @@ AbstractImporterTest::AbstractImporterTest() {
&AbstractImporterTest::materialCustomLayerDataDeleter, &AbstractImporterTest::materialCustomLayerDataDeleter,
&AbstractImporterTest::texture, &AbstractImporterTest::texture,
&AbstractImporterTest::textureFailed,
&AbstractImporterTest::textureForNameOutOfRange, &AbstractImporterTest::textureForNameOutOfRange,
&AbstractImporterTest::textureNameNotImplemented, &AbstractImporterTest::textureNameNotImplemented,
&AbstractImporterTest::textureNameOutOfRange, &AbstractImporterTest::textureNameOutOfRange,
@ -618,6 +647,7 @@ AbstractImporterTest::AbstractImporterTest() {
&AbstractImporterTest::textureOutOfRange, &AbstractImporterTest::textureOutOfRange,
&AbstractImporterTest::image1D, &AbstractImporterTest::image1D,
&AbstractImporterTest::image1DFailed,
&AbstractImporterTest::image1DLevelCountNotImplemented, &AbstractImporterTest::image1DLevelCountNotImplemented,
&AbstractImporterTest::image1DLevelCountOutOfRange, &AbstractImporterTest::image1DLevelCountOutOfRange,
&AbstractImporterTest::image1DLevelCountZero, &AbstractImporterTest::image1DLevelCountZero,
@ -633,6 +663,7 @@ AbstractImporterTest::AbstractImporterTest() {
&AbstractImporterTest::image1DCustomDeleter, &AbstractImporterTest::image1DCustomDeleter,
&AbstractImporterTest::image2D, &AbstractImporterTest::image2D,
&AbstractImporterTest::image2DFailed,
&AbstractImporterTest::image2DLevelCountNotImplemented, &AbstractImporterTest::image2DLevelCountNotImplemented,
&AbstractImporterTest::image2DLevelCountOutOfRange, &AbstractImporterTest::image2DLevelCountOutOfRange,
&AbstractImporterTest::image2DLevelCountZero, &AbstractImporterTest::image2DLevelCountZero,
@ -648,6 +679,7 @@ AbstractImporterTest::AbstractImporterTest() {
&AbstractImporterTest::image2DCustomDeleter, &AbstractImporterTest::image2DCustomDeleter,
&AbstractImporterTest::image3D, &AbstractImporterTest::image3D,
&AbstractImporterTest::image3DFailed,
&AbstractImporterTest::image3DLevelCountNotImplemented, &AbstractImporterTest::image3DLevelCountNotImplemented,
&AbstractImporterTest::image3DLevelCountOutOfRange, &AbstractImporterTest::image3DLevelCountOutOfRange,
&AbstractImporterTest::image3DLevelCountZero, &AbstractImporterTest::image3DLevelCountZero,
@ -792,6 +824,24 @@ void AbstractImporterTest::openData() {
CORRADE_VERIFY(!importer.isOpened()); CORRADE_VERIFY(!importer.isOpened());
} }
void AbstractImporterTest::openDataFailed() {
struct: AbstractImporter {
ImporterFeatures doFeatures() const override {
return ImporterFeature::OpenData;
}
bool doIsOpened() const override { return false; }
void doClose() override {}
void doOpenData(Containers::Array<char>&&, DataFlags) override {}
} importer;
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!importer.openData(nullptr));
CORRADE_COMPARE(out.str(), "");
}
#ifdef MAGNUM_BUILD_DEPRECATED #ifdef MAGNUM_BUILD_DEPRECATED
void AbstractImporterTest::openDataDeprecatedFallback() { void AbstractImporterTest::openDataDeprecatedFallback() {
struct: AbstractImporter { struct: AbstractImporter {
@ -847,6 +897,24 @@ void AbstractImporterTest::openMemory() {
CORRADE_VERIFY(!importer.isOpened()); CORRADE_VERIFY(!importer.isOpened());
} }
void AbstractImporterTest::openMemoryFailed() {
struct: AbstractImporter {
ImporterFeatures doFeatures() const override {
return ImporterFeature::OpenData;
}
bool doIsOpened() const override { return false; }
void doClose() override {}
void doOpenData(Containers::Array<char>&&, DataFlags) override {}
} importer;
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!importer.openMemory(nullptr));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImporterTest::openFile() { void AbstractImporterTest::openFile() {
struct: AbstractImporter { struct: AbstractImporter {
ImporterFeatures doFeatures() const override { return {}; } ImporterFeatures doFeatures() const override { return {}; }
@ -869,6 +937,22 @@ void AbstractImporterTest::openFile() {
CORRADE_VERIFY(!importer.isOpened()); CORRADE_VERIFY(!importer.isOpened());
} }
void AbstractImporterTest::openFileFailed() {
struct: AbstractImporter {
ImporterFeatures doFeatures() const override { return {}; }
bool doIsOpened() const override { return false; }
void doClose() override {}
void doOpenFile(Containers::StringView) override {}
} importer;
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!importer.openFile({}));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImporterTest::openFileAsData() { void AbstractImporterTest::openFileAsData() {
struct: AbstractImporter { struct: AbstractImporter {
ImporterFeatures doFeatures() const override { return ImporterFeature::OpenData; } ImporterFeatures doFeatures() const override { return ImporterFeature::OpenData; }
@ -946,6 +1030,24 @@ void AbstractImporterTest::openState() {
CORRADE_VERIFY(!importer.isOpened()); CORRADE_VERIFY(!importer.isOpened());
} }
void AbstractImporterTest::openStateFailed() {
struct: AbstractImporter {
ImporterFeatures doFeatures() const override {
return ImporterFeature::OpenState;
}
bool doIsOpened() const override { return false; }
void doClose() override {}
void doOpenState(const void*, Containers::StringView) override {}
} importer;
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!importer.openState({}));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImporterTest::openFileNotImplemented() { void AbstractImporterTest::openFileNotImplemented() {
#ifdef CORRADE_NO_ASSERT #ifdef CORRADE_NO_ASSERT
CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions"); CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions");
@ -1810,6 +1912,25 @@ void AbstractImporterTest::scene() {
} }
} }
void AbstractImporterTest::sceneFailed() {
struct: AbstractImporter {
ImporterFeatures doFeatures() const override { return {}; }
bool doIsOpened() const override { return true; }
void doClose() override {}
UnsignedInt doSceneCount() const override { return 1; }
Containers::Optional<SceneData> doScene(UnsignedInt) override {
return {};
}
} importer;
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!importer.scene(0));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImporterTest::object() { void AbstractImporterTest::object() {
struct: AbstractImporter { struct: AbstractImporter {
ImporterFeatures doFeatures() const override { return {}; } ImporterFeatures doFeatures() const override { return {}; }
@ -3789,6 +3910,25 @@ void AbstractImporterTest::animation() {
} }
} }
void AbstractImporterTest::animationFailed() {
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 {
return {};
}
} importer;
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!importer.animation(0));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImporterTest::animationForNameOutOfRange() { void AbstractImporterTest::animationForNameOutOfRange() {
#ifdef CORRADE_NO_ASSERT #ifdef CORRADE_NO_ASSERT
CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions"); CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions");
@ -4034,6 +4174,25 @@ void AbstractImporterTest::light() {
} }
} }
void AbstractImporterTest::lightFailed() {
struct: AbstractImporter {
ImporterFeatures doFeatures() const override { return {}; }
bool doIsOpened() const override { return true; }
void doClose() override {}
UnsignedInt doLightCount() const override { return 1; }
Containers::Optional<LightData> doLight(UnsignedInt) override {
return {};
}
} importer;
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!importer.light(0));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImporterTest::lightForNameOutOfRange() { void AbstractImporterTest::lightForNameOutOfRange() {
#ifdef CORRADE_NO_ASSERT #ifdef CORRADE_NO_ASSERT
CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions"); CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions");
@ -4184,6 +4343,25 @@ void AbstractImporterTest::camera() {
} }
} }
void AbstractImporterTest::cameraFailed() {
struct: AbstractImporter {
ImporterFeatures doFeatures() const override { return {}; }
bool doIsOpened() const override { return true; }
void doClose() override {}
UnsignedInt doCameraCount() const override { return 1; }
Containers::Optional<CameraData> doCamera(UnsignedInt) override {
return {};
}
} importer;
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!importer.camera(0));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImporterTest::cameraForNameOutOfRange() { void AbstractImporterTest::cameraForNameOutOfRange() {
#ifdef CORRADE_NO_ASSERT #ifdef CORRADE_NO_ASSERT
CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions"); CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions");
@ -4898,6 +5076,25 @@ void AbstractImporterTest::skin2D() {
} }
} }
void AbstractImporterTest::skin2DFailed() {
struct: AbstractImporter {
ImporterFeatures doFeatures() const override { return {}; }
bool doIsOpened() const override { return true; }
void doClose() override {}
UnsignedInt doSkin2DCount() const override { return 1; }
Containers::Optional<SkinData2D> doSkin2D(UnsignedInt) override {
return {};
}
} importer;
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!importer.skin2D(0));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImporterTest::skin2DForNameOutOfRange() { void AbstractImporterTest::skin2DForNameOutOfRange() {
#ifdef CORRADE_NO_ASSERT #ifdef CORRADE_NO_ASSERT
CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions"); CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions");
@ -5132,6 +5329,25 @@ void AbstractImporterTest::skin3D() {
} }
} }
void AbstractImporterTest::skin3DFailed() {
struct: AbstractImporter {
ImporterFeatures doFeatures() const override { return {}; }
bool doIsOpened() const override { return true; }
void doClose() override {}
UnsignedInt doSkin3DCount() const override { return 1; }
Containers::Optional<SkinData3D> doSkin3D(UnsignedInt) override {
return {};
}
} importer;
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!importer.skin3D(0));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImporterTest::skin3DForNameOutOfRange() { void AbstractImporterTest::skin3DForNameOutOfRange() {
#ifdef CORRADE_NO_ASSERT #ifdef CORRADE_NO_ASSERT
CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions"); CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions");
@ -5371,6 +5587,25 @@ void AbstractImporterTest::mesh() {
} }
} }
void AbstractImporterTest::meshFailed() {
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, UnsignedInt) override {
return {};
}
} importer;
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!importer.mesh(0));
CORRADE_COMPARE(out.str(), "");
}
#ifdef MAGNUM_BUILD_DEPRECATED #ifdef MAGNUM_BUILD_DEPRECATED
void AbstractImporterTest::meshDeprecatedFallback() { void AbstractImporterTest::meshDeprecatedFallback() {
struct: AbstractImporter { struct: AbstractImporter {
@ -6298,6 +6533,25 @@ void AbstractImporterTest::material() {
} }
} }
void AbstractImporterTest::materialFailed() {
struct: AbstractImporter {
ImporterFeatures doFeatures() const override { return {}; }
bool doIsOpened() const override { return true; }
void doClose() override {}
UnsignedInt doMaterialCount() const override { return 1; }
Containers::Optional<MaterialData> doMaterial(UnsignedInt) override {
return {};
}
} importer;
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!importer.material(0));
CORRADE_COMPARE(out.str(), "");
}
#ifdef MAGNUM_BUILD_DEPRECATED #ifdef MAGNUM_BUILD_DEPRECATED
void AbstractImporterTest::materialDeprecatedFallback() { void AbstractImporterTest::materialDeprecatedFallback() {
struct: AbstractImporter { struct: AbstractImporter {
@ -6573,6 +6827,25 @@ void AbstractImporterTest::texture() {
} }
} }
void AbstractImporterTest::textureFailed() {
struct: AbstractImporter {
ImporterFeatures doFeatures() const override { return {}; }
bool doIsOpened() const override { return true; }
void doClose() override {}
UnsignedInt doTextureCount() const override { return 1; }
Containers::Optional<TextureData> doTexture(UnsignedInt) override {
return {};
}
} importer;
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!importer.texture(0));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImporterTest::textureForNameOutOfRange() { void AbstractImporterTest::textureForNameOutOfRange() {
#ifdef CORRADE_NO_ASSERT #ifdef CORRADE_NO_ASSERT
CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions"); CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions");
@ -6728,6 +7001,25 @@ void AbstractImporterTest::image1D() {
} }
} }
void AbstractImporterTest::image1DFailed() {
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 {
return {};
}
} importer;
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!importer.image1D(0));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImporterTest::image1DLevelCountNotImplemented() { void AbstractImporterTest::image1DLevelCountNotImplemented() {
struct: AbstractImporter { struct: AbstractImporter {
ImporterFeatures doFeatures() const override { return {}; } ImporterFeatures doFeatures() const override { return {}; }
@ -7031,6 +7323,25 @@ void AbstractImporterTest::image2D() {
} }
} }
void AbstractImporterTest::image2DFailed() {
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 {
return {};
}
} importer;
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!importer.image2D(0));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImporterTest::image2DLevelCountNotImplemented() { void AbstractImporterTest::image2DLevelCountNotImplemented() {
struct: AbstractImporter { struct: AbstractImporter {
ImporterFeatures doFeatures() const override { return {}; } ImporterFeatures doFeatures() const override { return {}; }
@ -7334,6 +7645,25 @@ void AbstractImporterTest::image3D() {
} }
} }
void AbstractImporterTest::image3DFailed() {
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 {
return {};
}
} importer;
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!importer.image3D(0));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImporterTest::image3DForNameOutOfRange() { void AbstractImporterTest::image3DForNameOutOfRange() {
#ifdef CORRADE_NO_ASSERT #ifdef CORRADE_NO_ASSERT
CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions"); CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions");

82
src/Magnum/Trade/Test/AbstractSceneConverterTest.cpp

@ -54,6 +54,7 @@ struct AbstractSceneConverterTest: TestSuite::Tester {
void thingNotSupported(); void thingNotSupported();
void convertMesh(); void convertMesh();
void convertMeshFailed();
void convertMeshNotImplemented(); void convertMeshNotImplemented();
void convertMeshNonOwningDeleters(); void convertMeshNonOwningDeleters();
void convertMeshGrowableDeleters(); void convertMeshGrowableDeleters();
@ -62,15 +63,18 @@ struct AbstractSceneConverterTest: TestSuite::Tester {
void convertMeshCustomAttributeDataDeleter(); void convertMeshCustomAttributeDataDeleter();
void convertMeshInPlace(); void convertMeshInPlace();
void convertMeshInPlaceFailed();
void convertMeshInPlaceNotImplemented(); void convertMeshInPlaceNotImplemented();
void convertMeshToData(); void convertMeshToData();
void convertMeshToDataFailed();
void convertMeshToDataNotImplemented(); void convertMeshToDataNotImplemented();
void convertMeshToDataNonOwningDeleter(); void convertMeshToDataNonOwningDeleter();
void convertMeshToDataGrowableDeleter(); void convertMeshToDataGrowableDeleter();
void convertMeshToDataCustomDeleter(); void convertMeshToDataCustomDeleter();
void convertMeshToFile(); void convertMeshToFile();
void convertMeshToFileFailed();
void convertMeshToFileThroughData(); void convertMeshToFileThroughData();
void convertMeshToFileThroughDataFailed(); void convertMeshToFileThroughDataFailed();
void convertMeshToFileThroughDataNotWritable(); void convertMeshToFileThroughDataNotWritable();
@ -92,6 +96,7 @@ AbstractSceneConverterTest::AbstractSceneConverterTest() {
&AbstractSceneConverterTest::thingNotSupported, &AbstractSceneConverterTest::thingNotSupported,
&AbstractSceneConverterTest::convertMesh, &AbstractSceneConverterTest::convertMesh,
&AbstractSceneConverterTest::convertMeshFailed,
&AbstractSceneConverterTest::convertMeshNotImplemented, &AbstractSceneConverterTest::convertMeshNotImplemented,
&AbstractSceneConverterTest::convertMeshNonOwningDeleters, &AbstractSceneConverterTest::convertMeshNonOwningDeleters,
&AbstractSceneConverterTest::convertMeshGrowableDeleters, &AbstractSceneConverterTest::convertMeshGrowableDeleters,
@ -100,15 +105,18 @@ AbstractSceneConverterTest::AbstractSceneConverterTest() {
&AbstractSceneConverterTest::convertMeshCustomAttributeDataDeleter, &AbstractSceneConverterTest::convertMeshCustomAttributeDataDeleter,
&AbstractSceneConverterTest::convertMeshInPlace, &AbstractSceneConverterTest::convertMeshInPlace,
&AbstractSceneConverterTest::convertMeshInPlaceFailed,
&AbstractSceneConverterTest::convertMeshInPlaceNotImplemented, &AbstractSceneConverterTest::convertMeshInPlaceNotImplemented,
&AbstractSceneConverterTest::convertMeshToData, &AbstractSceneConverterTest::convertMeshToData,
&AbstractSceneConverterTest::convertMeshToDataFailed,
&AbstractSceneConverterTest::convertMeshToDataNotImplemented, &AbstractSceneConverterTest::convertMeshToDataNotImplemented,
&AbstractSceneConverterTest::convertMeshToDataNonOwningDeleter, &AbstractSceneConverterTest::convertMeshToDataNonOwningDeleter,
&AbstractSceneConverterTest::convertMeshToDataGrowableDeleter, &AbstractSceneConverterTest::convertMeshToDataGrowableDeleter,
&AbstractSceneConverterTest::convertMeshToDataCustomDeleter, &AbstractSceneConverterTest::convertMeshToDataCustomDeleter,
&AbstractSceneConverterTest::convertMeshToFile, &AbstractSceneConverterTest::convertMeshToFile,
&AbstractSceneConverterTest::convertMeshToFileFailed,
&AbstractSceneConverterTest::convertMeshToFileThroughData, &AbstractSceneConverterTest::convertMeshToFileThroughData,
&AbstractSceneConverterTest::convertMeshToFileThroughDataFailed, &AbstractSceneConverterTest::convertMeshToFileThroughDataFailed,
&AbstractSceneConverterTest::convertMeshToFileThroughDataNotWritable, &AbstractSceneConverterTest::convertMeshToFileThroughDataNotWritable,
@ -227,6 +235,24 @@ void AbstractSceneConverterTest::convertMesh() {
CORRADE_COMPARE(out->vertexCount(), 12); CORRADE_COMPARE(out->vertexCount(), 12);
} }
void AbstractSceneConverterTest::convertMeshFailed() {
struct: AbstractSceneConverter {
SceneConverterFeatures doFeatures() const override {
return SceneConverterFeature::ConvertMesh;
}
Containers::Optional<MeshData> doConvert(const MeshData&) override {
return {};
}
} converter;
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convert(MeshData{MeshPrimitive::Triangles, 0}));
CORRADE_COMPARE(out.str(), "");
}
void AbstractSceneConverterTest::convertMeshNotImplemented() { void AbstractSceneConverterTest::convertMeshNotImplemented() {
#ifdef CORRADE_NO_ASSERT #ifdef CORRADE_NO_ASSERT
CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions"); CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions");
@ -380,6 +406,26 @@ void AbstractSceneConverterTest::convertMeshInPlace() {
TestSuite::Compare::Container); TestSuite::Compare::Container);
} }
void AbstractSceneConverterTest::convertMeshInPlaceFailed() {
struct: AbstractSceneConverter {
SceneConverterFeatures doFeatures() const override {
return SceneConverterFeature::ConvertMeshInPlace;
}
bool doConvertInPlace(MeshData&) override {
return {};
}
} converter;
MeshData mesh{MeshPrimitive::Triangles, 0};
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convertInPlace(mesh));
CORRADE_COMPARE(out.str(), "");
}
void AbstractSceneConverterTest::convertMeshInPlaceNotImplemented() { void AbstractSceneConverterTest::convertMeshInPlaceNotImplemented() {
#ifdef CORRADE_NO_ASSERT #ifdef CORRADE_NO_ASSERT
CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions"); CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions");
@ -411,6 +457,24 @@ void AbstractSceneConverterTest::convertMeshToData() {
CORRADE_COMPARE(data->size(), 6); CORRADE_COMPARE(data->size(), 6);
} }
void AbstractSceneConverterTest::convertMeshToDataFailed() {
struct: AbstractSceneConverter {
SceneConverterFeatures doFeatures() const override {
return SceneConverterFeature::ConvertMeshToData;
}
Containers::Optional<Containers::Array<char>> doConvertToData(const MeshData&) override {
return {};
}
} converter;
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convertToData(MeshData{MeshPrimitive::Triangles, 0}));
CORRADE_COMPARE(out.str(), "");
}
void AbstractSceneConverterTest::convertMeshToDataNotImplemented() { void AbstractSceneConverterTest::convertMeshToDataNotImplemented() {
#ifdef CORRADE_NO_ASSERT #ifdef CORRADE_NO_ASSERT
CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions"); CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions");
@ -504,6 +568,24 @@ void AbstractSceneConverterTest::convertMeshToFile() {
"\xef", TestSuite::Compare::FileToString); "\xef", TestSuite::Compare::FileToString);
} }
void AbstractSceneConverterTest::convertMeshToFileFailed() {
struct: AbstractSceneConverter {
SceneConverterFeatures doFeatures() const override {
return SceneConverterFeature::ConvertMeshToFile;
}
bool doConvertToFile(const MeshData&, Containers::StringView) override {
return false;
}
} converter;
/* The implementation is expected to print an error message on its own */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convertToFile(MeshData{MeshPrimitive::Triangles, 0}, Utility::Path::join(TRADE_TEST_OUTPUT_DIR, "mesh.out")));
CORRADE_COMPARE(out.str(), "");
}
void AbstractSceneConverterTest::convertMeshToFileThroughData() { void AbstractSceneConverterTest::convertMeshToFileThroughData() {
struct: AbstractSceneConverter { struct: AbstractSceneConverter {
SceneConverterFeatures doFeatures() const override { return SceneConverterFeature::ConvertMeshToData; } SceneConverterFeatures doFeatures() const override { return SceneConverterFeature::ConvertMeshToData; }

Loading…
Cancel
Save