From d887e34b495c52a1168c7e7212172d879963c420 Mon Sep 17 00:00:00 2001 From: Ahmad Samir Date: Wed, 20 Dec 2023 01:37:27 +0200 Subject: [PATCH] tst_qdiriterator: add a test for QFsFileEngineIterator As a baseline for subsequent commits. Change-Id: Ifac026848e92817b08a75ceafee6d06e0a8f399d Reviewed-by: Qt CI Bot Reviewed-by: Thiago Macieira --- .../io/qdiriterator/tst_qdiriterator.cpp | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/tests/auto/corelib/io/qdiriterator/tst_qdiriterator.cpp b/tests/auto/corelib/io/qdiriterator/tst_qdiriterator.cpp index ce460eb24b..8f842e7c11 100644 --- a/tests/auto/corelib/io/qdiriterator/tst_qdiriterator.cpp +++ b/tests/auto/corelib/io/qdiriterator/tst_qdiriterator.cpp @@ -70,6 +70,8 @@ private slots: void stopLinkLoop(); #ifdef QT_BUILD_INTERNAL void engineWithNoIterator(); + void testQFsFileEngineIterator_data() { iterateRelativeDirectory_data(); } + void testQFsFileEngineIterator(); #endif void absoluteFilePathsFromRelativeIteratorPath(); void recurseWithFilters() const; @@ -456,6 +458,38 @@ void tst_QDirIterator::engineWithNoIterator() QDir("entrylist").entryList(); QVERIFY(true); // test that the above line doesn't crash } + +class CustomEngineHandler : public QAbstractFileEngineHandler +{ +public: + QAbstractFileEngine *create(const QString &fileName) const override + { + // We want to test QFSFileEngine specifically, so force QDirIterator to use it + // over the default QFileSystemEngine + return new QFSFileEngine(fileName); + } +}; + +void tst_QDirIterator::testQFsFileEngineIterator() +{ + QFETCH(QString, dirName); + QFETCH(QStringList, nameFilters); + QFETCH(QDir::Filters, filters); + QFETCH(QDirIterator::IteratorFlags, flags); + + if (dirName == u"empty") + return; // This row isn't useful in this test + + CustomEngineHandler handler; + bool isEmpty = true; + QDirIterator iter(dirName, nameFilters, filters, flags); + while (iter.hasNext()) { + const QFileInfo &fi = iter.nextFileInfo(); + if (fi.filePath().contains(u"entrylist")) + isEmpty = false; // At least one entry in `entrylist` dir + } + QVERIFY(!isEmpty); +} #endif void tst_QDirIterator::absoluteFilePathsFromRelativeIteratorPath()