diff options
Diffstat (limited to 'tests/auto/qimagereader/tst_qimagereader.cpp')
-rw-r--r-- | tests/auto/qimagereader/tst_qimagereader.cpp | 2026 |
1 files changed, 0 insertions, 2026 deletions
diff --git a/tests/auto/qimagereader/tst_qimagereader.cpp b/tests/auto/qimagereader/tst_qimagereader.cpp deleted file mode 100644 index 6359468597..0000000000 --- a/tests/auto/qimagereader/tst_qimagereader.cpp +++ /dev/null @@ -1,2026 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - - -#include <QtTest/QtTest> - -#include <QBuffer> -#include <QDebug> -#include <QFile> -#include <QImage> -#include <QImageReader> -#include <QImageWriter> -#include <QLabel> -#include <QPixmap> -#include <QSet> -#include <QTcpSocket> -#include <QTcpServer> -#include <QTimer> - -#include "../platformquirks.h" - -#if defined(Q_OS_SYMBIAN) -# define SRCDIR "." -#endif - -typedef QMap<QString, QString> QStringMap; -typedef QList<int> QIntList; -Q_DECLARE_METATYPE(QImage) -Q_DECLARE_METATYPE(QRect) -Q_DECLARE_METATYPE(QSize) -Q_DECLARE_METATYPE(QColor) -Q_DECLARE_METATYPE(QStringMap) -Q_DECLARE_METATYPE(QIntList) -Q_DECLARE_METATYPE(QIODevice *) -Q_DECLARE_METATYPE(QImage::Format) - -//TESTED_FILES= - -class tst_QImageReader : public QObject -{ - Q_OBJECT - -public: - tst_QImageReader(); - virtual ~tst_QImageReader(); - -public slots: - void init(); - void cleanup(); - -private slots: - void getSetCheck(); - void readImage_data(); - void readImage(); - void jpegRgbCmyk(); - - void setScaledSize_data(); - void setScaledSize(); - - void setClipRect_data(); - void setClipRect(); - - void setScaledClipRect_data(); - void setScaledClipRect(); - - void imageFormat_data(); - void imageFormat(); - - void blackXPM(); - void transparentXPM(); - void multiWordNamedColorXPM(); - - void supportedFormats(); - - void readFromDevice_data(); - void readFromDevice(); - - void readFromFileAfterJunk_data(); - void readFromFileAfterJunk(); - - void devicePosition_data(); - void devicePosition(); - - void setBackgroundColor_data(); - void setBackgroundColor(); - - void supportsAnimation_data(); - void supportsAnimation(); - - void readFromResources_data(); - void readFromResources(); - - void dotsPerMeter_data(); - void dotsPerMeter(); - - void physicalDpi_data(); - void physicalDpi(); - - void sizeBeforeRead_data(); - void sizeBeforeRead(); - - void sizeBeforeFormat_data(); - void sizeBeforeFormat(); - - void imageFormatBeforeRead_data(); - void imageFormatBeforeRead(); - - void gifHandlerBugs(); - void animatedGif(); - void gifImageCount(); - void gifLoopCount(); - - void readCorruptImage_data(); - void readCorruptImage(); - void readCorruptBmp(); - - void supportsOption_data(); - void supportsOption(); - - void tiffCompression_data(); - void tiffCompression(); - void tiffEndianness(); - - void tiffOrientation_data(); - void tiffOrientation(); - - void tiffGrayscale(); - - void autoDetectImageFormat(); - void fileNameProbing(); - - void pixelCompareWithBaseline_data(); - void pixelCompareWithBaseline(); - - void task255627_setNullScaledSize_data(); - void task255627_setNullScaledSize(); - - void testIgnoresFormatAndExtension_data(); - void testIgnoresFormatAndExtension(); - - void saveFormat_data(); - void saveFormat(); - - void readText_data(); - void readText(); - - void preserveTexts_data(); - void preserveTexts(); -}; - -static const QLatin1String prefix(SRCDIR "/images/"); - -// helper to skip an autotest when the given image format is not supported -#define SKIP_IF_UNSUPPORTED(format) do { \ - if (!QByteArray(format).isEmpty() && !QImageReader::supportedImageFormats().contains(format)) \ - QSKIP("\"" + QByteArray(format) + "\" images are not supported", SkipSingle); \ -} while (0) - -// Testing get/set functions -void tst_QImageReader::getSetCheck() -{ - QImageReader obj1; - // QIODevice * QImageReader::device() - // void QImageReader::setDevice(QIODevice *) - QFile *var1 = new QFile; - obj1.setDevice(var1); - - //A bit strange but that's the only way to compile under windows. - QCOMPARE((QIODevice *) var1, obj1.device()); - obj1.setDevice((QIODevice *)0); - QCOMPARE((QIODevice *) 0, - obj1.device()); - delete var1; -} - -tst_QImageReader::tst_QImageReader() -{ -} - -tst_QImageReader::~tst_QImageReader() -{ - -} - -void tst_QImageReader::init() -{ -} - -void tst_QImageReader::cleanup() -{ -} - -void tst_QImageReader::readImage_data() -{ - QTest::addColumn<QString>("fileName"); - QTest::addColumn<bool>("success"); - QTest::addColumn<QByteArray>("format"); - - QTest::newRow("empty") << QString() << false << QByteArray(); - QTest::newRow("BMP: colorful") << QString("colorful.bmp") << true << QByteArray("bmp"); - QTest::newRow("BMP: test32bfv4") << QString("test32bfv4.bmp") << true << QByteArray("bmp"); - QTest::newRow("BMP: test32v5") << QString("test32v5.bmp") << true << QByteArray("bmp"); - QTest::newRow("BMP: font") << QString("font.bmp") << true << QByteArray("bmp"); - QTest::newRow("BMP: signed char") << QString("crash-signed-char.bmp") << true << QByteArray("bmp"); - QTest::newRow("BMP: 4bpp RLE") << QString("4bpp-rle.bmp") << true << QByteArray("bmp"); - QTest::newRow("BMP: 4bpp uncompressed") << QString("tst7.bmp") << true << QByteArray("bmp"); - QTest::newRow("BMP: 16bpp") << QString("16bpp.bmp") << true << QByteArray("bmp"); - QTest::newRow("BMP: negative height") << QString("negativeheight.bmp") << true << QByteArray("bmp"); - QTest::newRow("XPM: marble") << QString("marble.xpm") << true << QByteArray("xpm"); - QTest::newRow("PNG: kollada") << QString("kollada.png") << true << QByteArray("png"); - QTest::newRow("PPM: teapot") << QString("teapot.ppm") << true << QByteArray("ppm"); - QTest::newRow("PPM: runners") << QString("runners.ppm") << true << QByteArray("ppm"); - QTest::newRow("PPM: test") << QString("test.ppm") << true << QByteArray("ppm"); - QTest::newRow("XBM: gnus") << QString("gnus.xbm") << true << QByteArray("xbm"); - - QTest::newRow("JPEG: beavis") << QString("beavis.jpg") << true << QByteArray("jpeg"); - QTest::newRow("JPEG: qtbug13653") << QString("qtbug13653-no_eoi.jpg") << true << QByteArray("jpeg"); - - QTest::newRow("GIF: earth") << QString("earth.gif") << true << QByteArray("gif"); - QTest::newRow("GIF: trolltech") << QString("trolltech.gif") << true << QByteArray("gif"); - - QTest::newRow("MNG: ball") << QString("ball.mng") << true << QByteArray("mng"); - QTest::newRow("MNG: fire") << QString("fire.mng") << true << QByteArray("mng"); - - QTest::newRow("SVG: rect") << QString("rect.svg") << true << QByteArray("svg"); - QTest::newRow("SVGZ: rect") << QString("rect.svgz") << true << QByteArray("svgz"); -} - -void tst_QImageReader::readImage() -{ - QFETCH(QString, fileName); - QFETCH(bool, success); - QFETCH(QByteArray, format); - - SKIP_IF_UNSUPPORTED(format); - - for (int i = 0; i < 2; ++i) { - QImageReader io(prefix + fileName, i ? QByteArray() : format); - if (success) { - if (!io.supportsAnimation()) - QVERIFY(io.imageCount() > 0); - } else { - QCOMPARE(io.imageCount(), -1); - } - QImage image = io.read(); - if (!success) { - QVERIFY(image.isNull()); - return; - } - - QVERIFY2(!image.isNull(), io.errorString().toLatin1().constData()); - - // No format - QImageReader io2(prefix + fileName); - QVERIFY2(!io2.read().isNull(), io.errorString().toLatin1().constData()); - - // No extension, no format - QImageReader io3(prefix + fileName.left(fileName.lastIndexOf(QLatin1Char('.')))); - QVERIFY2(!io3.read().isNull(), io.errorString().toLatin1().constData()); - - // Read into \a image2 - QImage image2; - QImageReader image2Reader(prefix + fileName, i ? QByteArray() : format); - QCOMPARE(image2Reader.format(), format); - QVERIFY(image2Reader.read(&image2)); - if (image2Reader.canRead()) { - if (i) - QVERIFY(!image2Reader.format().isEmpty()); - else - QCOMPARE(image2Reader.format(), format); - } else { - if (i) - QVERIFY(image2Reader.format().isEmpty()); - else - QVERIFY(!image2Reader.format().isEmpty()); - } - QCOMPARE(image, image2); - do { - QVERIFY2(!image.isNull(), io.errorString().toLatin1().constData()); - } while (!(image = io.read()).isNull()); - } -} - -void tst_QImageReader::jpegRgbCmyk() -{ - QImage image1(prefix + QLatin1String("YCbCr_cmyk.jpg")); - QImage image2(prefix + QLatin1String("YCbCr_cmyk.png")); - - if (PlatformQuirks::isImageLoaderImprecise()) { - // first, do some obvious tests - QCOMPARE(image1.height(), image2.height()); - QCOMPARE(image1.width(), image2.width()); - QCOMPARE(image1.format(), image2.format()); - QCOMPARE(image1.format(), QImage::Format_RGB32); - - // compare all the pixels with a slack of 3. This ignores rounding errors in libjpeg/libpng - for (int h = 0; h < image1.height(); ++h) { - const uchar *s1 = image1.constScanLine(h); - const uchar *s2 = image2.constScanLine(h); - for (int w = 0; w < image1.width() * 4; ++w) { - if (*s1 != *s2) { - QVERIFY2(qAbs(*s1 - *s2) <= 3, qPrintable(QString("images differ in line %1, col %2 (image1: %3, image2: %4)").arg(h).arg(w).arg(*s1, 0, 16).arg(*s2, 0, 16))); - } - s1++; - s2++; - } - } - } else { - QCOMPARE(image1, image2); - } -} - -void tst_QImageReader::setScaledSize_data() -{ - QTest::addColumn<QString>("fileName"); - QTest::addColumn<QSize>("newSize"); - QTest::addColumn<QByteArray>("format"); - - QTest::newRow("BMP: colorful") << "colorful" << QSize(200, 200) << QByteArray("bmp"); - QTest::newRow("BMP: font") << "font" << QSize(200, 200) << QByteArray("bmp"); - QTest::newRow("XPM: marble") << "marble" << QSize(200, 200) << QByteArray("xpm"); - QTest::newRow("PNG: kollada") << "kollada" << QSize(200, 200) << QByteArray("png"); - QTest::newRow("PPM: teapot") << "teapot" << QSize(200, 200) << QByteArray("ppm"); - QTest::newRow("PPM: runners") << "runners.ppm" << QSize(400, 400) << QByteArray("ppm"); - QTest::newRow("PPM: test") << "test.ppm" << QSize(10, 10) << QByteArray("ppm"); - QTest::newRow("XBM: gnus") << "gnus" << QSize(200, 200) << QByteArray("xbm"); - - QTest::newRow("JPEG: beavis A") << "beavis" << QSize(200, 200) << QByteArray("jpeg"); - QTest::newRow("JPEG: beavis B") << "beavis" << QSize(175, 175) << QByteArray("jpeg"); - QTest::newRow("JPEG: beavis C") << "beavis" << QSize(100, 100) << QByteArray("jpeg"); - QTest::newRow("JPEG: beavis D") << "beavis" << QSize(100, 200) << QByteArray("jpeg"); - QTest::newRow("JPEG: beavis E") << "beavis" << QSize(200, 100) << QByteArray("jpeg"); - QTest::newRow("JPEG: beavis F") << "beavis" << QSize(87, 87) << QByteArray("jpeg"); - QTest::newRow("JPEG: beavis G") << "beavis" << QSize(50, 45) << QByteArray("jpeg"); - QTest::newRow("JPEG: beavis H") << "beavis" << QSize(43, 43) << QByteArray("jpeg"); - QTest::newRow("JPEG: beavis I") << "beavis" << QSize(25, 25) << QByteArray("jpeg"); - - QTest::newRow("GIF: earth") << "earth" << QSize(200, 200) << QByteArray("gif"); - QTest::newRow("GIF: trolltech") << "trolltech" << QSize(200, 200) << QByteArray("gif"); - - QTest::newRow("MNG: ball") << "ball" << QSize(200, 200) << QByteArray("mng"); - QTest::newRow("MNG: fire") << "fire" << QSize(200, 200) << QByteArray("mng"); - - QTest::newRow("SVG: rect") << "rect" << QSize(200, 200) << QByteArray("svg"); - QTest::newRow("SVGZ: rect") << "rect" << QSize(200, 200) << QByteArray("svgz"); -} - -void tst_QImageReader::setScaledSize() -{ - QFETCH(QString, fileName); - QFETCH(QSize, newSize); - QFETCH(QByteArray, format); - - SKIP_IF_UNSUPPORTED(format); - - QImageReader reader(prefix + fileName); - reader.setScaledSize(newSize); - QImage image = reader.read(); - QVERIFY(!image.isNull()); - - QCOMPARE(image.size(), newSize); -} - -void tst_QImageReader::task255627_setNullScaledSize_data() -{ - setScaledSize_data(); -} - -void tst_QImageReader::task255627_setNullScaledSize() -{ - QFETCH(QString, fileName); - QFETCH(QByteArray, format); - - SKIP_IF_UNSUPPORTED(format); - - QImageReader reader(prefix + fileName); - - // set a null size - reader.setScaledSize(QSize(0, 0)); - reader.setQuality(0); - QImage image = reader.read(); - QVERIFY(image.isNull()); - QCOMPARE(image.size(), QSize(0, 0)); -} - -void tst_QImageReader::setClipRect_data() -{ - QTest::addColumn<QString>("fileName"); - QTest::addColumn<QRect>("newRect"); - QTest::addColumn<QByteArray>("format"); - QTest::newRow("BMP: colorful") << "colorful" << QRect(0, 0, 50, 50) << QByteArray("bmp"); - QTest::newRow("BMP: test32bfv4") << "test32bfv4" << QRect(0, 0, 50, 50) << QByteArray("bmp"); - QTest::newRow("BMP: test32v5") << "test32v5" << QRect(0, 0, 50, 50) << QByteArray("bmp"); - QTest::newRow("BMP: font") << "font" << QRect(0, 0, 50, 50) << QByteArray("bmp"); - QTest::newRow("BMP: 4bpp uncompressed") << "tst7.bmp" << QRect(0, 0, 31, 31) << QByteArray("bmp"); - QTest::newRow("XPM: marble") << "marble" << QRect(0, 0, 50, 50) << QByteArray("xpm"); - QTest::newRow("PNG: kollada") << "kollada" << QRect(0, 0, 50, 50) << QByteArray("png"); - QTest::newRow("PPM: teapot") << "teapot" << QRect(0, 0, 50, 50) << QByteArray("ppm"); - QTest::newRow("PPM: runners") << "runners.ppm" << QRect(0, 0, 50, 50) << QByteArray("ppm"); - QTest::newRow("PPM: test") << "test.ppm" << QRect(0, 0, 50, 50) << QByteArray("ppm"); - QTest::newRow("XBM: gnus") << "gnus" << QRect(0, 0, 50, 50) << QByteArray("xbm"); - - QTest::newRow("JPEG: beavis") << "beavis" << QRect(0, 0, 50, 50) << QByteArray("jpeg"); - - QTest::newRow("GIF: earth") << "earth" << QRect(0, 0, 50, 50) << QByteArray("gif"); - QTest::newRow("GIF: trolltech") << "trolltech" << QRect(0, 0, 50, 50) << QByteArray("gif"); - - QTest::newRow("MNG: ball") << "ball" << QRect(0, 0, 50, 50) << QByteArray("mng"); - QTest::newRow("MNG: fire") << "fire" << QRect(0, 0, 50, 50) << QByteArray("mng"); - - QTest::newRow("SVG: rect") << "rect" << QRect(0, 0, 50, 50) << QByteArray("svg"); - QTest::newRow("SVGZ: rect") << "rect" << QRect(0, 0, 50, 50) << QByteArray("svgz"); -} - -void tst_QImageReader::setClipRect() -{ - QFETCH(QString, fileName); - QFETCH(QRect, newRect); - QFETCH(QByteArray, format); - - SKIP_IF_UNSUPPORTED(format); - - QImageReader reader(prefix + fileName); - reader.setClipRect(newRect); - QImage image = reader.read(); - QVERIFY(!image.isNull()); - QCOMPARE(image.rect(), newRect); - - QImageReader originalReader(prefix + fileName); - QImage originalImage = originalReader.read(); - QCOMPARE(originalImage.copy(newRect), image); -} - -void tst_QImageReader::setScaledClipRect_data() -{ - QTest::addColumn<QString>("fileName"); - QTest::addColumn<QRect>("newRect"); - QTest::addColumn<QByteArray>("format"); - - QTest::newRow("BMP: colorful") << "colorful" << QRect(0, 0, 50, 50) << QByteArray("bmp"); - QTest::newRow("BMP: test32bfv4") << "test32bfv4" << QRect(0, 0, 50, 50) << QByteArray("bmp"); - QTest::newRow("BMP: test32v5") << "test32v5" << QRect(0, 0, 50, 50) << QByteArray("bmp"); - QTest::newRow("BMP: font") << "font" << QRect(0, 0, 50, 50) << QByteArray("bmp"); - QTest::newRow("XPM: marble") << "marble" << QRect(0, 0, 50, 50) << QByteArray("xpm"); - QTest::newRow("PNG: kollada") << "kollada" << QRect(0, 0, 50, 50) << QByteArray("png"); - QTest::newRow("PPM: teapot") << "teapot" << QRect(0, 0, 50, 50) << QByteArray("ppm"); - QTest::newRow("PPM: runners") << "runners.ppm" << QRect(0, 0, 50, 50) << QByteArray("ppm"); - QTest::newRow("PPM: test") << "test.ppm" << QRect(0, 0, 50, 50) << QByteArray("ppm"); - QTest::newRow("XBM: gnus") << "gnus" << QRect(0, 0, 50, 50) << QByteArray("xbm"); - - QTest::newRow("JPEG: beavis") << "beavis" << QRect(0, 0, 50, 50) << QByteArray("jpeg"); - - QTest::newRow("GIF: earth") << "earth" << QRect(0, 0, 50, 50) << QByteArray("gif"); - QTest::newRow("GIF: trolltech") << "trolltech" << QRect(0, 0, 50, 50) << QByteArray("gif"); - - QTest::newRow("MNG: ball") << "ball" << QRect(0, 0, 50, 50) << QByteArray("mng"); - QTest::newRow("MNG: fire") << "fire" << QRect(0, 0, 50, 50) << QByteArray("mng"); - - QTest::newRow("SVG: rect") << "rect" << QRect(0, 0, 50, 50) << QByteArray("svg"); - QTest::newRow("SVGZ: rect") << "rect" << QRect(0, 0, 50, 50) << QByteArray("svgz"); -} - -void tst_QImageReader::setScaledClipRect() -{ - QFETCH(QString, fileName); - QFETCH(QRect, newRect); - QFETCH(QByteArray, format); - - SKIP_IF_UNSUPPORTED(format); - - QImageReader reader(prefix + fileName); - reader.setScaledSize(QSize(300, 300)); - reader.setScaledClipRect(newRect); - QImage image = reader.read(); - QVERIFY(!image.isNull()); - QCOMPARE(image.rect(), newRect); - - QImageReader originalReader(prefix + fileName); - originalReader.setScaledSize(QSize(300, 300)); - QImage originalImage = originalReader.read(); - QCOMPARE(originalImage.copy(newRect), image); -} - -void tst_QImageReader::imageFormat_data() -{ - QTest::addColumn<QString>("fileName"); - QTest::addColumn<QByteArray>("format"); - QTest::addColumn<QImage::Format>("imageFormat"); - - QTest::newRow("pbm") << QString("image.pbm") << QByteArray("pbm") << QImage::Format_Mono; - QTest::newRow("pgm") << QString("image.pgm") << QByteArray("pgm") << QImage::Format_Indexed8; - QTest::newRow("ppm-1") << QString("image.ppm") << QByteArray("ppm") << QImage::Format_RGB32; - QTest::newRow("ppm-2") << QString("teapot.ppm") << QByteArray("ppm") << QImage::Format_RGB32; - QTest::newRow("ppm-3") << QString("runners.ppm") << QByteArray("ppm") << QImage::Format_RGB32; - QTest::newRow("ppm-4") << QString("test.ppm") << QByteArray("ppm") << QImage::Format_RGB32; - - QTest::newRow("jpeg-1") << QString("beavis.jpg") << QByteArray("jpeg") << QImage::Format_Indexed8; - QTest::newRow("jpeg-2") << QString("YCbCr_cmyk.jpg") << QByteArray("jpeg") << QImage::Format_RGB32; - QTest::newRow("jpeg-3") << QString("YCbCr_rgb.jpg") << QByteArray("jpeg") << QImage::Format_RGB32; - - QTest::newRow("gif-1") << QString("earth.gif") << QByteArray("gif") << QImage::Format_Invalid; - QTest::newRow("gif-2") << QString("trolltech.gif") << QByteArray("gif") << QImage::Format_Invalid; - - QTest::newRow("xbm") << QString("gnus.xbm") << QByteArray("xbm") << QImage::Format_MonoLSB; - QTest::newRow("xpm") << QString("marble.xpm") << QByteArray("xpm") << QImage::Format_Indexed8; - QTest::newRow("bmp-1") << QString("colorful.bmp") << QByteArray("bmp") << QImage::Format_Indexed8; - QTest::newRow("bmp-2") << QString("font.bmp") << QByteArray("bmp") << QImage::Format_Indexed8; - QTest::newRow("bmp-3") << QString("test32bfv4.bmp") << QByteArray("bmp") << QImage::Format_RGB32; - QTest::newRow("bmp-4") << QString("test32v5.bmp") << QByteArray("bmp") << QImage::Format_RGB32; - QTest::newRow("png") << QString("kollada.png") << QByteArray("png") << QImage::Format_ARGB32; - QTest::newRow("png-2") << QString("YCbCr_cmyk.png") << QByteArray("png") << QImage::Format_RGB32; - QTest::newRow("mng-1") << QString("ball.mng") << QByteArray("mng") << QImage::Format_Invalid; - QTest::newRow("mng-2") << QString("fire.mng") << QByteArray("mng") << QImage::Format_Invalid; - QTest::newRow("svg") << QString("rect.svg") << QByteArray("svg") << QImage::Format_ARGB32_Premultiplied; - QTest::newRow("svgz") << QString("rect.svgz") << QByteArray("svgz") << QImage::Format_ARGB32_Premultiplied; -} - -void tst_QImageReader::imageFormat() -{ - QFETCH(QString, fileName); - QFETCH(QByteArray, format); - QFETCH(QImage::Format, imageFormat); - - SKIP_IF_UNSUPPORTED(format); - - QCOMPARE(QImageReader::imageFormat(prefix + fileName), format); - QImageReader reader(prefix + fileName); - QCOMPARE(reader.imageFormat(), imageFormat); -} - -void tst_QImageReader::blackXPM() -{ - QImage image(prefix + QLatin1String("black.xpm")); - QImage image2(prefix + QLatin1String("black.png")); - QCOMPARE(image.pixel(25, 25), qRgb(190, 190, 190)); - QCOMPARE(image.pixel(25, 25), image2.pixel(25, 25)); -} - -void tst_QImageReader::transparentXPM() -{ - QImage image(prefix + QLatin1String("nontransparent.xpm")); - QImage image2(prefix + QLatin1String("transparent.xpm")); - QCOMPARE(image.format(), QImage::Format_RGB32); - QCOMPARE(image2.format(), QImage::Format_ARGB32); -} - -void tst_QImageReader::multiWordNamedColorXPM() -{ - QImage image(prefix + QLatin1String("namedcolors.xpm")); - QCOMPARE(image.pixel(0, 0), qRgb(102, 139, 139)); // pale turquoise 4 - QCOMPARE(image.pixel(0, 1), qRgb(250, 250, 210)); // light golden rod yellow - QCOMPARE(image.pixel(0, 2), qRgb(255, 250, 205)); // lemon chiffon -} - -void tst_QImageReader::supportedFormats() -{ - QList<QByteArray> formats = QImageReader::supportedImageFormats(); - QList<QByteArray> sortedFormats = formats; - qSort(sortedFormats); - - // check that the list is sorted - QCOMPARE(formats, sortedFormats); - - QSet<QByteArray> formatSet; - foreach (QByteArray format, formats) - formatSet << format; - - // check that the list does not contain duplicates - QCOMPARE(formatSet.size(), formats.size()); -} - -void tst_QImageReader::setBackgroundColor_data() -{ - QTest::addColumn<QString>("fileName"); - QTest::addColumn<QColor>("color"); - - QTest::newRow("BMP: colorful") << QString("colorful.bmp") << QColor(Qt::white); - QTest::newRow("BMP: font") << QString("font.bmp") << QColor(Qt::black); - QTest::newRow("BMP: signed char") << QString("crash-signed-char.bmp") << QColor(Qt::red); - QTest::newRow("XPM: marble") << QString("marble.xpm") << QColor(Qt::darkRed); - QTest::newRow("PNG: kollada") << QString("kollada.png") << QColor(Qt::green); - QTest::newRow("PPM: teapot") << QString("teapot.ppm") << QColor(Qt::darkGreen); - QTest::newRow("PPM: runners") << QString("runners.ppm") << QColor(Qt::red); - QTest::newRow("PPM: test") << QString("test.ppm") << QColor(Qt::white); - QTest::newRow("XBM: gnus") << QString("gnus.xbm") << QColor(Qt::blue); - - QTest::newRow("JPEG: beavis") << QString("beavis.jpg") << QColor(Qt::darkBlue); - - QTest::newRow("GIF: earth") << QString("earth.gif") << QColor(Qt::cyan); - QTest::newRow("GIF: trolltech") << QString("trolltech.gif") << QColor(Qt::magenta); - - QTest::newRow("MNG: ball") << QString("ball.mng") << QColor(Qt::yellow); - QTest::newRow("MNG: fire") << QString("fire.mng") << QColor(Qt::gray); - - QTest::newRow("SVG: rect") << QString("rect.svg") << QColor(Qt::darkGreen); - QTest::newRow("SVGZ: rect") << QString("rect.svgz") << QColor(Qt::darkGreen); -} - -void tst_QImageReader::setBackgroundColor() -{ - QFETCH(QString, fileName); - QFETCH(QColor, color); - QImageReader io("images/" + fileName); - io.setBackgroundColor(color); - if (io.backgroundColor().isValid()) - QCOMPARE(io.backgroundColor(), color); -} - -void tst_QImageReader::supportsAnimation_data() -{ - QTest::addColumn<QString>("fileName"); - QTest::addColumn<bool>("success"); - - QTest::newRow("BMP: colorful") << QString("colorful.bmp") << false; - QTest::newRow("BMP: font") << QString("font.bmp") << false; - QTest::newRow("BMP: signed char") << QString("crash-signed-char.bmp") << false; - QTest::newRow("BMP: test32bfv4") << QString("test32bfv4.bmp") << false;; - QTest::newRow("BMP: test32v5") << QString("test32v5.bmp") << false; - QTest::newRow("XPM: marble") << QString("marble.xpm") << false; - QTest::newRow("PNG: kollada") << QString("kollada.png") << false; - QTest::newRow("PPM: teapot") << QString("teapot.ppm") << false; - QTest::newRow("PPM: teapot") << QString("teapot.ppm") << false; - QTest::newRow("PPM: runners") << QString("runners.ppm") << false; - QTest::newRow("XBM: gnus") << QString("gnus.xbm") << false; - - QTest::newRow("JPEG: beavis") << QString("beavis.jpg") << false; - - QTest::newRow("GIF: earth") << QString("earth.gif") << true; - QTest::newRow("GIF: trolltech") << QString("trolltech.gif") << true; - - QTest::newRow("MNG: ball") << QString("ball.mng") << true; - QTest::newRow("MNG: fire") << QString("fire.mng") << true; - - QTest::newRow("SVG: rect") << QString("rect.svg") << false; - QTest::newRow("SVGZ: rect") << QString("rect.svgz") << false; -} - -void tst_QImageReader::supportsAnimation() -{ - QFETCH(QString, fileName); - QFETCH(bool, success); - QImageReader io(prefix + fileName); - QCOMPARE(io.supportsAnimation(), success); -} - -void tst_QImageReader::sizeBeforeRead_data() -{ - imageFormat_data(); -} - -void tst_QImageReader::sizeBeforeRead() -{ - QFETCH(QString, fileName); - QFETCH(QByteArray, format); - - SKIP_IF_UNSUPPORTED(format); - - QImageReader reader(prefix + fileName); - QVERIFY(reader.canRead()); - if (format == "mng") { - QCOMPARE(reader.size(), QSize()); - return; - } - - QSize size = reader.size(); - QVERIFY(reader.canRead()); - QImage image = reader.read(); - QVERIFY(!image.isNull()); - QCOMPARE(size, image.size()); -} - -void tst_QImageReader::sizeBeforeFormat_data() -{ - imageFormat_data(); -} - -void tst_QImageReader::sizeBeforeFormat() -{ - QFETCH(QString, fileName); - - QByteArray formatA, formatB; - - { - QImageReader reader(prefix + fileName); - formatA = reader.format(); - } - - { - QImageReader reader(prefix + fileName); - QSize size = reader.size(); - formatB = reader.format(); - } - - QCOMPARE(formatA, formatB); -} - -void tst_QImageReader::imageFormatBeforeRead_data() -{ - imageFormat_data(); -} - -void tst_QImageReader::imageFormatBeforeRead() -{ - QFETCH(QString, fileName); - QFETCH(QByteArray, format); - QFETCH(QImage::Format, imageFormat); - - SKIP_IF_UNSUPPORTED(format); - - QImageReader reader(fileName); - if (reader.supportsOption(QImageIOHandler::ImageFormat)) { - QImage::Format fileFormat = reader.imageFormat(); - QCOMPARE(fileFormat, imageFormat); - QSize size = reader.size(); - QImage image(size, fileFormat); - QVERIFY(reader.read(&image)); - QCOMPARE(image.format(), fileFormat); - } -} - -void tst_QImageReader::gifHandlerBugs() -{ - SKIP_IF_UNSUPPORTED("gif"); - - { - QImageReader io(prefix + "trolltech.gif"); - QVERIFY(io.loopCount() != 1); - int count=0; - for (; io.canRead(); io.read(), ++count) ; - QVERIFY(count == 34); - } - - // Task 95166 - { - QImageReader io1(prefix + "bat1.gif"); - QImageReader io2(prefix + "bat2.gif"); - QVERIFY(io1.canRead()); - QVERIFY(io2.canRead()); - QImage im1 = io1.read(); - QImage im2 = io2.read(); - QVERIFY(!im1.isNull()); - QVERIFY(!im2.isNull()); - QCOMPARE(im1, im2); - } - - // Task 9994 - { - QImageReader io1(prefix + "noclearcode.gif"); - QImageReader io2(prefix + "noclearcode.bmp"); - QVERIFY(io1.canRead()); QVERIFY(io2.canRead()); - QImage im1 = io1.read(); QImage im2 = io2.read(); - QVERIFY(!im1.isNull()); QVERIFY(!im2.isNull()); - QCOMPARE(im1.convertToFormat(QImage::Format_ARGB32), im2.convertToFormat(QImage::Format_ARGB32)); - } - - // Check the undocumented feature. - { - QImageReader io(prefix + "endless-anim.gif"); - QVERIFY(io.canRead()); - QCOMPARE(io.loopCount(), -1); - } -} - -void tst_QImageReader::animatedGif() -{ - SKIP_IF_UNSUPPORTED("gif"); - - QImageReader io(":images/qt.gif"); - QImage image = io.read(); - QVERIFY(!image.isNull()); - int i = 0; - while(!image.isNull()){ - QString frameName = QString(":images/qt%1.gif").arg(++i); - QCOMPARE(image, QImage(frameName)); - image = io.read(); - } -} - -// http://bugreports.qt.nokia.com/browse/QTBUG-6696 -// Check the count of images in various call orders... -void tst_QImageReader::gifImageCount() -{ - SKIP_IF_UNSUPPORTED("gif"); - - // just read every frame... and see how much we got.. - { - QImageReader io(":images/four-frames.gif"); - - QVERIFY(io.canRead()); - QImage blackFrame = io.read(); - - QVERIFY(io.canRead()); - QImage whiteFrame = io.read(); - - QVERIFY(io.canRead()); - QImage greenFrame = io.read(); - - QVERIFY(io.imageCount() == 4); - - QVERIFY(io.canRead()); - QImage blueFrame = io.read(); - - QVERIFY(!io.canRead()); - QImage emptyFrame = io.read(); - - QVERIFY(!io.canRead()); - QCOMPARE(blackFrame.pixel(0,0), qRgb(0, 0, 0)); - QCOMPARE(blackFrame.size(), QSize(64,64)); - - QCOMPARE(whiteFrame.pixel(0,0), qRgb(0xff, 0xff, 0xff)); - QCOMPARE(whiteFrame.size(), QSize(64,64)); - - QCOMPARE(greenFrame.pixel(0,0), qRgb(0x0, 0xff, 0x0)); - QCOMPARE(greenFrame.size(), QSize(64,64)); - - QCOMPARE(blueFrame.pixel(0,0), qRgb(0x0, 0x0, 0xff)); - QCOMPARE(blueFrame.size(), QSize(64,64)); - QVERIFY(emptyFrame.isNull()); - } - - // Read and get the size - { - QImageReader io(":images/four-frames.gif"); - - QVERIFY(io.canRead()); - QCOMPARE(io.size(), QSize(64,64)); - - QVERIFY(io.canRead()); - QCOMPARE(io.size(), QSize(64,64)); - QCOMPARE(io.size(), QSize(64,64)); - QVERIFY(io.canRead()); - QImage blackFrame = io.read(); - - QVERIFY(io.canRead()); - QCOMPARE(io.size(), QSize(64,64)); - QCOMPARE(io.size(), QSize(64,64)); - QVERIFY(io.canRead()); - QImage whiteFrame = io.read(); - - QVERIFY(io.canRead()); - QCOMPARE(io.size(), QSize(64,64)); - QCOMPARE(io.size(), QSize(64,64)); - QVERIFY(io.canRead()); - QImage greenFrame = io.read(); - - QVERIFY(io.canRead()); - QCOMPARE(io.size(), QSize(64,64)); - QCOMPARE(io.size(), QSize(64,64)); - QVERIFY(io.canRead()); - QImage blueFrame = io.read(); - - QVERIFY(!io.canRead()); - QCOMPARE(io.size(), QSize()); - QCOMPARE(io.size(), QSize()); - QVERIFY(!io.canRead()); - QImage emptyFrame = io.read(); - - QVERIFY(!io.canRead()); - QCOMPARE(blackFrame.pixel(0,0), qRgb(0, 0, 0)); - QCOMPARE(blackFrame.size(), QSize(64,64)); - - QCOMPARE(whiteFrame.pixel(0,0), qRgb(0xff, 0xff, 0xff)); - QCOMPARE(whiteFrame.size(), QSize(64,64)); - - QCOMPARE(greenFrame.pixel(0,0), qRgb(0x0, 0xff, 0x0)); - QCOMPARE(greenFrame.size(), QSize(64,64)); - - QCOMPARE(blueFrame.pixel(0,0), qRgb(0x0, 0x0, 0xff)); - QCOMPARE(blueFrame.size(), QSize(64,64)); - QVERIFY(emptyFrame.isNull()); - } - - // Do a Size query as substitute for canRead - { - QImageReader io(":images/four-frames.gif"); - - QCOMPARE(io.size(), QSize(64,64)); - QCOMPARE(io.size(), QSize(64,64)); - QImage blackFrame = io.read(); - - QCOMPARE(io.size(), QSize(64,64)); - QCOMPARE(io.size(), QSize(64,64)); - QImage whiteFrame = io.read(); - - QCOMPARE(io.size(), QSize(64,64)); - QCOMPARE(io.size(), QSize(64,64)); - QImage greenFrame = io.read(); - - QCOMPARE(io.size(), QSize(64,64)); - QCOMPARE(io.size(), QSize(64,64)); - QImage blueFrame = io.read(); - - QCOMPARE(io.size(), QSize()); - QVERIFY(!io.canRead()); - QImage emptyFrame = io.read(); - - QVERIFY(!io.canRead()); - QCOMPARE(blackFrame.pixel(0,0), qRgb(0, 0, 0)); - QCOMPARE(blackFrame.size(), QSize(64,64)); - - QCOMPARE(whiteFrame.pixel(0,0), qRgb(0xff, 0xff, 0xff)); - QCOMPARE(whiteFrame.size(), QSize(64,64)); - - QCOMPARE(greenFrame.pixel(0,0), qRgb(0x0, 0xff, 0x0)); - QCOMPARE(greenFrame.size(), QSize(64,64)); - - QCOMPARE(blueFrame.pixel(0,0), qRgb(0x0, 0x0, 0xff)); - QCOMPARE(blueFrame.size(), QSize(64,64)); - QVERIFY(emptyFrame.isNull()); - } - { - QImageReader io(":images/trolltech.gif"); - QVERIFY(io.imageCount() == 34); - QVERIFY(io.size() == QSize(128,64)); - } -} - -void tst_QImageReader::gifLoopCount() -{ - SKIP_IF_UNSUPPORTED("gif"); - - { - QImageReader io(":images/qt-gif-anim.gif"); - QCOMPARE(io.loopCount(), -1); // infinite loop - } - { - QImageReader io(":images/qt-gif-noanim.gif"); - QCOMPARE(io.loopCount(), 0); // no loop - } -} - -class Server : public QObject -{ - Q_OBJECT -public: - Server(const QByteArray &data) :serverSocket(0) - { - connect(&server, SIGNAL(newConnection()), this, SLOT(acceptNewConnection())); - server.listen(); - this->data = data; - } - -public slots: - void runTest() - { - connect(&clientSocket, SIGNAL(connected()), this, SLOT(connected())); - clientSocket.connectToHost(QHostAddress::LocalHost, server.serverPort()); - } - -public: - inline QTcpSocket *socket() const { return serverSocket; } - -signals: - void ready(); - -private slots: - void acceptNewConnection() - { - serverSocket = server.nextPendingConnection(); - connect(serverSocket, SIGNAL(error(QAbstractSocket::SocketError)), - this, SLOT(remoteHostClosed())); - } - - void connected() - { - clientSocket.write(data); - clientSocket.disconnectFromHost(); - } - - void remoteHostClosed() - { - emit ready(); - } - -private: - QTcpServer server; - QTcpSocket clientSocket; - QTcpSocket *serverSocket; - QByteArray data; -}; - -void tst_QImageReader::readFromDevice_data() -{ - QTest::addColumn<QString>("fileName"); - QTest::addColumn<QByteArray>("format"); - - QTest::newRow("pbm") << QString("image.pbm") << QByteArray("pbm"); - QTest::newRow("pgm") << QString("image.pgm") << QByteArray("pgm"); - QTest::newRow("ppm-1") << QString("image.ppm") << QByteArray("ppm"); - QTest::newRow("ppm-2") << QString("teapot.ppm") << QByteArray("ppm"); - QTest::newRow("ppm-3") << QString("teapot.ppm") << QByteArray("ppm"); - QTest::newRow("ppm-4") << QString("runners.ppm") << QByteArray("ppm"); - - QTest::newRow("jpeg-1") << QString("beavis.jpg") << QByteArray("jpeg"); - QTest::newRow("jpeg-2") << QString("YCbCr_cmyk.jpg") << QByteArray("jpeg"); - QTest::newRow("jpeg-3") << QString("YCbCr_rgb.jpg") << QByteArray("jpeg"); - QTest::newRow("jpeg-4") << QString("qtbug13653-no_eoi.jpg") << QByteArray("jpeg"); - - QTest::newRow("gif-1") << QString("earth.gif") << QByteArray("gif"); - QTest::newRow("gif-2") << QString("trolltech.gif") << QByteArray("gif"); - - QTest::newRow("xbm") << QString("gnus.xbm") << QByteArray("xbm"); - QTest::newRow("xpm") << QString("marble.xpm") << QByteArray("xpm"); - QTest::newRow("bmp-1") << QString("colorful.bmp") << QByteArray("bmp"); - QTest::newRow("bmp-2") << QString("font.bmp") << QByteArray("bmp"); - QTest::newRow("bmp-3") << QString("test32bfv4.bmp") << QByteArray("bmp"); - QTest::newRow("bmp-4") << QString("test32v5.bmp") << QByteArray("bmp"); - QTest::newRow("png") << QString("kollada.png") << QByteArray("png"); - - QTest::newRow("mng-1") << QString("ball.mng") << QByteArray("mng"); - QTest::newRow("mng-2") << QString("fire.mng") << QByteArray("mng"); - - QTest::newRow("svg") << QString("rect.svg") << QByteArray("svg"); - QTest::newRow("svgz") << QString("rect.svgz") << QByteArray("svgz"); -} - -void tst_QImageReader::readFromDevice() -{ - QFETCH(QString, fileName); - QFETCH(QByteArray, format); - - SKIP_IF_UNSUPPORTED(format); - - QImage expectedImage(prefix + fileName, format); - - QFile file(prefix + fileName); - QVERIFY(file.open(QFile::ReadOnly)); - QByteArray imageData = file.readAll(); - QVERIFY(!imageData.isEmpty()); - { - QBuffer buffer; - buffer.setData(imageData); - QVERIFY(buffer.open(QBuffer::ReadOnly)); - - QImageReader reader(&buffer); - QVERIFY(reader.canRead()); - QImage imageReaderImage = reader.read(); - - QCOMPARE(imageReaderImage, expectedImage); - - buffer.seek(0); - - QImage image1; - QVERIFY(image1.loadFromData((const uchar *)buffer.data().data(), - buffer.data().size(), format.data())); - QCOMPARE(image1, expectedImage); - - QByteArray throughBase64 = QByteArray::fromBase64(imageData.toBase64()); - QVERIFY(image1.loadFromData((const uchar *)throughBase64.data(), - throughBase64.size(), format.data())); - QCOMPARE(image1, expectedImage); - } - -#if defined (Q_OS_SYMBIAN) && defined (__WINS__) - //the emulator hangs in socket write (this is a test bug, it assumes the TCP stack can accept a whole image to its buffers) - if(imageData.size() > 16384) - QSKIP("image larger than socket buffer (test needs to be rewritten)", SkipSingle); -#endif - Server server(imageData); - QEventLoop loop; - connect(&server, SIGNAL(ready()), &loop, SLOT(quit())); - QTimer::singleShot(0, &server, SLOT(runTest())); - QTimer::singleShot(5000, &loop, SLOT(quit())); - loop.exec(); - - QImageReader reader(server.socket(), format == "xbm" ? "xbm" : ""); - if (format == "xbm") - QVERIFY(!reader.canRead()); - else - QVERIFY(reader.canRead()); - QImage imageReaderImage = reader.read(); - QCOMPARE(imageReaderImage, expectedImage); -} - -void tst_QImageReader::readFromFileAfterJunk_data() -{ - QTest::addColumn<QString>("fileName"); - QTest::addColumn<QByteArray>("format"); - - QTest::newRow("pbm") << QString("image.pbm") << QByteArray("pbm"); - QTest::newRow("pgm") << QString("image.pgm") << QByteArray("pgm"); - QTest::newRow("ppm-1") << QString("image.ppm") << QByteArray("ppm"); - QTest::newRow("ppm-2") << QString("teapot.ppm") << QByteArray("ppm"); - QTest::newRow("ppm-3") << QString("teapot.ppm") << QByteArray("ppm"); - QTest::newRow("ppm-4") << QString("runners.ppm") << QByteArray("ppm"); - - QTest::newRow("jpeg-1") << QString("beavis.jpg") << QByteArray("jpeg"); - QTest::newRow("jpeg-2") << QString("YCbCr_cmyk.jpg") << QByteArray("jpeg"); - QTest::newRow("jpeg-3") << QString("YCbCr_rgb.jpg") << QByteArray("jpeg"); - - QTest::newRow("xbm") << QString("gnus.xbm") << QByteArray("xbm"); - QTest::newRow("xpm") << QString("marble.xpm") << QByteArray("xpm"); - QTest::newRow("bmp-1") << QString("colorful.bmp") << QByteArray("bmp"); - QTest::newRow("bmp-2") << QString("font.bmp") << QByteArray("bmp"); - QTest::newRow("bmp-3") << QString("test32bfv4.bmp") << QByteArray("bmp"); - QTest::newRow("bmp-4") << QString("test32v5.bmp") << QByteArray("bmp"); - QTest::newRow("png") << QString("kollada.png") << QByteArray("png"); - QTest::newRow("svg") << QString("rect.svg") << QByteArray("svg"); - QTest::newRow("svgz") << QString("rect.svgz") << QByteArray("svgz"); -} - -void tst_QImageReader::readFromFileAfterJunk() -{ - QFETCH(QString, fileName); - QFETCH(QByteArray, format); - - SKIP_IF_UNSUPPORTED(format); - - QFile::remove("junk"); - QFile junkFile("junk"); - QVERIFY(junkFile.open(QFile::WriteOnly)); - - QFile imageFile(prefix + fileName); - QVERIFY(imageFile.open(QFile::ReadOnly)); - QByteArray imageData = imageFile.readAll(); - QVERIFY(!imageData.isNull()); - - int iterations = 3; - if (format == "ppm" || format == "pbm" || format == "pgm" || format == "svg" || format == "svgz") - iterations = 1; - - if (format == "mng" || !QImageWriter::supportedImageFormats().contains(format)) { - for (int i = 0; i < iterations; ++i) { - junkFile.write("deadbeef", 9); - QCOMPARE(junkFile.write(imageData), qint64(imageData.size())); - } - } else { - for (int i = 0; i < iterations; ++i) { - QImageWriter writer(&junkFile, format); - junkFile.write("deadbeef", 9); - QVERIFY(writer.write(QImage(prefix + fileName))); - } - } - junkFile.close(); - junkFile.open(QFile::ReadOnly); - - for (int i = 0; i < iterations; ++i) { - QByteArray ole = junkFile.read(9); - junkFile.ungetChar(ole[ole.size() - 1]); - char c; - junkFile.getChar(&c); - QImageReader reader(&junkFile); - QVERIFY(reader.canRead()); - QVERIFY(!reader.read().isNull()); - } -} - -void tst_QImageReader::devicePosition_data() -{ - QTest::addColumn<QString>("fileName"); - QTest::addColumn<QByteArray>("format"); - - QTest::newRow("pbm") << QString("image.pbm") << QByteArray("pbm"); - QTest::newRow("pgm") << QString("image.pgm") << QByteArray("pgm"); - QTest::newRow("ppm-1") << QString("image.ppm") << QByteArray("ppm"); - - QTest::newRow("jpeg-1") << QString("beavis.jpg") << QByteArray("jpeg"); - QTest::newRow("jpeg-2") << QString("YCbCr_cmyk.jpg") << QByteArray("jpeg"); - QTest::newRow("jpeg-3") << QString("YCbCr_rgb.jpg") << QByteArray("jpeg"); - - QTest::newRow("gif-1") << QString("earth.gif") << QByteArray("gif"); - - QTest::newRow("xbm") << QString("gnus.xbm") << QByteArray("xbm"); - QTest::newRow("xpm") << QString("marble.xpm") << QByteArray("xpm"); - QTest::newRow("bmp-1") << QString("colorful.bmp") << QByteArray("bmp"); - QTest::newRow("bmp-2") << QString("font.bmp") << QByteArray("bmp"); - QTest::newRow("bmp-3") << QString("test32bfv4.bmp") << QByteArray("bmp"); - QTest::newRow("bmp-4") << QString("test32v5.bmp") << QByteArray("bmp"); - QTest::newRow("png") << QString("kollada.png") << QByteArray("png"); - QTest::newRow("svg") << QString("rect.svg") << QByteArray("svg"); - QTest::newRow("svgz") << QString("rect.svgz") << QByteArray("svgz"); -} - -void tst_QImageReader::devicePosition() -{ - QFETCH(QString, fileName); - QFETCH(QByteArray, format); - - SKIP_IF_UNSUPPORTED(format); - - QImage expected(prefix + fileName); - QVERIFY(!expected.isNull()); - - QFile imageFile(prefix + fileName); - QVERIFY(imageFile.open(QFile::ReadOnly)); - QByteArray imageData = imageFile.readAll(); - QVERIFY(!imageData.isNull()); - int imageDataSize = imageData.size(); - - const char *preStr = "prebeef\n"; - int preLen = qstrlen(preStr); - imageData.prepend(preStr); - if (format != "svg" && format != "svgz") // Doesn't handle trailing data - imageData.append("\npostbeef"); - QBuffer buf(&imageData); - buf.open(QIODevice::ReadOnly); - buf.seek(preLen); - QImageReader reader(&buf, format); - QCOMPARE(expected, reader.read()); - if (format != "ppm" && - format != "pgm" && - format != "pbm" && - format != "gif") // Known not to work - QCOMPARE(buf.pos(), qint64(preLen+imageDataSize)); -} - - -void tst_QImageReader::readFromResources_data() -{ - QTest::addColumn<QString>("fileName"); - QTest::addColumn<QByteArray>("format"); - QTest::addColumn<QSize>("size"); - QTest::addColumn<QString>("message"); - - QTest::newRow("corrupt.bmp") << QString("corrupt.bmp") - << QByteArray("bmp") << QSize(0, 0) - << QString(""); - QTest::newRow("negativeheight.bmp") << QString("negativeheight.bmp") - << QByteArray("bmp") << QSize(127, 64) - << QString(""); - QTest::newRow("font.bmp") << QString("font.bmp") - << QByteArray("bmp") << QSize(240, 8) - << QString(""); - QTest::newRow("noclearcode.bmp") << QString("noclearcode.bmp") - << QByteArray("bmp") << QSize(29, 18) - << QString(""); - QTest::newRow("colorful.bmp") << QString("colorful.bmp") - << QByteArray("bmp") << QSize(320, 200) - << QString(""); - QTest::newRow("16bpp.bmp") << QString("16bpp.bmp") - << QByteArray("bmp") << QSize(320, 240) - << QString(""); - QTest::newRow("crash-signed-char.bmp") << QString("crash-signed-char.bmp") - << QByteArray("bmp") << QSize(360, 280) - << QString(""); - QTest::newRow("4bpp-rle.bmp") << QString("4bpp-rle.bmp") - << QByteArray("bmp") << QSize(640, 480) - << QString(""); - QTest::newRow("test32bfv4.bmp") << QString("test32bfv4.bmp") - << QByteArray("bmp") << QSize(373, 156) - << QString(""); - QTest::newRow("test32v5.bmp") << QString("test32v5.bmp") - << QByteArray("bmp") << QSize(373, 156) - << QString(""); - QTest::newRow("corrupt.gif") << QString("corrupt.gif") - << QByteArray("gif") << QSize(0, 0) - << QString(""); - QTest::newRow("trolltech.gif") << QString("trolltech.gif") - << QByteArray("gif") << QSize(128, 64) - << QString(""); - QTest::newRow("noclearcode.gif") << QString("noclearcode.gif") - << QByteArray("gif") << QSize(29, 18) - << QString(""); - QTest::newRow("earth.gif") << QString("earth.gif") - << QByteArray("gif") << QSize(320, 200) - << QString(""); - QTest::newRow("bat1.gif") << QString("bat1.gif") - << QByteArray("gif") << QSize(32, 32) - << QString(""); - QTest::newRow("bat2.gif") << QString("bat2.gif") - << QByteArray("gif") << QSize(32, 32) - << QString(""); - QTest::newRow("corrupt.jpg") << QString("corrupt.jpg") - << QByteArray("jpg") << QSize(0, 0) - << QString("JPEG datastream contains no image"); - QTest::newRow("beavis.jpg") << QString("beavis.jpg") - << QByteArray("jpg") << QSize(350, 350) - << QString(""); - QTest::newRow("YCbCr_cmyk.jpg") << QString("YCbCr_cmyk.jpg") - << QByteArray("jpg") << QSize(75, 50) - << QString(""); - QTest::newRow("YCbCr_rgb.jpg") << QString("YCbCr_rgb.jpg") - << QByteArray("jpg") << QSize(75, 50) - << QString(""); - QTest::newRow("qtbug13653-no_eoi.jpg") << QString("qtbug13653-no_eoi.jpg") - << QByteArray("jpg") << QSize(240, 180) - << QString(""); - QTest::newRow("corrupt.mng") << QString("corrupt.mng") - << QByteArray("mng") << QSize(0, 0) - << QString("MNG error 901: Application signalled I/O error; chunk IHDR; subcode 0:0"); - QTest::newRow("fire.mng") << QString("fire.mng") - << QByteArray("mng") << QSize(30, 60) - << QString(""); - QTest::newRow("ball.mng") << QString("ball.mng") - << QByteArray("mng") << QSize(32, 32) - << QString(""); - QTest::newRow("rect.svg") << QString("rect.svg") - << QByteArray("svg") << QSize(105, 137) - << QString(""); - QTest::newRow("rect.svgz") << QString("rect.svgz") - << QByteArray("svgz") << QSize(105, 137) - << QString(""); - QTest::newRow("corrupt.svg") << QString("corrupt.svg") - << QByteArray("svg") << QSize(0, 0) - << QString(""); - QTest::newRow("corrupt.svgz") << QString("corrupt.svgz") - << QByteArray("svgz") << QSize(0, 0) - << QString(""); - QTest::newRow("image.pbm") << QString("image.pbm") - << QByteArray("pbm") << QSize(16, 6) - << QString(""); - QTest::newRow("image.pgm") << QString("image.pgm") - << QByteArray("pgm") << QSize(24, 7) - << QString(""); - QTest::newRow("corrupt.png") << QString("corrupt.png") - << QByteArray("png") << QSize(0, 0) - << QString(""); - QTest::newRow("away.png") << QString("away.png") - << QByteArray("png") << QSize(16, 16) - << QString(""); - QTest::newRow("image.png") << QString("image.png") - << QByteArray("png") << QSize(22, 22) - << QString(""); - QTest::newRow("kollada.png") << QString("kollada.png") - << QByteArray("png") << QSize(436, 160) - << QString(""); - QTest::newRow("black.png") << QString("black.png") - << QByteArray("png") << QSize(48, 48) - << QString(""); - QTest::newRow("YCbCr_cmyk.png") << QString("YCbCr_cmyk.png") - << QByteArray("png") << QSize(75, 50) - << QString(""); - QTest::newRow("teapot.ppm") << QString("teapot.ppm") - << QByteArray("ppm") << QSize(256, 256) - << QString(""); - QTest::newRow("image.ppm") << QString("image.ppm") - << QByteArray("ppm") << QSize(4, 4) - << QString(""); - QTest::newRow("runners.ppm") << QString("runners.ppm") - << QByteArray("ppm") << QSize(400, 400) - << QString(""); - QTest::newRow("test.ppm") << QString("test.ppm") - << QByteArray("ppm") << QSize(10, 10) - << QString(""); - QTest::newRow("gnus.xbm") << QString("gnus.xbm") - << QByteArray("xbm") << QSize(271, 273) - << QString(""); - QTest::newRow("corrupt-colors.xpm") << QString("corrupt-colors.xpm") - << QByteArray("xpm") << QSize(0, 0) - << QString("QImage: XPM color specification is missing: bla9an.n#x"); - QTest::newRow("corrupt-pixels.xpm") << QString("corrupt-pixels.xpm") - << QByteArray("xpm") << QSize(0, 0) - << QString("QImage: XPM pixels missing on image line 3"); - QTest::newRow("corrupt-pixel-count.xpm") << QString("corrupt-pixel-count.xpm") - << QByteArray("xpm") << QSize(0, 0) - << QString(""); - QTest::newRow("marble.xpm") << QString("marble.xpm") - << QByteArray("xpm") << QSize(240, 240) - << QString(""); - QTest::newRow("test.xpm") << QString("test.xpm") - << QByteArray("xpm") << QSize(256, 256) - << QString(""); - QTest::newRow("black.xpm") << QString("black.xpm") - << QByteArray("xpm") << QSize(48, 48) - << QString(""); - QTest::newRow("namedcolors.xpm") << QString("namedcolors.xpm") - << QByteArray("xpm") << QSize(8, 8) - << QString(""); - QTest::newRow("nontransparent.xpm") << QString("nontransparent.xpm") - << QByteArray("xpm") << QSize(8, 8) - << QString(""); - QTest::newRow("transparent.xpm") << QString("transparent.xpm") - << QByteArray("xpm") << QSize(8, 8) - << QString(""); -} - -void tst_QImageReader::readFromResources() -{ - QFETCH(QString, fileName); - QFETCH(QByteArray, format); - QFETCH(QSize, size); - QFETCH(QString, message); - - SKIP_IF_UNSUPPORTED(format); - - for (int i = 0; i < 2; ++i) { - QString file = i ? (":/images/" + fileName) : (prefix + fileName); - { - // suppress warnings if we expect them - if (!message.isEmpty()) { - for (int j = 0; j < 5; ++j) - QTest::ignoreMessage(QtWarningMsg, message.toLatin1()); - } - - // 1) full filename, no format - QImageReader reader(file); - QImage image = reader.read(); - if (size.isNull()) - QVERIFY(image.isNull()); - else - QVERIFY(!image.isNull()); - QCOMPARE(image.size(), size); - } - { - // 2) full filename, with format - QImageReader reader(file, format); - QImage image = reader.read(); - if (size.isNull()) - QVERIFY(image.isNull()); - else - QVERIFY(!image.isNull()); - QCOMPARE(image.size(), size); - } - { - // 3) full filename, with uppercase format - QImageReader reader(file, format.toUpper()); - QImage image = reader.read(); - if (size.isNull()) - QVERIFY(image.isNull()); - else - QVERIFY(!image.isNull()); - QCOMPARE(image.size(), size); - } - { - // 4) chopped filename, with format - QImageReader reader(file.left(file.lastIndexOf(QLatin1Char('.'))), format); - QImage image = reader.read(); - if (size.isNull()) - QVERIFY(image.isNull()); - else - QVERIFY(!image.isNull()); - QCOMPARE(image.size(), size); - } - { - // 5) chopped filename, with uppercase format - QImageReader reader(file.left(file.lastIndexOf(QLatin1Char('.'))), format.toUpper()); - QImage image = reader.read(); - if (size.isNull()) - QVERIFY(image.isNull()); - else - QVERIFY(!image.isNull()); - QCOMPARE(image.size(), size); - } - } - - // Check that the results are identical - if (!message.isEmpty()) { - QTest::ignoreMessage(QtWarningMsg, message.toLatin1()); - QTest::ignoreMessage(QtWarningMsg, message.toLatin1()); - } - QCOMPARE(QImageReader(prefix + fileName).read(), QImageReader(":/images/" + fileName).read()); -} - -void tst_QImageReader::readCorruptImage_data() -{ - QTest::addColumn<QString>("fileName"); - QTest::addColumn<bool>("shouldFail"); - QTest::addColumn<QString>("message"); - QTest::addColumn<QByteArray>("format"); - QTest::newRow("corrupt jpeg") << QString("corrupt.jpg") << true - << QString("JPEG datastream contains no image") - << QByteArray("jpeg"); - QTest::newRow("corrupt gif") << QString("corrupt.gif") << true << QString("") << QByteArray("gif"); - QTest::newRow("corrupt mng") << QString("corrupt.mng") << true - << QString("MNG error 901: Application signalled I/O error; chunk IHDR; subcode 0:0") - << QByteArray("mng"); - QTest::newRow("corrupt png") << QString("corrupt.png") << true << QString("") << QByteArray("png"); - QTest::newRow("corrupt bmp") << QString("corrupt.bmp") << true << QString("") << QByteArray("bmp"); - QTest::newRow("corrupt xpm (colors)") << QString("corrupt-colors.xpm") << true - << QString("QImage: XPM color specification is missing: bla9an.n#x") - << QByteArray("xpm"); - QTest::newRow("corrupt xpm (pixels)") << QString("corrupt-pixels.xpm") << true - << QString("QImage: XPM pixels missing on image line 3") - << QByteArray("xpm"); - QTest::newRow("corrupt xbm") << QString("corrupt.xbm") << false << QString("") << QByteArray("xbm"); - QTest::newRow("corrupt tiff") << QString("corrupt-data.tif") << true << QString("") << QByteArray("tiff"); - QTest::newRow("corrupt svg") << QString("corrupt.svg") << true << QString("") << QByteArray("svg"); - QTest::newRow("corrupt svgz") << QString("corrupt.svgz") << true << QString("") << QByteArray("svgz"); -} - -void tst_QImageReader::readCorruptImage() -{ - QFETCH(QString, fileName); - QFETCH(bool, shouldFail); - QFETCH(QString, message); - QFETCH(QByteArray, format); - - SKIP_IF_UNSUPPORTED(format); - - if (!message.isEmpty()) - QTest::ignoreMessage(QtWarningMsg, message.toLatin1()); - QImageReader reader(prefix + fileName); - QVERIFY(reader.canRead()); - QCOMPARE(reader.read().isNull(), shouldFail); -} - -void tst_QImageReader::readCorruptBmp() -{ - QCOMPARE(QImage(prefix + "tst7.bmp").convertToFormat(QImage::Format_ARGB32_Premultiplied), QImage(prefix + "tst7.png").convertToFormat(QImage::Format_ARGB32_Premultiplied)); -} - -void tst_QImageReader::supportsOption_data() -{ - QTest::addColumn<QString>("fileName"); - QTest::addColumn<QIntList>("options"); - - QTest::newRow("png") << QString("black.png") - << (QIntList() << QImageIOHandler::Gamma - << QImageIOHandler::Description - << QImageIOHandler::Quality - << QImageIOHandler::Size); -} - -void tst_QImageReader::supportsOption() -{ - QFETCH(QString, fileName); - QFETCH(QIntList, options); - - QSet<QImageIOHandler::ImageOption> allOptions; - allOptions << QImageIOHandler::Size - << QImageIOHandler::ClipRect - << QImageIOHandler::Description - << QImageIOHandler::ScaledClipRect - << QImageIOHandler::ScaledSize - << QImageIOHandler::CompressionRatio - << QImageIOHandler::Gamma - << QImageIOHandler::Quality - << QImageIOHandler::Name - << QImageIOHandler::SubType - << QImageIOHandler::IncrementalReading - << QImageIOHandler::Endianness - << QImageIOHandler::Animation - << QImageIOHandler::BackgroundColor; - - QImageReader reader(prefix + fileName); - for (int i = 0; i < options.size(); ++i) { - QVERIFY(reader.supportsOption(QImageIOHandler::ImageOption(options.at(i)))); - allOptions.remove(QImageIOHandler::ImageOption(options.at(i))); - } - - foreach (QImageIOHandler::ImageOption option, allOptions) - QVERIFY(!reader.supportsOption(option)); -} - -void tst_QImageReader::tiffCompression_data() -{ - QTest::addColumn<QString>("uncompressedFile"); - QTest::addColumn<QString>("compressedFile"); - - QTest::newRow("TIFF: adobedeflate") << "rgba_nocompression_littleendian.tif" - << "rgba_adobedeflate_littleendian.tif"; - QTest::newRow("TIFF: lzw") << "rgba_nocompression_littleendian.tif" - << "rgba_lzw_littleendian.tif"; - QTest::newRow("TIFF: packbits") << "rgba_nocompression_littleendian.tif" - << "rgba_packbits_littleendian.tif"; - QTest::newRow("TIFF: zipdeflate") << "rgba_nocompression_littleendian.tif" - << "rgba_zipdeflate_littleendian.tif"; -} - -void tst_QImageReader::tiffCompression() -{ - QFETCH(QString, uncompressedFile); - QFETCH(QString, compressedFile); - - SKIP_IF_UNSUPPORTED("tiff"); - - QImage uncompressedImage(prefix + uncompressedFile); - QImage compressedImage(prefix + compressedFile); - - QCOMPARE(uncompressedImage, compressedImage); -} - -void tst_QImageReader::tiffEndianness() -{ - SKIP_IF_UNSUPPORTED("tiff"); - - QImage littleEndian(prefix + "rgba_nocompression_littleendian.tif"); - QImage bigEndian(prefix + "rgba_nocompression_bigendian.tif"); - - QCOMPARE(littleEndian, bigEndian); -} - -void tst_QImageReader::tiffOrientation_data() -{ - QTest::addColumn<QString>("expected"); - QTest::addColumn<QString>("oriented"); - QTest::newRow("Indexed TIFF, orientation1") << "tiff_oriented/original_indexed.tiff" << "tiff_oriented/indexed_orientation_1.tiff"; - QTest::newRow("Indexed TIFF, orientation2") << "tiff_oriented/original_indexed.tiff" << "tiff_oriented/indexed_orientation_2.tiff"; - QTest::newRow("Indexed TIFF, orientation3") << "tiff_oriented/original_indexed.tiff" << "tiff_oriented/indexed_orientation_3.tiff"; - QTest::newRow("Indexed TIFF, orientation4") << "tiff_oriented/original_indexed.tiff" << "tiff_oriented/indexed_orientation_4.tiff"; - QTest::newRow("Indexed TIFF, orientation5") << "tiff_oriented/original_indexed.tiff" << "tiff_oriented/indexed_orientation_5.tiff"; - QTest::newRow("Indexed TIFF, orientation6") << "tiff_oriented/original_indexed.tiff" << "tiff_oriented/indexed_orientation_6.tiff"; - QTest::newRow("Indexed TIFF, orientation7") << "tiff_oriented/original_indexed.tiff" << "tiff_oriented/indexed_orientation_7.tiff"; - QTest::newRow("Indexed TIFF, orientation8") << "tiff_oriented/original_indexed.tiff" << "tiff_oriented/indexed_orientation_8.tiff"; - - QTest::newRow("Mono TIFF, orientation1") << "tiff_oriented/original_mono.tiff" << "tiff_oriented/mono_orientation_1.tiff"; - QTest::newRow("Mono TIFF, orientation2") << "tiff_oriented/original_mono.tiff" << "tiff_oriented/mono_orientation_2.tiff"; - QTest::newRow("Mono TIFF, orientation3") << "tiff_oriented/original_mono.tiff" << "tiff_oriented/mono_orientation_3.tiff"; - QTest::newRow("Mono TIFF, orientation4") << "tiff_oriented/original_mono.tiff" << "tiff_oriented/mono_orientation_4.tiff"; - QTest::newRow("Mono TIFF, orientation5") << "tiff_oriented/original_mono.tiff" << "tiff_oriented/mono_orientation_5.tiff"; - QTest::newRow("Mono TIFF, orientation6") << "tiff_oriented/original_mono.tiff" << "tiff_oriented/mono_orientation_6.tiff"; - QTest::newRow("Mono TIFF, orientation7") << "tiff_oriented/original_mono.tiff" << "tiff_oriented/mono_orientation_7.tiff"; - QTest::newRow("Mono TIFF, orientation8") << "tiff_oriented/original_mono.tiff" << "tiff_oriented/mono_orientation_8.tiff"; - - QTest::newRow("RGB TIFF, orientation1") << "tiff_oriented/original_rgb.tiff" << "tiff_oriented/rgb_orientation_1.tiff"; - QTest::newRow("RGB TIFF, orientation2") << "tiff_oriented/original_rgb.tiff" << "tiff_oriented/rgb_orientation_2.tiff"; - QTest::newRow("RGB TIFF, orientation3") << "tiff_oriented/original_rgb.tiff" << "tiff_oriented/rgb_orientation_3.tiff"; - QTest::newRow("RGB TIFF, orientation4") << "tiff_oriented/original_rgb.tiff" << "tiff_oriented/rgb_orientation_4.tiff"; - QTest::newRow("RGB TIFF, orientation5") << "tiff_oriented/original_rgb.tiff" << "tiff_oriented/rgb_orientation_5.tiff"; - QTest::newRow("RGB TIFF, orientation6") << "tiff_oriented/original_rgb.tiff" << "tiff_oriented/rgb_orientation_6.tiff"; - QTest::newRow("RGB TIFF, orientation7") << "tiff_oriented/original_rgb.tiff" << "tiff_oriented/rgb_orientation_7.tiff"; - QTest::newRow("RGB TIFF, orientation8") << "tiff_oriented/original_rgb.tiff" << "tiff_oriented/rgb_orientation_8.tiff"; -} - -void tst_QImageReader::tiffOrientation() -{ - QFETCH(QString, expected); - QFETCH(QString, oriented); - - SKIP_IF_UNSUPPORTED("tiff"); - - QImage expectedImage(prefix + expected); - QImage orientedImage(prefix + oriented); - QCOMPARE(expectedImage, orientedImage); -} - -void tst_QImageReader::tiffGrayscale() -{ - SKIP_IF_UNSUPPORTED("tiff"); - - QImage actualImage(prefix + "grayscale.tif"); - QImage expectedImage(prefix + "grayscale-ref.tif"); - - QCOMPARE(expectedImage, actualImage.convertToFormat(expectedImage.format())); -} - -void tst_QImageReader::dotsPerMeter_data() -{ - QTest::addColumn<QString>("fileName"); - QTest::addColumn<int>("expectedDotsPerMeterX"); - QTest::addColumn<int>("expectedDotsPerMeterY"); - QTest::addColumn<QByteArray>("format"); - QTest::newRow("TIFF: 72 dpi") << ("rgba_nocompression_littleendian.tif") << qRound(72 * (100 / 2.54)) << qRound(72 * (100 / 2.54)) << QByteArray("tiff"); - QTest::newRow("TIFF: 100 dpi") << ("image_100dpi.tif") << qRound(100 * (100 / 2.54)) << qRound(100 * (100 / 2.54)) << QByteArray("tiff"); -} - -void tst_QImageReader::dotsPerMeter() -{ - QFETCH(QString, fileName); - QFETCH(int, expectedDotsPerMeterX); - QFETCH(int, expectedDotsPerMeterY); - QFETCH(QByteArray, format); - - SKIP_IF_UNSUPPORTED(format); - - QImage image(prefix + fileName); - - QCOMPARE(image.dotsPerMeterX(), expectedDotsPerMeterX); - QCOMPARE(image.dotsPerMeterY(), expectedDotsPerMeterY); -} - -void tst_QImageReader::physicalDpi_data() -{ - QTest::addColumn<QString>("fileName"); - QTest::addColumn<int>("expectedPhysicalDpiX"); - QTest::addColumn<int>("expectedPhysicalDpiY"); - QTest::addColumn<QByteArray>("format"); - QTest::newRow("TIFF: 72 dpi") << "rgba_nocompression_littleendian.tif" << 72 << 72 << QByteArray("tiff"); - QTest::newRow("TIFF: 100 dpi") << "image_100dpi.tif" << 100 << 100 << QByteArray("tiff"); -} - -void tst_QImageReader::physicalDpi() -{ - QFETCH(QString, fileName); - QFETCH(int, expectedPhysicalDpiX); - QFETCH(int, expectedPhysicalDpiY); - QFETCH(QByteArray, format); - - SKIP_IF_UNSUPPORTED(format); - - QImage image(prefix + fileName); - - QCOMPARE(image.physicalDpiX(), expectedPhysicalDpiX); - QCOMPARE(image.physicalDpiY(), expectedPhysicalDpiY); -} - -void tst_QImageReader::autoDetectImageFormat() -{ - // Assume PNG is supported :-) - { - // Disables file name extension probing - QImageReader reader(prefix + "kollada"); - reader.setAutoDetectImageFormat(false); - QVERIFY(!reader.canRead()); - QVERIFY(reader.read().isNull()); - reader.setAutoDetectImageFormat(true); - QVERIFY(reader.canRead()); - QVERIFY(!reader.read().isNull()); - } - { - // Disables detection based on suffix - QImageReader reader(prefix + "kollada.png"); - reader.setAutoDetectImageFormat(false); - QVERIFY(!reader.canRead()); - QVERIFY(reader.read().isNull()); - reader.setAutoDetectImageFormat(true); - QVERIFY(reader.canRead()); - QVERIFY(!reader.read().isNull()); - } - { - // Disables detection based on content - QImageReader reader(prefix + "kollada-noext"); - reader.setAutoDetectImageFormat(false); - QVERIFY(!reader.canRead()); - QVERIFY(reader.read().isNull()); - reader.setAutoDetectImageFormat(true); - QVERIFY(reader.canRead()); - QVERIFY(!reader.read().isNull()); - } - - if (QImageReader::supportedImageFormats().contains("jpeg")) { - QImageReader io(prefix + "YCbCr_rgb.jpg"); - io.setAutoDetectImageFormat(false); - // This should fail since no format string is given - QImage image; - QVERIFY(!io.read(&image)); - } - if (QImageReader::supportedImageFormats().contains("jpeg")) { - QImageReader io(prefix + "YCbCr_rgb.jpg", "jpg"); - io.setAutoDetectImageFormat(false); - QImage image; - QVERIFY(io.read(&image)); - } - { - QImageReader io(prefix + "tst7.png"); - io.setAutoDetectImageFormat(false); - // This should fail since no format string is given - QImage image; - QVERIFY(!io.read(&image)); - } - { - QImageReader io(prefix + "tst7.png", "png"); - io.setAutoDetectImageFormat(false); - QImage image; - QVERIFY(io.read(&image)); - } -} - -void tst_QImageReader::fileNameProbing() -{ - QString name("doesnotexist.png"); - QImageReader r; - r.setFileName(name); // non-existing / non-readable file - QCOMPARE(r.fileName(), name); - - r.size(); - QCOMPARE(r.fileName(), name); - r.read(); - QCOMPARE(r.fileName(), name); -} - -void tst_QImageReader::pixelCompareWithBaseline_data() -{ - QTest::addColumn<QString>("fileName"); - - QTest::newRow("floppy (16px,32px - 16 colors)") << "35floppy.ico"; - QTest::newRow("semitransparent") << "semitransparent.ico"; - QTest::newRow("slightlybrokenBMPHeader") << "kde_favicon.ico"; - QTest::newRow("sightlybrokenIconHeader") << "connect.ico"; -} - -void tst_QImageReader::pixelCompareWithBaseline() -{ - QFETCH(QString, fileName); - - static int enteredCount = 0; // Used for better error diagnostics if something fails. We - static int loadFailCount = 0; // don't know if the reason load() fails is that the plugin - // does not exist or because of a bug in the plugin. But if at - // least one file succeeded we know that the plugin was built. - // The other failures are then real failures. - QImage icoImg; - const QString inputFileName(QString::fromAscii("images/%1").arg(fileName)); - QFileInfo fi(inputFileName); - - ++enteredCount; - // might fail if the plugin does not exist, which is ok. - if (icoImg.load(inputFileName)) { - icoImg = icoImg.convertToFormat(QImage::Format_ARGB32_Premultiplied); - const QString baselineFileName(QString::fromAscii("baseline/%1.png").arg(fi.baseName())); -#if 0 - icoImg.save(baselineFileName); -#else - QImage baseImg; - QVERIFY(baseImg.load(baselineFileName)); - baseImg = baseImg.convertToFormat(QImage::Format_ARGB32_Premultiplied); - QCOMPARE(int(baseImg.format()), int(icoImg.format())); - QCOMPARE(baseImg, icoImg); -#endif - } else { - ++loadFailCount; - if (enteredCount != loadFailCount) { - QFAIL("Plugin is built, but some did not load properly"); - } else { - qWarning("loading failed, check if ico plugin is built"); - } - } -} - - -void tst_QImageReader::testIgnoresFormatAndExtension_data() -{ - QTest::addColumn<QString>("name"); - QTest::addColumn<QString>("extension"); - QTest::addColumn<QString>("expected"); - - QTest::newRow("black.png") << "black" << "png" << "png"; - QTest::newRow("black.xpm") << "black" << "xpm" << "xpm"; - QTest::newRow("colorful.bmp") << "colorful" << "bmp" << "bmp"; - QTest::newRow("image.ppm") << "image" << "ppm" << "ppm"; - QTest::newRow("image.pbm") << "image" << "pbm" << "pbm"; - QTest::newRow("image.pgm") << "image" << "pgm" << "pgm"; - - QTest::newRow("bat1.gif") << "bat1" << "gif" << "gif"; - - QTest::newRow("beavis.jpg") << "beavis" << "jpg" << "jpeg"; - - QTest::newRow("fire.mng") << "fire" << "mng" << "mng"; - - QTest::newRow("image_100dpi.tif") << "image_100dpi" << "tif" << "tiff"; - - QTest::newRow("rect.svg") << "rect" << "svg" << "svg"; - QTest::newRow("rect.svgz") << "rect" << "svgz" << "svgz"; -} - - -void tst_QImageReader::testIgnoresFormatAndExtension() -{ - QFETCH(QString, name); - QFETCH(QString, extension); - QFETCH(QString, expected); - - SKIP_IF_UNSUPPORTED(expected.toLatin1()); - - QList<QByteArray> formats = QImageReader::supportedImageFormats(); - QString fileNameBase = prefix + name + "."; - - foreach (const QByteArray &f, formats) { - if (f == extension) - continue; - QFile tmp(QDir::tempPath() + "/" + name + "_" + expected + "." + f); - - QVERIFY(QFile::copy(fileNameBase + extension, QFileInfo(tmp).absoluteFilePath())); - - QString format; - QImage image; - { - // image reader needs to be scoped for the remove() to work.. - QImageReader r; - r.setFileName(QFileInfo(tmp).absoluteFilePath()); - r.setDecideFormatFromContent(true); - format = r.format(); - r.read(&image); - } - - tmp.remove(); - - QVERIFY(!image.isNull()); - QCOMPARE(format, expected); - } -} - - -void tst_QImageReader::saveFormat_data() -{ - QTest::addColumn<QImage::Format>("format"); - - QTest::newRow("Format_Mono") << QImage::Format_Mono; - QTest::newRow("Format_MonoLSB") << QImage::Format_MonoLSB; - QTest::newRow("Format_Indexed8") << QImage::Format_Indexed8; - QTest::newRow("Format_RGB32") << QImage::Format_RGB32; - QTest::newRow("Format_ARGB32") << QImage::Format_ARGB32; - QTest::newRow("Format_ARGB32_Premultiplied") << QImage::Format_ARGB32_Premultiplied; - QTest::newRow("Format_RGB16") << QImage::Format_RGB16; - QTest::newRow("Format_ARGB8565_Premultiplied") << QImage::Format_ARGB8565_Premultiplied; - QTest::newRow("Format_RGB666") << QImage::Format_RGB666; - QTest::newRow("Format_ARGB6666_Premultiplied") << QImage::Format_ARGB6666_Premultiplied; - QTest::newRow("Format_RGB555") << QImage::Format_RGB555; - QTest::newRow("Format_ARGB8555_Premultiplied") << QImage::Format_ARGB8555_Premultiplied; - QTest::newRow("Format_RGB888") << QImage::Format_RGB888; - QTest::newRow("Format_RGB444") << QImage::Format_RGB444; - QTest::newRow("Format_ARGB4444_Premultiplied") << QImage::Format_ARGB4444_Premultiplied; -} - -void tst_QImageReader::saveFormat() -{ - QFETCH(QImage::Format, format); - - QImage orig(":/images/kollada.png"); - - QImage converted = orig.convertToFormat(format); - QBuffer buf; - buf.open(QIODevice::WriteOnly); - QVERIFY(converted.save(&buf, "png")); - buf.close(); - QImage stored = QImage::fromData(buf.buffer(), "png"); - - stored = stored.convertToFormat(QImage::Format_ARGB32); - converted = converted.convertToFormat(QImage::Format_ARGB32); - QCOMPARE(stored, converted); -} - - -void tst_QImageReader::readText_data() -{ - QTest::addColumn<QString>("fileName"); - QTest::addColumn<QString>("key"); - QTest::addColumn<QString>("text"); - - QTest::newRow("png, tEXt before img") << "txts.png" << "Title" << "PNG"; - QTest::newRow("png, zTXt before img") << "txts.png" << "Comment" << "Some compressed text."; - QTest::newRow("png, tEXt after img") << "txts.png" << "Disclaimer" << "For testing only."; - QTest::newRow("png, zTXt after img") << "txts.png" << "Description" << "Rendered by Persistence of Vision (tm) Ray Tracer"; -} - - -void tst_QImageReader::readText() -{ - QFETCH(QString, fileName); - QFETCH(QString, key); - QFETCH(QString, text); - - QImage img(prefix + fileName); - QVERIFY(img.textKeys().contains(key)); - QCOMPARE(img.text(key), text); -} - - -void tst_QImageReader::preserveTexts_data() -{ - QTest::addColumn<QString>("text"); - - QTest::newRow("Simple") << "simpletext"; - QTest::newRow("Whitespace") << " A text with whitespace "; - QTest::newRow("Newline") << "A text\nwith newlines\n"; - QTest::newRow("Double newlines") << "A text\n\nwith double newlines\n\n"; - QTest::newRow("Long") << QString("A rather long text, at least after many repetitions. ").repeated(100); - QString latin1set; - int c; - for(c = 0x20; c <= 0x7e; c++) - latin1set.append(QLatin1Char(c)); - for(c = 0xa0; c <= 0xff; c++) - latin1set.append(QLatin1Char(c)); - QTest::newRow("All Latin1 chars") << latin1set; - -#if 0 - // Depends on iTXt support in libpng - QTest::newRow("Multibyte string") << QString::fromUtf8("\341\233\222\341\233\226\341\232\251\341\232\271\341\232\242\341\233\232\341\232\240"); -#endif -} - - -void tst_QImageReader::preserveTexts() -{ - QFETCH(QString, text); - QString key("testkey"); - QString key2("testkey2"); - QString text2("Some other text."); - QString key3("testkey3"); - QString text3("Some more other text."); - - QImage img(":/images/kollada.png"); - img.setText(key, text); - img.setText(key2, text2); - QBuffer buf; - buf.open(QIODevice::WriteOnly); - QVERIFY(img.save(&buf, "png")); - buf.close(); - QImage stored = QImage::fromData(buf.buffer(), "png"); - QCOMPARE(stored.text(key), text); - QCOMPARE(stored.text(key2), text2); - - QImage img2(":/images/kollada.png"); - img2.setText(key3, text3); - QBuffer buf2; - QImageWriter w(&buf2, "png"); - w.setText(key, text); - w.setText(key2, text2); - QVERIFY(w.write(img2)); - buf2.close(); - QImageReader r(&buf2, "png"); - QCOMPARE(r.text(key), text.simplified()); - QCOMPARE(r.text(key2), text2.simplified()); - QCOMPARE(r.text(key3), text3.simplified()); -} - - -QTEST_MAIN(tst_QImageReader) -#include "tst_qimagereader.moc" |