File indexing completed on 2024-05-05 03:54:35

0001 /*
0002     SPDX-FileCopyrightText: 2014 Vishesh Handa <me@vhanda.in>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-or-later
0005 */
0006 
0007 #include "simpleextractionresult.h"
0008 #include "indexerextractortestsconfig.h"
0009 #include "extractors/office2007extractor.h"
0010 #include "mimeutils.h"
0011 
0012 #include <QMimeDatabase>
0013 #include <QObject>
0014 #include <QTest>
0015 #include <QTimeZone>
0016 
0017 using namespace KFileMetaData;
0018 
0019 class Office2007ExtractorTest : public QObject
0020 {
0021     Q_OBJECT
0022 private:
0023     QString testFilePath(const QString& fileName) const;
0024 
0025 private Q_SLOTS:
0026     void testNoExtraction();
0027     void testNoExtraction_pptx();
0028     void testNoExtraction_xlsx();
0029     void test();
0030     void test_pptx();
0031     void test_xlsx();
0032     void testMetaDataOnly();
0033 };
0034 
0035 QString Office2007ExtractorTest::testFilePath(const QString& fileName) const
0036 {
0037     return QLatin1String(INDEXER_TESTS_SAMPLE_FILES_PATH) + QLatin1Char('/') + fileName;
0038 }
0039 
0040 void Office2007ExtractorTest::testNoExtraction()
0041 {
0042     Office2007Extractor plugin{this};
0043 
0044     QString fileName = testFilePath(QStringLiteral("test_libreoffice.docx"));
0045     QMimeDatabase mimeDb;
0046     QString mimeType = MimeUtils::strictMimeType(fileName, mimeDb).name();
0047     QVERIFY(plugin.mimetypes().contains(mimeType));
0048 
0049     SimpleExtractionResult result(fileName, mimeType, ExtractionResult::ExtractNothing);
0050     plugin.extract(&result);
0051 
0052     QCOMPARE(result.types().size(), 1);
0053     QCOMPARE(result.types().at(0), Type::Document);
0054     QCOMPARE(result.properties().size(), 0);
0055 }
0056 
0057 void Office2007ExtractorTest::testNoExtraction_pptx()
0058 {
0059     Office2007Extractor plugin{this};
0060 
0061     QString fileName = testFilePath(QStringLiteral("test_libreoffice.pptx"));
0062     QMimeDatabase mimeDb;
0063     QString mimeType = MimeUtils::strictMimeType(fileName, mimeDb).name();
0064     QVERIFY(plugin.mimetypes().contains(mimeType));
0065 
0066     SimpleExtractionResult result(fileName, mimeType, ExtractionResult::ExtractNothing);
0067     plugin.extract(&result);
0068 
0069     QCOMPARE(result.types().size(), 2);
0070     QVERIFY(result.types().contains(Type::Document));
0071     QVERIFY(result.types().contains(Type::Presentation));
0072     QCOMPARE(result.properties().size(), 0);
0073 }
0074 
0075 void Office2007ExtractorTest::testNoExtraction_xlsx()
0076 {
0077     Office2007Extractor plugin{this};
0078 
0079     QString fileName = testFilePath(QStringLiteral("test_libreoffice.xlsx"));
0080     QMimeDatabase mimeDb;
0081     QString mimeType = MimeUtils::strictMimeType(fileName, mimeDb).name();
0082     QVERIFY(plugin.mimetypes().contains(mimeType));
0083 
0084     SimpleExtractionResult result(fileName, mimeType, ExtractionResult::ExtractNothing);
0085     plugin.extract(&result);
0086 
0087     QCOMPARE(result.types().size(), 2);
0088     QVERIFY(result.types().contains(Type::Document));
0089     QVERIFY(result.types().contains(Type::Spreadsheet));
0090     QCOMPARE(result.properties().size(), 0);
0091 }
0092 
0093 void Office2007ExtractorTest::test()
0094 {
0095     Office2007Extractor plugin{this};
0096 
0097     QString fileName = testFilePath(QStringLiteral("test_libreoffice.docx"));
0098     QMimeDatabase mimeDb;
0099     QString mimeType = MimeUtils::strictMimeType(fileName, mimeDb).name();
0100     QVERIFY(plugin.mimetypes().contains(mimeType));
0101 
0102     SimpleExtractionResult result(fileName, mimeType);
0103     plugin.extract(&result);
0104 
0105     QCOMPARE(result.types().size(), 1);
0106     QCOMPARE(result.types().at(0), Type::Document);
0107 
0108     QCOMPARE(result.properties().value(Property::Title), QVariant(QStringLiteral("KFileMetaData Title")));
0109     QCOMPARE(result.properties().value(Property::Subject), QVariant(QStringLiteral("KFileMetaData Subject")));
0110     QCOMPARE(result.properties().value(Property::Keywords), QVariant(QStringLiteral("KFileMetaData keyword")));
0111     QCOMPARE(result.properties().value(Property::Description), QVariant(QStringLiteral("KFileMetaData comment")));
0112     QCOMPARE(result.properties().value(Property::Language), QVariant(QStringLiteral("en-US")));
0113     QVERIFY(result.properties().value(Property::Generator).toString().contains(QStringLiteral("LibreOffice")));
0114     QCOMPARE(result.properties().value(Property::PageCount), QVariant(1));
0115     QCOMPARE(result.properties().value(Property::WordCount), QVariant(4));
0116     QCOMPARE(result.properties().value(Property::LineCount), QVariant(1));
0117 
0118     QDateTime dt(QDate(2014, 07, 01), QTime(17, 37, 40), QTimeZone::UTC);
0119     QCOMPARE(result.properties().value(Property::CreationDate), QVariant(dt));
0120 
0121     QCOMPARE(result.properties().size(), 10);
0122     QCOMPARE(result.text(), QStringLiteral("Test file for KFileMetaData. "));
0123 }
0124 
0125 void Office2007ExtractorTest::test_pptx()
0126 {
0127     Office2007Extractor plugin{this};
0128 
0129     QString fileName = testFilePath(QStringLiteral("test_libreoffice.pptx"));
0130     QMimeDatabase mimeDb;
0131     QString mimeType = MimeUtils::strictMimeType(fileName, mimeDb).name();
0132     QVERIFY(plugin.mimetypes().contains(mimeType));
0133 
0134     SimpleExtractionResult result(fileName, mimeType);
0135     plugin.extract(&result);
0136 
0137     QCOMPARE(result.types().size(), 2);
0138     QVERIFY(result.types().contains(Type::Document));
0139     QVERIFY(result.types().contains(Type::Presentation));
0140 
0141     QCOMPARE(result.properties().value(Property::Title), QVariant(QStringLiteral("KFileMetaData Title")));
0142     QCOMPARE(result.properties().value(Property::Subject), QVariant(QStringLiteral("KFileMetaData Subject")));
0143     QCOMPARE(result.properties().value(Property::Keywords), QVariant(QStringLiteral("KFileMetaData keyword")));
0144     QCOMPARE(result.properties().value(Property::Description), QVariant(QStringLiteral("KFileMetaData comment")));
0145     QCOMPARE(result.properties().value(Property::Language), QVariant(QStringLiteral("de-DE")));
0146     QVERIFY(result.properties().value(Property::Generator).toString().contains(QStringLiteral("LibreOffice")));
0147 
0148     QDateTime dt(QDate(2014, 07, 02), QTime(10, 59, 23), QTimeZone::UTC);
0149     QCOMPARE(result.properties().value(Property::CreationDate), QVariant(dt));
0150 
0151     QCOMPARE(result.properties().size(), 7);
0152     QCOMPARE(result.text(), QStringLiteral("KFileMetaData Pres Slide 2 Title Left list 1 1a 1b Right list 1 Right list 2 "));
0153 }
0154 
0155 void Office2007ExtractorTest::test_xlsx()
0156 {
0157     Office2007Extractor plugin{this};
0158 
0159     QString fileName = testFilePath(QStringLiteral("test_libreoffice.xlsx"));
0160     QMimeDatabase mimeDb;
0161     QString mimeType = MimeUtils::strictMimeType(fileName, mimeDb).name();
0162     QVERIFY(plugin.mimetypes().contains(mimeType));
0163 
0164     SimpleExtractionResult result(fileName, mimeType);
0165     plugin.extract(&result);
0166 
0167     QCOMPARE(result.types().size(), 2);
0168     QVERIFY(result.types().contains(Type::Document));
0169     QVERIFY(result.types().contains(Type::Spreadsheet));
0170 
0171     QCOMPARE(result.properties().value(Property::Title), QVariant(QStringLiteral("KFileMetaData Title")));
0172     QCOMPARE(result.properties().value(Property::Subject), QVariant(QStringLiteral("KFileMetaData Subject")));
0173     QCOMPARE(result.properties().value(Property::Keywords), QVariant(QStringLiteral("KFileMetaData keyword")));
0174     QCOMPARE(result.properties().value(Property::Description), QVariant(QStringLiteral("KFileMetaData comment")));
0175     QCOMPARE(result.properties().value(Property::Language), QVariant(QStringLiteral("de-DE")));
0176     QVERIFY(result.properties().value(Property::Generator).toString().contains(QStringLiteral("LibreOffice")));
0177 
0178     QDateTime dt(QDate(2023, 11, 12), QTime(05, 59, 53), QTimeZone::UTC);
0179     QCOMPARE(result.properties().value(Property::CreationDate), QVariant(dt));
0180 
0181     QCOMPARE(result.properties().size(), 7);
0182     QCOMPARE(result.text(), QStringLiteral("First cell Second cell Second row "));
0183 }
0184 
0185 void Office2007ExtractorTest::testMetaDataOnly()
0186 {
0187     Office2007Extractor plugin{this};
0188 
0189     SimpleExtractionResult result(testFilePath(QStringLiteral("test_libreoffice.docx")),
0190                         QStringLiteral("application/vnd.openxmlformats-officedocument.wordprocessingml.document"),
0191                         ExtractionResult::ExtractMetaData);
0192 
0193     plugin.extract(&result);
0194 
0195     QVERIFY(!result.types().isEmpty());
0196     QVERIFY(!result.properties().isEmpty());
0197     QVERIFY(result.text().isEmpty());
0198 }
0199 
0200 QTEST_GUILESS_MAIN(Office2007ExtractorTest)
0201 
0202 #include "office2007extractortest.moc"