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 exportToFile();
void exportToFileThroughData(); void exportToFileThroughData();
void exportToFileThroughDataFailed();
void exportToFileThroughDataNotWritable(); void exportToFileThroughDataNotWritable();
void exportToFileNotImplemented(); void exportToFileNotImplemented();
void exportCompressedToFile(); void exportCompressedToFile();
void exportCompressedToFileThroughData(); void exportCompressedToFileThroughData();
void exportCompressedToFileThroughDataFailed();
void exportCompressedToFileThroughDataNotWritable(); void exportCompressedToFileThroughDataNotWritable();
void exportCompressedToFileNotImplemented(); void exportCompressedToFileNotImplemented();
@ -118,11 +120,13 @@ AbstractImageConverterTest::AbstractImageConverterTest() {
&AbstractImageConverterTest::exportToFile, &AbstractImageConverterTest::exportToFile,
&AbstractImageConverterTest::exportToFileThroughData, &AbstractImageConverterTest::exportToFileThroughData,
&AbstractImageConverterTest::exportToFileThroughDataFailed,
&AbstractImageConverterTest::exportToFileThroughDataNotWritable, &AbstractImageConverterTest::exportToFileThroughDataNotWritable,
&AbstractImageConverterTest::exportToFileNotImplemented, &AbstractImageConverterTest::exportToFileNotImplemented,
&AbstractImageConverterTest::exportCompressedToFile, &AbstractImageConverterTest::exportCompressedToFile,
&AbstractImageConverterTest::exportCompressedToFileThroughData, &AbstractImageConverterTest::exportCompressedToFileThroughData,
&AbstractImageConverterTest::exportCompressedToFileThroughDataFailed,
&AbstractImageConverterTest::exportCompressedToFileThroughDataNotWritable, &AbstractImageConverterTest::exportCompressedToFileThroughDataNotWritable,
&AbstractImageConverterTest::exportCompressedToFileNotImplemented, &AbstractImageConverterTest::exportCompressedToFileNotImplemented,
@ -469,6 +473,30 @@ void AbstractImageConverterTest::exportToFileThroughData() {
"\xfe\xed", TestSuite::Compare::FileToString); "\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() { void AbstractImageConverterTest::exportToFileThroughDataNotWritable() {
struct: AbstractImageConverter { struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertData; } ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertData; }
@ -542,6 +570,30 @@ void AbstractImageConverterTest::exportCompressedToFileThroughData() {
"\xb0\xd9", TestSuite::Compare::FileToString); "\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() { void AbstractImageConverterTest::exportCompressedToFileThroughDataNotWritable() {
struct: AbstractImageConverter { struct: AbstractImageConverter {
ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedData; } 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 convertMeshToFile();
void convertMeshToFileThroughData(); void convertMeshToFileThroughData();
void convertMeshToFileThroughDataFailed();
void convertMeshToFileThroughDataNotWritable(); void convertMeshToFileThroughDataNotWritable();
void convertMeshToFileNotImplemented(); void convertMeshToFileNotImplemented();
@ -101,6 +102,7 @@ AbstractSceneConverterTest::AbstractSceneConverterTest() {
&AbstractSceneConverterTest::convertMeshToFile, &AbstractSceneConverterTest::convertMeshToFile,
&AbstractSceneConverterTest::convertMeshToFileThroughData, &AbstractSceneConverterTest::convertMeshToFileThroughData,
&AbstractSceneConverterTest::convertMeshToFileThroughDataFailed,
&AbstractSceneConverterTest::convertMeshToFileThroughDataNotWritable, &AbstractSceneConverterTest::convertMeshToFileThroughDataNotWritable,
&AbstractSceneConverterTest::convertMeshToFileNotImplemented, &AbstractSceneConverterTest::convertMeshToFileNotImplemented,
@ -466,6 +468,30 @@ void AbstractSceneConverterTest::convertMeshToFileThroughData() {
"\xef", TestSuite::Compare::FileToString); "\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() { void AbstractSceneConverterTest::convertMeshToFileThroughDataNotWritable() {
struct: AbstractSceneConverter { struct: AbstractSceneConverter {
SceneConverterFeatures doFeatures() const override { return SceneConverterFeature::ConvertMeshToData; } SceneConverterFeatures doFeatures() const override { return SceneConverterFeature::ConvertMeshToData; }

Loading…
Cancel
Save