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 <thiago.macieira@intel.com>
bb10
Ahmad Samir 2024-01-28 19:44:57 +02:00
parent cfcd56a78f
commit 986b5b4f47
1 changed files with 10 additions and 33 deletions

View File

@ -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<QTemporaryDir> 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<QString>("dirName"); // relative from current path or abs