tests/auto/qimagereader/tst_qimagereader.cpp
changeset 30 5dc02b23752f
parent 18 2f34d5167611
child 33 3e2da88830cd
equal deleted inserted replaced
29:b72c6db6890b 30:5dc02b23752f
   112     void readFromDevice();
   112     void readFromDevice();
   113 
   113 
   114     void readFromFileAfterJunk_data();
   114     void readFromFileAfterJunk_data();
   115     void readFromFileAfterJunk();
   115     void readFromFileAfterJunk();
   116 
   116 
       
   117     void devicePosition_data();
       
   118     void devicePosition();
       
   119 
   117     void setBackgroundColor_data();
   120     void setBackgroundColor_data();
   118     void setBackgroundColor();
   121     void setBackgroundColor();
   119 
   122 
   120     void supportsAnimation_data();
   123     void supportsAnimation_data();
   121     void supportsAnimation();
   124     void supportsAnimation();
   242     QTest::newRow("GIF: trolltech") << QString("trolltech.gif") << true << QByteArray("gif");
   245     QTest::newRow("GIF: trolltech") << QString("trolltech.gif") << true << QByteArray("gif");
   243 #endif
   246 #endif
   244 #if defined QTEST_HAVE_MNG
   247 #if defined QTEST_HAVE_MNG
   245     QTest::newRow("MNG: ball") << QString("ball.mng") << true << QByteArray("mng");
   248     QTest::newRow("MNG: ball") << QString("ball.mng") << true << QByteArray("mng");
   246     QTest::newRow("MNG: fire") << QString("fire.mng") << true << QByteArray("mng");
   249     QTest::newRow("MNG: fire") << QString("fire.mng") << true << QByteArray("mng");
       
   250 #endif
       
   251 #if defined QTEST_HAVE_SVG
       
   252     QTest::newRow("SVG: rect") << QString("rect.svg") << true << QByteArray("svg");
       
   253     QTest::newRow("SVGZ: rect") << QString("rect.svgz") << true << QByteArray("svgz");
   247 #endif
   254 #endif
   248 }
   255 }
   249 
   256 
   250 void tst_QImageReader::readImage()
   257 void tst_QImageReader::readImage()
   251 {
   258 {
   292                 QVERIFY(image2Reader.format().isEmpty());
   299                 QVERIFY(image2Reader.format().isEmpty());
   293             else
   300             else
   294                 QVERIFY(!image2Reader.format().isEmpty());
   301                 QVERIFY(!image2Reader.format().isEmpty());
   295         }
   302         }
   296         QCOMPARE(image, image2);
   303         QCOMPARE(image, image2);
   297 
       
   298         do {
   304         do {
   299             QVERIFY2(!image.isNull(), io.errorString().toLatin1().constData());
   305             QVERIFY2(!image.isNull(), io.errorString().toLatin1().constData());
   300         } while (!(image = io.read()).isNull());
   306         } while (!(image = io.read()).isNull());
   301     }
   307     }
   302 }
   308 }
   340 #endif // QTEST_HAVE_GIF
   346 #endif // QTEST_HAVE_GIF
   341 #ifdef QTEST_HAVE_MNG
   347 #ifdef QTEST_HAVE_MNG
   342     QTest::newRow("MNG: ball") << "ball" << QSize(200, 200) << QByteArray("mng");
   348     QTest::newRow("MNG: ball") << "ball" << QSize(200, 200) << QByteArray("mng");
   343     QTest::newRow("MNG: fire") << "fire" << QSize(200, 200) << QByteArray("mng");
   349     QTest::newRow("MNG: fire") << "fire" << QSize(200, 200) << QByteArray("mng");
   344 #endif // QTEST_HAVE_MNG
   350 #endif // QTEST_HAVE_MNG
       
   351 #if defined QTEST_HAVE_SVG
       
   352     QTest::newRow("SVG: rect") << "rect" << QSize(200, 200) << QByteArray("svg");
       
   353     QTest::newRow("SVGZ: rect") << "rect" << QSize(200, 200) << QByteArray("svgz");
       
   354 #endif
   345 }
   355 }
   346 
   356 
   347 void tst_QImageReader::setScaledSize()
   357 void tst_QImageReader::setScaledSize()
   348 {
   358 {
   349     QFETCH(QString, fileName);
   359     QFETCH(QString, fileName);
   407 #endif // QTEST_HAVE_GIF
   417 #endif // QTEST_HAVE_GIF
   408 #ifdef QTEST_HAVE_MNG
   418 #ifdef QTEST_HAVE_MNG
   409     QTest::newRow("MNG: ball") << "ball" << QRect(0, 0, 50, 50) << QByteArray("mng");
   419     QTest::newRow("MNG: ball") << "ball" << QRect(0, 0, 50, 50) << QByteArray("mng");
   410     QTest::newRow("MNG: fire") << "fire" << QRect(0, 0, 50, 50) << QByteArray("mng");
   420     QTest::newRow("MNG: fire") << "fire" << QRect(0, 0, 50, 50) << QByteArray("mng");
   411 #endif // QTEST_HAVE_MNG
   421 #endif // QTEST_HAVE_MNG
       
   422 #if defined QTEST_HAVE_SVG
       
   423     QTest::newRow("SVG: rect") << "rect" << QRect(0, 0, 50, 50) << QByteArray("svg");
       
   424     QTest::newRow("SVGZ: rect") << "rect" << QRect(0, 0, 50, 50) << QByteArray("svgz");
       
   425 #endif
   412 }
   426 }
   413 
   427 
   414 void tst_QImageReader::setClipRect()
   428 void tst_QImageReader::setClipRect()
   415 {
   429 {
   416     QFETCH(QString, fileName);
   430     QFETCH(QString, fileName);
   454 #endif // QTEST_HAVE_GIF
   468 #endif // QTEST_HAVE_GIF
   455 #ifdef QTEST_HAVE_MNG
   469 #ifdef QTEST_HAVE_MNG
   456     QTest::newRow("MNG: ball") << "ball" << QRect(0, 0, 50, 50) << QByteArray("mng");
   470     QTest::newRow("MNG: ball") << "ball" << QRect(0, 0, 50, 50) << QByteArray("mng");
   457     QTest::newRow("MNG: fire") << "fire" << QRect(0, 0, 50, 50) << QByteArray("mng");
   471     QTest::newRow("MNG: fire") << "fire" << QRect(0, 0, 50, 50) << QByteArray("mng");
   458 #endif // QTEST_HAVE_MNG
   472 #endif // QTEST_HAVE_MNG
       
   473 #if defined QTEST_HAVE_SVG
       
   474     QTest::newRow("SVG: rect") << "rect" << QRect(0, 0, 50, 50) << QByteArray("svg");
       
   475     QTest::newRow("SVGZ: rect") << "rect" << QRect(0, 0, 50, 50) << QByteArray("svgz");
       
   476 #endif
   459 }
   477 }
   460 
   478 
   461 void tst_QImageReader::setScaledClipRect()
   479 void tst_QImageReader::setScaledClipRect()
   462 {
   480 {
   463     QFETCH(QString, fileName);
   481     QFETCH(QString, fileName);
   507     QTest::newRow("bmp-2") << QString("font.bmp") << QByteArray("bmp") << QImage::Format_Indexed8;
   525     QTest::newRow("bmp-2") << QString("font.bmp") << QByteArray("bmp") << QImage::Format_Indexed8;
   508     QTest::newRow("png") << QString("kollada.png") << QByteArray("png") << QImage::Format_ARGB32;
   526     QTest::newRow("png") << QString("kollada.png") << QByteArray("png") << QImage::Format_ARGB32;
   509     QTest::newRow("png-2") << QString("YCbCr_cmyk.png") << QByteArray("png") << QImage::Format_RGB32;
   527     QTest::newRow("png-2") << QString("YCbCr_cmyk.png") << QByteArray("png") << QImage::Format_RGB32;
   510     QTest::newRow("mng-1") << QString("ball.mng") << QByteArray("mng") << QImage::Format_Invalid;
   528     QTest::newRow("mng-1") << QString("ball.mng") << QByteArray("mng") << QImage::Format_Invalid;
   511     QTest::newRow("mng-2") << QString("fire.mng") << QByteArray("mng") << QImage::Format_Invalid;
   529     QTest::newRow("mng-2") << QString("fire.mng") << QByteArray("mng") << QImage::Format_Invalid;
       
   530     QTest::newRow("svg") << QString("rect.svg") << QByteArray("svg") << QImage::Format_ARGB32_Premultiplied;
       
   531     QTest::newRow("svgz") << QString("rect.svgz") << QByteArray("svgz") << QImage::Format_ARGB32_Premultiplied;
   512 }
   532 }
   513 
   533 
   514 void tst_QImageReader::imageFormat()
   534 void tst_QImageReader::imageFormat()
   515 {
   535 {
   516     QFETCH(QString, fileName);
   536     QFETCH(QString, fileName);
   528 #endif // !QTEST_HAVE_GIF
   548 #endif // !QTEST_HAVE_GIF
   529         if (QByteArray("mng") == format)
   549         if (QByteArray("mng") == format)
   530 #ifndef QTEST_HAVE_MNG
   550 #ifndef QTEST_HAVE_MNG
   531             return;
   551             return;
   532 #endif // !QTEST_HAVE_MNG
   552 #endif // !QTEST_HAVE_MNG
       
   553         if (QByteArray("svg") == format || QByteArray("svgz") == format)
       
   554 #ifndef QTEST_HAVE_SVG
       
   555             return;
       
   556 #endif // !QTEST_HAVE_SVG
   533         QSKIP(("Qt does not support the " + format + " format.").constData(), SkipSingle);
   557         QSKIP(("Qt does not support the " + format + " format.").constData(), SkipSingle);
   534     } else {
   558     } else {
   535         QCOMPARE(QImageReader::imageFormat(prefix + fileName), format);
   559         QCOMPARE(QImageReader::imageFormat(prefix + fileName), format);
   536     }
   560     }
   537     QImageReader reader(prefix + fileName);
   561     QImageReader reader(prefix + fileName);
   602 #endif
   626 #endif
   603 #if defined QTEST_HAVE_MNG
   627 #if defined QTEST_HAVE_MNG
   604     QTest::newRow("MNG: ball") << QString("ball.mng") << QColor(Qt::yellow);
   628     QTest::newRow("MNG: ball") << QString("ball.mng") << QColor(Qt::yellow);
   605     QTest::newRow("MNG: fire") << QString("fire.mng") << QColor(Qt::gray);
   629     QTest::newRow("MNG: fire") << QString("fire.mng") << QColor(Qt::gray);
   606 #endif
   630 #endif
       
   631 #if defined QTEST_HAVE_SVG
       
   632     QTest::newRow("SVG: rect") << QString("rect.svg") << QColor(Qt::darkGreen);
       
   633     QTest::newRow("SVGZ: rect") << QString("rect.svgz") << QColor(Qt::darkGreen);
       
   634 #endif
   607 }
   635 }
   608 
   636 
   609 void tst_QImageReader::setBackgroundColor()
   637 void tst_QImageReader::setBackgroundColor()
   610 {
   638 {
   611     QFETCH(QString, fileName);
   639     QFETCH(QString, fileName);
   638     QTest::newRow("GIF: trolltech") << QString("trolltech.gif") << true;
   666     QTest::newRow("GIF: trolltech") << QString("trolltech.gif") << true;
   639 #endif
   667 #endif
   640 #if defined QTEST_HAVE_MNG
   668 #if defined QTEST_HAVE_MNG
   641     QTest::newRow("MNG: ball") << QString("ball.mng") << true;
   669     QTest::newRow("MNG: ball") << QString("ball.mng") << true;
   642     QTest::newRow("MNG: fire") << QString("fire.mng") << true;
   670     QTest::newRow("MNG: fire") << QString("fire.mng") << true;
       
   671 #endif
       
   672 #if defined QTEST_HAVE_SVG
       
   673     QTest::newRow("SVG: rect") << QString("rect.svg") << false;
       
   674     QTest::newRow("SVGZ: rect") << QString("rect.svgz") << false;
   643 #endif
   675 #endif
   644 }
   676 }
   645 
   677 
   646 void tst_QImageReader::supportsAnimation()
   678 void tst_QImageReader::supportsAnimation()
   647 {
   679 {
   977     QTest::newRow("png") << QString("kollada.png") << QByteArray("png");
  1009     QTest::newRow("png") << QString("kollada.png") << QByteArray("png");
   978 #ifdef QTEST_HAVE_MNG
  1010 #ifdef QTEST_HAVE_MNG
   979     QTest::newRow("mng-1") << QString("ball.mng") << QByteArray("mng");
  1011     QTest::newRow("mng-1") << QString("ball.mng") << QByteArray("mng");
   980     QTest::newRow("mng-2") << QString("fire.mng") << QByteArray("mng");
  1012     QTest::newRow("mng-2") << QString("fire.mng") << QByteArray("mng");
   981 #endif // QTEST_HAVE_MNG
  1013 #endif // QTEST_HAVE_MNG
       
  1014 #if defined QTEST_HAVE_SVG
       
  1015     QTest::newRow("svg") << QString("rect.svg") << QByteArray("svg");
       
  1016     QTest::newRow("svgz") << QString("rect.svgz") << QByteArray("svgz");
       
  1017 #endif
   982 }
  1018 }
   983 
  1019 
   984 void tst_QImageReader::readFromDevice()
  1020 void tst_QImageReader::readFromDevice()
   985 {
  1021 {
   986     QFETCH(QString, fileName);
  1022     QFETCH(QString, fileName);
  1057     QTest::newRow("bmp-1") << QString("colorful.bmp") << QByteArray("bmp");
  1093     QTest::newRow("bmp-1") << QString("colorful.bmp") << QByteArray("bmp");
  1058     QTest::newRow("bmp-2") << QString("font.bmp") << QByteArray("bmp");
  1094     QTest::newRow("bmp-2") << QString("font.bmp") << QByteArray("bmp");
  1059     QTest::newRow("png") << QString("kollada.png") << QByteArray("png");
  1095     QTest::newRow("png") << QString("kollada.png") << QByteArray("png");
  1060 //    QTest::newRow("mng-1") << QString("images/ball.mng") << QByteArray("mng");
  1096 //    QTest::newRow("mng-1") << QString("images/ball.mng") << QByteArray("mng");
  1061 //    QTest::newRow("mng-2") << QString("images/fire.mng") << QByteArray("mng");
  1097 //    QTest::newRow("mng-2") << QString("images/fire.mng") << QByteArray("mng");
       
  1098 #if defined QTEST_HAVE_SVG
       
  1099     QTest::newRow("svg") << QString("rect.svg") << QByteArray("svg");
       
  1100     QTest::newRow("svgz") << QString("rect.svgz") << QByteArray("svgz");
       
  1101 #endif
  1062 }
  1102 }
  1063 
  1103 
  1064 void tst_QImageReader::readFromFileAfterJunk()
  1104 void tst_QImageReader::readFromFileAfterJunk()
  1065 {
  1105 {
  1066     QFETCH(QString, fileName);
  1106     QFETCH(QString, fileName);
  1078     QFile imageFile(prefix + fileName);
  1118     QFile imageFile(prefix + fileName);
  1079     QVERIFY(imageFile.open(QFile::ReadOnly));
  1119     QVERIFY(imageFile.open(QFile::ReadOnly));
  1080     QByteArray imageData = imageFile.readAll();
  1120     QByteArray imageData = imageFile.readAll();
  1081     QVERIFY(!imageData.isNull());
  1121     QVERIFY(!imageData.isNull());
  1082 
  1122 
  1083     int iterations = 10;
  1123     int iterations = 3;
  1084     if (format == "ppm" || format == "pbm" || format == "pgm")
  1124     if (format == "ppm" || format == "pbm" || format == "pgm" || format == "svg" || format == "svgz")
  1085         iterations = 1;
  1125         iterations = 1;
  1086 
  1126 
  1087     if (format == "mng" || !QImageWriter::supportedImageFormats().contains(format)) {
  1127     if (format == "mng" || !QImageWriter::supportedImageFormats().contains(format)) {
  1088         for (int i = 0; i < iterations; ++i) {
  1128         for (int i = 0; i < iterations; ++i) {
  1089             junkFile.write("deadbeef", 9);
  1129             junkFile.write("deadbeef", 9);
  1107         QImageReader reader(&junkFile);
  1147         QImageReader reader(&junkFile);
  1108         QVERIFY(reader.canRead());
  1148         QVERIFY(reader.canRead());
  1109         QVERIFY(!reader.read().isNull());
  1149         QVERIFY(!reader.read().isNull());
  1110     }
  1150     }
  1111 }
  1151 }
       
  1152 
       
  1153 void tst_QImageReader::devicePosition_data()
       
  1154 {
       
  1155     QTest::addColumn<QString>("fileName");
       
  1156     QTest::addColumn<QByteArray>("format");
       
  1157 
       
  1158     QTest::newRow("pbm") << QString("image.pbm") << QByteArray("pbm");
       
  1159     QTest::newRow("pgm") << QString("image.pgm") << QByteArray("pgm");
       
  1160     QTest::newRow("ppm-1") << QString("image.ppm") << QByteArray("ppm");
       
  1161 #ifdef QTEST_HAVE_JPEG
       
  1162     QTest::newRow("jpeg-1") << QString("beavis.jpg") << QByteArray("jpeg");
       
  1163     QTest::newRow("jpeg-2") << QString("YCbCr_cmyk.jpg") << QByteArray("jpeg");
       
  1164     QTest::newRow("jpeg-3") << QString("YCbCr_rgb.jpg") << QByteArray("jpeg");
       
  1165 #endif
       
  1166 #if defined QTEST_HAVE_GIF
       
  1167     QTest::newRow("gif-1") << QString("earth.gif") << QByteArray("gif");
       
  1168 #endif
       
  1169     QTest::newRow("xbm") << QString("gnus.xbm") << QByteArray("xbm");
       
  1170     QTest::newRow("xpm") << QString("marble.xpm") << QByteArray("xpm");
       
  1171     QTest::newRow("bmp-1") << QString("colorful.bmp") << QByteArray("bmp");
       
  1172     QTest::newRow("bmp-2") << QString("font.bmp") << QByteArray("bmp");
       
  1173     QTest::newRow("png") << QString("kollada.png") << QByteArray("png");
       
  1174 //    QTest::newRow("mng-1") << QString("images/ball.mng") << QByteArray("mng");
       
  1175 //    QTest::newRow("mng-2") << QString("images/fire.mng") << QByteArray("mng");
       
  1176 #if defined QTEST_HAVE_SVG
       
  1177     QTest::newRow("svg") << QString("rect.svg") << QByteArray("svg");
       
  1178     QTest::newRow("svgz") << QString("rect.svgz") << QByteArray("svgz");
       
  1179 #endif
       
  1180 }
       
  1181 
       
  1182 void tst_QImageReader::devicePosition()
       
  1183 {
       
  1184     QFETCH(QString, fileName);
       
  1185     QFETCH(QByteArray, format);
       
  1186 
       
  1187     QImage expected(prefix + fileName);
       
  1188     QVERIFY(!expected.isNull());
       
  1189 
       
  1190     QFile imageFile(prefix + fileName);
       
  1191     QVERIFY(imageFile.open(QFile::ReadOnly));
       
  1192     QByteArray imageData = imageFile.readAll();
       
  1193     QVERIFY(!imageData.isNull());
       
  1194     int imageDataSize = imageData.size();
       
  1195 
       
  1196     const char *preStr = "prebeef\n";
       
  1197     int preLen = qstrlen(preStr);
       
  1198     imageData.prepend(preStr);
       
  1199     if (format != "svg" && format != "svgz") // Doesn't handle trailing data
       
  1200         imageData.append("\npostbeef");
       
  1201     QBuffer buf(&imageData);
       
  1202     buf.open(QIODevice::ReadOnly);
       
  1203     buf.seek(preLen);
       
  1204     QImageReader reader(&buf, format);
       
  1205     QCOMPARE(expected, reader.read());
       
  1206     if (format != "ppm" && format != "gif")  // Known not to work
       
  1207         QCOMPARE(buf.pos(), qint64(preLen+imageDataSize));
       
  1208 }
       
  1209 
  1112 
  1210 
  1113 void tst_QImageReader::description_data()
  1211 void tst_QImageReader::description_data()
  1114 {
  1212 {
  1115     QTest::addColumn<QString>("fileName");
  1213     QTest::addColumn<QString>("fileName");
  1116     QTest::addColumn<QStringMap>("description");
  1214     QTest::addColumn<QStringMap>("description");
  1229     QTest::newRow("fire.mng") << QString("fire.mng")
  1327     QTest::newRow("fire.mng") << QString("fire.mng")
  1230                                      << QByteArray("mng") << QSize(30, 60)
  1328                                      << QByteArray("mng") << QSize(30, 60)
  1231                                      << QString("");
  1329                                      << QString("");
  1232     QTest::newRow("ball.mng") << QString("ball.mng")
  1330     QTest::newRow("ball.mng") << QString("ball.mng")
  1233                                      << QByteArray("mng") << QSize(32, 32)
  1331                                      << QByteArray("mng") << QSize(32, 32)
       
  1332                                      << QString("");
       
  1333 #endif
       
  1334 #ifdef QTEST_HAVE_SVG
       
  1335     QTest::newRow("rect.svg") << QString("rect.svg")
       
  1336                                      << QByteArray("svg") << QSize(105, 137)
       
  1337                                      << QString("");
       
  1338     QTest::newRow("rect.svgz") << QString("rect.svgz")
       
  1339                                      << QByteArray("svgz") << QSize(105, 137)
       
  1340                                      << QString("");
       
  1341     QTest::newRow("corrupt.svg") << QString("corrupt.svg")
       
  1342                                      << QByteArray("svg") << QSize(0, 0)
       
  1343                                      << QString("");
       
  1344     QTest::newRow("corrupt.svgz") << QString("corrupt.svgz")
       
  1345                                      << QByteArray("svgz") << QSize(0, 0)
  1234                                      << QString("");
  1346                                      << QString("");
  1235 #endif
  1347 #endif
  1236     QTest::newRow("image.pbm") << QString("image.pbm")
  1348     QTest::newRow("image.pbm") << QString("image.pbm")
  1237                                       << QByteArray("pbm") << QSize(16, 6)
  1349                                       << QByteArray("pbm") << QSize(16, 6)
  1238                                       << QString("");
  1350                                       << QString("");
  1403                                           << QString("QImage: XPM pixels missing on image line 3");
  1515                                           << QString("QImage: XPM pixels missing on image line 3");
  1404     QTest::newRow("corrupt xbm") << QString("corrupt.xbm") << false << QString("");
  1516     QTest::newRow("corrupt xbm") << QString("corrupt.xbm") << false << QString("");
  1405 #if defined QTEST_HAVE_TIFF
  1517 #if defined QTEST_HAVE_TIFF
  1406     QTest::newRow("corrupt tiff") << QString("corrupt-data.tif") << true << QString("");
  1518     QTest::newRow("corrupt tiff") << QString("corrupt-data.tif") << true << QString("");
  1407 #endif
  1519 #endif
       
  1520 #if defined QTEST_HAVE_SVG
       
  1521     QTest::newRow("corrupt svg") << QString("corrupt.svg") << true << QString("");
       
  1522     QTest::newRow("corrupt svgz") << QString("corrupt.svgz") << true << QString("");
       
  1523 #endif
  1408 }
  1524 }
  1409 
  1525 
  1410 void tst_QImageReader::readCorruptImage()
  1526 void tst_QImageReader::readCorruptImage()
  1411 {
  1527 {
  1412     QFETCH(QString, fileName);
  1528     QFETCH(QString, fileName);
  1751 #endif
  1867 #endif
  1752 
  1868 
  1753 #if defined QTEST_HAVE_TIFF
  1869 #if defined QTEST_HAVE_TIFF
  1754     QTest::newRow("image_100dpi.tif") << "image_100dpi" << "tif" << "tiff";
  1870     QTest::newRow("image_100dpi.tif") << "image_100dpi" << "tif" << "tiff";
  1755 #endif
  1871 #endif
       
  1872 
       
  1873 #if defined QTEST_HAVE_SVG
       
  1874     QTest::newRow("rect.svg") << "rect" << "svg" << "svg";
       
  1875     QTest::newRow("rect.svgz") << "rect" << "svgz" << "svgz";
       
  1876 #endif
  1756 }
  1877 }
  1757 
  1878 
  1758 
  1879 
  1759 void tst_QImageReader::testIgnoresFormatAndExtension()
  1880 void tst_QImageReader::testIgnoresFormatAndExtension()
  1760 {
  1881 {