From 0842d32441a585026336d616b051915865d51d6a Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Wed, 8 Aug 2012 12:42:06 +0200 Subject: QFileSystemModel: fix permission mangling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The old code masked out write flags before returning permissions from permissions() or data(FilePermissions) in order to force QFileDialog to disable the rename and delete actions. This was to fix Task 143519, but introduced QTBUG-20503. Instead, revert to the pre-143519-bugfix code and do the necessary check in QFileDialog directly. Also add a testcase for 143519. Reported-by: Gilles Pascual Task-number: QTBUG-20503 Task-number: 143519 Change-Id: I140109341c0ed40722e3aac4327c2a740fb014c2 Reviewed-by: Jan Arve Sæther --- .../qfilesystemmodel/tst_qfilesystemmodel.cpp | 49 ++++++++++++++++++++++ 1 file changed, 49 insertions(+) (limited to 'tests/auto/widgets/dialogs/qfilesystemmodel') diff --git a/tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp b/tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp index b426024ad9..e0256d207c 100644 --- a/tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp +++ b/tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp @@ -127,6 +127,9 @@ private slots: void roleNames_data(); void roleNames(); + void permissions_data(); + void permissions(); + protected: bool createFiles(const QString &test_path, const QStringList &initial_files, int existingFileCount = 0, const QStringList &intial_dirs = QStringList()); @@ -1022,6 +1025,52 @@ void tst_QFileSystemModel::roleNames() QVERIFY(values.contains(roleName)); } +void tst_QFileSystemModel::permissions_data() +{ + QTest::addColumn("permissions"); + QTest::addColumn("readOnly"); + + static const int permissions[] = { + QFile::WriteOwner, + QFile::ReadOwner, + QFile::WriteOwner|QFile::ReadOwner, + }; +#define ROW_NAME(i) qPrintable(QString().sprintf("%s-0%04x", readOnly ? "ro" : "rw", permissions[i])) + for (int readOnly = false ; readOnly <= true; ++readOnly) + for (size_t i = 0; i < sizeof permissions / sizeof *permissions; ++i) + QTest::newRow(ROW_NAME(i)) << permissions[i] << bool(readOnly); +#undef ROW_NAME +} + +void tst_QFileSystemModel::permissions() // checks QTBUG-20503 +{ + QFETCH(int, permissions); + QFETCH(bool, readOnly); + + const QString tmp = flatDirTestPath; + const QString file = tmp + '/' + "f"; + QVERIFY(createFiles(tmp, QStringList() << "f")); + + QVERIFY(QFile::setPermissions(file, QFile::Permissions(permissions))); + + const QModelIndex root = model->setRootPath(tmp); + + model->setReadOnly(readOnly); + + QCOMPARE(model->isReadOnly(), readOnly); + + QTRY_COMPARE(model->rowCount(root), 1); + + const QFile::Permissions modelPermissions = model->permissions(model->index(0, 0, root)); + const QFile::Permissions modelFileInfoPermissions = model->fileInfo(model->index(0, 0, root)).permissions(); + const QFile::Permissions fileInfoPermissions = QFileInfo(file).permissions(); + + QCOMPARE(modelPermissions, modelFileInfoPermissions); + QCOMPARE(modelFileInfoPermissions, fileInfoPermissions); + QCOMPARE(fileInfoPermissions, modelPermissions); +} + + QTEST_MAIN(tst_QFileSystemModel) #include "tst_qfilesystemmodel.moc" -- cgit v1.2.3