summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/io
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@digia.com>2013-10-04 00:42:24 +0200
committerFrederik Gladhorn <frederik.gladhorn@digia.com>2013-10-04 00:44:18 +0200
commitd8fc0da235b2bd566b2b6f1e21218afdf2f34eb3 (patch)
treec0ca819521ed6901a83ab476fa822a886691d806 /tests/auto/corelib/io
parent3649a6e61d823289d18be19387d7e3923dd90bd0 (diff)
parentcdf0c5905b3477c6cd01c519f883b7bb55447120 (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.cpp108
-rw-r--r--tests/auto/corelib/io/qstandardpaths/tst_qstandardpaths.cpp13
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();
}