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

0001 /*
0002     SPDX-FileCopyrightText: 2014 Vishesh Handa <me@vhanda.in>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-or-later
0005 */
0006 
0007 #include "epubextractortest.h"
0008 #include "simpleextractionresult.h"
0009 #include "indexerextractortestsconfig.h"
0010 #include "extractors/epubextractor.h"
0011 #include "mimeutils.h"
0012 
0013 #include <QTest>
0014 #include <QMimeDatabase>
0015 
0016 using namespace KFileMetaData;
0017 
0018 QString EPubExtractorTest::testFilePath(const QString& fileName) const
0019 {
0020     return QLatin1String(INDEXER_TESTS_SAMPLE_FILES_PATH) + QLatin1Char('/') + fileName;
0021 }
0022 
0023 void EPubExtractorTest::testNoExtraction()
0024 {
0025     EPubExtractor plugin{this};
0026 
0027     QString fileName = testFilePath(QStringLiteral("test.epub"));
0028     QMimeDatabase mimeDb;
0029     QString mimeType = MimeUtils::strictMimeType(fileName, mimeDb).name();
0030     QVERIFY(plugin.mimetypes().contains(mimeType));
0031 
0032     SimpleExtractionResult result(fileName, mimeType, ExtractionResult::ExtractNothing);
0033     plugin.extract(&result);
0034 
0035     QCOMPARE(result.types().size(), 1);
0036     QCOMPARE(result.types().constFirst(), Type::Document);
0037     QCOMPARE(result.properties().size(), 0);
0038 }
0039 
0040 void EPubExtractorTest::test()
0041 {
0042     EPubExtractor plugin{this};
0043 
0044     QString fileName = testFilePath(QStringLiteral("test.epub"));
0045     QMimeDatabase mimeDb;
0046     QString mimeType = MimeUtils::strictMimeType(fileName, mimeDb).name();
0047     QVERIFY(plugin.mimetypes().contains(mimeType));
0048 
0049     SimpleExtractionResult result(fileName, mimeType);
0050     plugin.extract(&result);
0051 
0052     QCOMPARE(result.types().size(), 1);
0053     QCOMPARE(result.types().constFirst(), Type::Document);
0054 
0055     // We're doing a contains instead of an exact check cause the epub file contains
0056     // a ton of css and other garbage.
0057     QVERIFY(result.text().contains(QStringLiteral("This is a sample PDF file for KFileMetaData.")));
0058     QCOMPARE(result.properties().value(Property::Author), QVariant(QStringLiteral("Happy Man")));
0059     QCOMPARE(result.properties().value(Property::Publisher), QVariant(QStringLiteral("Happy Publisher")));
0060     QCOMPARE(result.properties().value(Property::Title), QVariant(QStringLiteral("The Big Brown Bear")));
0061     QCOMPARE(result.properties().value(Property::Subject), QVariant(QStringLiteral("Baloo KFileMetaData")));
0062     QCOMPARE(result.properties().value(Property::Description), QVariant(QStringLiteral("Honey")));
0063 
0064     QDateTime dt(QDate(2014, 1, 1), QTime(1, 1, 1));
0065     dt.setTimeSpec(Qt::UTC);
0066     QCOMPARE(result.properties().value(Property::CreationDate), QVariant(dt));
0067     QCOMPARE(result.properties().value(Property::ReleaseYear), QVariant(2014));
0068 
0069     QCOMPARE(result.properties().size(), 7);
0070 }
0071 
0072 void EPubExtractorTest::testRepeated()
0073 {
0074     EPubExtractor plugin{this};
0075 
0076     QString fileName = testFilePath(QStringLiteral("test_repeated.epub"));
0077     QMimeDatabase mimeDb;
0078     QString mimeType = MimeUtils::strictMimeType(fileName, mimeDb).name();
0079     QVERIFY(plugin.mimetypes().contains(mimeType));
0080 
0081     SimpleExtractionResult result(fileName, mimeType);
0082     plugin.extract(&result);
0083 
0084     QCOMPARE(result.types().size(), 1);
0085     QCOMPARE(result.types().constFirst(), Type::Document);
0086 
0087     QCOMPARE(result.properties().value(Property::Author), QVariant(QStringLiteral("Happy Man")));
0088     QCOMPARE(result.properties().value(Property::Publisher), QVariant(QStringLiteral("Happy Publisher")));
0089     QCOMPARE(result.properties().value(Property::Title), QVariant(QStringLiteral("The Big Brown Bear")));
0090     QCOMPARE(result.properties(KFileMetaData::MultiMap).values(Property::Subject),
0091         QVariantList({QStringLiteral("Test with repeated keys"), QStringLiteral("Baloo KFileMetaData")})
0092     );
0093     QCOMPARE(result.properties().value(Property::Description), QVariant(QStringLiteral("Honey")));
0094 
0095     QDateTime dt(QDate(2012, 1, 1), QTime(0, 0, 0));
0096     dt.setTimeSpec(Qt::UTC);
0097     QCOMPARE(result.properties().value(Property::CreationDate), QVariant(dt));
0098     QCOMPARE(result.properties().value(Property::ReleaseYear), QVariant(2012));
0099 
0100     QCOMPARE(result.properties().size(), 9);
0101 }
0102 
0103 void EPubExtractorTest::testMetaDataOnly()
0104 {
0105     EPubExtractor plugin{this};
0106 
0107     SimpleExtractionResult result(testFilePath("test.epub"), "application/epub+zip", ExtractionResult::ExtractMetaData);
0108     plugin.extract(&result);
0109 
0110     QVERIFY(!result.types().isEmpty());
0111     QVERIFY(!result.properties().isEmpty());
0112     QVERIFY(result.text().isEmpty());
0113 }
0114 
0115 
0116 QTEST_GUILESS_MAIN(EPubExtractorTest)
0117 
0118 #include "moc_epubextractortest.cpp"