File indexing completed on 2024-05-12 05:50:11
0001 /* 0002 SPDX-FileCopyrightText: 2015 Elvis Angelaccio <elvis.angelaccio@kde.org> 0003 0004 SPDX-License-Identifier: BSD-2-Clause 0005 */ 0006 0007 #include "archive_kerfuffle.h" 0008 #include "mimetypes.h" 0009 0010 #include <QMimeDatabase> 0011 #include <QTest> 0012 0013 using namespace Kerfuffle; 0014 0015 class MimeTypeTest : public QObject 0016 { 0017 Q_OBJECT 0018 0019 private Q_SLOTS: 0020 0021 void testMimeTypeDetection_data(); 0022 void testMimeTypeDetection(); 0023 }; 0024 0025 QTEST_GUILESS_MAIN(MimeTypeTest) 0026 0027 void MimeTypeTest::testMimeTypeDetection_data() 0028 { 0029 QTest::addColumn<QString>("archiveName"); 0030 QTest::addColumn<QString>("expectedMimeType"); 0031 0032 const QString compressedGzipTarMime = QStringLiteral("application/x-compressed-tar"); 0033 const QString compressedBzip2TarMime = QMimeDatabase().mimeTypeForFile(QStringLiteral("dummy.tar.bz2"), QMimeDatabase::MatchExtension).name(); 0034 const QString compressedXzTarMime = QStringLiteral("application/x-xz-compressed-tar"); 0035 const QString compressedLzmaTarMime = QStringLiteral("application/x-lzma-compressed-tar"); 0036 const QString compressedZTarMime = QStringLiteral("application/x-tarz"); 0037 const QString compressedLzipTarMime = QStringLiteral("application/x-lzip-compressed-tar"); 0038 const QString compressedLzopTarMime = QStringLiteral("application/x-tzo"); 0039 const QString compressedLrzipTarMime = QStringLiteral("application/x-lrzip-compressed-tar"); 0040 const QString compressedLz4TarMime = QStringLiteral("application/x-lz4-compressed-tar"); 0041 const QString isoMimeType = QMimeDatabase().mimeTypeForFile(QStringLiteral("dummy.iso"), QMimeDatabase::MatchExtension).name(); 0042 const QString debMimeType = QMimeDatabase().mimeTypeForFile(QStringLiteral("dummy.deb"), QMimeDatabase::MatchExtension).name(); 0043 const QString xarMimeType = QStringLiteral("application/x-xar"); 0044 const QString appImageMimeType = QStringLiteral("application/x-iso9660-appimage"); 0045 0046 QTest::newRow("empty name") << QString() << QStringLiteral("application/octet-stream"); 0047 QTest::newRow("tar.gz") << QFINDTESTDATA("data/simplearchive.tar.gz") << compressedGzipTarMime; 0048 QTest::newRow("tar.bz2") << QFINDTESTDATA("data/simplearchive.tar.bz2") << compressedBzip2TarMime; 0049 QTest::newRow("tar.xz") << QFINDTESTDATA("data/simplearchive.tar.xz") << compressedXzTarMime; 0050 QTest::newRow("tar.lzma") << QFINDTESTDATA("data/simplearchive.tar.lzma") << compressedLzmaTarMime; 0051 QTest::newRow("tar.Z") << QFINDTESTDATA("data/simplearchive.tar.Z") << compressedZTarMime; 0052 QTest::newRow("tar.lz") << QFINDTESTDATA("data/simplearchive.tar.lz") << compressedLzipTarMime; 0053 QTest::newRow("tar.lzo") << QFINDTESTDATA("data/simplearchive.tar.lzo") << compressedLzopTarMime; 0054 QTest::newRow("tar.lrz") << QFINDTESTDATA("data/simplearchive.tar.lrz") << compressedLrzipTarMime; 0055 QTest::newRow("tar.lz4") << QFINDTESTDATA("data/simplearchive.tar.lz4") << compressedLz4TarMime; 0056 QTest::newRow("deb") << QFINDTESTDATA("data/smallarchive.deb") << debMimeType; 0057 QTest::newRow("xar") << QFINDTESTDATA("data/simplearchive.xar") << xarMimeType; 0058 QTest::newRow("AppImage") << QFINDTESTDATA("data/hello-1.0-x86_64.AppImage") << appImageMimeType; 0059 0060 QTest::newRow("zip with wrong extension") << QFINDTESTDATA("data/zip_with_wrong_extension.rar") << QStringLiteral("application/zip"); 0061 QTest::newRow("tar with special char in the extension") << QStringLiteral("foo.tar~1.gz") << compressedGzipTarMime; 0062 QTest::newRow("another tar with special char in the extension") << QStringLiteral("foo.ta4r.gz") << compressedGzipTarMime; 0063 QTest::newRow("tar downloaded by wget") << QFINDTESTDATA("data/wget-download.tar.gz.1") << compressedGzipTarMime; 0064 0065 // This ISO file may be detected-by-content as text/plain. See https://bugs.freedesktop.org/show_bug.cgi?id=80877 0066 QTest::newRow("archlinux truncated ISO") << QFINDTESTDATA("data/archlinux-2015.09.01-dual_truncated.iso") << isoMimeType; 0067 0068 // This ISO may not bet detected-by-content. See https://bugs.freedesktop.org/show_bug.cgi?id=80877 0069 QTest::newRow("kubuntu truncated ISO") << QFINDTESTDATA("data/kubuntu-14.04.1-desktop-amd64_truncated.iso") << isoMimeType; 0070 0071 // Some mimetypes (e.g. tar-v7 archives, see #355955) cannot be detected by content (as of shared-mime-info 1.5). 0072 QTest::newRow("tar-v7") << QFINDTESTDATA("data/tar-v7.tar") << QStringLiteral("application/x-tar"); 0073 } 0074 0075 void MimeTypeTest::testMimeTypeDetection() 0076 { 0077 QFETCH(QString, archiveName); 0078 QFETCH(QString, expectedMimeType); 0079 0080 QCOMPARE(determineMimeType(archiveName).name(), expectedMimeType); 0081 } 0082 0083 #include "mimetypetest.moc"