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"