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"