diff options
Diffstat (limited to 'tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp')
-rw-r--r-- | tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp | 132 |
1 files changed, 85 insertions, 47 deletions
diff --git a/tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp b/tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp index 3332cd6079..737317a8fb 100644 --- a/tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp +++ b/tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp @@ -1,31 +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) 2021 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QTest> #include <QStandardPaths> @@ -38,13 +12,21 @@ #include <QtTest/private/qtesthelpers_p.h> #ifdef Q_OS_WIN # include <shlwapi.h> -# include <windows.h> +# include <qt_windows.h> #endif #ifdef Q_OS_UNIX // for geteuid() # include <sys/types.h> # include <unistd.h> #endif +#ifdef Q_OS_INTEGRITY +#include "qplatformdefs.h" +#endif + +#include <optional> + +using namespace Qt::StringLiterals; + class tst_QTemporaryDir : public QObject { Q_OBJECT @@ -55,6 +37,7 @@ public slots: private slots: void construction(); + void moveSemantics(); void fileTemplate(); void fileTemplate_data(); void getSetCheck(); @@ -70,7 +53,7 @@ private slots: void QTBUG_4796_data(); void QTBUG_4796(); - void QTBUG43352_failedSetPermissions(); + void nestedTempDirs(); private: QString m_previousCurrent; @@ -101,6 +84,58 @@ void tst_QTemporaryDir::construction() QCOMPARE(dir.errorString(), QString()); } +void tst_QTemporaryDir::moveSemantics() +{ + { + auto original = std::optional<QTemporaryDir>(std::in_place); + QVERIFY(original->isValid()); + + original->setAutoRemove(true); + + auto OriginalDirectoryInfo = QFileInfo(original->path()); + OriginalDirectoryInfo.setCaching(false); + QVERIFY(OriginalDirectoryInfo.exists()); + + QTemporaryDir movedInto = std::move(*original); + + original.reset(); + + QVERIFY(OriginalDirectoryInfo.exists()); + QVERIFY(movedInto.path() == OriginalDirectoryInfo.filePath()); + } + + { + auto movedInto = QTemporaryDir(); + QVERIFY(movedInto.isValid()); + + movedInto.setAutoRemove(true); + + auto movedIntoInitialDirectoryInfo = QFileInfo(movedInto.path()); + movedIntoInitialDirectoryInfo.setCaching(false); + QVERIFY(movedIntoInitialDirectoryInfo.exists()); + + auto OriginalDirectoryInfo = QFileInfo(); + OriginalDirectoryInfo.setCaching(false); + + { + auto original = QTemporaryDir(); + QVERIFY(original.isValid()); + + original.setAutoRemove(true); + + OriginalDirectoryInfo.setFile(original.path()); + QVERIFY(OriginalDirectoryInfo.exists()); + + movedInto = std::move(original); + } + + QVERIFY(!movedIntoInitialDirectoryInfo.exists()); + QVERIFY(OriginalDirectoryInfo.exists()); + + QVERIFY(movedInto.path() == OriginalDirectoryInfo.filePath()); + } +} + // Testing get/set functions void tst_QTemporaryDir::getSetCheck() { @@ -165,19 +200,19 @@ void tst_QTemporaryDir::fileTemplate_data() return; // skip if we have no drive letter tmp.data()[1] = u'$'; - const auto tmpPath = tmp + uR"(\UNC.XXXXXX.tmpDir)"_qs; + const auto tmpPath = tmp + uR"(\UNC.XXXXXX.tmpDir)"_s; QTest::newRow("UNC-backslash") - << uR"(\\localhost\)"_qs + tmpPath << "UNC." + << uR"(\\localhost\)"_s + tmpPath << "UNC." << ".tmpDir"; QTest::newRow("UNC-prefix") - << uR"(\\?\UNC\localhost\)"_qs + tmpPath << "UNC." + << uR"(\\?\UNC\localhost\)"_s + tmpPath << "UNC." << ".tmpDir"; QTest::newRow("UNC-slash") - << u"//localhost/"_qs + QDir::fromNativeSeparators(tmpPath) << "UNC." + << u"//localhost/"_s + QDir::fromNativeSeparators(tmpPath) << "UNC." << ".tmpDir"; QTest::newRow("UNC-prefix-slash") - << uR"(//?/UNC/localhost/)"_qs + QDir::fromNativeSeparators(tmpPath) << "UNC." + << uR"(//?/UNC/localhost/)"_s + QDir::fromNativeSeparators(tmpPath) << "UNC." << ".tmpDir"; #endif } @@ -193,9 +228,9 @@ void tst_QTemporaryDir::fileTemplate() QVERIFY(tempDir.isValid()); QString dirName = QDir(tempDir.path()).dirName(); - if (prefix.length()) { - QCOMPARE(dirName.left(prefix.length()), prefix); - QCOMPARE(dirName.right(suffix.length()), suffix); + if (prefix.size()) { + QCOMPARE(dirName.left(prefix.size()), prefix); + QCOMPARE(dirName.right(suffix.size()), suffix); } } @@ -312,7 +347,7 @@ void tst_QTemporaryDir::nonWritableCurrentDir() { #ifdef Q_OS_UNIX -# if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED) +# ifdef Q_OS_ANDROID const char nonWritableDir[] = "/data"; # else const char nonWritableDir[] = "/home"; @@ -354,7 +389,8 @@ void tst_QTemporaryDir::openOnRootDrives() #endif // If it's possible to create a file in the root directory, it // must be possible to create a temp dir there too. - foreach (const QFileInfo &driveInfo, QDir::drives()) { + const auto drives = QDir::drives(); + for (const QFileInfo &driveInfo : drives) { QFile testFile(driveInfo.filePath() + "XXXXXX"); if (testFile.open(QIODevice::ReadWrite)) { testFile.remove(); @@ -443,7 +479,7 @@ void tst_QTemporaryDir::QTBUG_4796() // unicode support { ~CleanOnReturn() { - foreach (const QString &tempName, tempNames) + for (const QString &tempName : std::as_const(tempNames)) QVERIFY(QDir(tempName).removeRecursively()); } @@ -513,22 +549,24 @@ void tst_QTemporaryDir::QTBUG_4796() // unicode support #ifdef Q_OS_WIN QTest::qWait(20); #endif - foreach (const QString &tempName, cleaner.tempNames) + for (const QString &tempName : std::as_const(cleaner.tempNames)) QVERIFY2(!QDir(tempName).exists(), qPrintable(tempName)); cleaner.reset(); } -void tst_QTemporaryDir::QTBUG43352_failedSetPermissions() +void tst_QTemporaryDir::nestedTempDirs() { - QString path = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation) + QStringLiteral("/"); - int count = QDir(path).entryList().size(); + QTemporaryDir parentDir; + const QString &parentPath = parentDir.path(); { - QTemporaryDir dir(path); + QTemporaryDir tempdir(parentPath); } - QCOMPARE(QDir(path).entryList().size(), count); + QDir dir(parentPath); + dir.setFilter(QDir::NoDotAndDotDot); + QCOMPARE(dir.count(), 0); } QTEST_MAIN(tst_QTemporaryDir) |