File indexing completed on 2024-05-05 04:35:28
0001 /* 0002 * This file is part of KDevelop Krazy2 Plugin. 0003 * 0004 * Copyright 2012 Daniel Calviño Sánchez <danxuliu@gmail.com> 0005 * 0006 * This program is free software; you can redistribute it and/or 0007 * modify it under the terms of the GNU General Public License 0008 * as published by the Free Software Foundation; either version 2 0009 * of the License, or (at your option) any later version. 0010 * 0011 * This program is distributed in the hope that it will be useful, 0012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0014 * GNU General Public License for more details. 0015 * 0016 * You should have received a copy of the GNU General Public License 0017 * along with this program. If not, see <http://www.gnu.org/licenses/>. 0018 */ 0019 0020 #include <QTest> 0021 0022 #include "../analysisresults.h" 0023 #include "../checker.h" 0024 #include "../issue.h" 0025 0026 class AnalysisResultsTest: public QObject { 0027 Q_OBJECT 0028 private slots: 0029 0030 void testAddChecker(); 0031 void testAddCheckerWithSameName(); 0032 void testFindCheckerNotFound(); 0033 0034 void testAddIssue(); 0035 0036 void testAddAnalysisResults(); 0037 void testAddAnalysisResultsWithDuplicatedIssues(); 0038 0039 }; 0040 0041 void AnalysisResultsTest::testAddChecker() { 0042 auto checker1 = new Checker(); 0043 checker1->setFileType("fileType1"); 0044 checker1->setName("name1"); 0045 0046 auto checker2 = new Checker(); 0047 checker2->setFileType("fileType1"); 0048 checker2->setName("name2"); 0049 0050 auto checker3 = new Checker(); 0051 checker3->setFileType("fileType2"); 0052 checker3->setName("name1"); 0053 0054 AnalysisResults analysisResults; 0055 analysisResults.addChecker(checker1); 0056 analysisResults.addChecker(checker2); 0057 analysisResults.addChecker(checker3); 0058 0059 QCOMPARE(analysisResults.findChecker("fileType1", "name1"), checker1); 0060 QCOMPARE(analysisResults.findChecker("fileType1", "name2"), checker2); 0061 QCOMPARE(analysisResults.findChecker("fileType2", "name1"), checker3); 0062 } 0063 0064 void AnalysisResultsTest::testAddCheckerWithSameName() { 0065 auto checker1 = new Checker(); 0066 checker1->setFileType("fileType"); 0067 checker1->setName("name"); 0068 0069 //It won't be added to the AnalysisResults, so it is created in the stack to 0070 //be automatically deleted 0071 Checker checker2; 0072 checker2.setFileType("fileType"); 0073 checker2.setName("name"); 0074 0075 AnalysisResults analysisResults; 0076 analysisResults.addChecker(checker1); 0077 analysisResults.addChecker(&checker2); 0078 0079 QCOMPARE(analysisResults.findChecker("fileType", "name"), checker1); 0080 } 0081 0082 void AnalysisResultsTest::testFindCheckerNotFound() { 0083 auto checker1 = new Checker(); 0084 checker1->setFileType("fileType"); 0085 checker1->setName("name"); 0086 0087 AnalysisResults analysisResults; 0088 analysisResults.addChecker(checker1); 0089 0090 QCOMPARE(analysisResults.findChecker("fileType", "nameNotAdded"), (Checker*)nullptr); 0091 } 0092 0093 void AnalysisResultsTest::testAddIssue() { 0094 auto checker1 = new Checker(); 0095 checker1->setFileType("fileType"); 0096 checker1->setName("name1"); 0097 auto issue1 = new Issue(); 0098 issue1->setChecker(checker1); 0099 issue1->setFileName("fileName"); 0100 0101 auto checker2 = new Checker(); 0102 checker2->setFileType("fileType"); 0103 checker2->setName("name2"); 0104 auto issue2a = new Issue(); 0105 issue2a->setChecker(checker2); 0106 issue2a->setFileName("fileName"); 0107 auto issue2b = new Issue(); 0108 issue2b->setChecker(checker2); 0109 issue2b->setFileName("fileName"); 0110 0111 AnalysisResults analysisResults; 0112 analysisResults.addChecker(checker1); 0113 analysisResults.addIssue(issue1); 0114 analysisResults.addChecker(checker2); 0115 analysisResults.addIssue(issue2a); 0116 analysisResults.addIssue(issue2b); 0117 0118 QCOMPARE(analysisResults.issues().size(), 3); 0119 QCOMPARE(analysisResults.issues()[0], issue1); 0120 QCOMPARE(analysisResults.issues()[1], issue2a); 0121 QCOMPARE(analysisResults.issues()[2], issue2b); 0122 } 0123 0124 void AnalysisResultsTest::testAddAnalysisResults() { 0125 auto fileType1Checker1 = new Checker(); 0126 fileType1Checker1->setFileType("fileType1"); 0127 fileType1Checker1->setName("fileType1Checker1Name"); 0128 auto fileType1Checker1Issue1 = new Issue(); 0129 fileType1Checker1Issue1->setChecker(fileType1Checker1); 0130 fileType1Checker1Issue1->setFileName("fileType1Checker1Issue1FileName"); 0131 0132 auto fileType1Checker2 = new Checker(); 0133 fileType1Checker2->setFileType("fileType1"); 0134 fileType1Checker2->setName("fileType1Checker2Name"); 0135 auto fileType1Checker2Issue2a = new Issue(); 0136 fileType1Checker2Issue2a->setChecker(fileType1Checker2); 0137 fileType1Checker2Issue2a->setFileName("fileType1Checker2Issue2aFileName"); 0138 auto fileType1Checker2Issue2b = new Issue(); 0139 fileType1Checker2Issue2b->setChecker(fileType1Checker2); 0140 fileType1Checker2Issue2b->setFileName("fileType1Checker2Issue2bFileName"); 0141 0142 AnalysisResults analysisResults; 0143 analysisResults.addChecker(fileType1Checker1); 0144 analysisResults.addIssue(fileType1Checker1Issue1); 0145 analysisResults.addChecker(fileType1Checker2); 0146 analysisResults.addIssue(fileType1Checker2Issue2a); 0147 analysisResults.addIssue(fileType1Checker2Issue2b); 0148 0149 //Other AnalysisResults with different checkers and issues 0150 auto fileType2Checker1 = new Checker(); 0151 fileType2Checker1->setFileType("fileType2"); 0152 fileType2Checker1->setName("fileType2Checker1Name"); 0153 fileType2Checker1->setDescription("fileType2Checker1Description"); 0154 fileType2Checker1->setExplanation("fileType2Checker1Explanation"); 0155 fileType2Checker1->setExtra(true); 0156 auto fileType2Checker1Issue1 = new Issue(); 0157 fileType2Checker1Issue1->setChecker(fileType2Checker1); 0158 fileType2Checker1Issue1->setFileName("fileType2Checker1Issue1FileName"); 0159 fileType2Checker1Issue1->setLine(4); 0160 fileType2Checker1Issue1->setMessage("fileType2Checker1Issue1Message"); 0161 0162 auto fileType2Checker2 = new Checker(); 0163 fileType2Checker2->setFileType("fileType2"); 0164 fileType2Checker2->setName("fileType2Checker2Name"); 0165 fileType2Checker2->setDescription("fileType2Checker2Description"); 0166 fileType2Checker2->setExplanation("fileType2Checker2Explanation"); 0167 auto fileType2Checker2Issue2a = new Issue(); 0168 fileType2Checker2Issue2a->setChecker(fileType2Checker2); 0169 fileType2Checker2Issue2a->setFileName("fileType2Checker2Issue2aFileName"); 0170 fileType2Checker2Issue2a->setLine(8); 0171 fileType2Checker2Issue2a->setMessage("fileType2Checker2Issue2aMessage"); 0172 auto fileType2Checker2Issue2b = new Issue(); 0173 fileType2Checker2Issue2b->setChecker(fileType2Checker2); 0174 fileType2Checker2Issue2b->setFileName("fileType2Checker2Issue2bFileName"); 0175 fileType2Checker2Issue2b->setLine(15); 0176 fileType2Checker2Issue2b->setMessage("fileType2Checker2Issue2bMessage"); 0177 0178 //An issue with a checker with the same file type and name as one already 0179 //added 0180 auto fileType1Checker1ToAdd = new Checker(); 0181 fileType1Checker1ToAdd->setFileType("fileType1"); 0182 fileType1Checker1ToAdd->setName("fileType1Checker1Name"); 0183 auto fileType1Checker1Issue2 = new Issue(); 0184 fileType1Checker1Issue2->setChecker(fileType1Checker1ToAdd); 0185 fileType1Checker1Issue2->setFileName("fileType1Checker1Issue2FileName"); 0186 fileType1Checker1Issue2->setLine(16); 0187 fileType1Checker1Issue2->setMessage("fileType1Checker1Issue2Message"); 0188 0189 AnalysisResults analysisResultsToAdd; 0190 analysisResultsToAdd.addChecker(fileType2Checker1); 0191 analysisResultsToAdd.addIssue(fileType2Checker1Issue1); 0192 analysisResultsToAdd.addChecker(fileType2Checker2); 0193 analysisResultsToAdd.addIssue(fileType2Checker2Issue2a); 0194 analysisResultsToAdd.addIssue(fileType2Checker2Issue2b); 0195 analysisResultsToAdd.addChecker(fileType1Checker1ToAdd); 0196 analysisResultsToAdd.addIssue(fileType1Checker1Issue2); 0197 0198 analysisResults.addAnalysisResults(&analysisResultsToAdd); 0199 0200 QCOMPARE(analysisResults.issues().size(), 7); 0201 QCOMPARE(analysisResults.issues()[0], fileType1Checker1Issue1); 0202 QCOMPARE(analysisResults.issues()[0]->checker(), fileType1Checker1); 0203 QCOMPARE(analysisResults.issues()[1], fileType1Checker2Issue2a); 0204 QCOMPARE(analysisResults.issues()[1]->checker(), fileType1Checker2); 0205 QCOMPARE(analysisResults.issues()[2], fileType1Checker2Issue2b); 0206 QCOMPARE(analysisResults.issues()[2]->checker(), fileType1Checker2); 0207 0208 const Issue* newFileType2Checker1Issue1 = analysisResults.issues()[3]; 0209 QVERIFY(newFileType2Checker1Issue1 != fileType2Checker1Issue1); 0210 QCOMPARE(newFileType2Checker1Issue1->fileName(), QString("fileType2Checker1Issue1FileName")); 0211 QCOMPARE(newFileType2Checker1Issue1->line(), 4); 0212 QCOMPARE(newFileType2Checker1Issue1->message(), QString("fileType2Checker1Issue1Message")); 0213 const Checker* newFileType2Checker1 = newFileType2Checker1Issue1->checker(); 0214 QVERIFY(newFileType2Checker1 != fileType2Checker1); 0215 QCOMPARE(newFileType2Checker1->fileType(), QString("fileType2")); 0216 QCOMPARE(newFileType2Checker1->name(), QString("fileType2Checker1Name")); 0217 QCOMPARE(newFileType2Checker1->description(), QString("fileType2Checker1Description")); 0218 QCOMPARE(newFileType2Checker1->explanation(), QString("fileType2Checker1Explanation")); 0219 QCOMPARE(newFileType2Checker1->isExtra(), true); 0220 0221 const Issue* newFileType2Checker2Issue2a = analysisResults.issues()[4]; 0222 QVERIFY(newFileType2Checker2Issue2a != fileType2Checker2Issue2a); 0223 QCOMPARE(newFileType2Checker2Issue2a->fileName(), QString("fileType2Checker2Issue2aFileName")); 0224 QCOMPARE(newFileType2Checker2Issue2a->line(), 8); 0225 QCOMPARE(newFileType2Checker2Issue2a->message(), QString("fileType2Checker2Issue2aMessage")); 0226 const Checker* newFileType2Checker2 = newFileType2Checker2Issue2a->checker(); 0227 QVERIFY(newFileType2Checker2 != fileType2Checker2); 0228 QCOMPARE(newFileType2Checker2->fileType(), QString("fileType2")); 0229 QCOMPARE(newFileType2Checker2->name(), QString("fileType2Checker2Name")); 0230 QCOMPARE(newFileType2Checker2->description(), QString("fileType2Checker2Description")); 0231 QCOMPARE(newFileType2Checker2->explanation(), QString("fileType2Checker2Explanation")); 0232 0233 const Issue* newFileType2Checker2Issue2b = analysisResults.issues()[5]; 0234 QVERIFY(newFileType2Checker2Issue2b != fileType2Checker2Issue2b); 0235 QCOMPARE(newFileType2Checker2Issue2b->fileName(), QString("fileType2Checker2Issue2bFileName")); 0236 QCOMPARE(newFileType2Checker2Issue2b->line(), 15); 0237 QCOMPARE(newFileType2Checker2Issue2b->message(), QString("fileType2Checker2Issue2bMessage")); 0238 QVERIFY(newFileType2Checker2Issue2b->checker() == newFileType2Checker2); 0239 0240 const Issue* newFileType1Checker1Issue2 = analysisResults.issues()[6]; 0241 QVERIFY(newFileType1Checker1Issue2 != fileType1Checker1Issue2); 0242 QCOMPARE(newFileType1Checker1Issue2->fileName(), QString("fileType1Checker1Issue2FileName")); 0243 QCOMPARE(newFileType1Checker1Issue2->line(), 16); 0244 QCOMPARE(newFileType1Checker1Issue2->message(), QString("fileType1Checker1Issue2Message")); 0245 QVERIFY(newFileType1Checker1Issue2->checker() == fileType1Checker1); 0246 } 0247 0248 void AnalysisResultsTest::testAddAnalysisResultsWithDuplicatedIssues() { 0249 auto checker1 = new Checker(); 0250 checker1->setFileType("fileType"); 0251 checker1->setName("name1"); 0252 auto issue1 = new Issue(); 0253 issue1->setChecker(checker1); 0254 issue1->setFileName("fileName"); 0255 auto issue2 = new Issue(); 0256 issue2->setChecker(checker1); 0257 issue2->setFileName("fileName"); 0258 issue2->setLine(42); 0259 0260 AnalysisResults analysisResults; 0261 analysisResults.addChecker(checker1); 0262 analysisResults.addIssue(issue1); 0263 analysisResults.addIssue(issue2); 0264 0265 //Other AnalysisResults with repeated checkers and issues 0266 auto checker1b = new Checker(); 0267 checker1b->setFileType("fileType"); 0268 checker1b->setName("name1"); 0269 auto issue1DifferentChecker = new Issue(); 0270 issue1DifferentChecker->setChecker(checker1b); 0271 issue1DifferentChecker->setFileName("fileName"); 0272 auto issue2DifferentChecker = new Issue(); 0273 issue2DifferentChecker->setChecker(checker1b); 0274 issue2DifferentChecker->setFileName("fileName"); 0275 issue2DifferentChecker->setLine(42); 0276 auto issue3DifferentChecker = new Issue(); 0277 issue3DifferentChecker->setChecker(checker1b); 0278 issue3DifferentChecker->setFileName("fileName2"); 0279 issue3DifferentChecker->setLine(108); 0280 0281 AnalysisResults analysisResultsToAdd; 0282 analysisResultsToAdd.addChecker(checker1b); 0283 analysisResultsToAdd.addIssue(issue1DifferentChecker); 0284 analysisResultsToAdd.addIssue(issue2DifferentChecker); 0285 analysisResultsToAdd.addIssue(issue3DifferentChecker); 0286 0287 analysisResults.addAnalysisResults(&analysisResultsToAdd); 0288 0289 QCOMPARE(analysisResults.issues().size(), 3); 0290 QCOMPARE(analysisResults.issues()[0], issue1); 0291 QCOMPARE(analysisResults.issues()[0]->checker(), checker1); 0292 QCOMPARE(analysisResults.issues()[1], issue2); 0293 QCOMPARE(analysisResults.issues()[1]->checker(), checker1); 0294 0295 const Issue* newIssue3 = analysisResults.issues()[2]; 0296 QVERIFY(newIssue3 != issue3DifferentChecker); 0297 QCOMPARE(newIssue3->fileName(), QString("fileName2")); 0298 QCOMPARE(newIssue3->line(), 108); 0299 QCOMPARE(newIssue3->checker(), checker1); 0300 } 0301 0302 QTEST_GUILESS_MAIN(AnalysisResultsTest) 0303 0304 #include "analysisresultstest.moc"