File indexing completed on 2024-05-19 16:38:18

0001 /*
0002     SPDX-FileCopyrightText: 2015 Ivan Cukic <ivan.cukic(at)kde.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "QueryTest.h"
0008 
0009 #include <QDBusConnection>
0010 #include <QDBusConnectionInterface>
0011 #include <QDebug>
0012 #include <QString>
0013 #include <QTest>
0014 
0015 #include <query.h>
0016 
0017 namespace KAStats = KActivities::Stats;
0018 using namespace KAStats;
0019 using namespace KAStats::Terms;
0020 
0021 QueryTest::QueryTest(QObject *parent)
0022     : Test(parent)
0023 {
0024 }
0025 
0026 void QueryTest::testDefaults()
0027 {
0028     TEST_CHUNK(QStringLiteral("Testing the term defaults"));
0029 
0030     Query query;
0031 
0032     QCOMPARE(query.selection(), AllResources);
0033     QCOMPARE(query.types(), {QStringLiteral(":any")});
0034     QCOMPARE(query.agents(), {QStringLiteral(":current")});
0035     QCOMPARE(query.activities(), {QStringLiteral(":current")});
0036     QCOMPARE(query.ordering(), HighScoredFirst);
0037 }
0038 
0039 void QueryTest::testDebuggingOutput()
0040 {
0041     TEST_CHUNK(QStringLiteral("Debugging output for a query"));
0042 
0043     Query query;
0044 
0045     // Testing whether qDebug can be called (compilation check)
0046     qDebug() << "Writing out a query:" << query;
0047 }
0048 
0049 void QueryTest::testDerivationFromDefault()
0050 {
0051     TEST_CHUNK(QStringLiteral("Testing query derivation from default"))
0052 
0053     Query queryDefault;
0054     auto queryDerived = queryDefault | LinkedResources;
0055 
0056     // queryDefault should not have been modified
0057     QCOMPARE(queryDefault.selection(), AllResources);
0058     QCOMPARE(queryDerived.selection(), LinkedResources);
0059 
0060     // Changing queryDerived back to AllResources, should be == to queryDefault
0061     queryDerived.setSelection(AllResources);
0062     QCOMPARE(queryDefault, queryDerived);
0063 }
0064 
0065 void QueryTest::testDerivationFromCustom()
0066 {
0067     TEST_CHUNK(QStringLiteral("Testing query derivation from custom"))
0068 
0069     Query queryCustom;
0070     auto queryDerived = queryCustom | LinkedResources;
0071 
0072     // q1 should not have been modified
0073     QCOMPARE(queryCustom.selection(), AllResources);
0074     QCOMPARE(queryDerived.selection(), LinkedResources);
0075 
0076     // Changing queryDerived back to AllResources, should be == to queryDefault
0077     queryDerived.setSelection(AllResources);
0078     QCOMPARE(queryCustom, queryDerived);
0079 }
0080 
0081 void QueryTest::testNormalSyntaxAgentManipulation()
0082 {
0083     TEST_CHUNK(QStringLiteral("Testing normal syntax manipulation: Agents"))
0084 
0085     Query query;
0086     query.addAgents(QStringList() << QStringLiteral("gvim") << QStringLiteral("kate"));
0087 
0088     QCOMPARE(query.agents(), QStringList() << QStringLiteral("gvim") << QStringLiteral("kate"));
0089 
0090     query.addAgents(QStringList() << QStringLiteral("kwrite"));
0091 
0092     QCOMPARE(query.agents(), QStringList() << QStringLiteral("gvim") << QStringLiteral("kate") << QStringLiteral("kwrite"));
0093 
0094     query.clearAgents();
0095 
0096     QCOMPARE(query.agents(), QStringList() << QStringLiteral(":current"));
0097 }
0098 
0099 void QueryTest::testNormalSyntaxTypeManipulation()
0100 {
0101     TEST_CHUNK(QStringLiteral("Testing normal syntax manipulation: Types"))
0102 
0103     Query query;
0104     query.addTypes(QStringList() << QStringLiteral("text/html") << QStringLiteral("text/plain"));
0105 
0106     QCOMPARE(query.types(), QStringList() << QStringLiteral("text/html") << QStringLiteral("text/plain"));
0107 
0108     query.addTypes(QStringList() << QStringLiteral("text/xml"));
0109 
0110     QCOMPARE(query.types(), QStringList() << QStringLiteral("text/html") << QStringLiteral("text/plain") << QStringLiteral("text/xml"));
0111 
0112     query.clearTypes();
0113 
0114     QCOMPARE(query.types(), QStringList() << QStringLiteral(":any"));
0115 }
0116 
0117 void QueryTest::testNormalSyntaxActivityManipulation()
0118 {
0119     TEST_CHUNK(QStringLiteral("Testing normal syntax manipulation: Activities"))
0120 
0121     Query query;
0122     query.addActivities(QStringList() << QStringLiteral("a1") << QStringLiteral("a2"));
0123 
0124     QCOMPARE(query.activities(), QStringList() << QStringLiteral("a1") << QStringLiteral("a2"));
0125 
0126     query.addActivities(QStringList() << QStringLiteral("a3"));
0127 
0128     QCOMPARE(query.activities(), QStringList() << QStringLiteral("a1") << QStringLiteral("a2") << QStringLiteral("a3"));
0129 
0130     query.clearActivities();
0131 
0132     QCOMPARE(query.activities(), QStringList() << QStringLiteral(":current"));
0133 }
0134 
0135 void QueryTest::testNormalSyntaxOrderingManipulation()
0136 {
0137     TEST_CHUNK(QStringLiteral("Testing normal syntax manipulation: Activities"))
0138 
0139     Query query;
0140 
0141     QCOMPARE(query.ordering(), HighScoredFirst);
0142 
0143     query.setOrdering(RecentlyCreatedFirst);
0144 
0145     QCOMPARE(query.ordering(), RecentlyCreatedFirst);
0146 
0147     query.setOrdering(OrderByUrl);
0148 
0149     QCOMPARE(query.ordering(), OrderByUrl);
0150 }
0151 
0152 void QueryTest::testFancySyntaxBasic()
0153 {
0154     TEST_CHUNK(QStringLiteral("Testing the fancy syntax, non c++11"))
0155 
0156     /* clang-format off */
0157     auto query = LinkedResources
0158                     | Type(QStringLiteral("text"))
0159                     | Type(QStringLiteral("image"))
0160                     | Agent(QStringLiteral("test"))
0161                     | RecentlyCreatedFirst;
0162     /* clang-format on */
0163 
0164     QCOMPARE(query.selection(), LinkedResources);
0165     QCOMPARE(query.types(), QStringList() << QStringLiteral("text") << QStringLiteral("image"));
0166     QCOMPARE(query.agents(), QStringList() << QStringLiteral("test"));
0167     QCOMPARE(query.activities(), QStringList() << QStringLiteral(":current"));
0168     QCOMPARE(query.ordering(), RecentlyCreatedFirst);
0169 
0170     TEST_CHUNK(QStringLiteral("Testing the fancy syntax, c++11"))
0171 
0172     /* clang-format off */
0173     // Testing the fancy c++11 syntax
0174     auto queryCXX11 = LinkedResources
0175                         | Type{QStringLiteral("text"), QStringLiteral("image")}
0176                         | Agent{QStringLiteral("test")}
0177                         | RecentlyCreatedFirst;
0178     /* clang-format on */
0179 
0180     QCOMPARE(query, queryCXX11);
0181 }
0182 
0183 void QueryTest::testFancySyntaxAgentDefinition()
0184 {
0185     TEST_CHUNK(QStringLiteral("Testing the fancy syntax, agent definition"))
0186 
0187     {
0188         auto query = LinkedResources | OrderByUrl;
0189         QCOMPARE(query.agents(), QStringList() << QStringLiteral(":current"));
0190     }
0191 
0192     {
0193         auto query = LinkedResources | Agent(QStringLiteral("gvim"));
0194         QCOMPARE(query.agents(), QStringList() << QStringLiteral("gvim"));
0195     }
0196 
0197     {
0198         auto query = LinkedResources | Agent(QStringLiteral("gvim")) | Agent(QStringLiteral("kate"));
0199         QCOMPARE(query.agents(), QStringList() << QStringLiteral("gvim") << QStringLiteral("kate"));
0200     }
0201 
0202     {
0203         auto query = LinkedResources | Agent(QStringList() << QStringLiteral("gvim") << QStringLiteral("kate"));
0204         QCOMPARE(query.agents(), QStringList() << QStringLiteral("gvim") << QStringLiteral("kate"));
0205     }
0206 }
0207 
0208 void QueryTest::testFancySyntaxTypeDefinition()
0209 {
0210     TEST_CHUNK(QStringLiteral("Testing the fancy syntax, type definition"))
0211 
0212     {
0213         auto query = LinkedResources | OrderByUrl;
0214         QCOMPARE(query.types(), QStringList() << QStringLiteral(":any"));
0215     }
0216 
0217     {
0218         auto query = LinkedResources | Type(QStringLiteral("text/plain"));
0219         QCOMPARE(query.types(), QStringList() << QStringLiteral("text/plain"));
0220     }
0221 
0222     {
0223         auto query = LinkedResources | Type(QStringLiteral("text/plain")) | Type(QStringLiteral("text/html"));
0224         QCOMPARE(query.types(), QStringList() << QStringLiteral("text/plain") << QStringLiteral("text/html"));
0225     }
0226 
0227     {
0228         auto query = LinkedResources | Type(QStringList() << QStringLiteral("text/plain") << QStringLiteral("text/html"));
0229         QCOMPARE(query.types(), QStringList() << QStringLiteral("text/plain") << QStringLiteral("text/html"));
0230     }
0231 }
0232 
0233 void QueryTest::testFancySyntaxActivityDefinition()
0234 {
0235     TEST_CHUNK(QStringLiteral("Testing the fancy syntax, activity definition"))
0236 
0237     {
0238         auto query = LinkedResources | OrderByUrl;
0239         QCOMPARE(query.activities(), QStringList() << QStringLiteral(":current"));
0240     }
0241 
0242     {
0243         auto query = LinkedResources | Activity(QStringLiteral("gvim"));
0244         QCOMPARE(query.activities(), QStringList() << QStringLiteral("gvim"));
0245     }
0246 
0247     {
0248         auto query = LinkedResources | Activity(QStringLiteral("gvim")) | Activity(QStringLiteral("kate"));
0249         QCOMPARE(query.activities(), QStringList() << QStringLiteral("gvim") << QStringLiteral("kate"));
0250     }
0251 
0252     {
0253         auto query = LinkedResources | Activity(QStringList() << QStringLiteral("gvim") << QStringLiteral("kate"));
0254         QCOMPARE(query.activities(), QStringList() << QStringLiteral("gvim") << QStringLiteral("kate"));
0255     }
0256 }
0257 
0258 void QueryTest::testFancySyntaxOrderingDefinition()
0259 {
0260     TEST_CHUNK(QStringLiteral("Testing the fancy syntax, activity definition"))
0261 
0262     {
0263         auto query = LinkedResources | OrderByUrl;
0264         QCOMPARE(query.ordering(), OrderByUrl);
0265     }
0266 
0267     {
0268         auto query = LinkedResources | HighScoredFirst;
0269         QCOMPARE(query.ordering(), HighScoredFirst);
0270     }
0271 
0272     {
0273         auto query = LinkedResources | RecentlyCreatedFirst;
0274         QCOMPARE(query.ordering(), RecentlyCreatedFirst);
0275     }
0276 
0277     {
0278         auto query = LinkedResources | RecentlyCreatedFirst | OrderByUrl;
0279         QCOMPARE(query.ordering(), OrderByUrl);
0280     }
0281 
0282     {
0283         auto query = LinkedResources | RecentlyCreatedFirst | HighScoredFirst;
0284         QCOMPARE(query.ordering(), HighScoredFirst);
0285     }
0286 }
0287 
0288 void QueryTest::testNormalSyntaxDateDefinition()
0289 {
0290     TEST_CHUNK(QStringLiteral("Testing the Date definition"))
0291     {
0292         auto query = Date::today();
0293         QCOMPARE(query.start, QDate::currentDate());
0294     }
0295     {
0296         auto query = Date::yesterday();
0297         QDate date = QDate::currentDate();
0298         QCOMPARE(query.start, date.addDays(-1));
0299     }
0300     {
0301         auto query = Date(QDate::fromString(QStringLiteral("2019-07-25")));
0302         QCOMPARE(query.start, QDate::fromString(QStringLiteral("2019-07-25")));
0303     }
0304     {
0305         auto query = Date(QDate::fromString(QStringLiteral("2019-07-24,2019-07-25")));
0306         QCOMPARE(query.start, QDate::fromString(QStringLiteral("2019-07-24")));
0307         QCOMPARE(query.end, QDate::fromString(QStringLiteral("2019-07-25")));
0308     }
0309 }
0310 
0311 void QueryTest::initTestCase()
0312 {
0313     // CHECK_CONDITION(isActivityManagerRunning, FailIfTrue);
0314 }
0315 
0316 void QueryTest::cleanupTestCase()
0317 {
0318     Q_EMIT testFinished();
0319 }
0320 
0321 #include "moc_QueryTest.cpp"