From ca3be922349d5fa282578fbb6c1dc2bd25d1f5aa Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Thu, 29 Aug 2019 16:22:53 +0200 Subject: Remove QFileInfo::type and related enum from 5.14 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The API is problematic for several reasons: - the mixing of flags and enum in a single enum type - the name "type" as somewhat overloaded - the ease of misuse when comparing the result rather than testing for a bit being set In light of this, focus for 5.14 on the new isShortcut and isSymbolicLink functions, thus migitating the problematic isSymLink which conflates the two concepts. Change-Id: I57e02321edd5061f69a775f04a0932ef89adf866 Reviewed-by: Tor Arne Vestbø Reviewed-by: Marc Mutz --- tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp | 189 ++++++++++++---------- 1 file changed, 107 insertions(+), 82 deletions(-) (limited to 'tests') diff --git a/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp b/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp index 6fcfe87c83..921847a087 100644 --- a/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp +++ b/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp @@ -236,6 +236,13 @@ private slots: void isSymLink_data(); void isSymLink(); + + void isSymbolicLink_data(); + void isSymbolicLink(); + + void isShortcut_data(); + void isShortcut(); + void link_data(); void link(); @@ -279,9 +286,6 @@ private slots: void invalidState(); void nonExistingFile(); - void type_data(); - void type(); - private: const QString m_currentDir; QString m_sourceFile; @@ -1342,7 +1346,92 @@ void tst_QFileInfo::isSymLink() #endif } -Q_DECLARE_METATYPE(QFileInfo::FileType) +void tst_QFileInfo::isShortcut_data() +{ + QFile::remove("link.lnk"); + QFile::remove("symlink.lnk"); + QFile::remove("link"); + QFile::remove("symlink"); + QFile::remove("directory.lnk"); + QFile::remove("directory"); + + QTest::addColumn("path"); + QTest::addColumn("isShortcut"); + + QFile regularFile(m_sourceFile); + QTest::newRow("regular") + << regularFile.fileName() << false; + QTest::newRow("directory") + << QDir::currentPath() << false; +#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) + // windows shortcuts + QVERIFY(regularFile.link("link.lnk")); + QTest::newRow("shortcut") + << "link.lnk" << true; + QVERIFY(regularFile.link("link")); + QTest::newRow("invalid-shortcut") + << "link" << false; + QVERIFY(QFile::link(QDir::currentPath(), "directory.lnk")); + QTest::newRow("directory-shortcut") + << "directory.lnk" << true; +#endif +} + +void tst_QFileInfo::isShortcut() +{ + QFETCH(QString, path); + QFETCH(bool, isShortcut); + + QFileInfo fi(path); + QCOMPARE(fi.isShortcut(), isShortcut); +} + +void tst_QFileInfo::isSymbolicLink_data() +{ + QTest::addColumn("path"); + QTest::addColumn("isSymbolicLink"); + + QFile regularFile(m_sourceFile); + QTest::newRow("regular") + << regularFile.fileName() << false; + QTest::newRow("directory") + << QDir::currentPath() << false; + +#ifndef Q_NO_SYMLINKS +#if defined(Q_OS_WIN) +#if !defined(Q_OS_WINRT) + QString errorMessage; + const DWORD creationResult = createSymbolicLink("symlink", m_sourceFile, &errorMessage); + if (creationResult == ERROR_PRIVILEGE_NOT_HELD) { + QWARN(msgInsufficientPrivileges(errorMessage)); + } else { + QVERIFY2(creationResult == ERROR_SUCCESS, qPrintable(errorMessage)); + QTest::newRow("NTFS-symlink") + << "symlink" << true; + } +#endif // !Q_OS_WINRT +#else // Unix: + QVERIFY(regularFile.link("symlink.lnk")); + QTest::newRow("symlink.lnk") + << "symlink.lnk" << true; + QVERIFY(regularFile.link("symlink")); + QTest::newRow("symlink") + << "symlink" << true; + QVERIFY(QFile::link(QDir::currentPath(), "directory")); + QTest::newRow("directory-symlink") + << "directory" << true; +#endif +#endif // !Q_NO_SYMLINKS +} + +void tst_QFileInfo::isSymbolicLink() +{ + QFETCH(QString, path); + QFETCH(bool, isSymbolicLink); + + QFileInfo fi(path); + QCOMPARE(fi.isSymbolicLink(), isSymbolicLink); +} void tst_QFileInfo::link_data() { @@ -1354,23 +1443,24 @@ void tst_QFileInfo::link_data() QFile::remove("relative/link"); QTest::addColumn("path"); - QTest::addColumn("linkType"); + QTest::addColumn("isShortcut"); + QTest::addColumn("isSymbolicLink"); QTest::addColumn("linkTarget"); QFile file1(m_sourceFile); QFile file2("dummyfile"); file2.open(QIODevice::WriteOnly); - QTest::newRow("existent file") << m_sourceFile << QFileInfo::Unknown << ""; + QTest::newRow("existent file") << m_sourceFile << false << false << ""; #if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) // windows shortcuts QVERIFY(file1.link("link.lnk")); QTest::newRow("link.lnk") - << "link.lnk" << QFileInfo::Shortcut << QFileInfo(m_sourceFile).absoluteFilePath(); + << "link.lnk" << true << false << QFileInfo(m_sourceFile).absoluteFilePath(); QVERIFY(file2.link("brokenlink.lnk")); QTest::newRow("broken link.lnk") - << "brokenlink.lnk" << QFileInfo::Shortcut << QFileInfo("dummyfile").absoluteFilePath(); + << "brokenlink.lnk" << true << false << QFileInfo("dummyfile").absoluteFilePath(); #endif #ifndef Q_NO_SYMLINKS @@ -1383,7 +1473,7 @@ void tst_QFileInfo::link_data() } else { QVERIFY2(creationResult == ERROR_SUCCESS, qPrintable(errorMessage)); QTest::newRow("link") - << "link" << QFileInfo::SymbolicLink << QFileInfo(m_sourceFile).absoluteFilePath(); + << "link" << false << true << QFileInfo(m_sourceFile).absoluteFilePath(); } creationResult = createSymbolicLink("brokenlink", "dummyfile", &errorMessage); @@ -1392,22 +1482,22 @@ void tst_QFileInfo::link_data() } else { QVERIFY2(creationResult == ERROR_SUCCESS, qPrintable(errorMessage)); QTest::newRow("broken link") - << "brokenlink" << QFileInfo::SymbolicLink << QFileInfo("dummyfile").absoluteFilePath(); + << "brokenlink" << false << true << QFileInfo("dummyfile").absoluteFilePath(); } #endif // !Q_OS_WINRT #else // Unix: QVERIFY(file1.link("link")); QTest::newRow("link") - << "link" << QFileInfo::SymbolicLink << QFileInfo(m_sourceFile).absoluteFilePath(); + << "link" << false << true << QFileInfo(m_sourceFile).absoluteFilePath(); QVERIFY(file2.link("brokenlink")); QTest::newRow("broken link") - << "brokenlink" << QFileInfo::SymbolicLink << QFileInfo("dummyfile").absoluteFilePath(); + << "brokenlink" << false << true << QFileInfo("dummyfile").absoluteFilePath(); QDir::current().mkdir("relative"); QFile::link("../dummyfile", "relative/link"); QTest::newRow("relative link") - << "relative/link" << QFileInfo::SymbolicLink << QFileInfo("dummyfile").absoluteFilePath(); + << "relative/link" << false << true << QFileInfo("dummyfile").absoluteFilePath(); #endif #endif // !Q_NO_SYMLINKS file2.remove(); @@ -1416,11 +1506,13 @@ void tst_QFileInfo::link_data() void tst_QFileInfo::link() { QFETCH(QString, path); - QFETCH(QFileInfo::FileType, linkType); + QFETCH(bool, isShortcut); + QFETCH(bool, isSymbolicLink); QFETCH(QString, linkTarget); QFileInfo fi(path); - QCOMPARE(fi.type() & QFileInfo::LinkTypeMask, linkType); + QCOMPARE(fi.isShortcut(), isShortcut); + QCOMPARE(fi.isSymbolicLink(), isSymbolicLink); QCOMPARE(fi.symLinkTarget(), linkTarget); } @@ -2179,73 +2271,6 @@ void tst_QFileInfo::nonExistingFile() stateCheck(info, dirname, filename); } -Q_DECLARE_METATYPE(QFileInfo::FileTypes) - -void tst_QFileInfo::type_data() -{ - QFile::remove("link.lnk"); - QFile::remove("symlink.lnk"); - QFile::remove("link"); - QFile::remove("symlink"); - QFile::remove("directory.lnk"); - QFile::remove("directory"); - - QTest::addColumn("path"); - QTest::addColumn("type"); - - QFile regularFile(m_sourceFile); - QTest::newRow("regular") - << regularFile.fileName() << QFileInfo::FileTypes(QFileInfo::Regular); - QTest::newRow("directory") - << QDir::currentPath() << QFileInfo::FileTypes(QFileInfo::Directory); -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) - // windows shortcuts - QVERIFY(regularFile.link("link.lnk")); - QTest::newRow("shortcut") - << "link.lnk" << QFileInfo::FileTypes(QFileInfo::Shortcut | QFileInfo::Regular); - QVERIFY(regularFile.link("link")); - QTest::newRow("invalid-shortcut") - << "link" << QFileInfo::FileTypes(QFileInfo::Regular); - QVERIFY(QFile::link(QDir::currentPath(), "directory.lnk")); - QTest::newRow("directory-shortcut") - << "directory.lnk" << QFileInfo::FileTypes(QFileInfo::Shortcut | QFileInfo::Directory); -#endif - -#ifndef Q_NO_SYMLINKS -#if defined(Q_OS_WIN) -#if !defined(Q_OS_WINRT) - QString errorMessage; - const DWORD creationResult = createSymbolicLink("symlink", m_sourceFile, &errorMessage); - if (creationResult == ERROR_PRIVILEGE_NOT_HELD) { - QWARN(msgInsufficientPrivileges(errorMessage)); - } else { - QVERIFY2(creationResult == ERROR_SUCCESS, qPrintable(errorMessage)); - QTest::newRow("NTFS-symlink") - << "symlink" << QFileInfo::FileTypes(QFileInfo::SymbolicLink | QFileInfo::Regular); - } -#endif // !Q_OS_WINRT -#else // Unix: - QVERIFY(regularFile.link("symlink.lnk")); - QTest::newRow("symlink.lnk") - << "symlink.lnk" << QFileInfo::FileTypes(QFileInfo::SymbolicLink | QFileInfo::Regular); - QVERIFY(regularFile.link("symlink")); - QTest::newRow("symlink") - << "symlink" << QFileInfo::FileTypes(QFileInfo::SymbolicLink | QFileInfo::Regular); - QVERIFY(QFile::link(QDir::currentPath(), "directory")); - QTest::newRow("directory-symlink") - << "directory" << QFileInfo::FileTypes(QFileInfo::SymbolicLink | QFileInfo::Directory); -#endif -#endif // !Q_NO_SYMLINKS -} - -void tst_QFileInfo::type() -{ - QFETCH(QString, path); - QFETCH(QFileInfo::FileTypes, type); - - QFileInfo info(path); - QCOMPARE(info.type(), type); -} QTEST_MAIN(tst_QFileInfo) #include "tst_qfileinfo.moc" -- cgit v1.2.3