File indexing completed on 2024-05-12 04:39:22
0001 /* 0002 SPDX-FileCopyrightText: 2016 Carlos Nihelton <carlosnsoliveira@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "test_clangtidyjob.h" 0008 0009 // SUT 0010 #include "job.h" 0011 // KDevPlatform 0012 #include <language/editor/documentrange.h> 0013 #include <tests/autotestshell.h> 0014 #include <tests/testcore.h> 0015 // Qt 0016 #include <QTest> 0017 #include <QSignalSpy> 0018 0019 0020 using namespace KDevelop; 0021 using namespace ClangTidy; 0022 0023 class JobTester : public Job 0024 { 0025 Q_OBJECT 0026 0027 public: 0028 JobTester(Job::Parameters params) 0029 : Job(params) 0030 { 0031 } 0032 0033 using Job::processStdoutLines; 0034 using Job::processStderrLines; 0035 using Job::childProcessExited; 0036 0037 QString standardOutput() const { return m_standardOutput.join('\n'); } 0038 }; 0039 0040 void TestClangTidyJob::initTestCase() 0041 { 0042 AutoTestShell::init({ "kdevclangtidy" }); 0043 TestCore::initialize(Core::NoUi); 0044 } 0045 0046 void TestClangTidyJob::cleanupTestCase() 0047 { 0048 TestCore::shutdown(); 0049 } 0050 0051 void TestClangTidyJob::testJob() 0052 { 0053 QFile output_example_file(QFINDTESTDATA("data/output_example")); 0054 QVERIFY(output_example_file.open(QIODevice::ReadOnly)); 0055 QTextStream ios(&output_example_file); 0056 QStringList stdoutOutput; 0057 QString line; 0058 while (ios.readLineInto(&line)) { 0059 stdoutOutput << line; 0060 } 0061 QVERIFY(!stdoutOutput.isEmpty()); 0062 0063 Job::Parameters jobParams; 0064 JobTester jobTester(jobParams); 0065 0066 qRegisterMetaType<QVector<KDevelop::IProblem::Ptr>>(); 0067 QSignalSpy problemsSpy(&jobTester, &JobTester::problemsDetected); 0068 0069 jobTester.processStdoutLines(stdoutOutput); 0070 QCOMPARE(jobTester.standardOutput(), stdoutOutput.join('\n')); 0071 0072 jobTester.childProcessExited(0, QProcess::NormalExit); 0073 0074 QCOMPARE(problemsSpy.count(), 1); 0075 const auto problems = qvariant_cast<QVector<KDevelop::IProblem::Ptr>>(problemsSpy.at(0).at(0)); 0076 0077 QVERIFY(problems[0]->finalLocation().document.str().contains(QStringLiteral("/kdev-clang-tidy/src/plugin.cpp"))); 0078 QVERIFY( 0079 problems[0]->explanation().startsWith(QStringLiteral("[cppcoreguidelines-pro-bounds-array-to-pointer-decay]"))); 0080 QVERIFY(problems[1]->finalLocation().document.str().contains(QStringLiteral("/kdev-clang-tidy/src/plugin.cpp"))); 0081 0082 QVERIFY( 0083 problems[1]->explanation().startsWith(QStringLiteral("[cppcoreguidelines-pro-bounds-array-to-pointer-decay]"))); 0084 QVERIFY(problems[2]->finalLocation().document.str().contains(QStringLiteral("/kdev-clang-tidy/src/plugin.cpp"))); 0085 0086 QVERIFY( 0087 problems[2]->explanation().startsWith(QStringLiteral("[cppcoreguidelines-pro-bounds-array-to-pointer-decay]"))); 0088 } 0089 0090 QTEST_GUILESS_MAIN(TestClangTidyJob) 0091 0092 #include "test_clangtidyjob.moc" 0093 #include "moc_test_clangtidyjob.cpp"