Browse Source

AnyImageImporter: don't abuse file callbacks to test data opening.

It doesn't make the test any simpler, easier to understand or less
error prone, on the contrary. And it would stop testing the intended
code path once file callbacks are implemented inside the importer.
pull/240/merge
Vladimír Vondruš 4 years ago
parent
commit
6cbc37ecda
  1. 132
      src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp

132
src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp

@ -65,68 +65,63 @@ struct AnyImageImporterTest: TestSuite::Tester {
PluginManager::Manager<AbstractImporter> _manager{"nonexistent"}; PluginManager::Manager<AbstractImporter> _manager{"nonexistent"};
}; };
Containers::Optional<Containers::ArrayView<const char>> fileCallback(const std::string& filename, InputFileCallbackPolicy, Containers::Array<char>& storage) {
storage = Utility::Directory::read(filename);
return Containers::ArrayView<const char>{storage};
}
constexpr struct { constexpr struct {
const char* name; const char* name;
const char* filename; const char* filename;
Containers::Optional<Containers::ArrayView<const char>>(*callback)(const std::string&, InputFileCallbackPolicy, Containers::Array<char>&); bool asData;
const char* messageFunctionName; const char* messageFunctionName;
} Load1DData[]{ } Load1DData[]{
{"KTX2", KTX_1D_FILE, nullptr, "KtxImporter"}, {"KTX2", KTX_1D_FILE, false, "KtxImporter"},
{"KTX2 data", KTX_1D_FILE, fileCallback, "KtxImporter"}, {"KTX2 data", KTX_1D_FILE, true, "KtxImporter"},
}; };
constexpr struct { constexpr struct {
const char* name; const char* name;
const char* filename; const char* filename;
Containers::Optional<Containers::ArrayView<const char>>(*callback)(const std::string&, InputFileCallbackPolicy, Containers::Array<char>&); bool asData;
const char* messageFunctionName; const char* messageFunctionName;
} Load2DData[]{ } Load2DData[]{
{"TGA", TGA_FILE, nullptr, "openFile"}, {"TGA", TGA_FILE, false, "openFile"},
{"TGA data", TGA_FILE, fileCallback, "openData"} {"TGA data", TGA_FILE, true, "openData"}
}; };
constexpr struct { constexpr struct {
const char* name; const char* name;
const char* filename; const char* filename;
Containers::Optional<Containers::ArrayView<const char>>(*callback)(const std::string&, InputFileCallbackPolicy, Containers::Array<char>&); bool asData;
const char* messageFunctionName; const char* messageFunctionName;
} Load3DData[]{ } Load3DData[]{
{"KTX2", KTX_3D_FILE, nullptr, "KtxImporter"}, {"KTX2", KTX_3D_FILE, false, "KtxImporter"},
{"KTX2 data", KTX_3D_FILE, fileCallback, "KtxImporter"}, {"KTX2 data", KTX_3D_FILE, true, "KtxImporter"},
}; };
constexpr struct { constexpr struct {
const char* name; const char* name;
const char* filename; const char* filename;
Containers::Optional<Containers::ArrayView<const char>>(*callback)(const std::string&, InputFileCallbackPolicy, Containers::Array<char>&); bool asData;
const char* plugin; const char* plugin;
} DetectData[]{ } DetectData[]{
{"PNG", "rgb.png", nullptr, "PngImporter"}, {"PNG", "rgb.png", false, "PngImporter"},
{"PNG data", "rgb.png", fileCallback, "PngImporter"}, {"PNG data", "rgb.png", true, "PngImporter"},
{"JPEG", "gray.jpg", nullptr, "JpegImporter"}, {"JPEG", "gray.jpg", false, "JpegImporter"},
{"JPEG data", "gray.jpg", fileCallback, "JpegImporter"}, {"JPEG data", "gray.jpg", true, "JpegImporter"},
{"JPEG uppercase", "uppercase.JPG", nullptr, "JpegImporter"}, {"JPEG uppercase", "uppercase.JPG", false, "JpegImporter"},
{"JPEG2000", "image.jp2", nullptr, "Jpeg2000Importer"}, {"JPEG2000", "image.jp2", false, "Jpeg2000Importer"},
{"KTX2", "image.ktx2", nullptr, "KtxImporter"}, {"KTX2", "image.ktx2", false, "KtxImporter"},
/** @todo KTX2 data once we have some */ /** @todo KTX2 data once we have some */
{"HDR", "rgb.hdr", nullptr, "HdrImporter"}, {"HDR", "rgb.hdr", false, "HdrImporter"},
{"HDR data", "rgb.hdr", fileCallback, "HdrImporter"}, {"HDR data", "rgb.hdr", true, "HdrImporter"},
{"ICO", "pngs.ico", nullptr, "IcoImporter"}, {"ICO", "pngs.ico", false, "IcoImporter"},
{"DDS", "rgba_dxt1.dds", nullptr, "DdsImporter"}, {"DDS", "rgba_dxt1.dds", false, "DdsImporter"},
{"DDS data", "rgba_dxt1.dds", fileCallback, "DdsImporter"}, {"DDS data", "rgba_dxt1.dds", true, "DdsImporter"},
{"BMP", "rgb.bmp", nullptr, "BmpImporter"}, {"BMP", "rgb.bmp", false, "BmpImporter"},
{"BMP data", "rgb.bmp", fileCallback, "BmpImporter"}, {"BMP data", "rgb.bmp", true, "BmpImporter"},
{"GIF", "image.gif", nullptr, "GifImporter"}, {"GIF", "image.gif", false, "GifImporter"},
{"PSD", "image.psd", nullptr, "PsdImporter"}, {"PSD", "image.psd", false, "PsdImporter"},
{"TIFF", "image.tiff", nullptr, "TiffImporter"}, {"TIFF", "image.tiff", false, "TiffImporter"},
{"TIFF data", "image.tiff", fileCallback, "TiffImporter"}, {"TIFF data", "image.tiff", true, "TiffImporter"},
{"Basis", "rgb.basis", nullptr, "BasisImporter"}, {"Basis", "rgb.basis", false, "BasisImporter"},
{"Basis data", "rgb.basis", fileCallback, "BasisImporter"} {"Basis data", "rgb.basis", true, "BasisImporter"}
/* Not testing everything, just the most important ones */ /* Not testing everything, just the most important ones */
}; };
@ -152,10 +147,10 @@ const struct {
constexpr struct { constexpr struct {
const char* name; const char* name;
const char* filename; const char* filename;
Containers::Optional<Containers::ArrayView<const char>>(*callback)(const std::string&, InputFileCallbackPolicy, Containers::Array<char>&); bool asData;
} PropagateConfigurationData[]{ } PropagateConfigurationData[]{
{"EXR", EXR_FILE, nullptr}, {"EXR", EXR_FILE, false},
{"EXR data", EXR_FILE, fileCallback} {"EXR data", EXR_FILE, true}
}; };
AnyImageImporterTest::AnyImageImporterTest() { AnyImageImporterTest::AnyImageImporterTest() {
@ -213,10 +208,10 @@ void AnyImageImporterTest::load1D() {
Containers::Pointer<AbstractImporter> importer = manager.instantiate("AnyImageImporter"); Containers::Pointer<AbstractImporter> importer = manager.instantiate("AnyImageImporter");
Containers::Array<char> storage; if(data.asData)
importer->setFileCallback(data.callback, storage); CORRADE_VERIFY(importer->openData(Utility::Directory::read(data.filename)));
else
CORRADE_VERIFY(importer->openFile(data.filename)); CORRADE_VERIFY(importer->openFile(data.filename));
CORRADE_COMPARE(importer->image1DCount(), 1); CORRADE_COMPARE(importer->image1DCount(), 1);
/* Check only size, as it is good enough proof that it is working */ /* Check only size, as it is good enough proof that it is working */
@ -234,10 +229,10 @@ void AnyImageImporterTest::load2D() {
Containers::Pointer<AbstractImporter> importer = _manager.instantiate("AnyImageImporter"); Containers::Pointer<AbstractImporter> importer = _manager.instantiate("AnyImageImporter");
Containers::Array<char> storage; if(data.asData)
importer->setFileCallback(data.callback, storage); CORRADE_VERIFY(importer->openData(Utility::Directory::read(data.filename)));
else
CORRADE_VERIFY(importer->openFile(data.filename)); CORRADE_VERIFY(importer->openFile(data.filename));
CORRADE_COMPARE(importer->image2DCount(), 1); CORRADE_COMPARE(importer->image2DCount(), 1);
/* Check only size, as it is good enough proof that it is working */ /* Check only size, as it is good enough proof that it is working */
@ -264,10 +259,10 @@ void AnyImageImporterTest::load3D() {
Containers::Pointer<AbstractImporter> importer = manager.instantiate("AnyImageImporter"); Containers::Pointer<AbstractImporter> importer = manager.instantiate("AnyImageImporter");
Containers::Array<char> storage; if(data.asData)
importer->setFileCallback(data.callback, storage); CORRADE_VERIFY(importer->openData(Utility::Directory::read(data.filename)));
else
CORRADE_VERIFY(importer->openFile(data.filename)); CORRADE_VERIFY(importer->openFile(data.filename));
CORRADE_COMPARE(importer->image3DCount(), 1); CORRADE_COMPARE(importer->image3DCount(), 1);
/* Check only size, as it is good enough proof that it is working */ /* Check only size, as it is good enough proof that it is working */
@ -281,20 +276,21 @@ void AnyImageImporterTest::detect() {
setTestCaseDescription(data.name); setTestCaseDescription(data.name);
Containers::Pointer<AbstractImporter> importer = _manager.instantiate("AnyImageImporter"); Containers::Pointer<AbstractImporter> importer = _manager.instantiate("AnyImageImporter");
const std::string filename = Utility::Directory::join(TEST_FILE_DIR, data.filename);
Containers::Array<char> storage;
importer->setFileCallback(data.callback, storage);
std::ostringstream out; std::ostringstream out;
Error redirectError{&out}; Error redirectError{&out};
CORRADE_VERIFY(!importer->openFile(Utility::Directory::join(TEST_FILE_DIR, data.filename))); if(data.asData)
CORRADE_VERIFY(!importer->openData(Utility::Directory::read(filename)));
else
CORRADE_VERIFY(!importer->openFile(filename));
/* Can't use raw string literals in macros on GCC 4.8 */ /* Can't use raw string literals in macros on GCC 4.8 */
#ifndef CORRADE_PLUGINMANAGER_NO_DYNAMIC_PLUGIN_SUPPORT #ifndef CORRADE_PLUGINMANAGER_NO_DYNAMIC_PLUGIN_SUPPORT
CORRADE_COMPARE(out.str(), Utility::formatString( CORRADE_COMPARE(out.str(), Utility::formatString(
"PluginManager::Manager::load(): plugin {0} is not static and was not found in nonexistent\nTrade::AnyImageImporter::{1}(): cannot load the {0} plugin\n", data.plugin, data.callback ? "openData" : "openFile")); "PluginManager::Manager::load(): plugin {0} is not static and was not found in nonexistent\nTrade::AnyImageImporter::{1}(): cannot load the {0} plugin\n", data.plugin, data.asData ? "openData" : "openFile"));
#else #else
CORRADE_COMPARE(out.str(), Utility::formatString( CORRADE_COMPARE(out.str(), Utility::formatString(
"PluginManager::Manager::load(): plugin {0} was not found\nTrade::AnyImageImporter::{1}(): cannot load the {0} plugin\n", data.plugin, data.callback ? "openData" : "openFile")); "PluginManager::Manager::load(): plugin {0} was not found\nTrade::AnyImageImporter::{1}(): cannot load the {0} plugin\n", data.plugin, data.asData ? "openData" : "openFile"));
#endif #endif
} }
@ -341,13 +337,13 @@ void AnyImageImporterTest::propagateFlags() {
Containers::Pointer<AbstractImporter> importer = _manager.instantiate("AnyImageImporter"); Containers::Pointer<AbstractImporter> importer = _manager.instantiate("AnyImageImporter");
importer->setFlags(ImporterFlag::Verbose); importer->setFlags(ImporterFlag::Verbose);
Containers::Array<char> storage;
importer->setFileCallback(data.callback, storage);
std::ostringstream out; std::ostringstream out;
{ {
Debug redirectOutput{&out}; Debug redirectOutput{&out};
CORRADE_VERIFY(importer->openFile(data.filename)); if(data.asData)
CORRADE_VERIFY(importer->openData(Utility::Directory::read(data.filename)));
else
CORRADE_VERIFY(importer->openFile(data.filename));
CORRADE_VERIFY(importer->image2D(0)); CORRADE_VERIFY(importer->image2D(0));
} }
CORRADE_COMPARE(out.str(), Utility::formatString( CORRADE_COMPARE(out.str(), Utility::formatString(
@ -373,10 +369,10 @@ void AnyImageImporterTest::propagateConfiguration() {
importer->configuration().setValue("layer", "left"); importer->configuration().setValue("layer", "left");
importer->configuration().setValue("depth", "height"); importer->configuration().setValue("depth", "height");
Containers::Array<char> storage; if(data.asData)
importer->setFileCallback(data.callback, storage); CORRADE_VERIFY(importer->openData(Utility::Directory::read(data.filename)));
CORRADE_VERIFY(importer->openFile(data.filename)); else
CORRADE_VERIFY(importer->openFile(data.filename));
Containers::Optional<Trade::ImageData2D> image = importer->image2D(0); Containers::Optional<Trade::ImageData2D> image = importer->image2D(0);
CORRADE_VERIFY(image); CORRADE_VERIFY(image);
@ -400,12 +396,12 @@ void AnyImageImporterTest::propagateConfigurationUnknown() {
Containers::Pointer<AbstractImporter> importer = _manager.instantiate("AnyImageImporter"); Containers::Pointer<AbstractImporter> importer = _manager.instantiate("AnyImageImporter");
importer->configuration().setValue("noSuchOption", "isHere"); importer->configuration().setValue("noSuchOption", "isHere");
Containers::Array<char> storage;
importer->setFileCallback(data.callback, storage);
std::ostringstream out; std::ostringstream out;
Warning redirectWarning{&out}; Warning redirectWarning{&out};
CORRADE_VERIFY(importer->openFile(data.filename)); if(data.asData)
CORRADE_VERIFY(importer->openData(Utility::Directory::read(data.filename)));
else
CORRADE_VERIFY(importer->openFile(data.filename));
CORRADE_COMPARE(out.str(), Utility::formatString("Trade::AnyImageImporter::{}(): option noSuchOption not recognized by TgaImporter\n", data.messageFunctionName)); CORRADE_COMPARE(out.str(), Utility::formatString("Trade::AnyImageImporter::{}(): option noSuchOption not recognized by TgaImporter\n", data.messageFunctionName));
} }

Loading…
Cancel
Save