corona  1.0.2
JPEGTests.cpp
Go to the documentation of this file.
00001 #include "JPEGTests.h"
00002 
00003 
00004 void
00005 JPEGTests::testLoader() {
00006   static string images[] = {
00007     "63",
00008     "63-1-subsampling",
00009     "63-floating",
00010     "63-high",
00011     "63-low",
00012     "63-progressive",
00013     "63-restart",
00014     "64",
00015     "comic-progressive",
00016   };
00017   static const int image_count = sizeof(images) / sizeof(*images);
00018 
00019   static const string img_prefix("images/jpeg/");
00020   static const string img_suffix(".jpeg");
00021 
00022   static const string ref_prefix("images/jpeg/ref/");
00023   static const string ref_suffix(".png");
00024 
00025   for (int i = 0; i < image_count; ++i) {
00026     AssertImagesEqual(img_prefix + images[i] + img_suffix,
00027                       ref_prefix + images[i] + ref_suffix);
00028   }
00029 }
00030 
00031 
00032 size_t getImageBufferSize(Image* image) {
00033   return GetPixelSize(image->getFormat()) *
00034          image->getWidth() * image->getHeight();
00035 }
00036 
00037 
00038 void
00039 JPEGTests::testSaver() {
00040   auto_ptr<Image> black(CreateImage(173, 229, PF_R8G8B8));
00041   auto_ptr<Image> white(CreateImage(149, 512, PF_R8G8B8));
00042 
00043   memset(black->getPixels(), 0x00, getImageBufferSize(black.get()));
00044   memset(white->getPixels(), 0xFF, getImageBufferSize(white.get()));
00045 
00046   std::string black_filename = tmpnam(0);
00047   std::string white_filename = tmpnam(0);
00048 
00049   CPPUNIT_ASSERT(SaveImage(black_filename + ".jpeg",
00050                            FF_AUTODETECT, black.get()));
00051   CPPUNIT_ASSERT(SaveImage(white_filename, FF_JPEG, white.get()));
00052 
00053   auto_ptr<Image> black_loaded(OpenImage(black_filename + ".jpeg"));
00054   auto_ptr<Image> white_loaded(OpenImage(white_filename));
00055 
00056   CPPUNIT_ASSERT(black_loaded.get() != 0);
00057   CPPUNIT_ASSERT(white_loaded.get() != 0);
00058 
00059   remove(black_filename.c_str());
00060   remove(white_filename.c_str());
00061 
00062   AssertImagesEqual("Saved messed up JPEG", black.get(), black_loaded.get());
00063   AssertImagesEqual("Saved messed up JPEG", white.get(), white_loaded.get());
00064 }
00065 
00066 
00067 void
00068 JPEGTests::testIncomplete() {
00069   auto_ptr<Image> image(OpenImage("images/jpeg/jack-incomplete.jpeg"));
00070   CPPUNIT_ASSERT(image.get() != 0);
00071 }
00072 
00073 
00074 Test*
00075 JPEGTests::suite() {
00076   typedef TestCaller<JPEGTests> Caller;
00077 
00078   TestSuite* suite = new TestSuite();
00079   suite->addTest(new Caller("JPEG Loader", &JPEGTests::testLoader));
00080   suite->addTest(new Caller("JPEG Saver",  &JPEGTests::testSaver));
00081   suite->addTest(new Caller("Incomplete JPEG", &JPEGTests::testIncomplete));
00082   return suite;
00083 }