summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib
diff options
context:
space:
mode:
authorIevgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io>2021-11-10 16:52:07 +0100
committerIevgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io>2021-11-26 03:39:33 +0100
commit174af05400f6344a11f4aa2228244c954cbbca97 (patch)
treedf5edd252f5d0bd4b865c3ace2473fbbfb80d087 /tests/auto/corelib
parent8c9875893bbd7b1355e36d9501d8cb1f84cb6b4d (diff)
QDir: Add support for setting directory permissions to mkdir()
This patch adds an overload of the QDir::mkdir() method that accepts permissions. This allows setting of the directory permissions at the time of its creation. [ChangeLog][QtCore][QDir] Added QDir::mdkir() overload that accepts permissions argument. Task-number: QTBUG-79750 Change-Id: Ic9db723b94ff0d2da6e0b819ac2e5d1f9a4e2049 Reviewed-by: Edward Welbourne <edward.welbourne@qt.io> Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
Diffstat (limited to 'tests/auto/corelib')
-rw-r--r--tests/auto/corelib/io/qdir/tst_qdir.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/tests/auto/corelib/io/qdir/tst_qdir.cpp b/tests/auto/corelib/io/qdir/tst_qdir.cpp
index 88ccd26611..9682bec34e 100644
--- a/tests/auto/corelib/io/qdir/tst_qdir.cpp
+++ b/tests/auto/corelib/io/qdir/tst_qdir.cpp
@@ -37,6 +37,7 @@
#include <qdebug.h>
#include <qdir.h>
#include <qfileinfo.h>
+#include <qscopedvaluerollback.h>
#include <qstringlist.h>
#if defined(Q_OS_WIN)
@@ -65,6 +66,7 @@
#ifdef Q_OS_WIN
#define DRIVE "Q:"
+extern Q_CORE_EXPORT int qt_ntfs_permission_lookup;
#else
#define DRIVE
#endif
@@ -114,6 +116,8 @@ private slots:
void mkdirRmdir_data();
void mkdirRmdir();
void mkdirOnSymlink();
+ void mkdirWithPermissions_data();
+ void mkdirWithPermissions();
void makedirReturnCode();
@@ -451,6 +455,49 @@ void tst_QDir::mkdirOnSymlink()
#endif
}
+void tst_QDir::mkdirWithPermissions_data()
+{
+ QTest::addColumn<QFile::Permissions>("permissions");
+
+ for (int u = 0; u < 8; ++u) {
+ for (int g = 0; g < 8; ++g) {
+ for (int o = 0; o < 8; ++o) {
+ auto permissions = QFileDevice::Permissions::fromInt((u << 12) | (g << 4) | o);
+ QTest::addRow("%04x", permissions.toInt()) << permissions;
+ }
+ }
+ }
+}
+
+void tst_QDir::mkdirWithPermissions()
+{
+ QFETCH(QFile::Permissions, permissions);
+
+#ifdef Q_OS_WIN
+ QScopedValueRollback<int> ntfsMode(qt_ntfs_permission_lookup);
+ ++qt_ntfs_permission_lookup;
+#endif
+#ifdef Q_OS_UNIX
+ auto restoreMask = qScopeGuard([oldMask = umask(0)] { umask(oldMask); });
+#endif
+
+ const QFile::Permissions setPermissions = {
+ QFile::ReadOther, QFile::WriteOther, QFile::ExeOther,
+ QFile::ReadGroup, QFile::WriteGroup, QFile::ExeGroup,
+ QFile::ReadOwner, QFile::WriteOwner, QFile::ExeOwner
+ };
+
+ const QString path = u"tmpdir"_qs;
+ QDir dir;
+ auto deleteDirectory = qScopeGuard([&dir, &path] { dir.rmdir(path); });
+
+ QVERIFY(dir.mkdir(path, permissions));
+ auto actualPermissions = QFileInfo(dir.filePath(path)).permissions();
+ QCOMPARE(actualPermissions & setPermissions, permissions);
+ QVERIFY(dir.rmdir(path));
+ deleteDirectory.dismiss();
+}
+
void tst_QDir::makedirReturnCode()
{
QString dirName = QString::fromLatin1("makedirReturnCode");