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 <KLocalizedString> 0023 0024 #include "../checkermodel.h" 0025 #include "../checker.h" 0026 0027 class CheckerModelTest: public QObject { 0028 Q_OBJECT 0029 private slots: 0030 0031 void cleanup(); 0032 0033 void testConstructor(); 0034 0035 void testSingleFileTypeSingleChecker(); 0036 void testSingleFileTypeSingleExtraChecker(); 0037 void testSingleFileTypeSeveralCheckers(); 0038 void testSingleFileTypeSeveralExtraCheckers(); 0039 void testSingleFileTypeSeveralCheckersAndExtraCheckers(); 0040 void testSingleFileTypeSeveralCheckersAndExtraCheckersMixedOrder(); 0041 void testSeveralFileTypesSeveralCheckersAndExtraCheckers(); 0042 void testSeveralFileTypesSeveralCheckersAndExtraCheckersMixedOrder(); 0043 0044 void testToolTipDataForCheckerWithoutDescription(); 0045 0046 void testCheckerForIndex(); 0047 void testCheckerForIndexWithFileTypeIndex(); 0048 void testCheckerForIndexWithExtraHeaderIndex(); 0049 void testCheckerForIndexWithInvalidIndex(); 0050 0051 private: 0052 0053 QList<const Checker*> m_checkers; 0054 0055 Checker* newChecker(const QString& fileType, const QString& name, 0056 const QString& description = "", bool extra = false) const; 0057 0058 void assertItem(const QModelIndex& index, const QString& displayRoleData, 0059 const QString& toolTipRoleData, int childrenCount, 0060 const QModelIndex& parent) const; 0061 0062 }; 0063 0064 void CheckerModelTest::cleanup() { 0065 qDeleteAll(m_checkers); 0066 m_checkers.clear(); 0067 } 0068 0069 void CheckerModelTest::testConstructor() { 0070 QObject parent; 0071 CheckerModel checkerModel(&parent); 0072 0073 QCOMPARE(((QObject*)&checkerModel)->parent(), &parent); 0074 QCOMPARE(checkerModel.rowCount(), 0); 0075 QCOMPARE(checkerModel.columnCount(), 1); 0076 } 0077 0078 void CheckerModelTest::testSingleFileTypeSingleChecker() { 0079 m_checkers.append(newChecker("fileType", "checkerName", "checkerDescription")); 0080 0081 CheckerModel checkerModel; 0082 checkerModel.setCheckers(m_checkers); 0083 0084 QCOMPARE(checkerModel.rowCount(), 1); 0085 QCOMPARE(checkerModel.columnCount(), 1); 0086 0087 QModelIndex fileTypeIndex = checkerModel.index(0, 0); 0088 assertItem(fileTypeIndex, "fileType", "", 1, QModelIndex()); 0089 0090 QModelIndex checkerIndex = checkerModel.index(0, 0, fileTypeIndex); 0091 assertItem(checkerIndex, "checkerName", "<p>checkerDescription</p>", 0, fileTypeIndex); 0092 } 0093 0094 void CheckerModelTest::testSingleFileTypeSingleExtraChecker() { 0095 m_checkers.append(newChecker("fileType", "extraCheckerName", "extraCheckerDescription", true)); 0096 0097 CheckerModel checkerModel; 0098 checkerModel.setCheckers(m_checkers); 0099 0100 QCOMPARE(checkerModel.rowCount(), 1); 0101 QCOMPARE(checkerModel.columnCount(), 1); 0102 0103 QModelIndex fileTypeIndex = checkerModel.index(0, 0); 0104 assertItem(fileTypeIndex, "fileType", "", 1, QModelIndex()); 0105 0106 QModelIndex extraHeaderIndex = checkerModel.index(0, 0, fileTypeIndex); 0107 assertItem(extraHeaderIndex, i18nc("@item Extra Krazy2 checkers", "[EXTRA]"), "", 1, fileTypeIndex); 0108 0109 QModelIndex extraCheckerIndex = checkerModel.index(0, 0, extraHeaderIndex); 0110 assertItem(extraCheckerIndex, "extraCheckerName", "<p>extraCheckerDescription</p>", 0, extraHeaderIndex); 0111 } 0112 0113 void CheckerModelTest::testSingleFileTypeSeveralCheckers() { 0114 m_checkers.append(newChecker("fileType", "checker1Name", "checker1Description")); 0115 m_checkers.append(newChecker("fileType", "checker2Name", "checker2Description")); 0116 m_checkers.append(newChecker("fileType", "checker3Name", "checker3Description")); 0117 0118 CheckerModel checkerModel; 0119 checkerModel.setCheckers(m_checkers); 0120 0121 QCOMPARE(checkerModel.rowCount(), 1); 0122 QCOMPARE(checkerModel.columnCount(), 1); 0123 0124 QModelIndex fileTypeIndex = checkerModel.index(0, 0); 0125 assertItem(fileTypeIndex, "fileType", "", 3, QModelIndex()); 0126 0127 QModelIndex checker1Index = checkerModel.index(0, 0, fileTypeIndex); 0128 assertItem(checker1Index, "checker1Name", "<p>checker1Description</p>", 0, fileTypeIndex); 0129 0130 QModelIndex checker2Index = checkerModel.index(1, 0, fileTypeIndex); 0131 assertItem(checker2Index, "checker2Name", "<p>checker2Description</p>", 0, fileTypeIndex); 0132 0133 QModelIndex checker3Index = checkerModel.index(2, 0, fileTypeIndex); 0134 assertItem(checker3Index, "checker3Name", "<p>checker3Description</p>", 0, fileTypeIndex); 0135 } 0136 0137 void CheckerModelTest::testSingleFileTypeSeveralExtraCheckers() { 0138 m_checkers.append(newChecker("fileType", "extraChecker1Name", "extraChecker1Description", true)); 0139 m_checkers.append(newChecker("fileType", "extraChecker2Name", "extraChecker2Description", true)); 0140 m_checkers.append(newChecker("fileType", "extraChecker3Name", "extraChecker3Description", true)); 0141 0142 CheckerModel checkerModel; 0143 checkerModel.setCheckers(m_checkers); 0144 0145 QCOMPARE(checkerModel.rowCount(), 1); 0146 QCOMPARE(checkerModel.columnCount(), 1); 0147 0148 QModelIndex fileTypeIndex = checkerModel.index(0, 0); 0149 assertItem(fileTypeIndex, "fileType", "", 1, QModelIndex()); 0150 0151 QModelIndex extraHeaderIndex = checkerModel.index(0, 0, fileTypeIndex); 0152 assertItem(extraHeaderIndex, i18nc("@item Extra Krazy2 checkers", "[EXTRA]"), "", 3, fileTypeIndex); 0153 0154 QModelIndex extraChecker1Index = checkerModel.index(0, 0, extraHeaderIndex); 0155 assertItem(extraChecker1Index, "extraChecker1Name", "<p>extraChecker1Description</p>", 0, extraHeaderIndex); 0156 0157 QModelIndex extraChecker2Index = checkerModel.index(1, 0, extraHeaderIndex); 0158 assertItem(extraChecker2Index, "extraChecker2Name", "<p>extraChecker2Description</p>", 0, extraHeaderIndex); 0159 0160 QModelIndex extraChecker3Index = checkerModel.index(2, 0, extraHeaderIndex); 0161 assertItem(extraChecker3Index, "extraChecker3Name", "<p>extraChecker3Description</p>", 0, extraHeaderIndex); 0162 } 0163 0164 void CheckerModelTest::testSingleFileTypeSeveralCheckersAndExtraCheckers() { 0165 m_checkers.append(newChecker("fileType", "checker1Name", "checker1Description")); 0166 m_checkers.append(newChecker("fileType", "checker2Name", "checker2Description")); 0167 m_checkers.append(newChecker("fileType", "checker3Name", "checker3Description")); 0168 m_checkers.append(newChecker("fileType", "extraChecker1Name", "extraChecker1Description", true)); 0169 m_checkers.append(newChecker("fileType", "extraChecker2Name", "extraChecker2Description", true)); 0170 m_checkers.append(newChecker("fileType", "extraChecker3Name", "extraChecker3Description", true)); 0171 0172 CheckerModel checkerModel; 0173 checkerModel.setCheckers(m_checkers); 0174 0175 QCOMPARE(checkerModel.rowCount(), 1); 0176 QCOMPARE(checkerModel.columnCount(), 1); 0177 0178 QModelIndex fileTypeIndex = checkerModel.index(0, 0); 0179 assertItem(fileTypeIndex, "fileType", "", 4, QModelIndex()); 0180 0181 QModelIndex checker1Index = checkerModel.index(0, 0, fileTypeIndex); 0182 assertItem(checker1Index, "checker1Name", "<p>checker1Description</p>", 0, fileTypeIndex); 0183 0184 QModelIndex checker2Index = checkerModel.index(1, 0, fileTypeIndex); 0185 assertItem(checker2Index, "checker2Name", "<p>checker2Description</p>", 0, fileTypeIndex); 0186 0187 QModelIndex checker3Index = checkerModel.index(2, 0, fileTypeIndex); 0188 assertItem(checker3Index, "checker3Name", "<p>checker3Description</p>", 0, fileTypeIndex); 0189 0190 QModelIndex extraHeaderIndex = checkerModel.index(3, 0, fileTypeIndex); 0191 assertItem(extraHeaderIndex, i18nc("@item Extra Krazy2 checkers", "[EXTRA]"), "", 3, fileTypeIndex); 0192 0193 QModelIndex extraChecker1Index = checkerModel.index(0, 0, extraHeaderIndex); 0194 assertItem(extraChecker1Index, "extraChecker1Name", "<p>extraChecker1Description</p>", 0, extraHeaderIndex); 0195 0196 QModelIndex extraChecker2Index = checkerModel.index(1, 0, extraHeaderIndex); 0197 assertItem(extraChecker2Index, "extraChecker2Name", "<p>extraChecker2Description</p>", 0, extraHeaderIndex); 0198 0199 QModelIndex extraChecker3Index = checkerModel.index(2, 0, extraHeaderIndex); 0200 assertItem(extraChecker3Index, "extraChecker3Name", "<p>extraChecker3Description</p>", 0, extraHeaderIndex); 0201 } 0202 0203 void CheckerModelTest::testSingleFileTypeSeveralCheckersAndExtraCheckersMixedOrder() { 0204 m_checkers.append(newChecker("fileType", "checker2Name", "checker2Description")); 0205 m_checkers.append(newChecker("fileType", "extraChecker3Name", "extraChecker3Description", true)); 0206 m_checkers.append(newChecker("fileType", "extraChecker1Name", "extraChecker1Description", true)); 0207 m_checkers.append(newChecker("fileType", "checker1Name", "checker1Description")); 0208 m_checkers.append(newChecker("fileType", "checker3Name", "checker3Description")); 0209 m_checkers.append(newChecker("fileType", "extraChecker2Name", "extraChecker2Description", true)); 0210 0211 CheckerModel checkerModel; 0212 checkerModel.setCheckers(m_checkers); 0213 0214 QCOMPARE(checkerModel.rowCount(), 1); 0215 QCOMPARE(checkerModel.columnCount(), 1); 0216 0217 QModelIndex fileTypeIndex = checkerModel.index(0, 0); 0218 assertItem(fileTypeIndex, "fileType", "", 4, QModelIndex()); 0219 0220 QModelIndex checker1Index = checkerModel.index(0, 0, fileTypeIndex); 0221 assertItem(checker1Index, "checker1Name", "<p>checker1Description</p>", 0, fileTypeIndex); 0222 0223 QModelIndex checker2Index = checkerModel.index(1, 0, fileTypeIndex); 0224 assertItem(checker2Index, "checker2Name", "<p>checker2Description</p>", 0, fileTypeIndex); 0225 0226 QModelIndex checker3Index = checkerModel.index(2, 0, fileTypeIndex); 0227 assertItem(checker3Index, "checker3Name", "<p>checker3Description</p>", 0, fileTypeIndex); 0228 0229 QModelIndex extraHeaderIndex = checkerModel.index(3, 0, fileTypeIndex); 0230 assertItem(extraHeaderIndex, i18nc("@item Extra Krazy2 checkers", "[EXTRA]"), "", 3, fileTypeIndex); 0231 0232 QModelIndex extraChecker1Index = checkerModel.index(0, 0, extraHeaderIndex); 0233 assertItem(extraChecker1Index, "extraChecker1Name", "<p>extraChecker1Description</p>", 0, extraHeaderIndex); 0234 0235 QModelIndex extraChecker2Index = checkerModel.index(1, 0, extraHeaderIndex); 0236 assertItem(extraChecker2Index, "extraChecker2Name", "<p>extraChecker2Description</p>", 0, extraHeaderIndex); 0237 0238 QModelIndex extraChecker3Index = checkerModel.index(2, 0, extraHeaderIndex); 0239 assertItem(extraChecker3Index, "extraChecker3Name", "<p>extraChecker3Description</p>", 0, extraHeaderIndex); 0240 } 0241 0242 void CheckerModelTest::testSeveralFileTypesSeveralCheckersAndExtraCheckers() { 0243 m_checkers.append(newChecker("fileType1", "checker1-1Name", "checker1-1Description")); 0244 m_checkers.append(newChecker("fileType1", "extraChecker1-1Name", "extraChecker1-1Description", true)); 0245 m_checkers.append(newChecker("fileType2", "checker2-1Name", "checker2-1Description")); 0246 m_checkers.append(newChecker("fileType2", "checker2-2Name", "checker2-2Description")); 0247 m_checkers.append(newChecker("fileType2", "checker2-3Name", "checker2-3Description")); 0248 m_checkers.append(newChecker("fileType2", "extraChecker2-1Name", "extraChecker2-1Description", true)); 0249 m_checkers.append(newChecker("fileType2", "extraChecker2-2Name", "extraChecker2-2Description", true)); 0250 m_checkers.append(newChecker("fileType2", "extraChecker2-3Name", "extraChecker2-3Description", true)); 0251 m_checkers.append(newChecker("fileType3", "checker3-1Name", "checker3-1Description")); 0252 m_checkers.append(newChecker("fileType3", "checker3-2Name", "checker3-2Description")); 0253 m_checkers.append(newChecker("fileType3", "checker3-3Name", "checker3-3Description")); 0254 0255 CheckerModel checkerModel; 0256 checkerModel.setCheckers(m_checkers); 0257 0258 QCOMPARE(checkerModel.rowCount(), 3); 0259 QCOMPARE(checkerModel.columnCount(), 1); 0260 0261 QModelIndex fileType1Index = checkerModel.index(0, 0); 0262 assertItem(fileType1Index, "fileType1", "", 2, QModelIndex()); 0263 0264 QModelIndex checker1_1Index = checkerModel.index(0, 0, fileType1Index); 0265 assertItem(checker1_1Index, "checker1-1Name", "<p>checker1-1Description</p>", 0, fileType1Index); 0266 0267 QModelIndex extraHeader1Index = checkerModel.index(1, 0, fileType1Index); 0268 assertItem(extraHeader1Index, i18nc("@item Extra Krazy2 checkers", "[EXTRA]"), "", 1, fileType1Index); 0269 0270 QModelIndex extraChecker1_1Index = checkerModel.index(0, 0, extraHeader1Index); 0271 assertItem(extraChecker1_1Index, "extraChecker1-1Name", "<p>extraChecker1-1Description</p>", 0, extraHeader1Index); 0272 0273 QModelIndex fileType2Index = checkerModel.index(1, 0); 0274 assertItem(fileType2Index, "fileType2", "", 4, QModelIndex()); 0275 0276 QModelIndex checker2_1Index = checkerModel.index(0, 0, fileType2Index); 0277 assertItem(checker2_1Index, "checker2-1Name", "<p>checker2-1Description</p>", 0, fileType2Index); 0278 0279 QModelIndex checker2_2Index = checkerModel.index(1, 0, fileType2Index); 0280 assertItem(checker2_2Index, "checker2-2Name", "<p>checker2-2Description</p>", 0, fileType2Index); 0281 0282 QModelIndex checker2_3Index = checkerModel.index(2, 0, fileType2Index); 0283 assertItem(checker2_3Index, "checker2-3Name", "<p>checker2-3Description</p>", 0, fileType2Index); 0284 0285 QModelIndex extraHeader2Index = checkerModel.index(3, 0, fileType2Index); 0286 assertItem(extraHeader2Index, i18nc("@item Extra Krazy2 checkers", "[EXTRA]"), "", 3, fileType2Index); 0287 0288 QModelIndex extraChecker2_1Index = checkerModel.index(0, 0, extraHeader2Index); 0289 assertItem(extraChecker2_1Index, "extraChecker2-1Name", "<p>extraChecker2-1Description</p>", 0, extraHeader2Index); 0290 0291 QModelIndex extraChecker2_2Index = checkerModel.index(1, 0, extraHeader2Index); 0292 assertItem(extraChecker2_2Index, "extraChecker2-2Name", "<p>extraChecker2-2Description</p>", 0, extraHeader2Index); 0293 0294 QModelIndex extraChecker2_3Index = checkerModel.index(2, 0, extraHeader2Index); 0295 assertItem(extraChecker2_3Index, "extraChecker2-3Name", "<p>extraChecker2-3Description</p>", 0, extraHeader2Index); 0296 0297 QModelIndex fileType3Index = checkerModel.index(2, 0); 0298 assertItem(fileType3Index, "fileType3", "", 3, QModelIndex()); 0299 0300 QModelIndex checker3_1Index = checkerModel.index(0, 0, fileType3Index); 0301 assertItem(checker3_1Index, "checker3-1Name", "<p>checker3-1Description</p>", 0, fileType3Index); 0302 0303 QModelIndex checker3_2Index = checkerModel.index(1, 0, fileType3Index); 0304 assertItem(checker3_2Index, "checker3-2Name", "<p>checker3-2Description</p>", 0, fileType3Index); 0305 0306 QModelIndex checker3_3Index = checkerModel.index(2, 0, fileType3Index); 0307 assertItem(checker3_3Index, "checker3-3Name", "<p>checker3-3Description</p>", 0, fileType3Index); 0308 } 0309 0310 void CheckerModelTest::testSeveralFileTypesSeveralCheckersAndExtraCheckersMixedOrder() { 0311 m_checkers.append(newChecker("fileType2", "extraChecker2-1Name", "extraChecker2-1Description", true)); 0312 m_checkers.append(newChecker("fileType1", "checker1-1Name", "checker1-1Description")); 0313 m_checkers.append(newChecker("fileType2", "checker2-2Name", "checker2-2Description")); 0314 m_checkers.append(newChecker("fileType3", "checker3-1Name", "checker3-1Description")); 0315 m_checkers.append(newChecker("fileType1", "extraChecker1-1Name", "extraChecker1-1Description", true)); 0316 m_checkers.append(newChecker("fileType2", "checker2-1Name", "checker2-1Description")); 0317 m_checkers.append(newChecker("fileType2", "checker2-3Name", "checker2-3Description")); 0318 m_checkers.append(newChecker("fileType2", "extraChecker2-2Name", "extraChecker2-2Description", true)); 0319 m_checkers.append(newChecker("fileType3", "checker3-3Name", "checker3-3Description")); 0320 m_checkers.append(newChecker("fileType2", "extraChecker2-3Name", "extraChecker2-3Description", true)); 0321 m_checkers.append(newChecker("fileType3", "checker3-2Name", "checker3-2Description")); 0322 0323 CheckerModel checkerModel; 0324 checkerModel.setCheckers(m_checkers); 0325 0326 QCOMPARE(checkerModel.rowCount(), 3); 0327 QCOMPARE(checkerModel.columnCount(), 1); 0328 0329 QModelIndex fileType1Index = checkerModel.index(0, 0); 0330 assertItem(fileType1Index, "fileType1", "", 2, QModelIndex()); 0331 0332 QModelIndex checker1_1Index = checkerModel.index(0, 0, fileType1Index); 0333 assertItem(checker1_1Index, "checker1-1Name", "<p>checker1-1Description</p>", 0, fileType1Index); 0334 0335 QModelIndex extraHeader1Index = checkerModel.index(1, 0, fileType1Index); 0336 assertItem(extraHeader1Index, i18nc("@item Extra Krazy2 checkers", "[EXTRA]"), "", 1, fileType1Index); 0337 0338 QModelIndex extraChecker1_1Index = checkerModel.index(0, 0, extraHeader1Index); 0339 assertItem(extraChecker1_1Index, "extraChecker1-1Name", "<p>extraChecker1-1Description</p>", 0, extraHeader1Index); 0340 0341 QModelIndex fileType2Index = checkerModel.index(1, 0); 0342 assertItem(fileType2Index, "fileType2", "", 4, QModelIndex()); 0343 0344 QModelIndex checker2_1Index = checkerModel.index(0, 0, fileType2Index); 0345 assertItem(checker2_1Index, "checker2-1Name", "<p>checker2-1Description</p>", 0, fileType2Index); 0346 0347 QModelIndex checker2_2Index = checkerModel.index(1, 0, fileType2Index); 0348 assertItem(checker2_2Index, "checker2-2Name", "<p>checker2-2Description</p>", 0, fileType2Index); 0349 0350 QModelIndex checker2_3Index = checkerModel.index(2, 0, fileType2Index); 0351 assertItem(checker2_3Index, "checker2-3Name", "<p>checker2-3Description</p>", 0, fileType2Index); 0352 0353 QModelIndex extraHeader2Index = checkerModel.index(3, 0, fileType2Index); 0354 assertItem(extraHeader2Index, i18nc("@item Extra Krazy2 checkers", "[EXTRA]"), "", 3, fileType2Index); 0355 0356 QModelIndex extraChecker2_1Index = checkerModel.index(0, 0, extraHeader2Index); 0357 assertItem(extraChecker2_1Index, "extraChecker2-1Name", "<p>extraChecker2-1Description</p>", 0, extraHeader2Index); 0358 0359 QModelIndex extraChecker2_2Index = checkerModel.index(1, 0, extraHeader2Index); 0360 assertItem(extraChecker2_2Index, "extraChecker2-2Name", "<p>extraChecker2-2Description</p>", 0, extraHeader2Index); 0361 0362 QModelIndex extraChecker2_3Index = checkerModel.index(2, 0, extraHeader2Index); 0363 assertItem(extraChecker2_3Index, "extraChecker2-3Name", "<p>extraChecker2-3Description</p>", 0, extraHeader2Index); 0364 0365 QModelIndex fileType3Index = checkerModel.index(2, 0); 0366 assertItem(fileType3Index, "fileType3", "", 3, QModelIndex()); 0367 0368 QModelIndex checker3_1Index = checkerModel.index(0, 0, fileType3Index); 0369 assertItem(checker3_1Index, "checker3-1Name", "<p>checker3-1Description</p>", 0, fileType3Index); 0370 0371 QModelIndex checker3_2Index = checkerModel.index(1, 0, fileType3Index); 0372 assertItem(checker3_2Index, "checker3-2Name", "<p>checker3-2Description</p>", 0, fileType3Index); 0373 0374 QModelIndex checker3_3Index = checkerModel.index(2, 0, fileType3Index); 0375 assertItem(checker3_3Index, "checker3-3Name", "<p>checker3-3Description</p>", 0, fileType3Index); 0376 } 0377 0378 void CheckerModelTest::testToolTipDataForCheckerWithoutDescription() { 0379 m_checkers.append(newChecker("fileType", "checkerName")); 0380 0381 CheckerModel checkerModel; 0382 checkerModel.setCheckers(m_checkers); 0383 0384 QModelIndex fileTypeIndex = checkerModel.index(0, 0); 0385 QModelIndex checkerIndex = checkerModel.index(0, 0, fileTypeIndex); 0386 assertItem(checkerIndex, "checkerName", 0387 i18nc("@info:tooltip The underlying command did not provide a text output", 0388 "Sorry, no description given"), 0, fileTypeIndex); 0389 } 0390 0391 void CheckerModelTest::testCheckerForIndex() { 0392 Checker* checker1_1 = newChecker("fileType1", "checker1-1Name", "checker1-1Description"); 0393 m_checkers.append(checker1_1); 0394 Checker* extraChecker1_1 = newChecker("fileType1", "extraChecker1-1Name", "extraChecker1-1Description", true); 0395 m_checkers.append(extraChecker1_1); 0396 m_checkers.append(newChecker("fileType2", "checker2-1Name", "checker2-1Description")); 0397 m_checkers.append(newChecker("fileType2", "checker2-2Name", "checker2-2Description")); 0398 Checker* checker2_3 = newChecker("fileType2", "checker2-3Name", "checker2-3Description"); 0399 m_checkers.append(checker2_3); 0400 m_checkers.append(newChecker("fileType2", "extraChecker2-1Name", "extraChecker2-1Description", true)); 0401 Checker* extraChecker2_2 = newChecker("fileType2", "extraChecker2-2Name", "extraChecker2-2Description", true); 0402 m_checkers.append(extraChecker2_2); 0403 m_checkers.append(newChecker("fileType2", "extraChecker2-3Name", "extraChecker2-3Description", true)); 0404 m_checkers.append(newChecker("fileType3", "checker3-1Name", "checker3-1Description")); 0405 Checker* checker3_2 = newChecker("fileType3", "checker3-2Name", "checker3-2Description"); 0406 m_checkers.append(checker3_2); 0407 m_checkers.append(newChecker("fileType3", "checker3-3Name", "checker3-3Description")); 0408 0409 CheckerModel checkerModel; 0410 checkerModel.setCheckers(m_checkers); 0411 0412 QModelIndex fileType1Index = checkerModel.index(0, 0); 0413 QModelIndex checker1_1Index = checkerModel.index(0, 0, fileType1Index); 0414 QCOMPARE(checkerModel.checkerForIndex(checker1_1Index), checker1_1); 0415 0416 QModelIndex extraHeader1Index = checkerModel.index(1, 0, fileType1Index); 0417 QModelIndex extraChecker1_1Index = checkerModel.index(0, 0, extraHeader1Index); 0418 QCOMPARE(checkerModel.checkerForIndex(extraChecker1_1Index), extraChecker1_1); 0419 0420 QModelIndex fileType2Index = checkerModel.index(1, 0); 0421 QModelIndex checker2_3Index = checkerModel.index(2, 0, fileType2Index); 0422 QCOMPARE(checkerModel.checkerForIndex(checker2_3Index), checker2_3); 0423 0424 QModelIndex extraHeader2Index = checkerModel.index(3, 0, fileType2Index); 0425 QModelIndex extraChecker2_2Index = checkerModel.index(1, 0, extraHeader2Index); 0426 QCOMPARE(checkerModel.checkerForIndex(extraChecker2_2Index), extraChecker2_2); 0427 0428 QModelIndex fileType3Index = checkerModel.index(2, 0); 0429 QModelIndex checker3_2Index = checkerModel.index(1, 0, fileType3Index); 0430 QCOMPARE(checkerModel.checkerForIndex(checker3_2Index), checker3_2); 0431 } 0432 0433 void CheckerModelTest::testCheckerForIndexWithFileTypeIndex() { 0434 m_checkers.append(newChecker("fileType1", "checker1-1Name", "checker1-1Description")); 0435 m_checkers.append(newChecker("fileType1", "extraChecker1-1Name", "extraChecker1-1Description", true)); 0436 m_checkers.append(newChecker("fileType2", "checker2-1Name", "checker2-1Description")); 0437 m_checkers.append(newChecker("fileType3", "checker3-1Name", "checker3-1Description")); 0438 m_checkers.append(newChecker("fileType3", "checker3-2Name", "checker3-2Description")); 0439 0440 CheckerModel checkerModel; 0441 checkerModel.setCheckers(m_checkers); 0442 0443 QModelIndex fileType1Index = checkerModel.index(0, 0); 0444 QCOMPARE(checkerModel.checkerForIndex(fileType1Index), (Checker*)nullptr); 0445 0446 QModelIndex fileType2Index = checkerModel.index(1, 0); 0447 QCOMPARE(checkerModel.checkerForIndex(fileType2Index), (Checker*)nullptr); 0448 0449 QModelIndex fileType3Index = checkerModel.index(2, 0); 0450 QCOMPARE(checkerModel.checkerForIndex(fileType3Index), (Checker*)nullptr); 0451 } 0452 0453 void CheckerModelTest::testCheckerForIndexWithExtraHeaderIndex() { 0454 m_checkers.append(newChecker("fileType1", "checker1-1Name", "checker1-1Description")); 0455 m_checkers.append(newChecker("fileType1", "extraChecker1-1Name", "extraChecker1-1Description", true)); 0456 m_checkers.append(newChecker("fileType2", "extraChecker2-1Name", "extraChecker2-1Description", true)); 0457 m_checkers.append(newChecker("fileType2", "extraChecker2-2Name", "extraChecker2-2Description", true)); 0458 m_checkers.append(newChecker("fileType2", "extraChecker2-3Name", "extraChecker2-3Description", true)); 0459 m_checkers.append(newChecker("fileType3", "checker3-1Name", "checker3-1Description")); 0460 0461 CheckerModel checkerModel; 0462 checkerModel.setCheckers(m_checkers); 0463 0464 QModelIndex fileType1Index = checkerModel.index(0, 0); 0465 QModelIndex extraHeader1Index = checkerModel.index(1, 0, fileType1Index); 0466 QCOMPARE(checkerModel.checkerForIndex(extraHeader1Index), (Checker*)nullptr); 0467 0468 QModelIndex fileType2Index = checkerModel.index(1, 0); 0469 QModelIndex extraHeader2Index = checkerModel.index(0, 0, fileType2Index); 0470 QCOMPARE(checkerModel.checkerForIndex(extraHeader2Index), (Checker*)nullptr); 0471 } 0472 0473 void CheckerModelTest::testCheckerForIndexWithInvalidIndex() { 0474 m_checkers.append(newChecker("fileType1", "checker1-1Name", "checker1-1Description")); 0475 m_checkers.append(newChecker("fileType2", "extraChecker2-1Name", "extraChecker2-1Description", true)); 0476 m_checkers.append(newChecker("fileType3", "checker3-1Name", "checker3-1Description")); 0477 0478 CheckerModel checkerModel; 0479 checkerModel.setCheckers(m_checkers); 0480 0481 QCOMPARE(checkerModel.checkerForIndex(checkerModel.index(4, 0)), (Checker*)nullptr); 0482 QCOMPARE(checkerModel.checkerForIndex(checkerModel.index(0, 8)), (Checker*)nullptr); 0483 0484 QModelIndex fileType1Index = checkerModel.index(0, 0); 0485 QCOMPARE(checkerModel.checkerForIndex(checkerModel.index(15, 0, fileType1Index)), (Checker*)nullptr); 0486 0487 QModelIndex fileType2Index = checkerModel.index(1, 0); 0488 QModelIndex extraHeader2Index = checkerModel.index(0, 0, fileType2Index); 0489 QCOMPARE(checkerModel.checkerForIndex(checkerModel.index(16, 0, extraHeader2Index)), (Checker*)nullptr); 0490 } 0491 0492 ///////////////////////////////// Helpers ////////////////////////////////////// 0493 0494 Checker* CheckerModelTest::newChecker(const QString& fileType, const QString& name, 0495 const QString& description /*=""*/, bool extra /*=false*/) const { 0496 auto checker = new Checker(); 0497 checker->setFileType(fileType); 0498 checker->setName(name); 0499 checker->setDescription(description); 0500 checker->setExtra(extra); 0501 0502 return checker; 0503 } 0504 0505 void CheckerModelTest::assertItem(const QModelIndex& index, 0506 const QString& displayRoleData, 0507 const QString& toolTipRoleData, 0508 int childrenCount, 0509 const QModelIndex& parent) const { 0510 const QAbstractItemModel* model = index.model(); 0511 0512 QVERIFY(index.isValid()); 0513 QCOMPARE(model->data(index, Qt::DisplayRole).toString(), displayRoleData); 0514 QCOMPARE(model->data(index, Qt::ToolTipRole).toString(), toolTipRoleData); 0515 QCOMPARE(model->flags(index), Qt::ItemIsEnabled | Qt::ItemIsSelectable); 0516 QCOMPARE(model->parent(index), parent); 0517 QCOMPARE(model->rowCount(index), childrenCount); 0518 QCOMPARE(model->columnCount(index), 1); 0519 } 0520 0521 QTEST_GUILESS_MAIN(CheckerModelTest) 0522 0523 #include "checkermodeltest.moc"