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 0022 #include "../analysisparameters.h" 0023 #include "../checker.h" 0024 0025 class AnalysisParametersTest: public QObject { 0026 Q_OBJECT 0027 private slots: 0028 0029 void initTestCase(); 0030 0031 void testConstructor(); 0032 0033 void testInitializeCheckers(); 0034 void testInitializeCheckersWhenNoAvailableCheckers(); 0035 0036 void testSetCheckersToRun(); 0037 void testSetCheckersToRunWithNotAvailableCheckers(); 0038 0039 void testSetFilesAndDirectories(); 0040 void testSetFilesAndDirectoriesWithRepeatedEntries(); 0041 void testSetFilesAndDirectoriesWithInvalidEntries(); 0042 0043 private: 0044 0045 QList<const Checker*> createAvailableCheckers() const; 0046 0047 bool examplesInSubdirectory() const; 0048 0049 QString m_examplesPath; 0050 }; 0051 0052 void AnalysisParametersTest::initTestCase() 0053 { 0054 m_examplesPath = QStringLiteral(EXAMPLETESTDATA_PATH); 0055 } 0056 0057 void AnalysisParametersTest::testConstructor() { 0058 AnalysisParameters analysisparameters; 0059 0060 QVERIFY(!analysisparameters.wereCheckersInitialized()); 0061 QVERIFY(analysisparameters.availableCheckers().isEmpty()); 0062 QVERIFY(analysisparameters.checkersToRun().isEmpty()); 0063 QVERIFY(analysisparameters.filesToBeAnalyzed().isEmpty()); 0064 } 0065 0066 void AnalysisParametersTest::testInitializeCheckers() { 0067 AnalysisParameters analysisparameters; 0068 QList<const Checker*> availableCheckers = createAvailableCheckers(); 0069 0070 analysisparameters.initializeCheckers(availableCheckers); 0071 0072 QVERIFY(analysisparameters.wereCheckersInitialized()); 0073 QCOMPARE(analysisparameters.availableCheckers(), availableCheckers); 0074 QCOMPARE(analysisparameters.checkersToRun().count(), 3); 0075 QCOMPARE(analysisparameters.checkersToRun().at(0), 0076 analysisparameters.availableCheckers().at(0)); 0077 QCOMPARE(analysisparameters.checkersToRun().at(1), 0078 analysisparameters.availableCheckers().at(1)); 0079 QCOMPARE(analysisparameters.checkersToRun().at(2), 0080 analysisparameters.availableCheckers().at(3)); 0081 } 0082 0083 void AnalysisParametersTest::testInitializeCheckersWhenNoAvailableCheckers() { 0084 AnalysisParameters analysisparameters; 0085 QList<const Checker*> availableCheckers; 0086 0087 analysisparameters.initializeCheckers(availableCheckers); 0088 0089 QVERIFY(analysisparameters.wereCheckersInitialized()); 0090 QCOMPARE(analysisparameters.availableCheckers(), availableCheckers); 0091 QCOMPARE(analysisparameters.checkersToRun().count(), 0); 0092 } 0093 0094 void AnalysisParametersTest::testSetCheckersToRun() { 0095 AnalysisParameters analysisparameters; 0096 QList<const Checker*> availableCheckers = createAvailableCheckers(); 0097 analysisparameters.initializeCheckers(availableCheckers); 0098 0099 QList<const Checker*> checkersToRun; 0100 checkersToRun.append(availableCheckers.at(1)); 0101 checkersToRun.append(availableCheckers.at(2)); 0102 checkersToRun.append(availableCheckers.at(4)); 0103 0104 analysisparameters.setCheckersToRun(checkersToRun); 0105 0106 QVERIFY(analysisparameters.wereCheckersInitialized()); 0107 QCOMPARE(analysisparameters.availableCheckers(), availableCheckers); 0108 QCOMPARE(analysisparameters.checkersToRun().count(), 3); 0109 QCOMPARE(analysisparameters.checkersToRun().at(0), 0110 analysisparameters.availableCheckers().at(1)); 0111 QCOMPARE(analysisparameters.checkersToRun().at(1), 0112 analysisparameters.availableCheckers().at(2)); 0113 QCOMPARE(analysisparameters.checkersToRun().at(2), 0114 analysisparameters.availableCheckers().at(4)); 0115 } 0116 0117 void AnalysisParametersTest::testSetCheckersToRunWithNotAvailableCheckers() { 0118 AnalysisParameters analysisparameters; 0119 0120 QScopedPointer<Checker> checkerNotAvailable(new Checker()); 0121 checkerNotAvailable->setFileType("fileType1"); 0122 checkerNotAvailable->setName("checkerNotAvailableName"); 0123 0124 QList<const Checker*> checkersToRun; 0125 checkersToRun.append(checkerNotAvailable.data()); 0126 0127 analysisparameters.setCheckersToRun(checkersToRun); 0128 0129 QVERIFY(!analysisparameters.wereCheckersInitialized()); 0130 QVERIFY(analysisparameters.availableCheckers().isEmpty()); 0131 QVERIFY(analysisparameters.checkersToRun().isEmpty()); 0132 0133 QList<const Checker*> availableCheckers = createAvailableCheckers(); 0134 analysisparameters.initializeCheckers(availableCheckers); 0135 0136 checkersToRun.clear(); 0137 checkersToRun.append(availableCheckers.at(1)); 0138 checkersToRun.append(availableCheckers.at(2)); 0139 checkersToRun.append(checkerNotAvailable.data()); 0140 checkersToRun.append(availableCheckers.at(4)); 0141 0142 analysisparameters.setCheckersToRun(checkersToRun); 0143 0144 QVERIFY(analysisparameters.wereCheckersInitialized()); 0145 QCOMPARE(analysisparameters.availableCheckers(), availableCheckers); 0146 QCOMPARE(analysisparameters.checkersToRun().count(), 3); 0147 QCOMPARE(analysisparameters.checkersToRun().at(0), 0148 analysisparameters.availableCheckers().at(1)); 0149 QCOMPARE(analysisparameters.checkersToRun().at(1), 0150 analysisparameters.availableCheckers().at(2)); 0151 QCOMPARE(analysisparameters.checkersToRun().at(2), 0152 analysisparameters.availableCheckers().at(4)); 0153 } 0154 0155 void AnalysisParametersTest::testSetFilesAndDirectories() { 0156 if (!examplesInSubdirectory()) { 0157 QString message = "The examples were not found in the 'examples' directory (" + m_examplesPath + ')'; 0158 QSKIP(message.toLatin1(), SkipAll); 0159 } 0160 0161 AnalysisParameters analysisparameters; 0162 0163 QStringList paths; 0164 paths.append(m_examplesPath + QString::fromUtf8("singleIssueNonAsciiFileNameḶḷambión.cpp")); 0165 paths.append(m_examplesPath + ".singleIssueHiddenUnixFileName.cpp"); 0166 paths.append(m_examplesPath + "subdirectory"); 0167 paths.append(m_examplesPath + "severalIssuesSeveralCheckers.cpp"); 0168 analysisparameters.setFilesAndDirectories(paths); 0169 0170 QCOMPARE(analysisparameters.filesAndDirectories(), paths); 0171 0172 QStringList filesToBeAnalyzed = analysisparameters.filesToBeAnalyzed(); 0173 QCOMPARE(filesToBeAnalyzed.count(), 5); 0174 QVERIFY(filesToBeAnalyzed.contains( 0175 m_examplesPath + QString::fromUtf8("singleIssueNonAsciiFileNameḶḷambión.cpp"))); 0176 QVERIFY(filesToBeAnalyzed.contains 0177 (m_examplesPath + ".singleIssueHiddenUnixFileName.cpp")); 0178 QVERIFY(filesToBeAnalyzed.contains( 0179 m_examplesPath + "subdirectory/singleIssue.desktop")); 0180 QVERIFY(filesToBeAnalyzed.contains( 0181 m_examplesPath + "subdirectory/severalIssuesSeveralCheckers.qml")); 0182 QVERIFY(filesToBeAnalyzed.contains( 0183 m_examplesPath + "severalIssuesSeveralCheckers.cpp")); 0184 } 0185 0186 void AnalysisParametersTest::testSetFilesAndDirectoriesWithRepeatedEntries() { 0187 if (!examplesInSubdirectory()) { 0188 QString message = "The examples were not found in the 'examples' directory (" + m_examplesPath + ')'; 0189 QSKIP(message.toLatin1(), SkipAll); 0190 } 0191 0192 AnalysisParameters analysisparameters; 0193 0194 QStringList paths; 0195 paths.append(m_examplesPath + "singleIssue.cpp"); 0196 paths.append(m_examplesPath); 0197 paths.append(m_examplesPath + "singleIssue.cpp"); 0198 paths.append(m_examplesPath + "severalIssuesSeveralCheckers.cpp"); 0199 analysisparameters.setFilesAndDirectories(paths); 0200 0201 QCOMPARE(analysisparameters.filesAndDirectories(), paths); 0202 0203 QStringList filesToBeAnalyzed = analysisparameters.filesToBeAnalyzed(); 0204 QCOMPARE(filesToBeAnalyzed.count(), 9); 0205 QVERIFY(filesToBeAnalyzed.contains( 0206 m_examplesPath + "singleIssue.cpp")); 0207 QVERIFY(filesToBeAnalyzed.contains( 0208 m_examplesPath + "singleExtraIssue.cpp")); 0209 QVERIFY(filesToBeAnalyzed.contains( 0210 m_examplesPath + QString::fromUtf8("singleIssueNonAsciiFileNameḶḷambión.cpp"))); 0211 QVERIFY(filesToBeAnalyzed.contains( 0212 m_examplesPath + ".singleIssueHiddenUnixFileName.cpp")); 0213 QVERIFY(filesToBeAnalyzed.contains( 0214 m_examplesPath + "severalIssuesSingleChecker.cpp")); 0215 QVERIFY(filesToBeAnalyzed.contains( 0216 m_examplesPath + "severalIssuesSeveralCheckers.cpp")); 0217 QVERIFY(filesToBeAnalyzed.contains( 0218 m_examplesPath + "severalIssuesSeveralCheckersUnknownFileType.dqq")); 0219 QVERIFY(filesToBeAnalyzed.contains( 0220 m_examplesPath + "subdirectory/singleIssue.desktop")); 0221 QVERIFY(filesToBeAnalyzed.contains( 0222 m_examplesPath + "subdirectory/severalIssuesSeveralCheckers.qml")); 0223 } 0224 0225 void AnalysisParametersTest::testSetFilesAndDirectoriesWithInvalidEntries() { 0226 if (!examplesInSubdirectory()) { 0227 QString message = "The examples were not found in the 'examples' directory (" + m_examplesPath + ')'; 0228 QSKIP(message.toLatin1(), SkipAll); 0229 } 0230 0231 AnalysisParameters analysisparameters; 0232 0233 QStringList paths; 0234 paths.append(m_examplesPath + QString::fromUtf8("singleIssueNonAsciiFileNameḶḷambión.cpp")); 0235 paths.append(m_examplesPath + ".singleIssueHiddenUnixFileName.cpp"); 0236 paths.append("http://someServer.com/remoteFile.cpp"); 0237 paths.append(m_examplesPath + "subdirectory"); 0238 paths.append(m_examplesPath + "aFileThatDoesNotExist.cpp"); 0239 paths.append(m_examplesPath + "severalIssuesSeveralCheckers.cpp"); 0240 analysisparameters.setFilesAndDirectories(paths); 0241 0242 QCOMPARE(analysisparameters.filesAndDirectories(), paths); 0243 0244 QStringList filesToBeAnalyzed = analysisparameters.filesToBeAnalyzed(); 0245 QCOMPARE(filesToBeAnalyzed.count(), 5); 0246 QVERIFY(filesToBeAnalyzed.contains( 0247 m_examplesPath + QString::fromUtf8("singleIssueNonAsciiFileNameḶḷambión.cpp"))); 0248 QVERIFY(filesToBeAnalyzed.contains 0249 (m_examplesPath + ".singleIssueHiddenUnixFileName.cpp")); 0250 QVERIFY(filesToBeAnalyzed.contains( 0251 m_examplesPath + "subdirectory/singleIssue.desktop")); 0252 QVERIFY(filesToBeAnalyzed.contains( 0253 m_examplesPath + "subdirectory/severalIssuesSeveralCheckers.qml")); 0254 QVERIFY(filesToBeAnalyzed.contains( 0255 m_examplesPath + "severalIssuesSeveralCheckers.cpp")); 0256 } 0257 0258 ///////////////////////////////// Helpers ////////////////////////////////////// 0259 0260 QList<const Checker*> AnalysisParametersTest::createAvailableCheckers() const { 0261 QList<const Checker*> checkers; 0262 0263 auto fileType1Checker1 = new Checker(); 0264 fileType1Checker1->setFileType("fileType1"); 0265 fileType1Checker1->setName("checker1Name"); 0266 checkers.append(fileType1Checker1); 0267 0268 auto fileType1Checker2 = new Checker(); 0269 fileType1Checker2->setFileType("fileType1"); 0270 fileType1Checker2->setName("checker2Name"); 0271 checkers.append(fileType1Checker2); 0272 0273 auto fileType1ExtraChecker1 = new Checker(); 0274 fileType1ExtraChecker1->setFileType("fileType1"); 0275 fileType1ExtraChecker1->setName("extraChecker1Name"); 0276 fileType1ExtraChecker1->setExtra(true); 0277 checkers.append(fileType1ExtraChecker1); 0278 0279 auto fileType2Checker1 = new Checker(); 0280 fileType2Checker1->setFileType("fileType2"); 0281 fileType2Checker1->setName("checker1Name"); 0282 checkers.append(fileType2Checker1); 0283 0284 auto fileType2ExtraChecker1 = new Checker(); 0285 fileType2ExtraChecker1->setFileType("fileType2"); 0286 fileType2ExtraChecker1->setName("extraChecker1Name"); 0287 fileType2ExtraChecker1->setExtra(true); 0288 checkers.append(fileType2ExtraChecker1); 0289 0290 return checkers; 0291 } 0292 0293 bool AnalysisParametersTest::examplesInSubdirectory() const { 0294 if (QFile(m_examplesPath + "singleIssue.cpp").exists() && 0295 QFile(m_examplesPath + "singleExtraIssue.cpp").exists() && 0296 QFile(m_examplesPath + QString::fromUtf8("singleIssueNonAsciiFileNameḶḷambión.cpp")).exists() && 0297 QFile(m_examplesPath + ".singleIssueHiddenUnixFileName.cpp").exists() && 0298 QFile(m_examplesPath + "severalIssuesSingleChecker.cpp").exists() && 0299 QFile(m_examplesPath + "severalIssuesSeveralCheckers.cpp").exists() && 0300 QFile(m_examplesPath + "severalIssuesSeveralCheckersUnknownFileType.dqq").exists() && 0301 QFile(m_examplesPath + "subdirectory/singleIssue.desktop").exists() && 0302 QFile(m_examplesPath + "subdirectory/severalIssuesSeveralCheckers.qml").exists()) { 0303 return true; 0304 } 0305 0306 return false; 0307 } 0308 0309 QTEST_GUILESS_MAIN(AnalysisParametersTest) 0310 0311 #include "analysisparameterstest.moc"