File: basicindexingjobtest.cpp

package info (click to toggle)
baloo-kf5 5.103.0-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 4,880 kB
  • sloc: cpp: 25,143; sh: 23; xml: 15; makefile: 9
file content (156 lines) | stat: -rw-r--r-- 4,504 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/*
    SPDX-FileCopyrightText: 2014 Pinak Ahuja <pinak.ahuja@gmail.com>

    SPDX-License-Identifier: LGPL-2.1-or-later
*/

#include "basicindexingjob.h"

#include <vector>
#include <QByteArray>
#include <QDateTime>
#include <QFile>
#include <QString>
#include <QTest>
#include <QTemporaryDir>
#include <QVector>
#include <KFileMetaData/Types>

namespace Baloo {

class BasicIndexingJobTest : public QObject
{
    Q_OBJECT

private Q_SLOTS:
    void initTestCase();

    void testBasicIndexing_data();
    void testBasicIndexing();
    void testBasicIndexingTypes_data();
    void testBasicIndexingTypes();

private:
    struct TestFile {
	QString filename;
	QString mimetype;
	QList<KFileMetaData::Type::Type> types;
    };
    std::vector<TestFile> m_testFiles;

    qint64 m_startTime;
    QTemporaryDir m_workDir;
};

}
using namespace Baloo;

void BasicIndexingJobTest::initTestCase()
{
    m_startTime = QDateTime::currentSecsSinceEpoch();

    using Type = KFileMetaData::Type::Type;
    m_testFiles = {
	{QStringLiteral("test.epub"),    QStringLiteral("application/epub+zip"),                            {Type::Document}},
	{QStringLiteral("test.jpg"),     QStringLiteral("image/jpeg"),                                      {Type::Image}},
	{QStringLiteral("test.mp3"),     QStringLiteral("audio/mpeg"),                                      {Type::Audio}},
	{QStringLiteral("test.ogv"),     QStringLiteral("video/x-theora+ogg"),                              {Type::Video}},
	{QStringLiteral("test.odp"),     QStringLiteral("application/vnd.oasis.opendocument.presentation"), {Type::Document, Type::Presentation}},
	{QStringLiteral("test.odt"),     QStringLiteral("application/vnd.oasis.opendocument.text"),         {Type::Document}},
	{QStringLiteral("test.tar.bz2"), QStringLiteral("application/x-bzip-compressed-tar"),               {Type::Archive}},
    };

    for (const auto& entry : m_testFiles) {
	QFile file(m_workDir.filePath(entry.filename));
	file.open(QIODevice::WriteOnly);
	file.write("\0", 1);
	file.close();
    }
}

void BasicIndexingJobTest::testBasicIndexing_data()
{
    QTest::addColumn<QString>("filename");
    QTest::addColumn<QString>("mimetype");

    for (const auto& entry : m_testFiles) {
	QTest::addRow("%s", qPrintable(entry.mimetype))
	   << entry.filename << entry.mimetype;
    }
}

void BasicIndexingJobTest::testBasicIndexing()
{
    QFETCH(QString, filename);
    QFETCH(QString, mimetype);

    QString filepath(m_workDir.filePath(filename));
    BasicIndexingJob job(filepath, mimetype, BasicIndexingJob::IndexingLevel::NoLevel);

    QVERIFY(job.index());

    auto doc = job.document();

    QVERIFY(doc.id());
    QVERIFY(doc.parentId());

    QCOMPARE(doc.url(), QFile::encodeName(filepath));
    QVERIFY(doc.m_mTime >= m_startTime);
    QVERIFY(doc.m_cTime >= m_startTime);

    auto fileNameTerms = doc.m_fileNameTerms.keys();
    std::sort(fileNameTerms.begin(), fileNameTerms.end());

    QCOMPARE(fileNameTerms.size(), filename.count(QLatin1Char('.')) + 1);
}

void BasicIndexingJobTest::testBasicIndexingTypes_data()
{
    QTest::addColumn<QString>("filename");
    QTest::addColumn<QString>("mimetype");
    QTest::addColumn<QList<QByteArray>>("types");

    for (const auto& entry : m_testFiles) {
	QByteArrayList list;
	for(const auto type : entry.types) {
	    list.append("T" + QByteArray::number(static_cast<int>(type)));
	}
	QTest::addRow("%s", qPrintable(entry.mimetype)) << entry.filename << entry.mimetype << list;
    }
}

void BasicIndexingJobTest::testBasicIndexingTypes()
{
    QFETCH(QString, filename);
    QFETCH(QString, mimetype);
    QFETCH(QList<QByteArray>, types);

    QString filepath(m_workDir.filePath(filename));
    BasicIndexingJob job(filepath, mimetype, BasicIndexingJob::IndexingLevel::NoLevel);

    QVERIFY(job.index());

    auto doc = job.document();

    auto terms = doc.m_terms.keys();
    auto split = std::partition(terms.begin(), terms.end(),
      [](const QByteArray& t) { return t[0] == 'T'; });

    // Types
    QByteArrayList docTypes{terms.begin(), split};
    std::sort(docTypes.begin(), docTypes.end());
    QCOMPARE(types, docTypes);

    // Mimetype terms
    QByteArrayList docMimeTerms{split, terms.end()};
    QVERIFY(docMimeTerms.size() >= 2);
    for (const auto& term : docMimeTerms) {
	QByteArray mimeBA = mimetype.toLatin1();
	// Strip 'M' prefix from term
	QVERIFY(mimeBA.contains(term.mid(1)));
    }
}

QTEST_GUILESS_MAIN(BasicIndexingJobTest)

#include "basicindexingjobtest.moc"