File indexing completed on 2024-05-05 04:35:29

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 <QTreeView>
0023 
0024 #include <QPushButton>
0025 
0026 #include "../settings/selectcheckerswidget.h"
0027 #include "../checker.h"
0028 
0029 class SelectCheckersWidgetTest: public QObject {
0030 Q_OBJECT
0031 private slots:
0032 
0033     void init();
0034     void cleanup();
0035 
0036     void testConstructor();
0037 
0038     void testSetCheckers();
0039 
0040     void testAddSingleChecker();
0041     void testAddSeveralCheckers();
0042 
0043     void testSelectFileTypeToAdd();
0044     void testSelectExtraHeaderToAdd();
0045 
0046     void testAddSeveralCheckersWithFileTypeAndExtraHeaderSelected();
0047 
0048     void testRemoveSingleChecker();
0049     void testRemoveSeveralCheckers();
0050 
0051     void testSelectFileTypeToRemove();
0052     void testSelectExtraHeaderToRemove();
0053 
0054     void testRemoveSeveralCheckersWithFileTypeAndExtraHeaderSelected();
0055 
0056 private:
0057 
0058     Checker* m_checker1_1;
0059     Checker* m_extraChecker1_1;
0060     Checker* m_checker2_1;
0061     Checker* m_checker2_2;
0062     Checker* m_checker2_3;
0063     Checker* m_extraChecker2_1;
0064     Checker* m_extraChecker2_2;
0065     Checker* m_extraChecker2_3;
0066     Checker* m_checker3_1;
0067     Checker* m_extraChecker4_1;
0068 
0069     QList<const Checker*> m_availableCheckers;
0070 
0071     Checker* newChecker(const QString& fileType, const QString& name,
0072                         const QString& description = "", bool extra = false) const;
0073 
0074     QTreeView* otherAvailableCheckersView(const SelectCheckersWidget* widget) const;
0075     QTreeView* checkersToRunView(const SelectCheckersWidget* widget) const;
0076     QPushButton* addButton(const SelectCheckersWidget* widget) const;
0077     QPushButton* removeButton(const SelectCheckersWidget* widget) const;
0078 
0079     void select(QTreeView* view, const QString& rows,
0080                 QItemSelectionModel::SelectionFlags command);
0081 
0082 };
0083 
0084 void SelectCheckersWidgetTest::init() {
0085     m_checker1_1 = newChecker("fileType1", "checker1-1Name", "checker1-1Description");
0086     m_availableCheckers.append(m_checker1_1);
0087     m_extraChecker1_1 = newChecker("fileType1", "extraChecker1-1Name", "extraChecker1-1Description", true);
0088     m_availableCheckers.append(m_extraChecker1_1);
0089     m_checker2_1 = newChecker("fileType2", "checker2-1Name", "checker2-1Description");
0090     m_availableCheckers.append(m_checker2_1);
0091     m_checker2_2 = newChecker("fileType2", "checker2-2Name", "checker2-2Description");
0092     m_availableCheckers.append(m_checker2_2);
0093     m_checker2_3 = newChecker("fileType2", "checker2-3Name", "checker2-3Description");
0094     m_availableCheckers.append(m_checker2_3);
0095     m_extraChecker2_1 = newChecker("fileType2", "extraChecker2-1Name", "extraChecker2-1Description", true);
0096     m_availableCheckers.append(m_extraChecker2_1);
0097     m_extraChecker2_2 = newChecker("fileType2", "extraChecker2-2Name", "extraChecker2-2Description", true);
0098     m_availableCheckers.append(m_extraChecker2_2);
0099     m_extraChecker2_3 = newChecker("fileType2", "extraChecker2-3Name", "extraChecker2-3Description", true);
0100     m_availableCheckers.append(m_extraChecker2_3);
0101     m_checker3_1 = newChecker("fileType3", "checker3-1Name", "checker3-1Description");
0102     m_availableCheckers.append(m_checker3_1);
0103     m_extraChecker4_1 = newChecker("fileType4", "extraChecker4-1Name", "extraChecker4-1Description", true);
0104     m_availableCheckers.append(m_extraChecker4_1);
0105 }
0106 
0107 void SelectCheckersWidgetTest::cleanup() {
0108     qDeleteAll(m_availableCheckers);
0109     m_availableCheckers.clear();
0110 }
0111 
0112 void SelectCheckersWidgetTest::testConstructor() {
0113     QWidget parent;
0114     SelectCheckersWidget widget(&parent);
0115 
0116     QCOMPARE(widget.parent(), &parent);
0117     QVERIFY(!otherAvailableCheckersView(&widget)->isEnabled());
0118     QVERIFY(!checkersToRunView(&widget)->isEnabled());
0119     QVERIFY(!addButton(&widget)->isEnabled());
0120     QVERIFY(!removeButton(&widget)->isEnabled());
0121 }
0122 
0123 void SelectCheckersWidgetTest::testSetCheckers() {
0124     QList<const Checker*> checkersToRun;
0125     checkersToRun.append(m_checker2_2);
0126     checkersToRun.append(m_extraChecker2_1);
0127     checkersToRun.append(m_checker3_1);
0128 
0129     SelectCheckersWidget widget;
0130     widget.setCheckers(m_availableCheckers, checkersToRun);
0131 
0132     QVERIFY(otherAvailableCheckersView(&widget)->isEnabled());
0133     QVERIFY(checkersToRunView(&widget)->isEnabled());
0134     QVERIFY(!addButton(&widget)->isEnabled());
0135     QVERIFY(!removeButton(&widget)->isEnabled());
0136 }
0137 
0138 void SelectCheckersWidgetTest::testAddSingleChecker() {
0139     QList<const Checker*> checkersToRun;
0140     checkersToRun.append(m_checker2_2);
0141     checkersToRun.append(m_extraChecker2_1);
0142     checkersToRun.append(m_checker3_1);
0143 
0144     SelectCheckersWidget widget;
0145     widget.setCheckers(m_availableCheckers, checkersToRun);
0146 
0147     QVERIFY(!addButton(&widget)->isEnabled());
0148 
0149     //checker2_1
0150     select(otherAvailableCheckersView(&widget), "1-0", QItemSelectionModel::SelectCurrent);
0151 
0152     QVERIFY(addButton(&widget)->isEnabled());
0153 
0154     addButton(&widget)->click();
0155 
0156     QVERIFY(!addButton(&widget)->isEnabled());
0157 
0158     checkersToRun = widget.checkersToRun();
0159     QCOMPARE(checkersToRun.count(), 4);
0160     QVERIFY(checkersToRun.contains(m_checker2_1));
0161     QVERIFY(checkersToRun.contains(m_checker2_2));
0162     QVERIFY(checkersToRun.contains(m_extraChecker2_1));
0163     QVERIFY(checkersToRun.contains(m_checker3_1));
0164 
0165     //checker2_3
0166     select(otherAvailableCheckersView(&widget), "1-0", QItemSelectionModel::SelectCurrent);
0167 
0168     QVERIFY(addButton(&widget)->isEnabled());
0169 
0170     addButton(&widget)->click();
0171 
0172     QVERIFY(!addButton(&widget)->isEnabled());
0173 
0174     checkersToRun = widget.checkersToRun();
0175     QCOMPARE(checkersToRun.count(), 5);
0176     QVERIFY(checkersToRun.contains(m_checker2_1));
0177     QVERIFY(checkersToRun.contains(m_checker2_2));
0178     QVERIFY(checkersToRun.contains(m_checker2_3));
0179     QVERIFY(checkersToRun.contains(m_extraChecker2_1));
0180     QVERIFY(checkersToRun.contains(m_checker3_1));
0181 }
0182 
0183 void SelectCheckersWidgetTest::testAddSeveralCheckers() {
0184     QList<const Checker*> checkersToRun;
0185     checkersToRun.append(m_checker2_2);
0186     checkersToRun.append(m_extraChecker2_1);
0187     checkersToRun.append(m_checker3_1);
0188 
0189     SelectCheckersWidget widget;
0190     widget.setCheckers(m_availableCheckers, checkersToRun);
0191 
0192     QVERIFY(!addButton(&widget)->isEnabled());
0193 
0194     //checker2_1
0195     select(otherAvailableCheckersView(&widget), "1-0", QItemSelectionModel::Select);
0196     //extraChecker2_2
0197     select(otherAvailableCheckersView(&widget), "1-2-0", QItemSelectionModel::Select);
0198     //checker1_1
0199     select(otherAvailableCheckersView(&widget), "0-0", QItemSelectionModel::Select);
0200 
0201     QVERIFY(addButton(&widget)->isEnabled());
0202 
0203     addButton(&widget)->click();
0204 
0205     QVERIFY(!addButton(&widget)->isEnabled());
0206 
0207     checkersToRun = widget.checkersToRun();
0208     QCOMPARE(checkersToRun.count(), 6);
0209     QVERIFY(checkersToRun.contains(m_checker1_1));
0210     QVERIFY(checkersToRun.contains(m_checker2_1));
0211     QVERIFY(checkersToRun.contains(m_checker2_2));
0212     QVERIFY(checkersToRun.contains(m_extraChecker2_1));
0213     QVERIFY(checkersToRun.contains(m_extraChecker2_2));
0214     QVERIFY(checkersToRun.contains(m_checker3_1));
0215 
0216     //checker2_3
0217     select(otherAvailableCheckersView(&widget), "1-0", QItemSelectionModel::Select);
0218     //extraChecker2_3
0219     select(otherAvailableCheckersView(&widget), "1-1-0", QItemSelectionModel::Select);
0220 
0221     QVERIFY(addButton(&widget)->isEnabled());
0222 
0223     addButton(&widget)->click();
0224 
0225     QVERIFY(!addButton(&widget)->isEnabled());
0226 
0227     checkersToRun = widget.checkersToRun();
0228     QCOMPARE(checkersToRun.count(), 8);
0229     QVERIFY(checkersToRun.contains(m_checker1_1));
0230     QVERIFY(checkersToRun.contains(m_checker2_1));
0231     QVERIFY(checkersToRun.contains(m_checker2_2));
0232     QVERIFY(checkersToRun.contains(m_checker2_3));
0233     QVERIFY(checkersToRun.contains(m_extraChecker2_1));
0234     QVERIFY(checkersToRun.contains(m_extraChecker2_2));
0235     QVERIFY(checkersToRun.contains(m_extraChecker2_3));
0236     QVERIFY(checkersToRun.contains(m_checker3_1));
0237 }
0238 
0239 void SelectCheckersWidgetTest::testSelectFileTypeToAdd() {
0240     QList<const Checker*> checkersToRun;
0241 
0242     SelectCheckersWidget widget;
0243     widget.setCheckers(m_availableCheckers, checkersToRun);
0244 
0245     QVERIFY(!addButton(&widget)->isEnabled());
0246     QVERIFY(!removeButton(&widget)->isEnabled());
0247 
0248     //fileType2
0249     select(otherAvailableCheckersView(&widget), "1", QItemSelectionModel::SelectCurrent);
0250 
0251     QVERIFY(!addButton(&widget)->isEnabled());
0252     QVERIFY(!removeButton(&widget)->isEnabled());
0253 
0254     //checker2_1
0255     select(otherAvailableCheckersView(&widget), "1-0", QItemSelectionModel::SelectCurrent);
0256 
0257     QVERIFY(addButton(&widget)->isEnabled());
0258     QVERIFY(!removeButton(&widget)->isEnabled());
0259 
0260     //fileType2
0261     select(otherAvailableCheckersView(&widget), "1", QItemSelectionModel::SelectCurrent);
0262 
0263     QVERIFY(!addButton(&widget)->isEnabled());
0264     QVERIFY(!removeButton(&widget)->isEnabled());
0265 }
0266 
0267 void SelectCheckersWidgetTest::testSelectExtraHeaderToAdd() {
0268     QList<const Checker*> checkersToRun;
0269 
0270     SelectCheckersWidget widget;
0271     widget.setCheckers(m_availableCheckers, checkersToRun);
0272 
0273     QVERIFY(!addButton(&widget)->isEnabled());
0274     QVERIFY(!removeButton(&widget)->isEnabled());
0275 
0276     //extraHeader2
0277     select(otherAvailableCheckersView(&widget), "1-3", QItemSelectionModel::SelectCurrent);
0278 
0279     QVERIFY(!addButton(&widget)->isEnabled());
0280     QVERIFY(!removeButton(&widget)->isEnabled());
0281 
0282     //extraChecker2_1
0283     select(otherAvailableCheckersView(&widget), "1-3-0", QItemSelectionModel::SelectCurrent);
0284 
0285     QVERIFY(addButton(&widget)->isEnabled());
0286     QVERIFY(!removeButton(&widget)->isEnabled());
0287 
0288     //extraHeader2
0289     select(otherAvailableCheckersView(&widget), "1-3", QItemSelectionModel::SelectCurrent);
0290 
0291     QVERIFY(!addButton(&widget)->isEnabled());
0292     QVERIFY(!removeButton(&widget)->isEnabled());
0293 }
0294 
0295 void SelectCheckersWidgetTest::testAddSeveralCheckersWithFileTypeAndExtraHeaderSelected() {
0296     QList<const Checker*> checkersToRun;
0297     checkersToRun.append(m_checker2_2);
0298     checkersToRun.append(m_extraChecker2_1);
0299     checkersToRun.append(m_checker3_1);
0300 
0301     SelectCheckersWidget widget;
0302     widget.setCheckers(m_availableCheckers, checkersToRun);
0303 
0304     QVERIFY(!addButton(&widget)->isEnabled());
0305 
0306     //fileType2
0307     select(otherAvailableCheckersView(&widget), "1", QItemSelectionModel::Select);
0308     //checker2_1
0309     select(otherAvailableCheckersView(&widget), "1-0", QItemSelectionModel::Select);
0310 
0311     QVERIFY(addButton(&widget)->isEnabled());
0312 
0313     addButton(&widget)->click();
0314 
0315     QVERIFY(!addButton(&widget)->isEnabled());
0316 
0317     checkersToRun = widget.checkersToRun();
0318     QCOMPARE(checkersToRun.count(), 4);
0319     QVERIFY(checkersToRun.contains(m_checker2_1));
0320     QVERIFY(checkersToRun.contains(m_checker2_2));
0321     QVERIFY(checkersToRun.contains(m_extraChecker2_1));
0322     QVERIFY(checkersToRun.contains(m_checker3_1));
0323 
0324     //checker1_1
0325     select(otherAvailableCheckersView(&widget), "0-0", QItemSelectionModel::Select);
0326     //checker2_3
0327     select(otherAvailableCheckersView(&widget), "1-0", QItemSelectionModel::Select);
0328     //extraHeader2
0329     select(otherAvailableCheckersView(&widget), "1-1", QItemSelectionModel::Select);
0330 
0331     QVERIFY(addButton(&widget)->isEnabled());
0332 
0333     addButton(&widget)->click();
0334 
0335     QVERIFY(!addButton(&widget)->isEnabled());
0336 
0337     checkersToRun = widget.checkersToRun();
0338     QCOMPARE(checkersToRun.count(), 6);
0339     QVERIFY(checkersToRun.contains(m_checker1_1));
0340     QVERIFY(checkersToRun.contains(m_checker2_1));
0341     QVERIFY(checkersToRun.contains(m_checker2_2));
0342     QVERIFY(checkersToRun.contains(m_checker2_3));
0343     QVERIFY(checkersToRun.contains(m_extraChecker2_1));
0344     QVERIFY(checkersToRun.contains(m_checker3_1));
0345 }
0346 
0347 void SelectCheckersWidgetTest::testRemoveSingleChecker() {
0348     QList<const Checker*> checkersToRun;
0349     checkersToRun.append(m_checker2_1);
0350     checkersToRun.append(m_checker2_2);
0351     checkersToRun.append(m_checker2_3);
0352     checkersToRun.append(m_extraChecker2_1);
0353     checkersToRun.append(m_checker3_1);
0354 
0355     SelectCheckersWidget widget;
0356     widget.setCheckers(m_availableCheckers, checkersToRun);
0357 
0358     QVERIFY(!removeButton(&widget)->isEnabled());
0359 
0360     //checker2_2
0361     select(checkersToRunView(&widget), "0-1", QItemSelectionModel::SelectCurrent);
0362 
0363     QVERIFY(removeButton(&widget)->isEnabled());
0364 
0365     removeButton(&widget)->click();
0366 
0367     QVERIFY(!removeButton(&widget)->isEnabled());
0368 
0369     checkersToRun = widget.checkersToRun();
0370     QCOMPARE(checkersToRun.count(), 4);
0371     QVERIFY(checkersToRun.contains(m_checker2_1));
0372     QVERIFY(checkersToRun.contains(m_checker2_3));
0373     QVERIFY(checkersToRun.contains(m_extraChecker2_1));
0374     QVERIFY(checkersToRun.contains(m_checker3_1));
0375 
0376     //checker2_3
0377     select(checkersToRunView(&widget), "0-1", QItemSelectionModel::SelectCurrent);
0378 
0379     QVERIFY(removeButton(&widget)->isEnabled());
0380 
0381     removeButton(&widget)->click();
0382 
0383     QVERIFY(!removeButton(&widget)->isEnabled());
0384 
0385     checkersToRun = widget.checkersToRun();
0386     QCOMPARE(checkersToRun.count(), 3);
0387     QVERIFY(checkersToRun.contains(m_checker2_1));
0388     QVERIFY(checkersToRun.contains(m_extraChecker2_1));
0389     QVERIFY(checkersToRun.contains(m_checker3_1));
0390 }
0391 
0392 void SelectCheckersWidgetTest::testRemoveSeveralCheckers() {
0393     QList<const Checker*> checkersToRun;
0394     checkersToRun.append(m_checker1_1);
0395     checkersToRun.append(m_checker2_1);
0396     checkersToRun.append(m_checker2_2);
0397     checkersToRun.append(m_checker2_3);
0398     checkersToRun.append(m_extraChecker2_1);
0399     checkersToRun.append(m_extraChecker2_2);
0400     checkersToRun.append(m_extraChecker2_3);
0401     checkersToRun.append(m_checker3_1);
0402 
0403     SelectCheckersWidget widget;
0404     widget.setCheckers(m_availableCheckers, checkersToRun);
0405 
0406     QVERIFY(!removeButton(&widget)->isEnabled());
0407 
0408     //checker2_2
0409     select(checkersToRunView(&widget), "1-1", QItemSelectionModel::Select);
0410     //extraChecker2_2
0411     select(checkersToRunView(&widget), "1-3-1", QItemSelectionModel::Select);
0412     //checker1_1
0413     select(checkersToRunView(&widget), "0-0", QItemSelectionModel::Select);
0414 
0415     QVERIFY(removeButton(&widget)->isEnabled());
0416 
0417     removeButton(&widget)->click();
0418 
0419     QVERIFY(!removeButton(&widget)->isEnabled());
0420 
0421     checkersToRun = widget.checkersToRun();
0422     QCOMPARE(checkersToRun.count(), 5);
0423     QVERIFY(checkersToRun.contains(m_checker2_1));
0424     QVERIFY(checkersToRun.contains(m_checker2_3));
0425     QVERIFY(checkersToRun.contains(m_extraChecker2_1));
0426     QVERIFY(checkersToRun.contains(m_extraChecker2_3));
0427     QVERIFY(checkersToRun.contains(m_checker3_1));
0428 
0429     //checker2_3
0430     select(checkersToRunView(&widget), "0-1", QItemSelectionModel::Select);
0431     //extraChecker2_3
0432     select(checkersToRunView(&widget), "0-2-1", QItemSelectionModel::Select);
0433 
0434     QVERIFY(removeButton(&widget)->isEnabled());
0435 
0436     removeButton(&widget)->click();
0437 
0438     QVERIFY(!removeButton(&widget)->isEnabled());
0439 
0440     checkersToRun = widget.checkersToRun();
0441     QCOMPARE(checkersToRun.count(), 3);
0442     QVERIFY(checkersToRun.contains(m_checker2_1));
0443     QVERIFY(checkersToRun.contains(m_extraChecker2_1));
0444     QVERIFY(checkersToRun.contains(m_checker3_1));
0445 }
0446 
0447 void SelectCheckersWidgetTest::testSelectFileTypeToRemove() {
0448     QList<const Checker*> checkersToRun;
0449     checkersToRun.append(m_checker2_2);
0450     checkersToRun.append(m_extraChecker2_1);
0451     checkersToRun.append(m_checker3_1);
0452 
0453     SelectCheckersWidget widget;
0454     widget.setCheckers(m_availableCheckers, checkersToRun);
0455 
0456     QVERIFY(!addButton(&widget)->isEnabled());
0457     QVERIFY(!removeButton(&widget)->isEnabled());
0458 
0459     //fileType2
0460     select(checkersToRunView(&widget), "0", QItemSelectionModel::SelectCurrent);
0461 
0462     QVERIFY(!addButton(&widget)->isEnabled());
0463     QVERIFY(!removeButton(&widget)->isEnabled());
0464 
0465     //checker2_2
0466     select(checkersToRunView(&widget), "0-0", QItemSelectionModel::SelectCurrent);
0467 
0468     QVERIFY(!addButton(&widget)->isEnabled());
0469     QVERIFY(removeButton(&widget)->isEnabled());
0470 
0471     //fileType2
0472     select(checkersToRunView(&widget), "0", QItemSelectionModel::SelectCurrent);
0473 
0474     QVERIFY(!addButton(&widget)->isEnabled());
0475     QVERIFY(!removeButton(&widget)->isEnabled());
0476 }
0477 
0478 void SelectCheckersWidgetTest::testSelectExtraHeaderToRemove() {
0479     QList<const Checker*> checkersToRun;
0480     checkersToRun.append(m_checker2_2);
0481     checkersToRun.append(m_extraChecker2_1);
0482     checkersToRun.append(m_checker3_1);
0483 
0484     SelectCheckersWidget widget;
0485     widget.setCheckers(m_availableCheckers, checkersToRun);
0486 
0487     QVERIFY(!addButton(&widget)->isEnabled());
0488     QVERIFY(!removeButton(&widget)->isEnabled());
0489 
0490     //extraHeader2
0491     select(checkersToRunView(&widget), "0-1", QItemSelectionModel::SelectCurrent);
0492 
0493     QVERIFY(!addButton(&widget)->isEnabled());
0494     QVERIFY(!removeButton(&widget)->isEnabled());
0495 
0496     //extraChecker2_2
0497     select(checkersToRunView(&widget), "0-1-0", QItemSelectionModel::SelectCurrent);
0498 
0499     QVERIFY(!addButton(&widget)->isEnabled());
0500     QVERIFY(removeButton(&widget)->isEnabled());
0501 
0502     //extraHeader2
0503     select(checkersToRunView(&widget), "0-1", QItemSelectionModel::SelectCurrent);
0504 
0505     QVERIFY(!addButton(&widget)->isEnabled());
0506     QVERIFY(!removeButton(&widget)->isEnabled());
0507 }
0508 
0509 void SelectCheckersWidgetTest::testRemoveSeveralCheckersWithFileTypeAndExtraHeaderSelected() {
0510     QList<const Checker*> checkersToRun;
0511     checkersToRun.append(m_checker1_1);
0512     checkersToRun.append(m_checker2_1);
0513     checkersToRun.append(m_checker2_2);
0514     checkersToRun.append(m_checker2_3);
0515     checkersToRun.append(m_extraChecker2_1);
0516     checkersToRun.append(m_checker3_1);
0517 
0518     SelectCheckersWidget widget;
0519     widget.setCheckers(m_availableCheckers, checkersToRun);
0520 
0521     QVERIFY(!removeButton(&widget)->isEnabled());
0522 
0523     //fileType2
0524     select(checkersToRunView(&widget), "1", QItemSelectionModel::Select);
0525     //checker2_2
0526     select(checkersToRunView(&widget), "1-1", QItemSelectionModel::Select);
0527 
0528     QVERIFY(removeButton(&widget)->isEnabled());
0529 
0530     removeButton(&widget)->click();
0531 
0532     QVERIFY(!removeButton(&widget)->isEnabled());
0533 
0534     checkersToRun = widget.checkersToRun();
0535     QCOMPARE(checkersToRun.count(), 5);
0536     QVERIFY(checkersToRun.contains(m_checker1_1));
0537     QVERIFY(checkersToRun.contains(m_checker2_1));
0538     QVERIFY(checkersToRun.contains(m_checker2_3));
0539     QVERIFY(checkersToRun.contains(m_extraChecker2_1));
0540     QVERIFY(checkersToRun.contains(m_checker3_1));
0541 
0542     //checker1_1
0543     select(checkersToRunView(&widget), "0-0", QItemSelectionModel::Select);
0544     //checker2_3
0545     select(checkersToRunView(&widget), "1-1", QItemSelectionModel::Select);
0546     //extraHeader2
0547     select(checkersToRunView(&widget), "1-2", QItemSelectionModel::Select);
0548 
0549     QVERIFY(removeButton(&widget)->isEnabled());
0550 
0551     removeButton(&widget)->click();
0552 
0553     QVERIFY(!removeButton(&widget)->isEnabled());
0554 
0555     checkersToRun = widget.checkersToRun();
0556     QCOMPARE(checkersToRun.count(), 3);
0557     QVERIFY(checkersToRun.contains(m_checker2_1));
0558     QVERIFY(checkersToRun.contains(m_extraChecker2_1));
0559     QVERIFY(checkersToRun.contains(m_checker3_1));
0560 }
0561 
0562 ///////////////////////////////// Helpers //////////////////////////////////////
0563 
0564 Checker* SelectCheckersWidgetTest::newChecker(const QString& fileType, const QString& name,
0565                                               const QString& description /*=""*/, bool extra /*=false*/) const {
0566     auto  checker = new Checker();
0567     checker->setFileType(fileType);
0568     checker->setName(name);
0569     checker->setDescription(description);
0570     checker->setExtra(extra);
0571 
0572     return checker;
0573 }
0574 
0575 QTreeView* SelectCheckersWidgetTest::otherAvailableCheckersView(const SelectCheckersWidget* widget) const {
0576     return widget->findChild<QTreeView*>("otherAvailableCheckersView");
0577 }
0578 
0579 QTreeView* SelectCheckersWidgetTest::checkersToRunView(const SelectCheckersWidget* widget) const {
0580     return widget->findChild<QTreeView*>("checkersToRunView");
0581 }
0582 
0583 QPushButton* SelectCheckersWidgetTest::addButton(const SelectCheckersWidget* widget) const {
0584     return widget->findChild<QPushButton*>("addButton");
0585 }
0586 
0587 QPushButton* SelectCheckersWidgetTest::removeButton(const SelectCheckersWidget* widget) const {
0588     return widget->findChild<QPushButton*>("removeButton");
0589 }
0590 
0591 void SelectCheckersWidgetTest::select(QTreeView* view, const QString& rows,
0592                                       QItemSelectionModel::SelectionFlags command) {
0593     QModelIndex index;
0594     foreach (const QString& row, rows.split('-')) {
0595         index = view->model()->index(row.toInt(), 0, index);
0596     }
0597 
0598     view->selectionModel()->select(index, command);
0599 }
0600 
0601 QTEST_MAIN(SelectCheckersWidgetTest)
0602 
0603 #include "selectcheckerswidgettest.moc"