+void ImageTestCase::CompareLoadedImage()
+{
+ wxImage expected8("horse.xpm");
+ CPPUNIT_ASSERT( expected8.IsOk() );
+
+ wxImage expected24("horse.png");
+ CPPUNIT_ASSERT( expected24.IsOk() );
+
+ const size_t dataLen = expected8.GetWidth() * expected8.GetHeight() * 3;
+
+ for (size_t i=0; i<WXSIZEOF(g_testfiles); i++)
+ {
+ if ( !(g_testfiles[i].bitDepth == 8 || g_testfiles[i].bitDepth == 24)
+ || g_testfiles[i].type == wxBITMAP_TYPE_JPEG /*skip lossy JPEG*/)
+ {
+ continue;
+ }
+
+ wxImage actual(g_testfiles[i].file);
+
+ if ( actual.GetSize() != expected8.GetSize() )
+ {
+ continue;
+ }
+
+
+ WX_ASSERT_MESSAGE
+ (
+ ("Compare test '%s' for loading failed", g_testfiles[i].file),
+
+ memcmp(actual.GetData(),
+ (g_testfiles[i].bitDepth == 8)
+ ? expected8.GetData()
+ : expected24.GetData(),
+ dataLen) == 0
+ );
+ }
+
+}
+
+void ImageTestCase::CompareSavedImage()
+{
+ wxImage expected24("horse.png");
+ CPPUNIT_ASSERT( expected24.IsOk() );
+
+ const size_t dataLen = expected24.GetWidth() * expected24.GetHeight() * 3;
+
+ const wxList& list = wxImage::GetHandlers();
+ for ( wxList::compatibility_iterator node = list.GetFirst();
+ node; node = node->GetNext() )
+ {
+ wxImageHandler *handler = (wxImageHandler *) node->GetData();
+
+ wxBitmapType type = handler->GetType();
+ if (type == wxBITMAP_TYPE_JPEG /* skip lossy JPEG */
+ || type == wxBITMAP_TYPE_TIF)
+ {
+ /*
+ TIFF is skipped because the memory stream can't be loaded. Libtiff
+ looks for a TIFF directory at offset 120008 while the memory
+ stream size is only 120008 bytes (when saving as a file
+ the file size is 120280 bytes).
+ */
+ continue;
+ }
+
+ wxMemoryOutputStream memOut;
+ if ( !expected24.SaveFile(memOut, type) )
+ {
+ // Unfortunately we can't know if the handler just doesn't support
+ // saving images, or if it failed to save.
+ continue;
+ }
+
+ if ( !memOut.GetSize() )
+ {
+ // A handler that does not support saving can return true during
+ // SaveFile, in that case the stream is empty.
+ continue;
+ }
+
+ wxMemoryInputStream memIn(memOut);
+ CPPUNIT_ASSERT(memIn.IsOk());
+
+ wxImage actual24(memIn);
+ CPPUNIT_ASSERT(actual24.IsOk());
+
+ CPPUNIT_ASSERT( actual24.GetSize() == expected24.GetSize() );
+
+ WX_ASSERT_MESSAGE
+ (
+ ("Compare test '%s' for saving failed", handler->GetExtension()),
+
+ memcmp(actual24.GetData(), expected24.GetData(),
+ dataLen) == 0
+ );
+ }
+}
+