diff options
author | David Faure <david.faure@kdab.com> | 2023-09-12 23:26:47 +0200 |
---|---|---|
committer | David Faure <david.faure@kdab.com> | 2023-09-13 13:45:04 +0200 |
commit | 4e9944e6c8a456353d243ab268cb0f01ff006faa (patch) | |
tree | 688c3cde3f6247ddadb73823e188a67624de3eb8 /tests/auto/corelib | |
parent | 994311a66bd31983bec5d75d87f5e03f53f14def (diff) |
QMimeDatabase: collect glob patterns from all locations
A QMimeTypePrivate used to belong to a single provider, which would
provide the complete data for it.
But since the redesign in commit 7a5644d6481a3c1a741677, each provider
represents is a single mime directory, and the merging happens at the
QMimeDatabase level. So we need a QMimeType[Private] to be just a name
(a "request" for information about this mimetype) and the information
for that mimetype is retrieved on demand by querying the providers
and either stopping at the first one (e.g. for icons) or merging
the data from all of them (e.g. for glob patterns).
The XML provider was using QMimeTypePrivate as data storage,
give it its own struct QMimeTypeXMLData for that purpose instead.
Task-number: QTBUG-116905
Change-Id: Ia0e0d94aa899720dc0b908f40c25317473005af4
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'tests/auto/corelib')
5 files changed, 24 insertions, 102 deletions
diff --git a/tests/auto/corelib/mimetypes/qmimedatabase/add-extension.xml b/tests/auto/corelib/mimetypes/qmimedatabase/add-extension.xml new file mode 100644 index 0000000000..c4141e0f70 --- /dev/null +++ b/tests/auto/corelib/mimetypes/qmimedatabase/add-extension.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info"> + <mime-type type="image/jpeg"> + <glob pattern="*.jnewext"/> + <comment>JPEG Image</comment> + </mime-type> +</mime-info> diff --git a/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-cache/CMakeLists.txt b/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-cache/CMakeLists.txt index 7d83bd2c2f..9a70666b07 100644 --- a/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-cache/CMakeLists.txt +++ b/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-cache/CMakeLists.txt @@ -30,6 +30,7 @@ qt_internal_add_test(tst_qmimedatabase-cache #"mime/packages/freedesktop.org.xml" #) set(testdata_resource_files + "../add-extension.xml" "../invalid-magic1.xml" "../invalid-magic2.xml" "../invalid-magic3.xml" diff --git a/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-xml/CMakeLists.txt b/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-xml/CMakeLists.txt index e9819cbb1e..205d3c362b 100644 --- a/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-xml/CMakeLists.txt +++ b/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-xml/CMakeLists.txt @@ -30,6 +30,7 @@ qt_internal_add_test(tst_qmimedatabase-xml #"mime/packages/freedesktop.org.xml" #) set(testdata_resource_files + "../add-extension.xml" "../invalid-magic1.xml" "../invalid-magic2.xml" "../invalid-magic3.xml" diff --git a/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp b/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp index afd31210b2..660ebf9680 100644 --- a/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp +++ b/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp @@ -38,6 +38,7 @@ static const std::array additionalGlobalMimeFiles = { }; static const std::array additionalLocalMimeFiles = { + "add-extension.xml", // adds *.jnewext to image/jpeg "yast2-metapackage-handler-mimetypes.xml", "qml-again.xml", "text-x-objcsrc.xml", @@ -1229,6 +1230,11 @@ void tst_QMimeDatabase::installNewLocalMimeType() QCOMPARE(mimes.at(0).name(), u"video/webm"); } + // QTBUG-116905: globPatterns() should merge all locations + // add-extension.xml adds *.jnewext + const QStringList expectedJpegPatterns{ "*.jpg", "*.jpeg", "*.jpe", "*.jnewext" }; + QCOMPARE(db.mimeTypeForName(QStringLiteral("image/jpeg")).globPatterns(), expectedJpegPatterns); + // Now that we have two directories with mime definitions, check that everything still works inheritance(); if (QTest::currentTestFailed()) diff --git a/tests/auto/corelib/mimetypes/qmimetype/tst_qmimetype.cpp b/tests/auto/corelib/mimetypes/qmimetype/tst_qmimetype.cpp index fda12298fe..50183ca4e0 100644 --- a/tests/auto/corelib/mimetypes/qmimetype/tst_qmimetype.cpp +++ b/tests/auto/corelib/mimetypes/qmimetype/tst_qmimetype.cpp @@ -21,7 +21,6 @@ private slots: void name(); void genericIconName(); void iconName(); - void suffixes(); void gadget(); }; @@ -36,52 +35,15 @@ void tst_qmimetype::initTestCase() static QString qMimeTypeName() { - static const QString result ("No name of the MIME type"); + static const QString result("group/fake-mime"); return result; } -static QString qMimeTypeGenericIconName() -{ - static const QString result ("No file name of an icon image that represents the MIME type"); - return result; -} - -static QString qMimeTypeIconName() -{ - static const QString result ("No file name of an icon image that represents the MIME type"); - return result; -} - -static QStringList buildQMimeTypeFilenameExtensions() -{ - QStringList result; - result << QString::fromLatin1("*.png"); - return result; -} - -static QStringList qMimeTypeGlobPatterns() -{ - static const QStringList result (buildQMimeTypeFilenameExtensions()); - return result; -} - -// ------------------------------------------------------------------------------------------------ - -QMIMETYPE_BUILDER_FROM_RVALUE_REFS - // ------------------------------------------------------------------------------------------------ void tst_qmimetype::isValid() { - QMimeType instantiatedQMimeType ( - buildQMimeType ( - qMimeTypeName(), - qMimeTypeGenericIconName(), - qMimeTypeIconName(), - qMimeTypeGlobPatterns() - ) - ); - + QMimeType instantiatedQMimeType{ QMimeTypePrivate(qMimeTypeName()) }; QVERIFY(instantiatedQMimeType.isValid()); QMimeType otherQMimeType (instantiatedQMimeType); @@ -98,23 +60,8 @@ void tst_qmimetype::isValid() void tst_qmimetype::name() { - QMimeType instantiatedQMimeType ( - buildQMimeType ( - qMimeTypeName(), - qMimeTypeGenericIconName(), - qMimeTypeIconName(), - qMimeTypeGlobPatterns() - ) - ); - - QMimeType otherQMimeType ( - buildQMimeType ( - QString(), - qMimeTypeGenericIconName(), - qMimeTypeIconName(), - qMimeTypeGlobPatterns() - ) - ); + QMimeType instantiatedQMimeType{ QMimeTypePrivate(qMimeTypeName()) }; + QMimeType otherQMimeType{ QMimeTypePrivate(QString()) }; // Verify that the Name is part of the equality test: QCOMPARE(instantiatedQMimeType.name(), qMimeTypeName()); @@ -127,63 +74,23 @@ void tst_qmimetype::name() void tst_qmimetype::genericIconName() { - QMimeType instantiatedQMimeType ( - buildQMimeType ( - qMimeTypeName(), - qMimeTypeGenericIconName(), - qMimeTypeIconName(), - qMimeTypeGlobPatterns() - ) - ); - - QCOMPARE(instantiatedQMimeType.genericIconName(), qMimeTypeGenericIconName()); + const QMimeType instantiatedQMimeType{ QMimeTypePrivate(qMimeTypeName()) }; + QCOMPARE(instantiatedQMimeType.genericIconName(), "group-x-generic"); } // ------------------------------------------------------------------------------------------------ void tst_qmimetype::iconName() { - QMimeType instantiatedQMimeType ( - buildQMimeType ( - qMimeTypeName(), - qMimeTypeGenericIconName(), - qMimeTypeIconName(), - qMimeTypeGlobPatterns() - ) - ); - - QCOMPARE(instantiatedQMimeType.iconName(), qMimeTypeIconName()); -} - -// ------------------------------------------------------------------------------------------------ - -void tst_qmimetype::suffixes() -{ - QMimeType instantiatedQMimeType ( - buildQMimeType ( - qMimeTypeName(), - qMimeTypeGenericIconName(), - qMimeTypeIconName(), - qMimeTypeGlobPatterns() - ) - ); - - QCOMPARE(instantiatedQMimeType.globPatterns(), qMimeTypeGlobPatterns()); - QCOMPARE(instantiatedQMimeType.suffixes(), QStringList() << QString::fromLatin1("png")); + const QMimeType instantiatedQMimeType{ QMimeTypePrivate(qMimeTypeName()) }; + QCOMPARE(instantiatedQMimeType.iconName(), "group-fake-mime"); } // ------------------------------------------------------------------------------------------------ void tst_qmimetype::gadget() { - QMimeType instantiatedQMimeType ( - buildQMimeType ( - qMimeTypeName(), - qMimeTypeGenericIconName(), - qMimeTypeIconName(), - qMimeTypeGlobPatterns() - ) - ); + QMimeType instantiatedQMimeType = QMimeDatabase().mimeTypeForName("text/plain"); const QMetaObject *metaObject = &instantiatedQMimeType.staticMetaObject; |