Kaydet (Commit) 072f5090 authored tarafından Michael Meeks's avatar Michael Meeks Kaydeden (comit) Miklos Vajna

tdf#93532 - Bitmap CRC unit tests.

Change-Id: Ic75801d7ad941ba802ffe418d5c666b1e7b0e94f
Reviewed-on: https://gerrit.libreoffice.org/18202Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarMiklos Vajna <vmiklos@collabora.co.uk>
üst 975ab665
...@@ -12,9 +12,13 @@ ...@@ -12,9 +12,13 @@
#include <cppunit/extensions/HelperMacros.h> #include <cppunit/extensions/HelperMacros.h>
#include <cppunit/plugin/TestPlugIn.h> #include <cppunit/plugin/TestPlugIn.h>
#include <unordered_map>
#include <vcl/bitmap.hxx> #include <vcl/bitmap.hxx>
#include <vcl/bmpacc.hxx> #include <vcl/bmpacc.hxx>
#include <vcl/virdev.hxx>
#include <rtl/strbuf.hxx>
#include <tools/stream.hxx> #include <tools/stream.hxx>
#include <vcl/graphicfilter.hxx> #include <vcl/graphicfilter.hxx>
...@@ -27,10 +31,12 @@ class BitmapTest : public CppUnit::TestFixture ...@@ -27,10 +31,12 @@ class BitmapTest : public CppUnit::TestFixture
{ {
void testConvert(); void testConvert();
void testScale(); void testScale();
void testCRC();
CPPUNIT_TEST_SUITE(BitmapTest); CPPUNIT_TEST_SUITE(BitmapTest);
CPPUNIT_TEST(testConvert); CPPUNIT_TEST(testConvert);
CPPUNIT_TEST(testScale); CPPUNIT_TEST(testScale);
CPPUNIT_TEST(testCRC);
CPPUNIT_TEST_SUITE_END(); CPPUNIT_TEST_SUITE_END();
}; };
...@@ -129,6 +135,60 @@ void BitmapTest::testScale() ...@@ -129,6 +135,60 @@ void BitmapTest::testScale()
} }
} }
typedef std::unordered_map<sal_uInt64, const char *> CRCHash;
void checkAndInsert(CRCHash &rHash, sal_uInt64 nCRC, const char *pLocation)
{
auto it = rHash.find(nCRC);
if (it != rHash.end()) {
OStringBuffer aBuf("CRC collision between ");
aBuf.append(pLocation);
aBuf.append(" and ");
aBuf.append(it->second);
aBuf.append(" hash is 0x");
aBuf.append((sal_Int64)nCRC, 16);
CPPUNIT_FAIL(aBuf.toString().getStr());
}
rHash[nCRC] = pLocation;
}
void checkAndInsert(CRCHash &rHash, Bitmap rBmp, const char *pLocation)
{
checkAndInsert(rHash, rBmp.GetChecksum(), pLocation);
}
Bitmap getAsBitmap(VclPtr<OutputDevice> pOut)
{
return pOut->GetBitmap(Point(), pOut->GetOutputSizePixel());
}
void BitmapTest::testCRC()
{
CRCHash aCRCs;
Bitmap aBitmap(Size(1023,759), 24, 0);
aBitmap.Erase(COL_BLACK);
checkAndInsert(aCRCs, aBitmap, "black bitmap");
aBitmap.Invert();
checkAndInsert(aCRCs, aBitmap, "white bitmap");
ScopedVclPtrInstance<VirtualDevice> aVDev;
aVDev->SetBackground(Wallpaper(COL_WHITE));
aVDev->SetOutputSizePixel(Size(1023, 759));
#if 0 // disabled for now - it breaks on OS/X and Windows
Bitmap aWhiteCheck = getAsBitmap(aVDev);
CPPUNIT_ASSERT(aCRCs.find(aWhiteCheck.GetChecksum()) != aCRCs.end());
#endif
// a 1x1 black & white checkerboard
aVDev->DrawCheckered(Point(), aVDev->GetOutputSizePixel(), 1, 1);
Bitmap aChecker = getAsBitmap(aVDev);
checkAndInsert(aCRCs, aChecker, "checkerboard");
aChecker.Invert();
checkAndInsert(aCRCs, aChecker, "inverted checkerboard");
}
} // namespace } // namespace
CPPUNIT_TEST_SUITE_REGISTRATION(BitmapTest); CPPUNIT_TEST_SUITE_REGISTRATION(BitmapTest);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment