File indexing completed on 2024-04-28 15:22:15

0001 /*
0002     SPDX-FileCopyrightText: 2022 Kai Uwe Broulik <kde@broulik.de>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-or-later
0005 */
0006 
0007 #include "fb2extractortest.h"
0008 #include "extractors/fb2extractor.h"
0009 #include "indexerextractortestsconfig.h"
0010 #include "mimeutils.h"
0011 #include "simpleextractionresult.h"
0012 
0013 #include <QMimeDatabase>
0014 #include <QTest>
0015 
0016 using namespace KFileMetaData;
0017 
0018 QString Fb2ExtractorTest::testFilePath(const QString &fileName) const
0019 {
0020     return QLatin1String(INDEXER_TESTS_SAMPLE_FILES_PATH) + QLatin1Char('/') + fileName;
0021 }
0022 
0023 void Fb2ExtractorTest::testNoExtraction_data()
0024 {
0025     QTest::addColumn<QString>("fileName");
0026 
0027     QTest::addRow("uncompressed") << QStringLiteral("test.fb2");
0028     QTest::addRow("compressed") << QStringLiteral("test.fb2.zip");
0029 }
0030 
0031 void Fb2ExtractorTest::testNoExtraction()
0032 {
0033     QFETCH(QString, fileName);
0034 
0035     Fb2Extractor plugin{this};
0036 
0037     const QString path = testFilePath(fileName);
0038     QMimeDatabase mimeDb;
0039     QString mimeType = MimeUtils::strictMimeType(path, mimeDb).name();
0040     QVERIFY(plugin.mimetypes().contains(mimeType));
0041 
0042     SimpleExtractionResult result(path, mimeType, ExtractionResult::ExtractNothing);
0043     plugin.extract(&result);
0044 
0045     QCOMPARE(result.types().size(), 1);
0046     QCOMPARE(result.types().constFirst(), Type::Document);
0047     QCOMPARE(result.properties().size(), 0);
0048 }
0049 
0050 void Fb2ExtractorTest::test_data()
0051 {
0052     QTest::addColumn<QString>("fileName");
0053 
0054     QTest::addRow("uncompressed") << QStringLiteral("test.fb2");
0055     QTest::addRow("compressed") << QStringLiteral("test.fb2.zip");
0056 }
0057 
0058 void Fb2ExtractorTest::test()
0059 {
0060     QFETCH(QString, fileName);
0061 
0062     Fb2Extractor plugin{this};
0063 
0064     const QString path = testFilePath(fileName);
0065     QMimeDatabase mimeDb;
0066     QString mimeType = MimeUtils::strictMimeType(path, mimeDb).name();
0067     QVERIFY(plugin.mimetypes().contains(mimeType));
0068 
0069     SimpleExtractionResult result(path, mimeType);
0070     plugin.extract(&result);
0071 
0072     QCOMPARE(result.types().size(), 1);
0073     QCOMPARE(result.types().constFirst(), Type::Document);
0074 
0075     QCOMPARE(result.text(), QStringLiteral("This is a sample PDF file for KFileMetaData. "));
0076     QCOMPARE(result.properties().value(Property::Author), QVariant(QStringLiteral("Happy Man")));
0077     QCOMPARE(result.properties().value(Property::Publisher), QVariant(QStringLiteral("Happy Publisher")));
0078     QCOMPARE(result.properties().value(Property::Title), QVariant(QStringLiteral("The Big Brown Bear")));
0079     QCOMPARE(result.properties().value(Property::Description), QVariant(QStringLiteral("Honey")));
0080     QCOMPARE(result.properties().value(Property::Language), QVariant(QStringLiteral("en")));
0081     QCOMPARE(result.properties().value(Property::Genre), QVariant(QStringLiteral("antique")));
0082     QCOMPARE(result.properties().value(Property::Generator), QVariant(QStringLiteral("calibre 4.99.4")));
0083 
0084     QDateTime dt(QDate(2014, 1, 1), QTime(0, 0, 0));
0085     dt.setTimeSpec(Qt::UTC);
0086     QCOMPARE(result.properties().value(Property::CreationDate), QVariant(dt));
0087     QCOMPARE(result.properties().value(Property::ReleaseYear), QVariant(2014));
0088 
0089     QCOMPARE(result.properties().size(), 9);
0090 }
0091 
0092 void Fb2ExtractorTest::testMetaDataOnly_data()
0093 {
0094     QTest::addColumn<QString>("fileName");
0095     QTest::addColumn<QString>("mimeType");
0096 
0097     QTest::addRow("uncompressed") << QStringLiteral("test.fb2") << QStringLiteral("application/x-fictionbook+xml");
0098     QTest::addRow("compressed") << QStringLiteral("test.fb2.zip") << QStringLiteral("application/x-zip-compressed-fb2");
0099 }
0100 
0101 void Fb2ExtractorTest::testMetaDataOnly()
0102 {
0103     QFETCH(QString, fileName);
0104     QFETCH(QString, mimeType);
0105 
0106     Fb2Extractor plugin{this};
0107 
0108     SimpleExtractionResult result(testFilePath(fileName), mimeType, ExtractionResult::ExtractMetaData);
0109     plugin.extract(&result);
0110 
0111     QVERIFY(!result.types().isEmpty());
0112     QVERIFY(!result.properties().isEmpty());
0113     QVERIFY(result.text().isEmpty());
0114 }
0115 
0116 QTEST_GUILESS_MAIN(Fb2ExtractorTest)
0117 
0118 #include "moc_fb2extractortest.cpp"