summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp
diff options
context:
space:
mode:
authorDavid Faure <faure+bluesystems@kde.org>2013-01-14 23:25:12 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-01-17 17:39:22 +0100
commitff8362d65e8d32c2286cd3f72ab2aa85ad97b6e4 (patch)
tree0c162ce129dff246ba6cc56e11901aa122c7ac49 /tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp
parent2d5fe453793182283e88c1d07d775ff1fed668c3 (diff)
QSaveFile autotest: restore permissions using RAII
So that the QTemporaryDir can happen even on error. Change-Id: I728d49eac8bd65e1919fd314a95387949e134de0 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp')
-rw-r--r--tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp33
1 files changed, 25 insertions, 8 deletions
diff --git a/tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp b/tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp
index 4d62168473..5ef4b11e8a 100644
--- a/tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp
+++ b/tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp
@@ -222,10 +222,34 @@ void tst_QSaveFile::transactionalWriteErrorRenaming()
QCOMPARE(file.write("Hello"), qint64(5));
QVERIFY(!QFile::exists(targetFile));
+ // Restore permissions so that the QTemporaryDir cleanup can happen
+ class PermissionRestorer
+ {
+ public:
+ PermissionRestorer(const QString& path)
+ : m_path(path)
+ {}
+
+ ~PermissionRestorer()
+ {
+ QFile file(m_path);
+#ifdef Q_OS_UNIX
+ file.setPermissions(QFile::Permissions(QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner));
+#else
+ file.setPermissions(QFile::WriteOwner);
+ file.remove();
+#endif
+ }
+
+ private:
+ QString m_path;
+ };
+
#ifdef Q_OS_UNIX
// Make rename() fail for lack of permissions in the directory
QFile dirAsFile(dir.path()); // yay, I have to use QFile to change a dir's permissions...
QVERIFY(dirAsFile.setPermissions(QFile::Permissions(0))); // no permissions
+ PermissionRestorer permissionRestorer(dir.path());
#else
// Windows: Make rename() fail for lack of permissions on an existing target file
QFile existingTargetFile(targetFile);
@@ -233,6 +257,7 @@ void tst_QSaveFile::transactionalWriteErrorRenaming()
QCOMPARE(file.write("Target"), qint64(6));
existingTargetFile.close();
QVERIFY(existingTargetFile.setPermissions(QFile::ReadOwner));
+ PermissionRestorer permissionRestorer(targetFile);
#endif
// The saving should fail.
@@ -241,14 +266,6 @@ void tst_QSaveFile::transactionalWriteErrorRenaming()
QVERIFY(!QFile::exists(targetFile)); // renaming failed
#endif
QCOMPARE(file.error(), QFile::RenameError);
-
- // Restore permissions so that the cleanup can happen
-#ifdef Q_OS_UNIX
- QVERIFY(dirAsFile.setPermissions(QFile::Permissions(QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner)));
-#else
- QVERIFY(existingTargetFile.setPermissions(QFile::WriteOwner));
- QVERIFY(existingTargetFile.remove());
-#endif
}
QTEST_MAIN(tst_QSaveFile)