corona
1.0.2
|
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)); 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)); 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 }