From 2380765a2b4563bc714f947927d2cd48e2bbb49d Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Wed, 2 May 2012 16:46:52 +0100 Subject: Fix QFile::permissions for long filenames When qt_ntfs_permission_lookup is used, QFile::permissions failed for files with long filenames. Also created a test case for this API, which revealed another bug. Task-number: QTBUG-25629 Change-Id: I73b7676a9d059c0e782b3f701b2e6bbc92f671ed Reviewed-by: Prasanth Ullattil --- tests/auto/corelib/io/qfile/tst_qfile.cpp | 66 +++++++++++++++++++++++++++---- 1 file changed, 59 insertions(+), 7 deletions(-) (limited to 'tests/auto/corelib/io/qfile') diff --git a/tests/auto/corelib/io/qfile/tst_qfile.cpp b/tests/auto/corelib/io/qfile/tst_qfile.cpp index db0ec39106..f310b2005a 100644 --- a/tests/auto/corelib/io/qfile/tst_qfile.cpp +++ b/tests/auto/corelib/io/qfile/tst_qfile.cpp @@ -51,6 +51,12 @@ #include #include +#ifdef Q_OS_WIN +QT_BEGIN_NAMESPACE +extern Q_CORE_EXPORT int qt_ntfs_permission_lookup; +QT_END_NAMESPACE +#endif + #if !defined(Q_OS_WINCE) #include #endif @@ -137,6 +143,8 @@ private slots: void append(); void permissions_data(); void permissions(); + void permissionsNtfs_data(); + void permissionsNtfs(); void setPermissions(); void copy(); void copyAfterFail(); @@ -1091,12 +1099,21 @@ void tst_QFile::permissions_data() QTest::addColumn("file"); QTest::addColumn("perms"); QTest::addColumn("expected"); + QTest::addColumn("create"); - QTest::newRow("data0") << QCoreApplication::instance()->applicationFilePath() << uint(QFile::ExeUser) << true; - QTest::newRow("data1") << QFINDTESTDATA("tst_qfile.cpp") << uint(QFile::ReadUser) << true; - QTest::newRow("resource1") << ":/tst_qfileinfo/resources/file1.ext1" << uint(QFile::ReadUser) << true; - QTest::newRow("resource2") << ":/tst_qfileinfo/resources/file1.ext1" << uint(QFile::WriteUser) << false; - QTest::newRow("resource3") << ":/tst_qfileinfo/resources/file1.ext1" << uint(QFile::ExeUser) << false; + QTest::newRow("data0") << QCoreApplication::instance()->applicationFilePath() << uint(QFile::ExeUser) << true << false; + QTest::newRow("data1") << QFINDTESTDATA("tst_qfile.cpp") << uint(QFile::ReadUser) << true << false; + QTest::newRow("readonly") << QFINDTESTDATA("readonlyfile") << uint(QFile::WriteUser) << false << false; +#ifndef Q_OS_WINCE + QTest::newRow("longfile") << QString::fromLatin1("longFileNamelongFileNamelongFileNamelongFileName" + "longFileNamelongFileNamelongFileNamelongFileName" + "longFileNamelongFileNamelongFileNamelongFileName" + "longFileNamelongFileNamelongFileNamelongFileName" + "longFileNamelongFileNamelongFileNamelongFileName.txt") << uint(QFile::ReadUser) << true << true; +#endif + QTest::newRow("resource1") << ":/tst_qfileinfo/resources/file1.ext1" << uint(QFile::ReadUser) << true << false; + QTest::newRow("resource2") << ":/tst_qfileinfo/resources/file1.ext1" << uint(QFile::WriteUser) << false << false; + QTest::newRow("resource3") << ":/tst_qfileinfo/resources/file1.ext1" << uint(QFile::ExeUser) << false << false; } void tst_QFile::permissions() @@ -1104,9 +1121,44 @@ void tst_QFile::permissions() QFETCH(QString, file); QFETCH(uint, perms); QFETCH(bool, expected); + QFETCH(bool, create); + if (create) { + QFile fc(file); + QVERIFY(fc.open(QFile::WriteOnly)); + QVERIFY(fc.write("hello\n")); + fc.close(); + } + QFile f(file); - QCOMPARE(((f.permissions() & perms) == QFile::Permissions(perms)), expected); - QCOMPARE(((QFile::permissions(file) & perms) == QFile::Permissions(perms)), expected); + QFile::Permissions memberResult = f.permissions() & perms; + QFile::Permissions staticResult = QFile::permissions(file) & perms; + + if (create) { + QFile::remove(file); + } + +#ifdef Q_OS_WIN + if (qt_ntfs_permission_lookup) + QEXPECT_FAIL("readonly", "QTBUG-25630", Abort); +#endif + QCOMPARE((memberResult == QFile::Permissions(perms)), expected); + QCOMPARE((staticResult == QFile::Permissions(perms)), expected); +} + +void tst_QFile::permissionsNtfs_data() +{ + permissions_data(); +} + +void tst_QFile::permissionsNtfs() +{ +#ifdef Q_OS_WIN + QScopedValueRollback ntfsMode(qt_ntfs_permission_lookup); + qt_ntfs_permission_lookup++; + permissions(); +#else + QSKIP("windows test"); +#endif } void tst_QFile::setPermissions() -- cgit v1.2.3