Stabilize QFileSystemModel::dirsBeforeFiles test
Make the test operate in its own temporary directory, so that entries left behind by other test functions don't impact this test. Also, call QFileSystemModel::sort explicitly; it would otherwise only be done once through a single-shot timer, and the test processes events until the model is populated, which might not process that delayed sorting. Since dirsBeforeFiles tests the sorting algorithm and not the sorting logic, best to do this explicitly. In case of sort failure, print diagnostics. Change-Id: I44c2b82ef1330cc8787aed2b5cbf109ef3a67876 Done-with: Friedemann Kleint <Friedemann.Kleint@qt.io> Fixes: QTBUG-75452 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>bb10
parent
673038ebd5
commit
4e796e0b0d
|
|
@ -1014,30 +1014,38 @@ void tst_QFileSystemModel::drives()
|
|||
|
||||
void tst_QFileSystemModel::dirsBeforeFiles()
|
||||
{
|
||||
QDir dir(flatDirTestPath);
|
||||
auto diagnosticMsg = [](int row, const QFileInfo &left, const QFileInfo &right) -> QByteArray {
|
||||
QString message;
|
||||
QDebug(&message).noquote() << "Unexpected sort order at #" << row << ':' << left << right;
|
||||
return message.toLocal8Bit();
|
||||
};
|
||||
QTemporaryDir testDir(flatDirTestPath);
|
||||
QVERIFY2(testDir.isValid(), qPrintable(testDir.errorString()));
|
||||
QDir dir(testDir.path());
|
||||
|
||||
const int itemCount = 3;
|
||||
for (int i = 0; i < itemCount; ++i) {
|
||||
QLatin1Char c('a' + char(i));
|
||||
QVERIFY(dir.mkdir(c + QLatin1String("-dir")));
|
||||
QFile file(flatDirTestPath + QLatin1Char('/') + c + QLatin1String("-file"));
|
||||
QFile file(dir.filePath(c + QLatin1String("-file")));
|
||||
QVERIFY(file.open(QIODevice::ReadWrite));
|
||||
file.close();
|
||||
}
|
||||
|
||||
QScopedPointer<QFileSystemModel> model(new QFileSystemModel);
|
||||
QModelIndex root = model->setRootPath(flatDirTestPath);
|
||||
QModelIndex root = model->setRootPath(dir.absolutePath());
|
||||
// Wait for model to be notified by the file system watcher
|
||||
QTRY_COMPARE(model->rowCount(root), 2 * itemCount);
|
||||
|
||||
// Ensure that no file occurs before any directory:
|
||||
for (int i = 1; i < model->rowCount(root); ++i) {
|
||||
// sort explicitly - dirs before files (except on macOS), and then by name
|
||||
model->sort(0);
|
||||
// Ensure that no file occurs before any directory (see QFileSystemModelSorter):
|
||||
for (int i = 1, count = model->rowCount(root); i < count; ++i) {
|
||||
const QFileInfo previous = model->fileInfo(model->index(i - 1, 0, root));
|
||||
const QFileInfo current = model->fileInfo(model->index(i, 0, root));
|
||||
#ifndef Q_OS_MAC
|
||||
QVERIFY(!(model->fileInfo(model->index(i - 1, 0, root)).isFile()
|
||||
&& model->fileInfo(model->index(i, 0, root)).isDir()));
|
||||
QVERIFY2(!(previous.isFile() && current.isDir()), diagnosticMsg(i, previous, current).constData());
|
||||
#else
|
||||
QVERIFY(model->fileInfo(model->index(i - 1, 0, root)).fileName() <
|
||||
model->fileInfo(model->index(i, 0, root)).fileName());
|
||||
QVERIFY2(previous.fileName() < current.fileName(), diagnosticMsg(i, previous, current).constData());
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue