Browse Source

Trade: explicitly test a case with failed conversion written to a file.

Too easy to forget this check, write an empty file and return true.
pull/481/head
Vladimír Vondruš 6 years ago
parent
commit
fb972b262b
  1. 52
      src/Magnum/Trade/Test/AbstractImageConverterTest.cpp
  2. 26
      src/Magnum/Trade/Test/AbstractSceneConverterTest.cpp

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

@ -73,11 +73,13 @@ struct AbstractImageConverterTest: TestSuite::Tester {
void exportToFile();
void exportToFileThroughData();
void exportToFileThroughDataFailed();
void exportToFileThroughDataNotWritable();
void exportToFileNotImplemented();
void exportCompressedToFile();
void exportCompressedToFileThroughData();
void exportCompressedToFileThroughDataFailed();
void exportCompressedToFileThroughDataNotWritable();
void exportCompressedToFileNotImplemented();
@ -118,11 +120,13 @@ AbstractImageConverterTest::AbstractImageConverterTest() {
&AbstractImageConverterTest::exportToFile,
&AbstractImageConverterTest::exportToFileThroughData,
&AbstractImageConverterTest::exportToFileThroughDataFailed,
&AbstractImageConverterTest::exportToFileThroughDataNotWritable,
&AbstractImageConverterTest::exportToFileNotImplemented,
&AbstractImageConverterTest::exportCompressedToFile,
&AbstractImageConverterTest::exportCompressedToFileThroughData,
&AbstractImageConverterTest::exportCompressedToFileThroughDataFailed,
&AbstractImageConverterTest::exportCompressedToFileThroughDataNotWritable,
&AbstractImageConverterTest::exportCompressedToFileNotImplemented,
@ -469,6 +473,30 @@ void AbstractImageConverterTest::exportToFileThroughData() {
"\xfe\xed", TestSuite::Compare::FileToString);
}
void AbstractImageConverterTest::exportToFileThroughDataFailed() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertData; }
Containers::Array<char> doExportToData(const ImageView2D&) override {
return {};
};
} converter;
const std::string filename = Utility::Directory::join(TRADE_TEST_OUTPUT_DIR, "image.out");
/* Remove previous file, if any */
Utility::Directory::rm(filename);
CORRADE_VERIFY(!Utility::Directory::exists(filename));
/* Function should fail, no file should get written and no error output
should be printed (the base implementation assumes the plugin does it) */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.exportToFile(ImageView2D(PixelFormat::RGBA8Unorm, {0xfe, 0xed}, {nullptr, 0xfe*0xed*4}), filename));
CORRADE_VERIFY(!Utility::Directory::exists(filename));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImageConverterTest::exportToFileThroughDataNotWritable() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertData; }
@ -542,6 +570,30 @@ void AbstractImageConverterTest::exportCompressedToFileThroughData() {
"\xb0\xd9", TestSuite::Compare::FileToString);
}
void AbstractImageConverterTest::exportCompressedToFileThroughDataFailed() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedData; }
Containers::Array<char> doExportToData(const CompressedImageView2D&) override {
return {};
};
} converter;
const std::string filename = Utility::Directory::join(TRADE_TEST_OUTPUT_DIR, "image.out");
/* Remove previous file, if any */
Utility::Directory::rm(filename);
CORRADE_VERIFY(!Utility::Directory::exists(filename));
/* Function should fail, no file should get written and no error output
should be printed (the base implementation assumes the plugin does it) */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.exportToFile(CompressedImageView2D{CompressedPixelFormat::Bc1RGBAUnorm, {0xb0, 0xd9}, {nullptr, 64}}, filename));
CORRADE_VERIFY(!Utility::Directory::exists(filename));
CORRADE_COMPARE(out.str(), "");
}
void AbstractImageConverterTest::exportCompressedToFileThroughDataNotWritable() {
struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedData; }

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

@ -67,6 +67,7 @@ struct AbstractSceneConverterTest: TestSuite::Tester {
void convertMeshToFile();
void convertMeshToFileThroughData();
void convertMeshToFileThroughDataFailed();
void convertMeshToFileThroughDataNotWritable();
void convertMeshToFileNotImplemented();
@ -101,6 +102,7 @@ AbstractSceneConverterTest::AbstractSceneConverterTest() {
&AbstractSceneConverterTest::convertMeshToFile,
&AbstractSceneConverterTest::convertMeshToFileThroughData,
&AbstractSceneConverterTest::convertMeshToFileThroughDataFailed,
&AbstractSceneConverterTest::convertMeshToFileThroughDataNotWritable,
&AbstractSceneConverterTest::convertMeshToFileNotImplemented,
@ -466,6 +468,30 @@ void AbstractSceneConverterTest::convertMeshToFileThroughData() {
"\xef", TestSuite::Compare::FileToString);
}
void AbstractSceneConverterTest::convertMeshToFileThroughDataFailed() {
struct: AbstractSceneConverter {
SceneConverterFeatures doFeatures() const override { return SceneConverterFeature::ConvertMeshToData; }
Containers::Array<char> doConvertToData(const MeshData&) override {
return {};
}
} converter;
const std::string filename = Utility::Directory::join(TRADE_TEST_OUTPUT_DIR, "mesh.out");
/* Remove previous file, if any */
Utility::Directory::rm(filename);
CORRADE_VERIFY(!Utility::Directory::exists(filename));
/* Function should fail, no file should get written and no error output
should be printed (the base implementation assumes the plugin does it) */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter.convertToFile(filename, MeshData{MeshPrimitive::Triangles, 0xef}));
CORRADE_VERIFY(!Utility::Directory::exists(filename));
CORRADE_COMPARE(out.str(), "");
}
void AbstractSceneConverterTest::convertMeshToFileThroughDataNotWritable() {
struct: AbstractSceneConverter {
SceneConverterFeatures doFeatures() const override { return SceneConverterFeature::ConvertMeshToData; }

Loading…
Cancel
Save