File indexing completed on 2024-05-05 04:35:27
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 <QtTest> 0021 #include <KLocalizedString> 0022 0023 #include "../analysisprogressparser.h" 0024 0025 class AnalysisProgressParserTest: public QObject { 0026 Q_OBJECT 0027 private slots: 0028 0029 void init(); 0030 void cleanup(); 0031 0032 void testStatusName(); 0033 0034 void testStart(); 0035 0036 void parseSingleCheckerSingleFile(); 0037 void parseSingleCheckerSeveralFiles(); 0038 void parseSeveralCheckersSingleFileSameType(); 0039 void parseSeveralCheckersSeveralFilesSameType(); 0040 void parseSeveralCheckersSingleFileDifferentType(); 0041 void parseSeveralCheckersSeveralFilesDifferentType(); 0042 0043 void parseFileTypeInfoSplit(); 0044 void parseCheckerNameSplit(); 0045 void parseDoneSplit(); 0046 0047 void parseSeveralDotsAtOnce(); 0048 void parseSeveralLinesAtOnce(); 0049 0050 void parseAfterResettingNumberOfFilesForEachFileType(); 0051 0052 void parseMoreCheckersThanTheNumberSet(); 0053 0054 void parseSingleCannotAccessFileBeforeCheckers(); 0055 void parseSingleUnsupportedFileTypeBeforeCheckers(); 0056 void parseSeveralFilteredOutFileMessagesBeforeCheckers(); 0057 0058 void parseFilteredOutFileMessagesSplit(); 0059 0060 void testFinish(); 0061 0062 private: 0063 0064 void assertShowMessage(int index, const QString& message); 0065 void assertShowProgress(int index, int minimum, int maximum, int value); 0066 0067 class AnalysisProgressParser* m_analysisProgressParser; 0068 0069 QSignalSpy* m_clearMessageSpy; 0070 QSignalSpy* m_showMessageSpy; 0071 QSignalSpy* m_showErrorMessageSpy; 0072 QSignalSpy* m_hideProgressSpy; 0073 QSignalSpy* m_showProgressSpy; 0074 0075 }; 0076 0077 void AnalysisProgressParserTest::init() { 0078 m_analysisProgressParser = new AnalysisProgressParser(); 0079 0080 //KDevelop::IStatus* must be registered in order to be used with QSignalSpy 0081 qRegisterMetaType<KDevelop::IStatus*>("KDevelop::IStatus*"); 0082 0083 m_clearMessageSpy = new QSignalSpy(m_analysisProgressParser, 0084 SIGNAL(clearMessage(KDevelop::IStatus*))); 0085 m_showMessageSpy = new QSignalSpy(m_analysisProgressParser, 0086 SIGNAL(showMessage(KDevelop::IStatus*,QString,int))); 0087 m_showErrorMessageSpy = new QSignalSpy(m_analysisProgressParser, 0088 SIGNAL(showErrorMessage(QString,int))); 0089 m_hideProgressSpy = new QSignalSpy(m_analysisProgressParser, 0090 SIGNAL(hideProgress(KDevelop::IStatus*))); 0091 m_showProgressSpy = new QSignalSpy(m_analysisProgressParser, 0092 SIGNAL(showProgress(KDevelop::IStatus*,int,int,int))); 0093 } 0094 0095 void AnalysisProgressParserTest::cleanup() { 0096 delete m_clearMessageSpy; 0097 delete m_showMessageSpy; 0098 delete m_showErrorMessageSpy; 0099 delete m_hideProgressSpy; 0100 delete m_showProgressSpy; 0101 0102 delete m_analysisProgressParser; 0103 } 0104 0105 void AnalysisProgressParserTest::testStatusName() { 0106 QCOMPARE(m_analysisProgressParser->statusName(), 0107 xi18nc("@info:progress", "Running <command>krazy2</command>")); 0108 } 0109 0110 void AnalysisProgressParserTest::testStart() { 0111 m_analysisProgressParser->start(); 0112 0113 QCOMPARE(m_showProgressSpy->count(), 1); 0114 assertShowProgress(0, 0, 100, 0); 0115 0116 QCOMPARE(m_clearMessageSpy->count(), 0); 0117 QCOMPARE(m_showMessageSpy->count(), 0); 0118 QCOMPARE(m_showErrorMessageSpy->count(), 0); 0119 QCOMPARE(m_hideProgressSpy->count(), 0); 0120 } 0121 0122 void AnalysisProgressParserTest::parseSingleCheckerSingleFile() { 0123 m_analysisProgressParser->setNumberOfCheckers(1); 0124 m_analysisProgressParser->parse("=>fileType/checkerName test in-progress."); 0125 0126 QCOMPARE(m_showMessageSpy->count(), 1); 0127 assertShowMessage(0, i18nc("@info:progress File type (c++, desktop...) and checker name", "Running %1/%2", "fileType", "checkerName")); 0128 0129 QCOMPARE(m_showProgressSpy->count(), 0); 0130 0131 m_analysisProgressParser->parse("done\n"); 0132 0133 QCOMPARE(m_showProgressSpy->count(), 1); 0134 assertShowProgress(0, 0, 100, 99); 0135 0136 QCOMPARE(m_showMessageSpy->count(), 1); 0137 QCOMPARE(m_clearMessageSpy->count(), 0); 0138 QCOMPARE(m_showErrorMessageSpy->count(), 0); 0139 QCOMPARE(m_hideProgressSpy->count(), 0); 0140 } 0141 0142 void AnalysisProgressParserTest::parseSingleCheckerSeveralFiles() { 0143 m_analysisProgressParser->setNumberOfCheckers(1); 0144 m_analysisProgressParser->parse("=>fileType/checkerName test in-progress."); 0145 0146 QCOMPARE(m_showMessageSpy->count(), 1); 0147 assertShowMessage(0, i18nc("@info:progress File type (c++, desktop...) and checker name", "Running %1/%2", "fileType", "checkerName")); 0148 0149 QCOMPARE(m_showProgressSpy->count(), 0); 0150 0151 m_analysisProgressParser->parse("."); 0152 m_analysisProgressParser->parse("."); 0153 m_analysisProgressParser->parse("."); 0154 0155 QCOMPARE(m_showProgressSpy->count(), 0); 0156 0157 m_analysisProgressParser->parse("done\n"); 0158 0159 QCOMPARE(m_showProgressSpy->count(), 1); 0160 assertShowProgress(0, 0, 100, 99); 0161 0162 QCOMPARE(m_showMessageSpy->count(), 1); 0163 QCOMPARE(m_clearMessageSpy->count(), 0); 0164 QCOMPARE(m_showErrorMessageSpy->count(), 0); 0165 QCOMPARE(m_hideProgressSpy->count(), 0); 0166 } 0167 0168 void AnalysisProgressParserTest::parseSeveralCheckersSingleFileSameType() { 0169 m_analysisProgressParser->setNumberOfCheckers(4); 0170 m_analysisProgressParser->parse("=>fileType/checkerName1 test in-progress."); 0171 m_analysisProgressParser->parse("done\n"); 0172 m_analysisProgressParser->parse("=>fileType/checkerName2 test in-progress."); 0173 0174 QCOMPARE(m_showMessageSpy->count(), 2); 0175 assertShowMessage(1, i18nc("@info:progress File type (c++, desktop...) and checker name", "Running %1/%2", "fileType", "checkerName2")); 0176 0177 QCOMPARE(m_showProgressSpy->count(), 1); 0178 0179 m_analysisProgressParser->parse("done\n"); 0180 0181 QCOMPARE(m_showProgressSpy->count(), 2); 0182 assertShowProgress(1, 0, 100, 50); 0183 0184 QCOMPARE(m_showMessageSpy->count(), 2); 0185 QCOMPARE(m_clearMessageSpy->count(), 0); 0186 QCOMPARE(m_showErrorMessageSpy->count(), 0); 0187 QCOMPARE(m_hideProgressSpy->count(), 0); 0188 } 0189 0190 void AnalysisProgressParserTest::parseSeveralCheckersSeveralFilesSameType() { 0191 m_analysisProgressParser->setNumberOfCheckers(5); 0192 m_analysisProgressParser->parse("=>fileType/checkerName1 test in-progress."); 0193 m_analysisProgressParser->parse("."); 0194 m_analysisProgressParser->parse("."); 0195 m_analysisProgressParser->parse("."); 0196 m_analysisProgressParser->parse("done\n"); 0197 m_analysisProgressParser->parse("=>fileType/checkerName2 test in-progress."); 0198 0199 QCOMPARE(m_showMessageSpy->count(), 2); 0200 assertShowMessage(1, i18nc("@info:progress File type (c++, desktop...) and checker name", "Running %1/%2", "fileType", "checkerName2")); 0201 0202 QCOMPARE(m_showProgressSpy->count(), 1); 0203 0204 m_analysisProgressParser->parse("."); 0205 0206 QCOMPARE(m_showProgressSpy->count(), 2); 0207 assertShowProgress(1, 0, 100, 25); 0208 0209 m_analysisProgressParser->parse("."); 0210 0211 QCOMPARE(m_showProgressSpy->count(), 3); 0212 assertShowProgress(2, 0, 100, 30); 0213 0214 m_analysisProgressParser->parse("."); 0215 0216 QCOMPARE(m_showProgressSpy->count(), 4); 0217 assertShowProgress(3, 0, 100, 35); 0218 0219 m_analysisProgressParser->parse("done\n"); 0220 0221 QCOMPARE(m_showProgressSpy->count(), 5); 0222 assertShowProgress(4, 0, 100, 40); 0223 0224 QCOMPARE(m_showMessageSpy->count(), 2); 0225 QCOMPARE(m_clearMessageSpy->count(), 0); 0226 QCOMPARE(m_showErrorMessageSpy->count(), 0); 0227 QCOMPARE(m_hideProgressSpy->count(), 0); 0228 } 0229 0230 void AnalysisProgressParserTest::parseSeveralCheckersSingleFileDifferentType() { 0231 m_analysisProgressParser->setNumberOfCheckers(4); 0232 m_analysisProgressParser->parse("=>fileType1/checkerName test in-progress."); 0233 m_analysisProgressParser->parse("done\n"); 0234 m_analysisProgressParser->parse("=>fileType2/checkerName test in-progress."); 0235 0236 QCOMPARE(m_showMessageSpy->count(), 2); 0237 assertShowMessage(1, i18nc("@info:progress File type (c++, desktop...) and checker name", "Running %1/%2", "fileType2", "checkerName")); 0238 0239 QCOMPARE(m_showProgressSpy->count(), 1); 0240 0241 m_analysisProgressParser->parse("done\n"); 0242 0243 QCOMPARE(m_showProgressSpy->count(), 2); 0244 assertShowProgress(1, 0, 100, 50); 0245 0246 QCOMPARE(m_showMessageSpy->count(), 2); 0247 QCOMPARE(m_clearMessageSpy->count(), 0); 0248 QCOMPARE(m_showErrorMessageSpy->count(), 0); 0249 QCOMPARE(m_hideProgressSpy->count(), 0); 0250 } 0251 0252 void AnalysisProgressParserTest::parseSeveralCheckersSeveralFilesDifferentType() { 0253 m_analysisProgressParser->setNumberOfCheckers(5); 0254 m_analysisProgressParser->parse("=>fileType1/checkerName1 test in-progress."); 0255 m_analysisProgressParser->parse("."); 0256 m_analysisProgressParser->parse("."); 0257 m_analysisProgressParser->parse("."); 0258 m_analysisProgressParser->parse("done\n"); 0259 m_analysisProgressParser->parse("=>fileType1/checkerName2 test in-progress."); 0260 m_analysisProgressParser->parse("."); 0261 m_analysisProgressParser->parse("."); 0262 m_analysisProgressParser->parse("."); 0263 m_analysisProgressParser->parse("done\n"); 0264 m_analysisProgressParser->parse("=>fileType2/checkerName3 test in-progress."); 0265 0266 QCOMPARE(m_showMessageSpy->count(), 3); 0267 assertShowMessage(2, i18nc("@info:progress File type (c++, desktop...) and checker name", "Running %1/%2", "fileType2", "checkerName3")); 0268 0269 QCOMPARE(m_showProgressSpy->count(), 5); 0270 0271 m_analysisProgressParser->parse("."); 0272 0273 QCOMPARE(m_showProgressSpy->count(), 5); 0274 0275 m_analysisProgressParser->parse("done\n"); 0276 0277 QCOMPARE(m_showProgressSpy->count(), 6); 0278 assertShowProgress(5, 0, 100, 60); 0279 0280 m_analysisProgressParser->parse("=>fileType2/checkerName4 test in-progress."); 0281 0282 QCOMPARE(m_showMessageSpy->count(), 4); 0283 assertShowMessage(3, i18nc("@info:progress File type (c++, desktop...) and checker name", "Running %1/%2", "fileType2", "checkerName4")); 0284 0285 QCOMPARE(m_showProgressSpy->count(), 6); 0286 0287 m_analysisProgressParser->parse("."); 0288 0289 QCOMPARE(m_showProgressSpy->count(), 7); 0290 assertShowProgress(6, 0, 100, 70); 0291 0292 m_analysisProgressParser->parse("done\n"); 0293 0294 QCOMPARE(m_showProgressSpy->count(), 8); 0295 assertShowProgress(7, 0, 100, 80); 0296 0297 QCOMPARE(m_showMessageSpy->count(), 4); 0298 QCOMPARE(m_clearMessageSpy->count(), 0); 0299 QCOMPARE(m_showErrorMessageSpy->count(), 0); 0300 QCOMPARE(m_hideProgressSpy->count(), 0); 0301 } 0302 0303 void AnalysisProgressParserTest::parseFileTypeInfoSplit() { 0304 m_analysisProgressParser->setNumberOfCheckers(5); 0305 m_analysisProgressParser->parse("=>fileT"); 0306 m_analysisProgressParser->parse("ype/checkerName1 test in-progress."); 0307 0308 QCOMPARE(m_showMessageSpy->count(), 1); 0309 assertShowMessage(0, i18nc("@info:progress File type (c++, desktop...) and checker name", "Running %1/%2", "fileType", "checkerName1")); 0310 0311 m_analysisProgressParser->parse("."); 0312 m_analysisProgressParser->parse("."); 0313 m_analysisProgressParser->parse("."); 0314 m_analysisProgressParser->parse("done\n"); 0315 0316 QCOMPARE(m_showProgressSpy->count(), 1); 0317 assertShowProgress(0, 0, 100, 20); 0318 0319 m_analysisProgressParser->parse("=>fileType"); 0320 m_analysisProgressParser->parse("/checkerName2 test in-progress."); 0321 0322 QCOMPARE(m_showMessageSpy->count(), 2); 0323 assertShowMessage(1, i18nc("@info:progress File type (c++, desktop...) and checker name", "Running %1/%2", "fileType", "checkerName2")); 0324 0325 QCOMPARE(m_showProgressSpy->count(), 1); 0326 0327 m_analysisProgressParser->parse("."); 0328 0329 QCOMPARE(m_showProgressSpy->count(), 2); 0330 assertShowProgress(1, 0, 100, 25); 0331 0332 m_analysisProgressParser->parse("."); 0333 m_analysisProgressParser->parse("."); 0334 m_analysisProgressParser->parse("done\n"); 0335 0336 QCOMPARE(m_showProgressSpy->count(), 5); 0337 assertShowProgress(2, 0, 100, 30); 0338 assertShowProgress(3, 0, 100, 35); 0339 assertShowProgress(4, 0, 100, 40); 0340 } 0341 0342 void AnalysisProgressParserTest::parseCheckerNameSplit() { 0343 m_analysisProgressParser->setNumberOfCheckers(1); 0344 m_analysisProgressParser->parse("=>fileType/ch"); 0345 0346 QCOMPARE(m_showMessageSpy->count(), 0); 0347 0348 m_analysisProgressParser->parse("eckerName test in-progress."); 0349 0350 QCOMPARE(m_showMessageSpy->count(), 1); 0351 assertShowMessage(0, i18nc("@info:progress File type (c++, desktop...) and checker name", "Running %1/%2", "fileType", "checkerName")); 0352 } 0353 0354 void AnalysisProgressParserTest::parseDoneSplit() { 0355 m_analysisProgressParser->setNumberOfCheckers(1); 0356 m_analysisProgressParser->parse("=>fileType/checkerName test in-progress."); 0357 m_analysisProgressParser->parse("don"); 0358 0359 QCOMPARE(m_showProgressSpy->count(), 0); 0360 0361 m_analysisProgressParser->parse("e\n"); 0362 0363 QCOMPARE(m_showProgressSpy->count(), 1); 0364 assertShowProgress(0, 0, 100, 99); 0365 } 0366 0367 void AnalysisProgressParserTest::parseSeveralDotsAtOnce() { 0368 m_analysisProgressParser->setNumberOfCheckers(5); 0369 m_analysisProgressParser->parse("=>fileType/checkerName1 test in-progress."); 0370 0371 QCOMPARE(m_showMessageSpy->count(), 1); 0372 assertShowMessage(0, i18nc("@info:progress File type (c++, desktop...) and checker name", "Running %1/%2", "fileType", "checkerName1")); 0373 0374 m_analysisProgressParser->parse("..."); 0375 m_analysisProgressParser->parse("done\n"); 0376 0377 QCOMPARE(m_showProgressSpy->count(), 1); 0378 assertShowProgress(0, 0, 100, 20); 0379 0380 m_analysisProgressParser->parse("=>fileType/checkerName2 test in-progress.."); 0381 0382 QCOMPARE(m_showMessageSpy->count(), 2); 0383 assertShowMessage(1, i18nc("@info:progress File type (c++, desktop...) and checker name", "Running %1/%2", "fileType", "checkerName2")); 0384 0385 QCOMPARE(m_showProgressSpy->count(), 2); 0386 assertShowProgress(1, 0, 100, 25); 0387 0388 m_analysisProgressParser->parse(".."); 0389 0390 QCOMPARE(m_showProgressSpy->count(), 4); 0391 assertShowProgress(2, 0, 100, 30); 0392 assertShowProgress(3, 0, 100, 35); 0393 0394 m_analysisProgressParser->parse("done\n"); 0395 0396 QCOMPARE(m_showProgressSpy->count(), 5); 0397 assertShowProgress(4, 0, 100, 40); 0398 } 0399 0400 void AnalysisProgressParserTest::parseSeveralLinesAtOnce() { 0401 m_analysisProgressParser->setNumberOfCheckers(5); 0402 m_analysisProgressParser->parse("=>fileType1/checkerName1 test in-progress....done\n\ 0403 =>fileType1/checkerName2 test in-progress....done\n\ 0404 =>fileType2/checkerName3 test in-progress..done\n\ 0405 =>fileType2/checkerName4 test in-progress..done\n"); 0406 0407 QCOMPARE(m_showMessageSpy->count(), 4); 0408 assertShowMessage(0, i18nc("@info:progress File type (c++, desktop...) and checker name", "Running %1/%2", "fileType1", "checkerName1")); 0409 assertShowMessage(1, i18nc("@info:progress File type (c++, desktop...) and checker name", "Running %1/%2", "fileType1", "checkerName2")); 0410 assertShowMessage(2, i18nc("@info:progress File type (c++, desktop...) and checker name", "Running %1/%2", "fileType2", "checkerName3")); 0411 assertShowMessage(3, i18nc("@info:progress File type (c++, desktop...) and checker name", "Running %1/%2", "fileType2", "checkerName4")); 0412 0413 QCOMPARE(m_showProgressSpy->count(), 8); 0414 assertShowProgress(0, 0, 100, 20); 0415 assertShowProgress(1, 0, 100, 25); 0416 assertShowProgress(2, 0, 100, 30); 0417 assertShowProgress(3, 0, 100, 35); 0418 assertShowProgress(4, 0, 100, 40); 0419 assertShowProgress(5, 0, 100, 60); 0420 assertShowProgress(6, 0, 100, 70); 0421 assertShowProgress(7, 0, 100, 80); 0422 } 0423 0424 void AnalysisProgressParserTest::parseAfterResettingNumberOfFilesForEachFileType() { 0425 m_analysisProgressParser->setNumberOfCheckers(10); 0426 m_analysisProgressParser->parse("=>fileType1/checkerName1 test in-progress.....done\n"); 0427 m_analysisProgressParser->parse("=>fileType2/checkerName2 test in-progress..done\n"); 0428 m_analysisProgressParser->parse("=>fileType1/checkerName3 test in-progress.....done\n"); 0429 m_analysisProgressParser->parse("=>fileType2/checkerName4 test in-progress..done\n"); 0430 0431 QCOMPARE(m_showMessageSpy->count(), 4); 0432 assertShowMessage(0, i18nc("@info:progress File type (c++, desktop...) and checker name", "Running %1/%2", "fileType1", "checkerName1")); 0433 assertShowMessage(1, i18nc("@info:progress File type (c++, desktop...) and checker name", "Running %1/%2", "fileType2", "checkerName2")); 0434 assertShowMessage(2, i18nc("@info:progress File type (c++, desktop...) and checker name", "Running %1/%2", "fileType1", "checkerName3")); 0435 assertShowMessage(3, i18nc("@info:progress File type (c++, desktop...) and checker name", "Running %1/%2", "fileType2", "checkerName4")); 0436 0437 QCOMPARE(m_showProgressSpy->count(), 9); 0438 assertShowProgress(0, 0, 100, 10); 0439 assertShowProgress(1, 0, 100, 20); 0440 assertShowProgress(2, 0, 100, 22); 0441 assertShowProgress(3, 0, 100, 24); 0442 assertShowProgress(4, 0, 100, 26); 0443 assertShowProgress(5, 0, 100, 28); 0444 assertShowProgress(6, 0, 100, 30); 0445 assertShowProgress(7, 0, 100, 35); 0446 assertShowProgress(8, 0, 100, 40); 0447 0448 m_analysisProgressParser->resetNumberOfFilesForEachFileType(); 0449 0450 m_analysisProgressParser->parse("=>fileType1/checkerName5 test in-progress..done\n"); 0451 m_analysisProgressParser->parse("=>fileType2/checkerName6 test in-progress.....done\n"); 0452 m_analysisProgressParser->parse("=>fileType1/checkerName7 test in-progress..done\n"); 0453 m_analysisProgressParser->parse("=>fileType2/checkerName8 test in-progress.....done\n"); 0454 0455 QCOMPARE(m_showMessageSpy->count(), 8); 0456 assertShowMessage(4, i18nc("@info:progress File type (c++, desktop...) and checker name", "Running %1/%2", "fileType1", "checkerName5")); 0457 assertShowMessage(5, i18nc("@info:progress File type (c++, desktop...) and checker name", "Running %1/%2", "fileType2", "checkerName6")); 0458 assertShowMessage(6, i18nc("@info:progress File type (c++, desktop...) and checker name", "Running %1/%2", "fileType1", "checkerName7")); 0459 assertShowMessage(7, i18nc("@info:progress File type (c++, desktop...) and checker name", "Running %1/%2", "fileType2", "checkerName8")); 0460 0461 QCOMPARE(m_showProgressSpy->count(), 18); 0462 assertShowProgress(9, 0, 100, 50); 0463 assertShowProgress(10, 0, 100, 60); 0464 assertShowProgress(11, 0, 100, 65); 0465 assertShowProgress(12, 0, 100, 70); 0466 assertShowProgress(13, 0, 100, 72); 0467 assertShowProgress(14, 0, 100, 74); 0468 assertShowProgress(15, 0, 100, 76); 0469 assertShowProgress(16, 0, 100, 78); 0470 assertShowProgress(17, 0, 100, 80); 0471 } 0472 0473 void AnalysisProgressParserTest::parseMoreCheckersThanTheNumberSet() { 0474 m_analysisProgressParser->setNumberOfCheckers(2); 0475 m_analysisProgressParser->parse("=>fileType1/checkerName1 test in-progress....done\n"); 0476 m_analysisProgressParser->parse("=>fileType1/checkerName2 test in-progress....done\n"); 0477 0478 QCOMPARE(m_showProgressSpy->count(), 5); 0479 assertShowProgress(0, 0, 100, 50); 0480 assertShowProgress(1, 0, 100, 62); 0481 assertShowProgress(2, 0, 100, 75); 0482 assertShowProgress(3, 0, 100, 87); 0483 assertShowProgress(4, 0, 100, 99); 0484 0485 m_analysisProgressParser->parse("=>fileType1/checkerName3 test in-progress....done\n"); 0486 0487 QCOMPARE(m_showProgressSpy->count(), 9); 0488 assertShowProgress(5, 0, 100, 74); 0489 assertShowProgress(6, 0, 100, 82); 0490 assertShowProgress(7, 0, 100, 90); 0491 assertShowProgress(8, 0, 100, 99); 0492 0493 m_analysisProgressParser->parse("=>fileType2/checkerName4 test in-progress....done\n"); 0494 0495 QCOMPARE(m_showProgressSpy->count(), 10); 0496 assertShowProgress(9, 0, 100, 99); 0497 0498 m_analysisProgressParser->parse("=>fileType2/checkerName5 test in-progress....done\n"); 0499 0500 QCOMPARE(m_showProgressSpy->count(), 14); 0501 assertShowProgress(10, 0, 100, 85); 0502 assertShowProgress(11, 0, 100, 90); 0503 assertShowProgress(12, 0, 100, 95); 0504 assertShowProgress(13, 0, 100, 99); 0505 } 0506 0507 void AnalysisProgressParserTest::parseSingleCannotAccessFileBeforeCheckers() { 0508 m_analysisProgressParser->setNumberOfCheckers(5); 0509 m_analysisProgressParser->parse("Cannot access file /some/file\n"); 0510 m_analysisProgressParser->parse("=>fileType1/checkerName1 test in-progress.done\n"); 0511 m_analysisProgressParser->parse("=>fileType1/checkerName2 test in-progress.done\n"); 0512 0513 QCOMPARE(m_showMessageSpy->count(), 2); 0514 assertShowMessage(0, i18nc("@info:progress File type (c++, desktop...) and checker name", "Running %1/%2", "fileType1", "checkerName1")); 0515 assertShowMessage(1, i18nc("@info:progress File type (c++, desktop...) and checker name", "Running %1/%2", "fileType1", "checkerName2")); 0516 0517 QCOMPARE(m_showProgressSpy->count(), 2); 0518 assertShowProgress(0, 0, 100, 20); 0519 assertShowProgress(1, 0, 100, 40); 0520 } 0521 0522 void AnalysisProgressParserTest::parseSingleUnsupportedFileTypeBeforeCheckers() { 0523 m_analysisProgressParser->setNumberOfCheckers(5); 0524 m_analysisProgressParser->parse("Unsupported file type for /some/file... skipping\n"); 0525 m_analysisProgressParser->parse("=>fileType1/checkerName1 test in-progress.done\n"); 0526 m_analysisProgressParser->parse("=>fileType1/checkerName2 test in-progress.done\n"); 0527 0528 QCOMPARE(m_showMessageSpy->count(), 2); 0529 assertShowMessage(0, i18nc("@info:progress File type (c++, desktop...) and checker name", "Running %1/%2", "fileType1", "checkerName1")); 0530 assertShowMessage(1, i18nc("@info:progress File type (c++, desktop...) and checker name", "Running %1/%2", "fileType1", "checkerName2")); 0531 0532 QCOMPARE(m_showProgressSpy->count(), 2); 0533 assertShowProgress(0, 0, 100, 20); 0534 assertShowProgress(1, 0, 100, 40); 0535 } 0536 0537 void AnalysisProgressParserTest::parseSeveralFilteredOutFileMessagesBeforeCheckers() { 0538 m_analysisProgressParser->setNumberOfCheckers(5); 0539 m_analysisProgressParser->parse("Cannot access file /some/file\n"); 0540 m_analysisProgressParser->parse("Unsupported file type for /other/file... skipping\n"); 0541 m_analysisProgressParser->parse("Unsupported file type for /another/file... skipping\n"); 0542 m_analysisProgressParser->parse("Cannot access file /yet/another/file\n"); 0543 m_analysisProgressParser->parse("Unsupported file type for /and/even/another/file... skipping\n"); 0544 m_analysisProgressParser->parse("=>fileType1/checkerName1 test in-progress.done\n"); 0545 m_analysisProgressParser->parse("=>fileType1/checkerName2 test in-progress.done\n"); 0546 0547 QCOMPARE(m_showMessageSpy->count(), 2); 0548 assertShowMessage(0, i18nc("@info:progress File type (c++, desktop...) and checker name", "Running %1/%2", "fileType1", "checkerName1")); 0549 assertShowMessage(1, i18nc("@info:progress File type (c++, desktop...) and checker name", "Running %1/%2", "fileType1", "checkerName2")); 0550 0551 QCOMPARE(m_showProgressSpy->count(), 2); 0552 assertShowProgress(0, 0, 100, 20); 0553 assertShowProgress(1, 0, 100, 40); 0554 } 0555 0556 void AnalysisProgressParserTest::parseFilteredOutFileMessagesSplit() { 0557 m_analysisProgressParser->setNumberOfCheckers(5); 0558 m_analysisProgressParser->parse("Cannot access file /some/strange"); 0559 m_analysisProgressParser->parse("=> file/name\n"); 0560 m_analysisProgressParser->parse("Unsupported file type for /other"); 0561 m_analysisProgressParser->parse("/strange file name: test in-progress... skipping\n"); 0562 m_analysisProgressParser->parse("Cannot access file /another/file"); 0563 m_analysisProgressParser->parse(".extension\n"); 0564 m_analysisProgressParser->parse("Cannot access file /yet/another/strange file name: "); 0565 m_analysisProgressParser->parse("done\n"); 0566 m_analysisProgressParser->parse("=>fileType1/checkerName1 test in-progress.done\n"); 0567 m_analysisProgressParser->parse("=>fileType1/checkerName2 test in-progress.done\n"); 0568 0569 QCOMPARE(m_showMessageSpy->count(), 2); 0570 assertShowMessage(0, i18nc("@info:progress File type (c++, desktop...) and checker name", "Running %1/%2", "fileType1", "checkerName1")); 0571 assertShowMessage(1, i18nc("@info:progress File type (c++, desktop...) and checker name", "Running %1/%2", "fileType1", "checkerName2")); 0572 0573 QCOMPARE(m_showProgressSpy->count(), 2); 0574 assertShowProgress(0, 0, 100, 20); 0575 assertShowProgress(1, 0, 100, 40); 0576 } 0577 0578 void AnalysisProgressParserTest::testFinish() { 0579 m_analysisProgressParser->finish(); 0580 0581 QCOMPARE(m_showMessageSpy->count(), 0); 0582 QCOMPARE(m_showErrorMessageSpy->count(), 0); 0583 0584 QCOMPARE(m_clearMessageSpy->count(), 1); 0585 QVariant argument = m_clearMessageSpy->at(0).at(0); 0586 QCOMPARE(qvariant_cast<KDevelop::IStatus*>(argument), m_analysisProgressParser); 0587 0588 QCOMPARE(m_showProgressSpy->count(), 1); 0589 assertShowProgress(0, 0, 100, 100); 0590 0591 QCOMPARE(m_hideProgressSpy->count(), 1); 0592 argument = m_hideProgressSpy->at(0).at(0); 0593 QCOMPARE(qvariant_cast<KDevelop::IStatus*>(argument), m_analysisProgressParser); 0594 } 0595 0596 ///////////////////////////////// Helpers ////////////////////////////////////// 0597 0598 void AnalysisProgressParserTest::assertShowMessage(int index, const QString& message) { 0599 QVariant argument = m_showMessageSpy->at(index).at(0); 0600 QCOMPARE(qvariant_cast<KDevelop::IStatus*>(argument), m_analysisProgressParser); 0601 QCOMPARE(m_showMessageSpy->at(index).at(1).toString(), message); 0602 QCOMPARE(m_showMessageSpy->at(index).at(2).toInt(), 0); 0603 } 0604 0605 void AnalysisProgressParserTest::assertShowProgress(int index, int minimum, int maximum, int value) { 0606 QVariant argument = m_showProgressSpy->at(index).at(0); 0607 QCOMPARE(qvariant_cast<KDevelop::IStatus*>(argument), m_analysisProgressParser); 0608 QCOMPARE(m_showProgressSpy->at(index).at(1).toInt(), minimum); 0609 QCOMPARE(m_showProgressSpy->at(index).at(2).toInt(), maximum); 0610 QCOMPARE(m_showProgressSpy->at(index).at(3).toInt(), value); 0611 } 0612 0613 QTEST_GUILESS_MAIN(AnalysisProgressParserTest) 0614 0615 #include "analysisprogressparsertest.moc"