gwenview: stabilize the RecursiveDirModel test

note that this race that was observed by the author of the test will happen
outside the test - if files are created while the KDirLister is listing
(because an automatic update was issued for example) some files may not be
listed

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2023-07-05 01:13:15 +03:00
parent c55b482da9
commit 2c90b02a32
4 changed files with 12 additions and 18 deletions

View file

@ -119,6 +119,11 @@ void RecursiveDirModel::setUrl(const KUrl& url)
d->mDirLister->openUrl(url, true); d->mDirLister->openUrl(url, true);
} }
void RecursiveDirModel::updateDirectory()
{
d->mDirLister->updateDirectory();
}
int RecursiveDirModel::rowCount(const QModelIndex& parent) const int RecursiveDirModel::rowCount(const QModelIndex& parent) const
{ {
if (parent.isValid()) { if (parent.isValid()) {
@ -153,6 +158,7 @@ QVariant RecursiveDirModel::data(const QModelIndex& index, int role) const
void RecursiveDirModel::slotItemsAdded(const KFileItemList& newList) void RecursiveDirModel::slotItemsAdded(const KFileItemList& newList)
{ {
// qDebug() << Q_FUNC_INFO << newList;
KFileItemList fileList; KFileItemList fileList;
Q_FOREACH(const KFileItem& item, newList) { Q_FOREACH(const KFileItem& item, newList) {
if (item.isFile()) { if (item.isFile()) {
@ -173,6 +179,7 @@ void RecursiveDirModel::slotItemsAdded(const KFileItemList& newList)
void RecursiveDirModel::slotItemsDeleted(const KFileItemList& list) void RecursiveDirModel::slotItemsDeleted(const KFileItemList& list)
{ {
// qDebug() << Q_FUNC_INFO << list;
Q_FOREACH(const KFileItem& item, list) { Q_FOREACH(const KFileItem& item, list) {
if (item.isDir()) { if (item.isDir()) {
continue; continue;

View file

@ -48,6 +48,7 @@ public:
KUrl url() const; KUrl url() const;
void setUrl(const KUrl&); void setUrl(const KUrl&);
void updateDirectory();
int rowCount(const QModelIndex&) const; // reimp int rowCount(const QModelIndex&) const; // reimp
QVariant data(const QModelIndex&, int role = Qt::DisplayRole) const; // reimp QVariant data(const QModelIndex&, int role = Qt::DisplayRole) const; // reimp

View file

@ -138,39 +138,24 @@ void RecursiveDirModelTest::testBasic()
// Test adding new files // Test adding new files
sandBoxDir.fill(addedFiles); sandBoxDir.fill(addedFiles);
model.updateDirectory();
loop.exec(); loop.exec();
out = listModelUrls(&model); out = listModelUrls(&model);
expected = listExpectedUrls(sandBoxDir, initialFiles + addedFiles); expected = listExpectedUrls(sandBoxDir, initialFiles + addedFiles);
QCOMPARE(out, expected); QCOMPARE(out, expected);
# if 0
/* FIXME: This part of the test is not reliable :/ Sometimes some tests pass,
* sometimes they don't. It feels like KDirLister::itemsDeleted() is not
* always emitted.
*/
// Test removing files // Test removing files
Q_FOREACH(const QString &name, removedFiles) { Q_FOREACH(const QString &name, removedFiles) {
bool ok = sandBoxDir.remove(name); bool ok = sandBoxDir.remove(name);
Q_ASSERT(ok); Q_ASSERT(ok);
expected.removeOne(KUrl(sandBoxDir.absoluteFilePath(name))); expected.removeOne(KUrl(sandBoxDir.absoluteFilePath(name)));
} }
QTime chrono; model.updateDirectory();
chrono.start(); loop.exec();
while (chrono.elapsed() < 2000) {
waitForDeferredDeletes();
}
out = listModelUrls(&model); out = listModelUrls(&model);
if (out != expected) {
kWarning() << "out:";
logLst(out);
kWarning() << "expected:";
logLst(expected);
}
QCOMPARE(out, expected); QCOMPARE(out, expected);
#endif
} }
void RecursiveDirModelTest::testSetNewUrl() void RecursiveDirModelTest::testSetNewUrl()

View file

@ -155,6 +155,7 @@ void SandBoxDir::fill(const QStringList& filePaths)
Q_FOREACH(const QString& filePath, filePaths) { Q_FOREACH(const QString& filePath, filePaths) {
QFileInfo info(*this, filePath); QFileInfo info(*this, filePath);
mkpath(info.absolutePath()); mkpath(info.absolutePath());
// qDebug() << Q_FUNC_INFO << info.absoluteFilePath();
createEmptyFile(info.absoluteFilePath()); createEmptyFile(info.absoluteFilePath());
} }
} }