summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/io/qsavefile
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/corelib/io/qsavefile')
-rw-r--r--tests/auto/corelib/io/qsavefile/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp82
2 files changed, 51 insertions, 40 deletions
diff --git a/tests/auto/corelib/io/qsavefile/CMakeLists.txt b/tests/auto/corelib/io/qsavefile/CMakeLists.txt
index 0b41340279..26869eb163 100644
--- a/tests/auto/corelib/io/qsavefile/CMakeLists.txt
+++ b/tests/auto/corelib/io/qsavefile/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qsavefile.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsavefile Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsavefile LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
list(APPEND test_data "tst_qsavefile.cpp")
diff --git a/tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp b/tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp
index 3d09ea291d..c027f8a3c1 100644
--- a/tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp
+++ b/tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp
@@ -1,41 +1,17 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 David Faure <faure@kde.org>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module 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) 2012 David Faure <faure@kde.org>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QSaveFile>
#include <qcoreapplication.h>
#include <qstring.h>
+#include <qsystemdetection.h>
#include <qtemporaryfile.h>
#include <qfile.h>
#include <qdir.h>
#include <qset.h>
-#if defined(Q_OS_UNIX) && !defined(Q_OS_VXWORKS)
+#if defined(Q_OS_UNIX)
#include <unistd.h> // for geteuid
#endif
@@ -114,23 +90,40 @@ void tst_QSaveFile::transactionalWrite()
QCOMPARE(file.fileName(), targetFile);
QVERIFY(!QFile::exists(targetFile));
- QCOMPARE(file.write("Hello"), Q_INT64_C(5));
+ const char *data = "Hello";
+ QCOMPARE(file.write(data), qint64(strlen(data)));
QCOMPARE(file.error(), QFile::NoError);
QVERIFY(!QFile::exists(targetFile));
+ QVERIFY(file.fileTime(QFile::FileModificationTime).isValid());
QVERIFY(file.commit());
QVERIFY(QFile::exists(targetFile));
QCOMPARE(file.fileName(), targetFile);
+#if defined(Q_OS_WIN)
+ // Without this delay, file.fileTime() and file.size() tests fail to
+ // pass on Windows in the CI. It passes locally in a VM, so it looks like
+ // it depends on how often different filesystems on different OSes, update
+ // their metadata.
+ // Interestingly, this delay is enough to fix similar tests in the rest
+ // of tst_QSaveFile's functions.
+ QTRY_VERIFY(file.fileTime(QFile::FileModificationTime).isValid());
+#else
+ QVERIFY(file.fileTime(QFile::FileModificationTime).isValid());
+#endif
+
+ QCOMPARE(file.size(), qint64(strlen(data)));
QFile reader(targetFile);
QVERIFY(reader.open(QIODevice::ReadOnly));
- QCOMPARE(QString::fromLatin1(reader.readAll()), QString::fromLatin1("Hello"));
+ QCOMPARE(QString::fromLatin1(reader.readAll()), QString::fromLatin1(data));
+ QCOMPARE(file.fileTime(QFile::FileModificationTime),
+ reader.fileTime(QFile::FileModificationTime));
// check that permissions are the same as for QFile
const QString otherFile = dir.path() + QString::fromLatin1("/otherfile");
QFile::remove(otherFile);
QFile other(otherFile);
- other.open(QIODevice::WriteOnly);
+ QVERIFY(other.open(QIODevice::WriteOnly));
other.close();
QCOMPARE(QFile::permissions(targetFile), QFile::permissions(otherFile));
}
@@ -145,16 +138,17 @@ void tst_QSaveFile::retryTransactionalWrite()
// root can open the read-only file for writing...
if (geteuid() == 0)
QSKIP("This test does not work as the root user");
-#endif
+#endif //Q_OS_UNIX
QTemporaryDir dir;
QVERIFY2(dir.isValid(), qPrintable(dir.errorString()));
+ const char *data = "Hello";
QString targetFile = dir.path() + QLatin1String("/outfile");
const QString readOnlyName = targetFile + QLatin1String(".ro");
{
QFile readOnlyFile(readOnlyName);
QVERIFY2(readOnlyFile.open(QIODevice::WriteOnly), msgCannotOpen(readOnlyFile).constData());
- readOnlyFile.write("Hello");
+ readOnlyFile.write(data);
readOnlyFile.close();
auto permissions = readOnlyFile.permissions();
permissions &= ~(QFileDevice::WriteOwner | QFileDevice::WriteGroup | QFileDevice::WriteUser);
@@ -167,13 +161,15 @@ void tst_QSaveFile::retryTransactionalWrite()
file.setFileName(targetFile);
QVERIFY2(file.open(QIODevice::WriteOnly), msgCannotOpen(file).constData());
QVERIFY(file.isOpen());
- QCOMPARE(file.write("Hello"), Q_INT64_C(5));
+ QCOMPARE(file.write(data), qint64(strlen(data)));
QCOMPARE(file.error(), QFile::NoError);
QVERIFY(file.commit());
+ QCOMPARE(file.size(), qint64(strlen(data)));
}
void tst_QSaveFile::saveTwice()
{
+ const char *hello = "Hello";
// Check that we can reuse a QSaveFile object
// (and test the case of an existing target file)
QTemporaryDir dir;
@@ -181,16 +177,19 @@ void tst_QSaveFile::saveTwice()
const QString targetFile = dir.path() + QString::fromLatin1("/outfile");
QSaveFile file(targetFile);
QVERIFY2(file.open(QIODevice::WriteOnly), msgCannotOpen(file).constData());
- QCOMPARE(file.write("Hello"), Q_INT64_C(5));
+ QCOMPARE(file.write(hello), qint64(strlen(hello)));
QVERIFY2(file.commit(), qPrintable(file.errorString()));
+ QCOMPARE(file.size(), qint64(strlen(hello)));
+ const char *world = "World";
QVERIFY2(file.open(QIODevice::WriteOnly), msgCannotOpen(file).constData());
- QCOMPARE(file.write("World"), Q_INT64_C(5));
+ QCOMPARE(file.write(world), qint64(strlen(world)));
QVERIFY2(file.commit(), qPrintable(file.errorString()));
+ QCOMPARE(file.size(), qint64(strlen(world)));
QFile reader(targetFile);
QVERIFY2(reader.open(QIODevice::ReadOnly), msgCannotOpen(reader).constData());
- QCOMPARE(QString::fromLatin1(reader.readAll()), QString::fromLatin1("World"));
+ QCOMPARE(QString::fromLatin1(reader.readAll()), QString::fromLatin1(world));
}
void tst_QSaveFile::textStreamManualFlush()
@@ -201,16 +200,18 @@ void tst_QSaveFile::textStreamManualFlush()
QSaveFile file(targetFile);
QVERIFY2(file.open(QIODevice::WriteOnly), msgCannotOpen(file).constData());
+ const char *data = "Manual flush";
QTextStream ts(&file);
- ts << "Manual flush";
+ ts << data;
ts.flush();
QCOMPARE(file.error(), QFile::NoError);
QVERIFY(!QFile::exists(targetFile));
QVERIFY(file.commit());
+ QCOMPARE(file.size(), qint64(strlen(data)));
QFile reader(targetFile);
QVERIFY(reader.open(QIODevice::ReadOnly));
- QCOMPARE(QString::fromLatin1(reader.readAll().constData()), QString::fromLatin1("Manual flush"));
+ QCOMPARE(QString::fromLatin1(reader.readAll().constData()), QString::fromLatin1(data));
QFile::remove(targetFile);
}
@@ -457,6 +458,7 @@ void tst_QSaveFile::symlink()
QVERIFY(saveFile.open(QIODevice::WriteOnly));
QCOMPARE(saveFile.write(someData), someData.size());
saveFile.commit();
+ QCOMPARE(saveFile.size(), someData.size());
QFile file(targetFile);
QVERIFY2(file.open(QIODevice::ReadOnly), msgCannotOpen(file).constData());
@@ -486,6 +488,7 @@ void tst_QSaveFile::symlink()
QVERIFY(saveFile.open(QIODevice::WriteOnly));
QCOMPARE(saveFile.write(someData), someData.size());
saveFile.commit();
+ QCOMPARE(saveFile.size(), someData.size());
// the explicit file becomes a file instead of a link
QVERIFY(!QFileInfo(cyclicLink + QLatin1Char('1')).isSymLink());
@@ -565,6 +568,7 @@ void tst_QSaveFile::alternateDataStream()
QVERIFY2(file.open(QIODevice::WriteOnly), qPrintable(file.errorString()));
file.write(newContent);
QVERIFY2(file.commit(), qPrintable(file.errorString()));
+ QCOMPARE(file.size(), qint64(strlen(newContent)));
// check the contents
QFile targetFile(adsName);