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"