From 986b5b4f47cdac71bb66784abc50d4fff695984d Mon Sep 17 00:00:00 2001 From: Ahmad Samir Date: Sun, 28 Jan 2024 19:44:57 +0200 Subject: QDirIterator: don't create test dirs/files in the source dir This is cleaner as the test dirs/files are created in a QTemporaryDir that is cleaned up automatically, so less manual cleanup in the unittest. This also fixes issues for build environments where the source dir is read-only. entrylist dir in the source dir is only needed for the construction of the QResource in the CMakeLists.txt. Task-number: QTBUG-117449 Change-Id: I3e6389ff730c3a617854e85318f80838e012f2c8 Reviewed-by: Thiago Macieira --- .../corelib/io/qdiriterator/tst_qdiriterator.cpp | 43 +++++----------------- 1 file changed, 10 insertions(+), 33 deletions(-) (limited to 'tests/auto/corelib/io/qdiriterator') diff --git a/tests/auto/corelib/io/qdiriterator/tst_qdiriterator.cpp b/tests/auto/corelib/io/qdiriterator/tst_qdiriterator.cpp index 2d69a36810..f6439c0ead 100644 --- a/tests/auto/corelib/io/qdiriterator/tst_qdiriterator.cpp +++ b/tests/auto/corelib/io/qdiriterator/tst_qdiriterator.cpp @@ -46,16 +46,10 @@ private: // convenience functions return false; } - enum Cleanup { DoDelete, DontDelete }; - bool createFile(const QString &fileName, Cleanup cleanup = DoDelete) + bool createFile(const QString &fileName) { QFile file(fileName); - if (file.open(QIODevice::WriteOnly)) { - if (cleanup == DoDelete) - createdFiles << fileName; - return true; - } - return false; + return file.open(QIODevice::WriteOnly); } bool createLink(const QString &destination, const QString &linkName) @@ -69,7 +63,6 @@ private: // convenience functions private slots: void initTestCase(); - void cleanupTestCase(); void iterateRelativeDirectory_data(); void iterateRelativeDirectory(); void iterateResource_data(); @@ -90,10 +83,9 @@ private slots: #ifndef Q_OS_WIN void hiddenDirs_hiddenFiles(); #endif -#ifdef BUILTIN_TESTDATA + private: - QSharedPointer m_dataDir; -#endif + QTemporaryDir m_dataDir; }; void tst_QDirIterator::initTestCase() @@ -126,25 +118,19 @@ void tst_QDirIterator::initTestCase() #else // chdir into testdata directory, then find testdata by relative paths. - QString testdata_dir = QFileInfo(QFINDTESTDATA("entrylist")).absolutePath(); + QString testdata_dir = m_dataDir.path(); #endif + QVERIFY(!testdata_dir.isEmpty()); + // Must call QDir::setCurrent() here because all the tests that use relative + // paths depend on that. QVERIFY2(QDir::setCurrent(testdata_dir), qPrintable("Could not chdir to " + testdata_dir)); - QFile::remove("entrylist/entrylist1.lnk"); - QFile::remove("entrylist/entrylist2.lnk"); - QFile::remove("entrylist/entrylist3.lnk"); - QFile::remove("entrylist/entrylist4.lnk"); - QFile::remove("entrylist/directory/entrylist1.lnk"); - QFile::remove("entrylist/directory/entrylist2.lnk"); - QFile::remove("entrylist/directory/entrylist3.lnk"); - QFile::remove("entrylist/directory/entrylist4.lnk"); - createDirectory("entrylist"); createDirectory("entrylist/directory"); - createFile("entrylist/file", DontDelete); + createFile("entrylist/file"); createFile("entrylist/writable"); - createFile("entrylist/directory/dummy", DontDelete); + createFile("entrylist/directory/dummy"); createDirectory("recursiveDirs"); createDirectory("recursiveDirs/dir1"); @@ -192,15 +178,6 @@ void tst_QDirIterator::initTestCase() #endif } -void tst_QDirIterator::cleanupTestCase() -{ - for (const QString &fileName : std::as_const(createdFiles)) - QFile::remove(fileName); - - for (const QString &dirName : std::as_const(createdDirectories)) - currentDir.rmdir(dirName); -} - void tst_QDirIterator::iterateRelativeDirectory_data() { QTest::addColumn("dirName"); // relative from current path or abs -- cgit v1.2.3