diff options
Diffstat (limited to 'tests/auto/gui/image/qimagewriter/tst_qimagewriter.cpp')
-rw-r--r-- | tests/auto/gui/image/qimagewriter/tst_qimagewriter.cpp | 100 |
1 files changed, 71 insertions, 29 deletions
diff --git a/tests/auto/gui/image/qimagewriter/tst_qimagewriter.cpp b/tests/auto/gui/image/qimagewriter/tst_qimagewriter.cpp index 907719259d..1059cc48ab 100644 --- a/tests/auto/gui/image/qimagewriter/tst_qimagewriter.cpp +++ b/tests/auto/gui/image/qimagewriter/tst_qimagewriter.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QTest> #include <QDebug> @@ -36,12 +11,17 @@ #include <QSet> #include <QTemporaryDir> #include <QTemporaryFile> +#include <QSaveFile> #ifdef Q_OS_UNIX // for geteuid() # include <sys/types.h> # include <unistd.h> #endif +#ifdef Q_OS_INTEGRITY +#include "qplatformdefs.h" +#endif + #include <algorithm> typedef QMap<QString, QString> QStringMap; @@ -75,6 +55,7 @@ private slots: void saveWithNoFormat(); void saveToTemporaryFile(); + void saveToSaveFile(); void writeEmpty(); @@ -121,7 +102,7 @@ void tst_QImageWriter::getSetCheck() QCOMPARE((QIODevice *) var1, obj1.device()); // The class should possibly handle a 0-pointer as a device, since - // there is a default contructor, so it's "handling" a 0 device by default. + // there is a default constructor, so it's "handling" a 0 device by default. // For example: QMovie::setDevice(0) works just fine obj1.setDevice((QIODevice *)0); QCOMPARE((QIODevice *) 0, obj1.device()); @@ -275,6 +256,8 @@ void tst_QImageWriter::writeImage2() QFETCH(QByteArray, format); QFETCH(QImage, image); + SKIP_IF_UNSUPPORTED(format); + //we reduce the scope of writer so that it closes the associated file // and QFile::remove can actually work { @@ -291,7 +274,13 @@ void tst_QImageWriter::writeImage2() QVERIFY(reader.read(&written)); } - written = written.convertToFormat(image.format()); + // The 8-bit input value might have turned into a fraction in 16-bit grayscale + // which can't be preserved in file formats that doesn't support 16bpc. + if (image.format() == QImage::Format_Grayscale16 && + written.format() != QImage::Format_Grayscale16 && written.depth() <= 32) + image.convertTo(QImage::Format_Grayscale8); + + written.convertTo(image.format()); if (!equalImageContents(written, image)) { qDebug() << "image" << image.format() << image.width() << image.height() << image.depth() @@ -524,6 +513,59 @@ void tst_QImageWriter::saveToTemporaryFile() } } +void tst_QImageWriter::saveToSaveFile() +{ + QImage image(prefix + "kollada.png"); + QVERIFY(!image.isNull()); + + { + // Check canWrite + QImageWriter writer; + QSaveFile file(writePrefix + "savefile0.png"); + writer.setDevice(&file); + QVERIFY2(writer.canWrite(), qPrintable(writer.errorString())); + } + + QString fileName1(writePrefix + "savefile1.garble"); + { + // Check failing canWrite + QVERIFY(!QFileInfo(fileName1).exists()); + QImageWriter writer; + QSaveFile file(fileName1); + writer.setDevice(&file); + QVERIFY(!writer.canWrite()); + QCOMPARE(writer.error(), QImageWriter::UnsupportedFormatError); + } + QVERIFY(!QFileInfo(fileName1).exists()); + + QString fileName2(writePrefix + "savefile2.png"); + { + QImageWriter writer; + QSaveFile file(fileName2); + writer.setDevice(&file); + QCOMPARE(writer.fileName(), fileName2); + QVERIFY2(writer.write(image), qPrintable(writer.errorString())); + QVERIFY(file.commit()); + } + { + QImage tmp; + QVERIFY(tmp.load(fileName2, "PNG")); + QCOMPARE(tmp, image); + } + + QString fileName3(writePrefix + "savefile3.png"); + { + QSaveFile file(fileName3); + QVERIFY(image.save(&file)); + QVERIFY(file.commit()); + } + { + QImage tmp; + QVERIFY(tmp.load(fileName3, "PNG")); + QCOMPARE(tmp, image); + } +} + void tst_QImageWriter::writeEmpty() { // check writing a null QImage errors gracefully |