summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@digia.com>2013-10-01 10:20:18 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-10-01 12:28:22 +0200
commitd8a489ccc25fa86825eb1c5ad91669c26153cb18 (patch)
treece5d83de9b04ee8bc0b66f08e10daee8b0266b0e /tests
parent48061944ef358bbb1e5fd7b582376868f9788c5e (diff)
Fix temporary directory leak in tst_qsavefile.
Task-number: QTBUG-33769 Change-Id: I5177f09df22fd2b9b0d9eca4301c383c600d5ab8 Reviewed-by: David Faure <david.faure@kdab.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp69
1 files changed, 24 insertions, 45 deletions
diff --git a/tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp b/tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp
index 44b1e0ec2a..04c083e653 100644
--- a/tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp
+++ b/tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp
@@ -56,6 +56,29 @@
# include <windows.h>
#endif
+// Restore permissions so that the QTemporaryDir cleanup can happen
+class PermissionRestorer
+{
+ Q_DISABLE_COPY(PermissionRestorer)
+public:
+ explicit PermissionRestorer(const QString& path) : m_path(path) {}
+ ~PermissionRestorer() { restore(); }
+
+ inline void restore()
+ {
+ 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:
+ const QString m_path;
+};
+
class tst_QSaveFile : public QObject
{
Q_OBJECT
@@ -177,27 +200,6 @@ void tst_QSaveFile::transactionalWriteNoPermissionsOnDir()
{
#ifdef Q_OS_UNIX
QFETCH(bool, directWriteFallback);
- // Restore permissions so that the QTemporaryDir cleanup can happen
- class PermissionRestorer
- {
- QString m_path;
- public:
- PermissionRestorer(const QString& path)
- : m_path(path)
- {}
-
- ~PermissionRestorer()
- {
- restore();
- }
- void restore()
- {
- QFile file(m_path);
- file.setPermissions(QFile::Permissions(QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner));
- }
- };
-
-
QTemporaryDir dir;
QVERIFY(dir.isValid());
QVERIFY(QFile(dir.path()).setPermissions(QFile::ReadOwner | QFile::ExeOwner));
@@ -256,6 +258,7 @@ void tst_QSaveFile::transactionalWriteNoPermissionsOnFile()
QVERIFY(dir.isValid());
const QString targetFile = dir.path() + QString::fromLatin1("/outfile");
QFile file(targetFile);
+ PermissionRestorer permissionRestorer(targetFile);
QVERIFY2(file.open(QIODevice::WriteOnly), msgCannotOpen(file).constData());
QCOMPARE(file.write("Hello"), Q_INT64_C(5));
file.close();
@@ -303,30 +306,6 @@ void tst_QSaveFile::transactionalWriteErrorRenaming()
QVERIFY2(file.open(QIODevice::WriteOnly), msgCannotOpen(file).constData());
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...