From 11f7710998f805793fc16736b8daf7690ea59ede Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Fri, 24 Jan 2025 01:30:56 +0100 Subject: [PATCH] Trade: properly test invalid ImageData compressed/uncompressed access. This was only ever tested for pixels(), but not for any other getters. --- src/Magnum/Trade/Test/ImageDataTest.cpp | 58 +++++++++++++++++-------- 1 file changed, 40 insertions(+), 18 deletions(-) diff --git a/src/Magnum/Trade/Test/ImageDataTest.cpp b/src/Magnum/Trade/Test/ImageDataTest.cpp index 46ac98393..f7bc84510 100644 --- a/src/Magnum/Trade/Test/ImageDataTest.cpp +++ b/src/Magnum/Trade/Test/ImageDataTest.cpp @@ -78,6 +78,8 @@ struct ImageDataTest: TestSuite::Tester { void moveCompressedToUncompressed(); void moveUncompressedToCompressed(); + void propertiesInvalid(); + template void toViewGeneric(); template void toViewImplementationSpecific(); template void toViewCompressedGeneric(); @@ -95,7 +97,6 @@ struct ImageDataTest: TestSuite::Tester { void pixels1D(); void pixels2D(); void pixels3D(); - void pixelsCompressed(); }; template struct MutabilityTraits; @@ -155,6 +156,8 @@ ImageDataTest::ImageDataTest() { &ImageDataTest::moveCompressedToUncompressed, &ImageDataTest::moveUncompressedToCompressed, + &ImageDataTest::propertiesInvalid, + &ImageDataTest::toViewGeneric, &ImageDataTest::toViewGeneric, &ImageDataTest::toViewImplementationSpecific, @@ -175,8 +178,7 @@ ImageDataTest::ImageDataTest() { &ImageDataTest::pixels1D, &ImageDataTest::pixels2D, - &ImageDataTest::pixels3D, - &ImageDataTest::pixelsCompressed}); + &ImageDataTest::pixels3D}); } namespace GL { @@ -1090,6 +1092,41 @@ void ImageDataTest::moveUncompressedToCompressed() { CORRADE_COMPARE(b.importerState(), &state); } +void ImageDataTest::propertiesInvalid() { + CORRADE_SKIP_IF_NO_ASSERT(); + + char data[8]{}; + ImageData2D uncompressed{PixelFormat::RGBA8Unorm, {1, 1}, DataFlag::Mutable, data}; + ImageData2D compressed{CompressedPixelFormat::Bc1RGBUnorm, {1, 1}, DataFlag::Mutable, data}; + + Containers::String out; + Error redirectError{&out}; + uncompressed.compressedStorage(); + uncompressed.compressedFormat(); + compressed.storage(); + compressed.format(); + compressed.formatExtra(); + compressed.pixelSize(); + compressed.dataProperties(); + compressed.pixels(); + /* pixels() calls non-templated pixels(), so assume there it will blow + up correctly as well (can't test because it asserts inside arrayCast() + due to zero stride) */ + compressed.mutablePixels(); + /* Same for mutablePixels() */ + CORRADE_COMPARE_AS(out, + "Trade::ImageData::compressedStorage(): the image is not compressed\n" + "Trade::ImageData::compressedFormat(): the image is not compressed\n" + "Trade::ImageData::storage(): the image is compressed\n" + "Trade::ImageData::format(): the image is compressed\n" + "Trade::ImageData::formatExtra(): the image is compressed\n" + "Trade::ImageData::pixelSize(): the image is compressed\n" + "Trade::ImageData::dataProperties(): the image is compressed\n" + "Trade::ImageData::pixels(): the image is compressed\n" + "Trade::ImageData::mutablePixels(): the image is compressed\n", + TestSuite::Compare::String); +} + template void ImageDataTest::toViewGeneric() { setTestCaseTemplateName(MutabilityTraits::name()); @@ -1306,21 +1343,6 @@ void ImageDataTest::pixels3D() { } } -void ImageDataTest::pixelsCompressed() { - CORRADE_SKIP_IF_NO_ASSERT(); - - Trade::ImageData2D a{CompressedPixelFormat::Bc1RGBAUnorm, {4, 4}, Containers::Array{8}}; - - Containers::String out; - Error redirectError{&out}; - - a.pixels(); - /* a.pixels() calls non-templated pixels(), so assume there it will - blow up correctly as well (can't test because it asserts inside - arrayCast() due to zero stride) */ - CORRADE_COMPARE(out, "Trade::ImageData::pixels(): the image is compressed\n"); -} - }}}} CORRADE_TEST_MAIN(Magnum::Trade::Test::ImageDataTest)