File indexing completed on 2024-04-21 04:36:02
0001 /* This file is part of KDevelop 0002 0003 Copyright 2016 Anton Anikin <anton.anikin@htower.ru> 0004 0005 This program is free software; you can redistribute it and/or 0006 modify it under the terms of the GNU General Public 0007 License as published by the Free Software Foundation; either 0008 version 2 of the License, or (at your option) any later version. 0009 0010 This program is distributed in the hope that it will be useful, 0011 but WITHOUT ANY WARRANTY; without even the implied warranty of 0012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 0013 General Public License for more details. 0014 0015 You should have received a copy of the GNU General Public License 0016 along with this program; see the file COPYING. If not, write to 0017 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 0018 Boston, MA 02110-1301, USA. 0019 */ 0020 0021 #include "test_verappjob.h" 0022 0023 #include "job.h" 0024 0025 #include <tests/autotestshell.h> 0026 #include <tests/testcore.h> 0027 #include <language/editor/documentrange.h> 0028 0029 #include <QtTest/QTest> 0030 0031 using namespace KDevelop; 0032 using namespace verapp; 0033 0034 class JobTester : public Job 0035 { 0036 Q_OBJECT 0037 0038 public: 0039 explicit JobTester(const Parameters& params) : Job(params) 0040 { 0041 connect(this, &JobTester::problemsDetected, this, &JobTester::problemsDetectedSlot); 0042 } 0043 0044 using Job::postProcessStdout; 0045 0046 QVector<KDevelop::IProblem::Ptr> problems() 0047 { 0048 return m_problems; 0049 } 0050 0051 private: 0052 void problemsDetectedSlot(const QVector<KDevelop::IProblem::Ptr>& problems) 0053 { 0054 m_problems += problems; 0055 } 0056 0057 QVector<KDevelop::IProblem::Ptr> m_problems; 0058 }; 0059 0060 void TestVerappJob::initTestCase() 0061 { 0062 AutoTestShell::init({"kdevverapp"}); 0063 TestCore::initialize(Core::NoUi); 0064 } 0065 0066 void TestVerappJob::cleanupTestCase() 0067 { 0068 TestCore::shutdown(); 0069 } 0070 0071 void TestVerappJob::testJob() 0072 { 0073 QStringList stdoutOutput1 = { 0074 "source1.cpp:35: L004: line is longer than 100 characters", 0075 "source1.cpp:37: T009: comma should not be preceded by whitespace", 0076 "source1.cpp:42: T011: closing curly bracket not in the same line or column", 0077 }; 0078 0079 QStringList stdoutOutput2 = { 0080 "source2.cpp:13: T012: negation operator used in its short form", 0081 "source2.cpp:30: T019: full block {} expected in the control structure" 0082 }; 0083 0084 Parameters jobParams; 0085 JobTester jobTester(jobParams); 0086 0087 // test incremental parsing 0088 jobTester.postProcessStdout(stdoutOutput1); 0089 QCOMPARE(jobTester.problems().size(), 3); 0090 0091 jobTester.postProcessStdout(stdoutOutput2); 0092 QCOMPARE(jobTester.problems().size(), 5); 0093 0094 // test common values 0095 auto problems = jobTester.problems(); 0096 foreach (auto problem, problems) { 0097 QCOMPARE(problem->source(), KDevelop::IProblem::Plugin); 0098 QCOMPARE(problem->severity(), KDevelop::IProblem::Warning); 0099 } 0100 0101 // test description 0102 QCOMPARE(problems[0]->description(), QStringLiteral("L004: line is longer than 100 characters")); 0103 QCOMPARE(problems[1]->description(), QStringLiteral("T009: comma should not be preceded by whitespace")); 0104 QCOMPARE(problems[2]->description(), QStringLiteral("T011: closing curly bracket not in the same line or column")); 0105 QCOMPARE(problems[3]->description(), QStringLiteral("T012: negation operator used in its short form")); 0106 QCOMPARE(problems[4]->description(), QStringLiteral("T019: full block {} expected in the control structure")); 0107 0108 // test problem location (file) 0109 QCOMPARE(problems[0]->finalLocation().document.str(), QStringLiteral("source1.cpp")); 0110 QCOMPARE(problems[1]->finalLocation().document.str(), QStringLiteral("source1.cpp")); 0111 QCOMPARE(problems[2]->finalLocation().document.str(), QStringLiteral("source1.cpp")); 0112 0113 QCOMPARE(problems[3]->finalLocation().document.str(), QStringLiteral("source2.cpp")); 0114 QCOMPARE(problems[4]->finalLocation().document.str(), QStringLiteral("source2.cpp")); 0115 0116 // test problem location (line) 0117 QCOMPARE(problems[0]->finalLocation().start().line(), 34); 0118 QCOMPARE(problems[1]->finalLocation().start().line(), 36); 0119 QCOMPARE(problems[2]->finalLocation().start().line(), 41); 0120 0121 QCOMPARE(problems[3]->finalLocation().start().line(), 12); 0122 QCOMPARE(problems[4]->finalLocation().start().line(), 29); 0123 } 0124 0125 QTEST_GUILESS_MAIN(TestVerappJob) 0126 0127 #include "test_verappjob.moc"