summaryrefslogtreecommitdiffstats
path: root/tests/auto/gui/image/qimagewriter/tst_qimagewriter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/gui/image/qimagewriter/tst_qimagewriter.cpp')
-rw-r--r--tests/auto/gui/image/qimagewriter/tst_qimagewriter.cpp106
1 files changed, 73 insertions, 33 deletions
diff --git a/tests/auto/gui/image/qimagewriter/tst_qimagewriter.cpp b/tests/auto/gui/image/qimagewriter/tst_qimagewriter.cpp
index e4708f358b..1059cc48ab 100644
--- a/tests/auto/gui/image/qimagewriter/tst_qimagewriter.cpp
+++ b/tests/auto/gui/image/qimagewriter/tst_qimagewriter.cpp
@@ -1,35 +1,7 @@
-/****************************************************************************
-**
-** 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$
-**
-****************************************************************************/
-
-
-#include <QtTest/QtTest>
-
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#include <QTest>
#include <QDebug>
#include <QFile>
#include <QImage>
@@ -38,12 +10,18 @@
#include <QPainter>
#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;
@@ -77,6 +55,7 @@ private slots:
void saveWithNoFormat();
void saveToTemporaryFile();
+ void saveToSaveFile();
void writeEmpty();
@@ -123,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());
@@ -277,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
{
@@ -293,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()
@@ -526,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