File indexing completed on 2024-05-12 05:22:34

0001 /*
0002     This file is part of libkleopatra's test suite.
0003     SPDX-FileCopyrightText: 2023 g10 Code GmbH
0004     SPDX-FileContributor: Carl Schwan <carl@carlschwan.eu>
0005 
0006     SPDX-License-Identifier: LGPL-2.0-or-later
0007 */
0008 
0009 #include <Libkleo/Classify>
0010 #include <QTemporaryDir>
0011 #include <QTemporaryFile>
0012 #include <QTest>
0013 
0014 class ClassifyTest : public QObject
0015 {
0016     Q_OBJECT
0017 
0018 private Q_SLOTS:
0019     void initTestCase()
0020     {
0021     }
0022 
0023     void cleanupTestCase()
0024     {
0025     }
0026 
0027     void identifyFileName()
0028     {
0029         QTemporaryDir dir;
0030 
0031         const auto fileName = dir.filePath(QStringLiteral("msg.asc"));
0032         const auto fileName1 = dir.filePath(QStringLiteral("msg(1).asc"));
0033         {
0034             QFile asc(fileName);
0035             QVERIFY(asc.open(QIODevice::WriteOnly));
0036 
0037             QFile asc1(fileName1);
0038             QVERIFY(asc1.open(QIODevice::WriteOnly));
0039         }
0040 
0041         QVERIFY(Kleo::isMimeFile(Kleo::classify(fileName)));
0042         QVERIFY(Kleo::isMimeFile(fileName1));
0043     }
0044 
0045     void identifyMimeFileExtensionTest()
0046     {
0047         {
0048             QTemporaryFile mbox;
0049             mbox.setFileTemplate("XXXXXX.mbox");
0050             QVERIFY(mbox.open());
0051             QVERIFY(Kleo::mayBeMimeFile(Kleo::classify(mbox.fileName())));
0052         }
0053 
0054         {
0055             QTemporaryFile eml;
0056             eml.setFileTemplate("XXXXXX.eml");
0057             QVERIFY(eml.open());
0058             QVERIFY(Kleo::mayBeMimeFile(eml.fileName()));
0059 
0060             QCOMPARE(QStringLiteral("Ascii, MimeFile"), Kleo::printableClassification(Kleo::classify(eml.fileName())));
0061         }
0062 
0063         {
0064             QTemporaryFile myFile;
0065             myFile.setFileTemplate("XXXXXX.p7m");
0066             QVERIFY(myFile.open());
0067             QVERIFY(Kleo::mayBeMimeFile(myFile.fileName()));
0068         }
0069 
0070         {
0071             QTemporaryFile myPdfFile;
0072             myPdfFile.setFileTemplate("XXXXXX.pdf.p7m");
0073             QVERIFY(myPdfFile.open());
0074             QVERIFY(!Kleo::mayBeMimeFile(myPdfFile.fileName()));
0075         }
0076     }
0077 
0078     void identifyCertificateStoreExtensionTest()
0079     {
0080         QTemporaryFile crl;
0081         crl.setFileTemplate("XXXXXX.crl");
0082         QVERIFY(crl.open());
0083         QVERIFY(Kleo::isCertificateRevocationList(crl.fileName()));
0084     }
0085 
0086     void findSignaturesTest()
0087     {
0088         QTemporaryFile sig;
0089         sig.setFileTemplate("XXXXXX.sig");
0090         QVERIFY(sig.open());
0091 
0092         QFileInfo fi(sig.fileName());
0093 
0094         const auto signatures = Kleo::findSignatures(fi.baseName());
0095         QCOMPARE(1, signatures.count());
0096         QCOMPARE(fi.baseName() + QStringLiteral(".sig"), signatures[0]);
0097     }
0098 
0099     void findOutputFileNameNotFoundTest()
0100     {
0101         QTemporaryFile unknown;
0102         unknown.setFileTemplate("XXXXXX.unknown");
0103         QVERIFY(unknown.open());
0104 
0105         QCOMPARE(unknown.fileName() + QStringLiteral(".out"), Kleo::outputFileName(unknown.fileName()));
0106     }
0107 
0108     void findOutputFileNameTest()
0109     {
0110         QTemporaryFile sig;
0111         sig.setFileTemplate("XXXXXX.sig");
0112         QVERIFY(sig.open());
0113 
0114         QFileInfo fi(sig.fileName());
0115 
0116         QCOMPARE(fi.path() + QLatin1Char('/') + fi.baseName(), Kleo::outputFileName(sig.fileName()));
0117     }
0118 
0119     void test_outputFileExtension()
0120     {
0121         QCOMPARE(Kleo::outputFileExtension(Kleo::Class::OpenPGP | Kleo::Class::CipherText | Kleo::Class::Binary, false), QStringLiteral("gpg"));
0122         QCOMPARE(Kleo::outputFileExtension(Kleo::Class::OpenPGP | Kleo::Class::CipherText | Kleo::Class::Binary, true), QStringLiteral("pgp"));
0123         QCOMPARE(Kleo::outputFileExtension(Kleo::Class::OpenPGP | Kleo::Class::CipherText | Kleo::Class::Ascii, false), QStringLiteral("asc"));
0124         QCOMPARE(Kleo::outputFileExtension(Kleo::Class::OpenPGP | Kleo::Class::CipherText | Kleo::Class::Ascii, true), QStringLiteral("asc"));
0125 
0126         QCOMPARE(Kleo::outputFileExtension(Kleo::Class::OpenPGP | Kleo::Class::DetachedSignature | Kleo::Class::Binary, false), QStringLiteral("sig"));
0127         QCOMPARE(Kleo::outputFileExtension(Kleo::Class::OpenPGP | Kleo::Class::DetachedSignature | Kleo::Class::Binary, true), QStringLiteral("pgp"));
0128         QCOMPARE(Kleo::outputFileExtension(Kleo::Class::OpenPGP | Kleo::Class::DetachedSignature | Kleo::Class::Ascii, false), QStringLiteral("asc"));
0129         QCOMPARE(Kleo::outputFileExtension(Kleo::Class::OpenPGP | Kleo::Class::DetachedSignature | Kleo::Class::Ascii, true), QStringLiteral("asc"));
0130 
0131         QCOMPARE(Kleo::outputFileExtension(Kleo::Class::CMS | Kleo::Class::CipherText | Kleo::Class::Binary, false), QStringLiteral("p7m"));
0132         QCOMPARE(Kleo::outputFileExtension(Kleo::Class::CMS | Kleo::Class::CipherText | Kleo::Class::Ascii, false), QStringLiteral("p7m"));
0133         QCOMPARE(Kleo::outputFileExtension(Kleo::Class::CMS | Kleo::Class::DetachedSignature | Kleo::Class::Binary, false), QStringLiteral("p7s"));
0134         QCOMPARE(Kleo::outputFileExtension(Kleo::Class::CMS | Kleo::Class::DetachedSignature | Kleo::Class::Ascii, false), QStringLiteral("p7s"));
0135     }
0136 };
0137 
0138 QTEST_MAIN(ClassifyTest)
0139 #include "classifytest.moc"