From 1bb51cb8b1de3ac795d408757812fc57fbf0a902 Mon Sep 17 00:00:00 2001 From: David Faure Date: Fri, 2 Dec 2011 10:39:19 +0100 Subject: Implement QDir::removeRecursively Task-number: QTBUG-4592 Change-Id: I363e2c24d1c0ada975b8b927d7c6e776b8aae579 Reviewed-by: Oswald Buddenhagen --- tests/auto/corelib/io/qdir/tst_qdir.cpp | 83 +++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) (limited to 'tests/auto') diff --git a/tests/auto/corelib/io/qdir/tst_qdir.cpp b/tests/auto/corelib/io/qdir/tst_qdir.cpp index 339eb55154..e6592a1174 100644 --- a/tests/auto/corelib/io/qdir/tst_qdir.cpp +++ b/tests/auto/corelib/io/qdir/tst_qdir.cpp @@ -76,6 +76,7 @@ Q_OBJECT private slots: void init(); + void cleanupTestCase(); void getSetCheck(); void construction(); @@ -99,6 +100,10 @@ private slots: void rmdir_data(); void rmdir(); + void removeRecursively_data(); + void removeRecursively(); + void removeRecursivelyFailure(); + void exists_data(); void exists(); @@ -201,6 +206,11 @@ void tst_QDir::init() QVERIFY2(QDir::setCurrent(m_dataPath), qPrintable("Could not chdir to " + m_dataPath)); } +void tst_QDir::cleanupTestCase() +{ + QDir(QDir::currentPath() + "/tmpdir").removeRecursively(); +} + // Testing get/set functions void tst_QDir::getSetCheck() { @@ -332,6 +342,79 @@ void tst_QDir::rmdir() QVERIFY(!fi.exists()); } +void tst_QDir::removeRecursively_data() +{ + QTest::addColumn("path"); + + // Create dirs and files + const QString tmpdir = QDir::currentPath() + "/tmpdir/"; + QStringList dirs; + dirs << tmpdir + "empty" + << tmpdir + "one" + << tmpdir + "two/three" + << "relative"; + QDir dir; + for (int i = 0; i < dirs.count(); ++i) + dir.mkpath(dirs.at(i)); + QStringList files; + files << tmpdir + "one/file"; + files << tmpdir + "two/three/file"; + for (int i = 0; i < files.count(); ++i) { + QFile file(files.at(i)); + QVERIFY(file.open(QIODevice::WriteOnly)); + file.write("Hello"); + } + + QTest::newRow("empty") << tmpdir + "empty"; + QTest::newRow("one") << tmpdir + "one"; + QTest::newRow("two") << tmpdir + "two"; + QTest::newRow("does not exist") << tmpdir + "doesnotexist"; + QTest::newRow("relative") << "relative"; +} + +void tst_QDir::removeRecursively() +{ + QFETCH(QString, path); + + QDir dir(path); + QVERIFY(dir.removeRecursively()); + + //make sure it really doesn't exist (ie that remove worked) + QVERIFY(!dir.exists()); +} + +void tst_QDir::removeRecursivelyFailure() +{ + const QString tmpdir = QDir::currentPath() + "/tmpdir/"; + const QString path = tmpdir + "undeletable"; + QDir().mkpath(path); + + // Need a file in there, otherwise rmdir works even w/o permissions + QFile file(path + "/file"); + QVERIFY(file.open(QIODevice::WriteOnly)); + file.write("Hello"); + file.close(); + +#ifdef Q_OS_UNIX + QFile dirAsFile(path); // yay, I have to use QFile to change a dir's permissions... + QVERIFY(dirAsFile.setPermissions(QFile::Permissions(0))); // no permissions +#else + QVERIFY(file.setPermissions(QFile::ReadOwner)); +#endif + QVERIFY(!QDir().rmdir(path)); + QDir dir(path); + QVERIFY(!dir.removeRecursively()); // didn't work + QVERIFY(dir.exists()); // still exists + +#ifdef Q_OS_UNIX + QVERIFY(dirAsFile.setPermissions(QFile::Permissions(QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner))); +#else + QVERIFY(file.setPermissions(QFile::ReadOwner | QFile::WriteOwner)); +#endif + QVERIFY(dir.removeRecursively()); + QVERIFY(!dir.exists()); +} + void tst_QDir::exists_data() { QTest::addColumn("path"); -- cgit v1.2.3