diff options
author | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2013-10-04 00:42:24 +0200 |
---|---|---|
committer | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2013-10-04 00:44:18 +0200 |
commit | d8fc0da235b2bd566b2b6f1e21218afdf2f34eb3 (patch) | |
tree | c0ca819521ed6901a83ab476fa822a886691d806 /tests/auto/corelib/io | |
parent | 3649a6e61d823289d18be19387d7e3923dd90bd0 (diff) | |
parent | cdf0c5905b3477c6cd01c519f883b7bb55447120 (diff) |
Merge remote-tracking branch 'origin/stable' into dev
Conflicts:
src/plugins/platforms/minimal/qminimalintegration.cpp
src/plugins/platforms/offscreen/qoffscreenintegration.cpp
Change-Id: Ica85deeab5c5038ac004718e25194b1157343480
Diffstat (limited to 'tests/auto/corelib/io')
-rw-r--r-- | tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp | 108 | ||||
-rw-r--r-- | tests/auto/corelib/io/qstandardpaths/tst_qstandardpaths.cpp | 13 |
2 files changed, 59 insertions, 62 deletions
diff --git a/tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp b/tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp index d9292b8460..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 @@ -73,13 +96,21 @@ private slots: void transactionalWriteErrorRenaming(); }; +static inline QByteArray msgCannotOpen(const QFileDevice &f) +{ + QString result = QStringLiteral("Cannot open ") + QDir::toNativeSeparators(f.fileName()) + + QStringLiteral(": ") + f.errorString(); + return result.toLocal8Bit(); +} + void tst_QSaveFile::transactionalWrite() { QTemporaryDir dir; + QVERIFY(dir.isValid()); const QString targetFile = dir.path() + QString::fromLatin1("/outfile"); QFile::remove(targetFile); QSaveFile file(targetFile); - QVERIFY(file.open(QIODevice::WriteOnly)); + QVERIFY2(file.open(QIODevice::WriteOnly), msgCannotOpen(file).constData()); QVERIFY(file.isOpen()); QCOMPARE(file.fileName(), targetFile); QVERIFY(!QFile::exists(targetFile)); @@ -102,27 +133,29 @@ void tst_QSaveFile::saveTwice() // Check that we can reuse a QSaveFile object // (and test the case of an existing target file) QTemporaryDir dir; + QVERIFY(dir.isValid()); const QString targetFile = dir.path() + QString::fromLatin1("/outfile"); QSaveFile file(targetFile); - QVERIFY(file.open(QIODevice::WriteOnly)); + QVERIFY2(file.open(QIODevice::WriteOnly), msgCannotOpen(file).constData()); QCOMPARE(file.write("Hello"), Q_INT64_C(5)); QVERIFY2(file.commit(), qPrintable(file.errorString())); - QVERIFY(file.open(QIODevice::WriteOnly)); + QVERIFY2(file.open(QIODevice::WriteOnly), msgCannotOpen(file).constData()); QCOMPARE(file.write("World"), Q_INT64_C(5)); QVERIFY2(file.commit(), qPrintable(file.errorString())); QFile reader(targetFile); - QVERIFY(reader.open(QIODevice::ReadOnly)); + QVERIFY2(reader.open(QIODevice::ReadOnly), msgCannotOpen(reader).constData()); QCOMPARE(QString::fromLatin1(reader.readAll()), QString::fromLatin1("World")); } void tst_QSaveFile::textStreamManualFlush() { QTemporaryDir dir; + QVERIFY(dir.isValid()); const QString targetFile = dir.path() + QString::fromLatin1("/outfile"); QSaveFile file(targetFile); - QVERIFY(file.open(QIODevice::WriteOnly)); + QVERIFY2(file.open(QIODevice::WriteOnly), msgCannotOpen(file).constData()); QTextStream ts(&file); ts << "Manual flush"; @@ -140,9 +173,10 @@ void tst_QSaveFile::textStreamManualFlush() void tst_QSaveFile::textStreamAutoFlush() { QTemporaryDir dir; + QVERIFY(dir.isValid()); const QString targetFile = dir.path() + QString::fromLatin1("/outfile"); QSaveFile file(targetFile); - QVERIFY(file.open(QIODevice::WriteOnly)); + QVERIFY2(file.open(QIODevice::WriteOnly), msgCannotOpen(file).constData()); QTextStream ts(&file); ts << "Auto-flush."; @@ -166,28 +200,8 @@ 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)); PermissionRestorer permissionRestorer(dir.path()); @@ -212,7 +226,7 @@ void tst_QSaveFile::transactionalWriteNoPermissionsOnDir() file.setDirectWriteFallback(directWriteFallback); QCOMPARE(file.directWriteFallback(), directWriteFallback); if (directWriteFallback) { - QVERIFY(file.open(QIODevice::WriteOnly)); + QVERIFY2(file.open(QIODevice::WriteOnly), msgCannotOpen(file).constData()); QCOMPARE((int)file.error(), (int)QFile::NoError); QCOMPARE(file.write("World"), Q_INT64_C(5)); QVERIFY(file.commit()); @@ -222,7 +236,7 @@ void tst_QSaveFile::transactionalWriteNoPermissionsOnDir() QCOMPARE(QString::fromLatin1(reader.readAll()), QString::fromLatin1("World")); reader.close(); - QVERIFY(file.open(QIODevice::WriteOnly)); + QVERIFY2(file.open(QIODevice::WriteOnly), msgCannotOpen(file).constData()); QCOMPARE((int)file.error(), (int)QFile::NoError); QCOMPARE(file.write("W"), Q_INT64_C(1)); file.cancelWriting(); // no effect, as per the documentation @@ -241,9 +255,11 @@ void tst_QSaveFile::transactionalWriteNoPermissionsOnFile() { // Setup an existing but readonly file QTemporaryDir dir; + QVERIFY(dir.isValid()); const QString targetFile = dir.path() + QString::fromLatin1("/outfile"); QFile file(targetFile); - QVERIFY(file.open(QIODevice::WriteOnly)); + PermissionRestorer permissionRestorer(targetFile); + QVERIFY2(file.open(QIODevice::WriteOnly), msgCannotOpen(file).constData()); QCOMPARE(file.write("Hello"), Q_INT64_C(5)); file.close(); file.setPermissions(QFile::ReadOwner); @@ -260,10 +276,11 @@ void tst_QSaveFile::transactionalWriteNoPermissionsOnFile() void tst_QSaveFile::transactionalWriteCanceled() { QTemporaryDir dir; + QVERIFY(dir.isValid()); const QString targetFile = dir.path() + QString::fromLatin1("/outfile"); QFile::remove(targetFile); QSaveFile file(targetFile); - QVERIFY(file.open(QIODevice::WriteOnly)); + QVERIFY2(file.open(QIODevice::WriteOnly), msgCannotOpen(file).constData()); QTextStream ts(&file); ts << "This writing operation will soon be canceled.\n"; @@ -283,35 +300,12 @@ void tst_QSaveFile::transactionalWriteCanceled() void tst_QSaveFile::transactionalWriteErrorRenaming() { QTemporaryDir dir; + QVERIFY(dir.isValid()); const QString targetFile = dir.path() + QString::fromLatin1("/outfile"); QSaveFile file(targetFile); - QVERIFY(file.open(QIODevice::WriteOnly)); + 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... @@ -320,7 +314,7 @@ void tst_QSaveFile::transactionalWriteErrorRenaming() #else // Windows: Make rename() fail for lack of permissions on an existing target file QFile existingTargetFile(targetFile); - QVERIFY(existingTargetFile.open(QIODevice::WriteOnly)); + QVERIFY2(existingTargetFile.open(QIODevice::WriteOnly), msgCannotOpen(existingTargetFile).constData()); QCOMPARE(file.write("Target"), qint64(6)); existingTargetFile.close(); QVERIFY(existingTargetFile.setPermissions(QFile::ReadOwner)); diff --git a/tests/auto/corelib/io/qstandardpaths/tst_qstandardpaths.cpp b/tests/auto/corelib/io/qstandardpaths/tst_qstandardpaths.cpp index b63dbc449c..9ac1526f07 100644 --- a/tests/auto/corelib/io/qstandardpaths/tst_qstandardpaths.cpp +++ b/tests/auto/corelib/io/qstandardpaths/tst_qstandardpaths.cpp @@ -308,13 +308,16 @@ void tst_qstandardpaths::testDataLocation() #ifndef Q_OS_WIN // Find "sh" on Unix. +// It may exist twice, in /bin/sh and /usr/bin/sh, in that case use the PATH order. static inline QFileInfo findSh() { - const char *shPaths[] = {"/bin/sh", "/usr/bin/sh", 0}; - for (const char **shPath = shPaths; *shPath; ++shPath) { - const QFileInfo fi = QFileInfo(QLatin1String(*shPath)); - if (fi.exists()) - return fi; + QLatin1String sh("/sh"); + QByteArray pEnv = qgetenv("PATH"); + const QLatin1Char pathSep(':'); + const QStringList rawPaths = QString::fromLocal8Bit(pEnv.constData()).split(pathSep, QString::SkipEmptyParts); + foreach (const QString &path, rawPaths) { + if (QFile::exists(path + sh)) + return path + sh; } return QFileInfo(); } |