File indexing completed on 2024-05-12 04:38:21

0001 /*
0002     SPDX-FileCopyrightText: 2015 Laszlo Kis-Adam <laszlo.kis-adam@kdemail.net>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include <QTest>
0008 #include <QSignalSpy>
0009 #include <shell/problemstore.h>
0010 #include <shell/problem.h>
0011 #include <shell/problemstorenode.h>
0012 #include <shell/problemconstants.h>
0013 
0014 #include <tests/testcore.h>
0015 #include <tests/autotestshell.h>
0016 
0017 using namespace KDevelop;
0018 
0019 class TestProblemStore : public QObject
0020 {
0021     Q_OBJECT
0022 
0023 private Q_SLOTS:
0024     void initTestCase();
0025     void cleanupTestCase();
0026 
0027     void testAddProblems();
0028     void testClearProblems();
0029     void testSetProblems();
0030     void testFindNode();
0031     void testSeverity();
0032     void testSeverities();
0033     void testScope();
0034 
0035 private:
0036     void generateProblems();
0037 
0038     QScopedPointer<ProblemStore> m_store;
0039     QVector<IProblem::Ptr> m_problems;
0040 };
0041 
0042 
0043 void TestProblemStore::initTestCase()
0044 {
0045     AutoTestShell::init();
0046     TestCore::initialize(Core::NoUi);
0047 
0048     m_store.reset(new ProblemStore());
0049     m_store->setScope(CurrentDocument);
0050     QVERIFY(m_store->scope() == CurrentDocument);
0051 
0052     generateProblems();
0053 }
0054 
0055 void TestProblemStore::cleanupTestCase()
0056 {
0057     TestCore::shutdown();
0058 }
0059 
0060 void TestProblemStore::testAddProblems()
0061 {
0062     QCOMPARE(m_store->count(), 0);
0063 
0064     int c = 0;
0065     for (const IProblem::Ptr& problem : qAsConst(m_problems)) {
0066         m_store->addProblem(problem);
0067         c++;
0068 
0069         QCOMPARE(m_store->count(), c);
0070     }
0071 }
0072 
0073 void TestProblemStore::testClearProblems()
0074 {
0075     m_store->clear();
0076     QCOMPARE(m_store->count(), 0);
0077 }
0078 
0079 void TestProblemStore::testSetProblems()
0080 {
0081     m_store->setProblems(m_problems);
0082 
0083     QCOMPARE(m_store->count(), m_problems.count());
0084 }
0085 
0086 void TestProblemStore::testFindNode()
0087 {
0088     for (int i = 0; i < m_problems.count(); i++) {
0089         const auto *node = dynamic_cast<const ProblemNode*>(m_store->findNode(i));
0090 
0091         QVERIFY(node);
0092         QVERIFY(node->problem().data());
0093         QCOMPARE(node->problem().data()->description(), m_problems[i]->description());
0094     }
0095 }
0096 
0097 void TestProblemStore::testSeverity()
0098 {
0099     IProblem::Severity severity = IProblem::Error;
0100 
0101     QVERIFY(severity != m_store->severity());
0102 
0103     QSignalSpy spy(m_store.data(), &ProblemStore::changed);
0104     m_store->setSeverity(severity);
0105 
0106     QVERIFY(m_store->severity() == severity);
0107     QCOMPARE(spy.count(), 1);
0108 }
0109 
0110 void TestProblemStore::testSeverities()
0111 {
0112     IProblem::Severities severities = IProblem::Error | IProblem::Hint;
0113 
0114     QVERIFY(severities != m_store->severities());
0115 
0116     QSignalSpy spy(m_store.data(), &ProblemStore::changed);
0117     m_store->setSeverities(severities);
0118 
0119     QVERIFY(m_store->severities() == severities);
0120     QCOMPARE(spy.count(), 1);
0121 }
0122 
0123 void TestProblemStore::testScope()
0124 {
0125     QSignalSpy spy(m_store.data(), &ProblemStore::changed);
0126     ProblemScope scope = AllProjects;
0127 
0128     m_store->setScope(scope);
0129     QVERIFY(m_store->scope() == scope);
0130     QCOMPARE(spy.count(), 1);
0131 }
0132 
0133 void TestProblemStore::generateProblems()
0134 {
0135     for (int i = 0; i < 5; i++) {
0136         IProblem::Ptr problem(new DetectedProblem());
0137 
0138         problem->setDescription(QStringLiteral("PROBLEM") + QString::number(i + 1));
0139         m_problems.push_back(problem);
0140     }
0141 }
0142 
0143 QTEST_MAIN(TestProblemStore)
0144 
0145 #include "test_problemstore.moc"