Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

PNGTests.cpp

Go to the documentation of this file.
00001 #include "PNGTests.h"
00002 
00003 
00004 void
00005 PNGTests::testLoader() {
00006   static const string base = "images/pngsuite/";
00007 
00008   static const char* good[] = {
00009     "basi0g01.png",
00010     "basi0g02.png",
00011     "basi0g04.png",
00012     "basi0g08.png",
00013     "basi0g16.png",
00014     "basi2c08.png",
00015     "basi2c16.png",
00016     "basi3p01.png",
00017     "basi3p02.png",
00018     "basi3p04.png",
00019     "basi3p08.png",
00020     "basi4a08.png",
00021     "basi4a16.png",
00022     "basi6a08.png",
00023     "basi6a16.png",
00024     "basn0g01.png",
00025     "basn0g02.png",
00026     "basn0g04.png",
00027     "basn0g08.png",
00028     "basn0g16.png",
00029     "basn2c08.png",
00030     "basn2c16.png",
00031     "basn3p01.png",
00032     "basn3p02.png",
00033     "basn3p04.png",
00034     "basn3p08.png",
00035     "basn4a08.png",
00036     "basn4a16.png",
00037     "basn6a08.png",
00038     "basn6a16.png",
00039     "bgai4a08.png",
00040     "bgai4a16.png",
00041     "bgan6a08.png",
00042     "bgan6a16.png",
00043     "bgbn4a08.png",
00044     "bggn4a16.png",
00045     "bgwn6a08.png",
00046     "bgyn6a16.png",
00047     "ccwn2c08.png",
00048     "ccwn3p08.png",
00049     "cdfn2c08.png",
00050     "cdhn2c08.png",
00051     "cdsn2c08.png",
00052     "cdun2c08.png",
00053     "ch1n3p04.png",
00054     "ch2n3p08.png",
00055     "cm0n0g04.png",
00056     "cm7n0g04.png",
00057     "cm9n0g04.png",
00058     "cs3n2c16.png",
00059     "cs3n3p08.png",
00060     "cs5n2c08.png",
00061     "cs5n3p08.png",
00062     "cs8n2c08.png",
00063     "cs8n3p08.png",
00064     "ct0n0g04.png",
00065     "ct1n0g04.png",
00066     "ctzn0g04.png",
00067     "f00n0g08.png",
00068     "f00n2c08.png",
00069     "f01n0g08.png",
00070     "f01n2c08.png",
00071     "f02n0g08.png",
00072     "f02n2c08.png",
00073     "f03n0g08.png",
00074     "f03n2c08.png",
00075     "f04n0g08.png",
00076     "f04n2c08.png",
00077     "g03n0g16.png",
00078     "g03n2c08.png",
00079     "g03n3p04.png",
00080     "g04n0g16.png",
00081     "g04n2c08.png",
00082     "g04n3p04.png",
00083     "g05n0g16.png",
00084     "g05n2c08.png",
00085     "g05n3p04.png",
00086     "g07n0g16.png",
00087     "g07n2c08.png",
00088     "g07n3p04.png",
00089     "g10n0g16.png",
00090     "g10n2c08.png",
00091     "g10n3p04.png",
00092     "g25n0g16.png",
00093     "g25n2c08.png",
00094     "g25n3p04.png",
00095     "oi1n0g16.png",
00096     "oi1n2c16.png",
00097     "oi2n0g16.png",
00098     "oi2n2c16.png",
00099     "oi4n0g16.png",
00100     "oi4n2c16.png",
00101     "oi9n0g16.png",
00102     "oi9n2c16.png",
00103     "pngsuite_logo.png",
00104     "pp0n2c16.png",
00105     "pp0n6a08.png",
00106     "ps1n0g08.png",
00107     "ps1n2c16.png",
00108     "ps2n0g08.png",
00109     "ps2n2c16.png",
00110     "s01i3p01.png",
00111     "s01n3p01.png",
00112     "s02i3p01.png",
00113     "s02n3p01.png",
00114     "s03i3p01.png",
00115     "s03n3p01.png",
00116     "s04i3p01.png",
00117     "s04n3p01.png",
00118     "s05i3p02.png",
00119     "s05n3p02.png",
00120     "s06i3p02.png",
00121     "s06n3p02.png",
00122     "s07i3p02.png",
00123     "s07n3p02.png",
00124     "s08i3p02.png",
00125     "s08n3p02.png",
00126     "s09i3p02.png",
00127     "s09n3p02.png",
00128     "s32i3p04.png",
00129     "s32n3p04.png",
00130     "s33i3p04.png",
00131     "s33n3p04.png",
00132     "s34i3p04.png",
00133     "s34n3p04.png",
00134     "s35i3p04.png",
00135     "s35n3p04.png",
00136     "s36i3p04.png",
00137     "s36n3p04.png",
00138     "s37i3p04.png",
00139     "s37n3p04.png",
00140     "s38i3p04.png",
00141     "s38n3p04.png",
00142     "s39i3p04.png",
00143     "s39n3p04.png",
00144     "s40i3p04.png",
00145     "s40n3p04.png",
00146     "tbbn1g04.png",
00147     "tbbn2c16.png",
00148     "tbbn3p08.png",
00149     "tbgn2c16.png",
00150     "tbgn3p08.png",
00151     "tbrn2c08.png",
00152     "tbwn1g16.png",
00153     "tbwn3p08.png",
00154     "tbyn3p08.png",
00155     "tp0n1g08.png",
00156     "tp0n2c08.png",
00157     "tp0n3p08.png",
00158     "tp1n3p08.png",
00159     "z00n2c08.png",
00160     "z03n2c08.png",
00161     "z06n2c08.png",
00162     "z09n2c08.png",
00163   };
00164   static const int good_length = sizeof(good) / sizeof(*good);
00165 
00166   static const char* bad[] = {
00167     "x00n0g01.png",
00168     "xcrn0g04.png",
00169     "xlfn0g04.png",
00170   };
00171   static const int bad_length = sizeof(bad) / sizeof(*bad);
00172 
00173     
00174   for (int i = 0; i < good_length; ++i) {
00175     string fn = base + good[i];
00176     auto_ptr<Image> image(OpenImage(fn.c_str()));
00177     CPPUNIT_ASSERT_MESSAGE("should work - opening " + fn, image.get() != 0);
00178   }
00179 
00180   for (int i = 0; i < bad_length; ++i) {
00181     string fn = base + bad[i];
00182     auto_ptr<Image> image(OpenImage(fn.c_str()));
00183     CPPUNIT_ASSERT_MESSAGE("should fail - opening " + fn, image.get() == 0);
00184   }
00185 }
00186 
00187 
00188 void
00189 setRandomBytes(byte* b, int size) {
00190   while (size--) {
00191     *b++ = byte(rand() % 256);
00192   }
00193 }
00194 
00195 
00196 void
00197 PNGTests::testWriter() {
00198   static const int width  = 256;
00199   static const int height = 256;
00200 
00201   // create an image and fill it with random data
00202   auto_ptr<Image> image(CreateImage(width, height, PF_R8G8B8A8));
00203   setRandomBytes((byte*)image->getPixels(), width * height * 4);
00204 
00205   // generate filename
00206   char* filename = tmpnam(0);
00207   CPPUNIT_ASSERT_MESSAGE("opening temporary file", filename != 0);
00208 
00209   // save image
00210   CPPUNIT_ASSERT(SaveImage(filename, FF_PNG, image.get()) == true);
00211 
00212   // load it back
00213   auto_ptr<Image> img2(OpenImage(filename, PF_R8G8B8A8));
00214   CPPUNIT_ASSERT_MESSAGE("reloading image file", img2.get() != 0);
00215 
00216   AssertImagesEqual(
00217     "comparing saved with loaded",
00218     image.get(),
00219     img2.get());
00220 
00221   // force pixel format conversion (don't destroy the old image)
00222   auto_ptr<Image> img3(OpenImage(filename, PF_R8G8B8));
00223   CPPUNIT_ASSERT(SaveImage(filename, FF_PNG, img3.get()) == true);
00224 
00225   remove(filename);
00226 
00227 
00228   //== PALETTIZED SAVING TEST ==
00229   // disabled until loading palettized PNGs with a correct palette format
00230   // is implemented.
00231 #if 0
00232   char* plt_filename = tmpnam(0);
00233   CPPUNIT_ASSERT_MESSAGE("opening temporary file (palette)", plt_filename != 0);
00234   auto_ptr<Image> plt(CreateImage(256, 256, PF_I8, 256, PF_R8G8B8));
00235   setRandomBytes((byte*)plt->getPixels(), 256 * 256);
00236   setRandomBytes((byte*)plt->getPalette(), 256);
00237 
00238   CPPUNIT_ASSERT(SaveImage(plt_filename, FF_PNG, plt.get()) == true);
00239 
00240   auto_ptr<Image> plt2(OpenImage(plt_filename, FF_PNG));
00241   CPPUNIT_ASSERT_MESSAGE("reloading palettized image", plt2.get() != 0);
00242   CPPUNIT_ASSERT(plt2->getPaletteSize() == 256);
00243   CPPUNIT_ASSERT(plt2->getPaletteFormat() == PF_R8G8B8);
00244   CPPUNIT_ASSERT(plt2->getFormat() == PF_I8);
00245   AssertImagesEqual("Comparing palettized image", plt.get(), plt2.get());
00246 
00247   remove(plt_filename);
00248 #endif
00249 }
00250 
00251 
00252 Test*
00253 PNGTests::suite() {
00254   typedef TestCaller<PNGTests> Caller;
00255 
00256   TestSuite* suite = new TestSuite();
00257   suite->addTest(new Caller("Test PNG Loader", &PNGTests::testLoader));
00258   suite->addTest(new Caller("Test PNG Writer", &PNGTests::testWriter));
00259   return suite;
00260 }

Generated on Thu Oct 2 12:59:31 2003 for corona by doxygen1.3-rc1