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
|
/*
SPDX-FileCopyrightText: 2018 Anton Anikin <anton@anikin.xyz>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "test_clazyjob.h"
#include "job.h"
#include <tests/autotestshell.h>
#include <tests/testcore.h>
#include <language/editor/documentrange.h>
#include <QTest>
using namespace KDevelop;
using namespace Clazy;
class JobTester : public Job
{
Q_OBJECT
public:
JobTester()
{
connect(this, &JobTester::problemsDetected,
this, [this](const QVector<KDevelop::IProblem::Ptr>& problems) {
m_problems += problems;
});
}
~JobTester() override = default;
using Job::processStdoutLines;
using Job::processStderrLines;
const QVector<KDevelop::IProblem::Ptr>& problems() const
{
return m_problems;
}
// implementation detail not accessible
#if 0
void setTotalCount(int totalCount)
{
m_totalCount = totalCount;
}
int finishedCount() const
{
return m_finishedCount;
}
#endif
private:
QVector<KDevelop::IProblem::Ptr> m_problems;
};
void TestClazyJob::initTestCase()
{
AutoTestShell::init({"kdevclazy"});
TestCore::initialize(Core::NoUi);
}
void TestClazyJob::cleanupTestCase()
{
TestCore::shutdown();
}
void TestClazyJob::testJob()
{
JobTester jobTester;
// test errors parsing =========================================================================
static const QStringList stderrOutput1 = {
QStringLiteral("source2.cpp:13:10: warning: unused variable 'check' [-Wunused-variable]"),
QStringLiteral(" auto check = db.checks()[\"returning-void-expression\"];")
};
static const QStringList stderrOutput2 = {
QStringLiteral("source3.cpp:248:21: warning: Don't call QList::first() on temporary [-Wclazy-detaching-temporary]"),
QStringLiteral(" auto item = pContext->items().first();"),
QStringLiteral(" ^"),
QStringLiteral("1 warning generated.")
};
static const QStringList stderrOutput3 = {
QStringLiteral("source4.cpp:47:9: warning: unused QString [-Wclazy-unused-non-trivial-variable]"),
QStringLiteral(" auto test = QString(\"%1 : %2\").arg(\"a\").arg(\"b\");"),
QStringLiteral(" ^"),
QStringLiteral("source4.cpp:47:47: warning: Use multi-arg instead [-Wclazy-qstring-arg]"),
QStringLiteral(" auto test = QString(\"%1 : %2\").arg(\"a\").arg(\"b\");"),
QStringLiteral(" ^"),
QStringLiteral("2 warnings generated.")
};
jobTester.processStderrLines(stderrOutput1);
QCOMPARE(jobTester.problems().size(), 0);
jobTester.processStderrLines(stderrOutput2);
QCOMPARE(jobTester.problems().size(), 1);
jobTester.processStderrLines(stderrOutput3);
QCOMPARE(jobTester.problems().size(), 3);
// test common values
const auto problems = jobTester.problems();
for (auto problem : problems) {
QCOMPARE(problem->severity(), KDevelop::IProblem::Warning);
QCOMPARE(problem->source(), KDevelop::IProblem::Plugin);
}
// test problem description
QCOMPARE(problems[0]->description(), QStringLiteral("Don't call QList::first() on temporary"));
QCOMPARE(problems[1]->description(), QStringLiteral("unused QString"));
QCOMPARE(problems[2]->description(), QStringLiteral("Use multi-arg instead"));
// test problem location (file)
QCOMPARE(problems[0]->finalLocation().document.str(), QStringLiteral("source3.cpp"));
QCOMPARE(problems[1]->finalLocation().document.str(), QStringLiteral("source4.cpp"));
QCOMPARE(problems[2]->finalLocation().document.str(), QStringLiteral("source4.cpp"));
// test problem location (line)
QCOMPARE(problems[0]->finalLocation().start().line(), 247);
QCOMPARE(problems[1]->finalLocation().start().line(), 46);
QCOMPARE(problems[2]->finalLocation().start().line(), 46);
// test problem location (column)
QCOMPARE(problems[0]->finalLocation().start().column(), 20);
QCOMPARE(problems[1]->finalLocation().start().column(), 8);
QCOMPARE(problems[2]->finalLocation().start().column(), 46);
}
QTEST_GUILESS_MAIN(TestClazyJob)
#include "test_clazyjob.moc"
#include "moc_test_clazyjob.cpp"
|