Revision control
++ // Copyright (C) 2016 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
++
++ #include <QTemporaryDir>
++ #include <QtTest/QtTest>
++ #include <QtGui/QtGui>
++
++ class tst_qwebp : public QObject
++ {
++ Q_OBJECT
++
++ private slots:
++ void initTestCase();
++ void readImage_data();
++ void readImage();
++ void readAnimation_data();
++ void readAnimation();
++ void writeImage_data();
++ void writeImage();
++
++ private:
++ QTemporaryDir m_temporaryDir;
++ };
++
++ void tst_qwebp::initTestCase()
++ {
++ if (!QImageReader::supportedImageFormats().contains("webp"))
++ QSKIP("The image format handler is not installed.");
++
++ QVERIFY2(m_temporaryDir.isValid(), qPrintable(m_temporaryDir.errorString()));
++ QString path = m_temporaryDir.path();
++ QVERIFY2(QDir::setCurrent(path), qPrintable("Could not chdir to " + path));
++ }
++
++ void tst_qwebp::readImage_data()
++ {
++ QTest::addColumn<QString>("fileName");
++ QTest::addColumn<QSize>("size");
++ QTest::addColumn<bool>("alpha");
++
++ QTest::newRow("kollada") << QString("kollada") << QSize(436, 160) << true;
++ QTest::newRow("kollada_lossless") << QString("kollada_lossless") << QSize(436, 160) << true;
++ QTest::newRow("kollada_noalpha") << QString("kollada_noalpha") << QSize(436, 160) << false;
++ }
++
++ void tst_qwebp::readImage()
++ {
++ QFETCH(QString, fileName);
++ QFETCH(QSize, size);
++ QFETCH(bool, alpha);
++
++ const QString path = QStringLiteral(":/images/") + fileName + QStringLiteral(".webp");
++ QImageReader reader(path);
++ QVERIFY(reader.canRead());
++ QImage image = reader.read();
++ QVERIFY2(!image.isNull(), qPrintable(reader.errorString()));
++ QCOMPARE(image.size(), size);
++ QCOMPARE(image.hasAlphaChannel(), alpha);
++ }
++
++ void tst_qwebp::readAnimation_data()
++ {
++ QTest::addColumn<QString>("fileName");
++ QTest::addColumn<QSize>("size");
++ QTest::addColumn<int>("imageCount");
++ QTest::addColumn<int>("loopCount");
++ QTest::addColumn<QColor>("bgColor");
++ QTest::addColumn<QList<QRect> >("imageRects");
++ QTest::addColumn<QList<int> >("imageDelays");
++
++ QTest::newRow("kollada")
++ << QString("kollada")
++ << QSize(436, 160)
++ << 1
++ << 0
++ << QColor()
++ << (QList<QRect>() << QRect(0, 0, 436, 160))
++ << (QList<int>() << 0);
++ QTest::newRow("kollada_animation")
++ << QString("kollada_animation")
++ << QSize(536, 260)
++ << 2
++ << 2
++ << QColor(128, 128, 128, 128)
++ << (QList<QRect>() << QRect(0, 0, 436, 160) << QRect(100, 100, 436, 160))
++ << (QList<int>() << 1000 << 1200);
++ }
++
++ void tst_qwebp::readAnimation()
++ {
++ QFETCH(QString, fileName);
++ QFETCH(QSize, size);
++ QFETCH(int, imageCount);
++ QFETCH(int, loopCount);
++ QFETCH(QColor, bgColor);
++ QFETCH(QList<QRect>, imageRects);
++ QFETCH(QList<int>, imageDelays);
++
++ const QString path = QStringLiteral(":/images/") + fileName + QStringLiteral(".webp");
++ QImageReader reader(path);
++ QVERIFY(reader.canRead());
++ QCOMPARE(reader.size(), size);
++ QCOMPARE(reader.imageCount(), imageCount);
++ QCOMPARE(reader.loopCount(), loopCount);
++ QCOMPARE(reader.backgroundColor(), bgColor);
++
++ for (int i = 0; i < reader.imageCount(); ++i) {
++ QImage image = reader.read();
++ QVERIFY2(!image.isNull(), qPrintable(reader.errorString()));
++ QCOMPARE(image.size(), size);
++ QCOMPARE(reader.currentImageNumber(), i);
++ QCOMPARE(reader.currentImageRect(), imageRects[i]);
++ QCOMPARE(reader.nextImageDelay(), imageDelays[i]);
++ }
++
++ QVERIFY(reader.read().isNull());
++ QCOMPARE(reader.canRead(), !reader.supportsAnimation());
++ }
++
++ void tst_qwebp::writeImage_data()
++ {
++ QTest::addColumn<QString>("fileName");
++ QTest::addColumn<QString>("postfix");
++ QTest::addColumn<int>("quality");
++ QTest::addColumn<QSize>("size");
++ QTest::addColumn<bool>("alpha");
++ QTest::addColumn<bool>("needcheck");
++
++ QTest::newRow("kollada-75") << QString("kollada") << QString(".png") << 75 << QSize(436, 160) << true << false;
++ QTest::newRow("kollada-100") << QString("kollada") << QString(".png") << 100 << QSize(436, 160) << true << true;
++ QTest::newRow("kollada_noalpha-75") << QString("kollada_noalpha") << QString(".webp") << 75 << QSize(436, 160) << false << false;
++ QTest::newRow("kollada_noalpha-100") << QString("kollada_noalpha") << QString(".webp") << 100 << QSize(436, 160) << false << true;
++ }
++
++ void tst_qwebp::writeImage()
++ {
++ QFETCH(QString, fileName);
++ QFETCH(QString, postfix);
++ QFETCH(int, quality);
++ QFETCH(QSize, size);
++ QFETCH(bool, alpha);
++ QFETCH(bool, needcheck);
++
++ const QString path = QString("%1-%2.webp").arg(fileName).arg(quality);
++ const QString sourcePath = QStringLiteral(":/images/") + fileName + postfix;
++
++ QImage image(sourcePath);
++ QVERIFY(!image.isNull());
++ QVERIFY(image.size() == size);
++
++ QImageWriter writer(path, QByteArrayLiteral("webp"));
++ QVERIFY2(writer.canWrite(), qPrintable(writer.errorString()));
++ writer.setQuality(quality);
++ QVERIFY2(writer.write(image), qPrintable(writer.errorString()));
++
++ QImage reread(path);
++ QVERIFY(!reread.isNull());
++ QVERIFY(reread.size() == size);
++ QVERIFY(reread.hasAlphaChannel() == alpha);
++
++ if (needcheck)
++ QVERIFY(image == reread);
++ }
++
++ QTEST_MAIN(tst_qwebp)
++ #include "tst_qwebp.moc"