File indexing completed on 2024-05-12 04:39:22
0001 /* 0002 SPDX-FileCopyrightText: 2018 Friedrich W. H. Kossebau <kossebau@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "test_checkgroup.h" 0008 0009 // SUT 0010 #include "config/checkgroup.h" 0011 // Qt 0012 #include <QTest> 0013 #include <QStandardPaths> 0014 0015 struct CheckGroupData 0016 { 0017 QString prefix; 0018 QStringList checkNames; 0019 0020 QVector<CheckGroupData> subGroups; 0021 }; 0022 Q_DECLARE_METATYPE(CheckGroupData) 0023 0024 void TestCheckGroup::initTestCase() 0025 { 0026 QStandardPaths::setTestModeEnabled(true); 0027 } 0028 0029 void TestCheckGroup::testFromPlainList_data() 0030 { 0031 QTest::addColumn<QStringList>("plainList"); 0032 QTest::addColumn<CheckGroupData>("group"); 0033 0034 QTest::newRow("empty") 0035 << QStringList() 0036 << CheckGroupData{}; 0037 QTest::newRow("fooandbarlevel1") 0038 << QStringList{"foo-one", "foo-two", "foo-two-and-half", "bar-one", "bar-two-something", "more"} 0039 << CheckGroupData{"", {"more"}, { 0040 {"foo-", {"foo-one", "foo-two", "foo-two-and-half"}, {}}, 0041 {"bar-", {"bar-one", "bar-two-something"}, {}} 0042 }}; 0043 QTest::newRow("fooandbarlevel2") 0044 << QStringList{"foo-one-two", "foo-one-three", "foo-a.two", "foo-a.three", "bar-no-way", "bar-no-sense"} 0045 << CheckGroupData{"", {}, { 0046 {"foo-", {}, { 0047 {"foo-one-", {"foo-one-two", "foo-one-three"}, {}}, 0048 {"foo-a.", {"foo-a.two", "foo-a.three"}, {}}, 0049 }}, 0050 {"bar-", {}, { 0051 {"bar-no-", {"bar-no-way", "bar-no-sense"}, {}} 0052 }} 0053 }}; 0054 } 0055 0056 void TestCheckGroup::doTestResult(const ClangTidy::CheckGroup* actualValue, const CheckGroupData& expectedValue) 0057 { 0058 QCOMPARE(actualValue->prefix(), expectedValue.prefix); 0059 0060 if (actualValue->checkNames() != expectedValue.checkNames) { 0061 qDebug() << "For checkgroup" << actualValue->prefix(); 0062 qDebug() << "Actual checknames: " << actualValue->checkNames(); 0063 qDebug() << "Expected checknames:" << expectedValue.checkNames; 0064 } 0065 QCOMPARE(actualValue->checkNames(), expectedValue.checkNames); 0066 0067 QCOMPARE(actualValue->subGroups().size(), expectedValue.subGroups.size()); 0068 0069 for (int i = 0; i < expectedValue.subGroups.size(); ++i) { 0070 const auto* actualSubGroup = actualValue->subGroups()[i]; 0071 QCOMPARE(actualSubGroup->superGroup(), actualValue); 0072 doTestResult(actualSubGroup, expectedValue.subGroups[i]); 0073 } 0074 } 0075 0076 void TestCheckGroup::testFromPlainList() 0077 { 0078 QFETCH(QStringList, plainList); 0079 QFETCH(CheckGroupData, group); 0080 0081 const ClangTidy::CheckGroup* checkGroup = ClangTidy::CheckGroup::fromPlainList(plainList); 0082 0083 doTestResult(checkGroup, group); 0084 0085 delete checkGroup; 0086 } 0087 0088 0089 struct CheckStateGroupData 0090 { 0091 int enabledChecksCount; 0092 bool hasSubGroupWithExplicitEnabledState; 0093 0094 QVector<CheckStateGroupData> subGroups; 0095 }; 0096 Q_DECLARE_METATYPE(CheckStateGroupData) 0097 0098 void TestCheckGroup::testSetEnabledChecks_data() 0099 { 0100 QTest::addColumn<QStringList>("input"); 0101 QTest::addColumn<QStringList>("result"); 0102 QTest::addColumn<CheckStateGroupData>("group"); 0103 0104 QTest::newRow("empty") 0105 << QStringList() 0106 << QStringList{"-*"} 0107 << CheckStateGroupData{0, false, { 0108 {0, false, { // foo- 0109 {0, false, {}}, // foo-one- 0110 {0, false, {}}, // foo-a. 0111 }}, 0112 {0, false, { // bar- 0113 {0, false, {}}, // bar-mo- 0114 }}, 0115 }}; 0116 0117 QTest::newRow("all") 0118 << QStringList{"*"} 0119 << QStringList{"*"} 0120 << CheckStateGroupData{7, false, { 0121 {5, false, { // foo- 0122 {2, false, {}}, // foo-one- 0123 {2, false, {}}, // foo-a. 0124 }}, 0125 {2, false, { // bar- 0126 {2, false, {}}, // bar-mo- 0127 }}, 0128 }}; 0129 0130 QTest::newRow("all-not-foo") 0131 << QStringList{"*", "-foo-*"} 0132 << QStringList{"*", "-foo-*"} 0133 << CheckStateGroupData{2, true, { 0134 {0, false, { // foo- 0135 {0, false, {}}, // foo-one- 0136 {0, false, {}}, // foo-a. 0137 }}, 0138 {2, false, { // bar- 0139 {2, false, {}}, // bar-mo- 0140 }}, 0141 }}; 0142 0143 QTest::newRow("all-not-foo-but-foo-a") 0144 << QStringList{"*", "-foo-*", "foo-a.*"} 0145 << QStringList{"*", "-foo-*", "foo-a.*"} 0146 << CheckStateGroupData{4, true, { 0147 {2, true, { // foo- 0148 {0, false, {}}, // foo-one- 0149 {2, false, {}}, // foo-a. 0150 }}, 0151 {2, false, { // bar- 0152 {2, false, {}}, // bar-mo- 0153 }}, 0154 }}; 0155 0156 QTest::newRow("all-not-foo-but-foo-a.two") 0157 << QStringList{"*", "-foo-*", "foo-a.two"} 0158 << QStringList{"*", "-foo-*", "foo-a.two"} 0159 << CheckStateGroupData{3, true, { 0160 {1, true, { // foo- 0161 {0, false, {}}, // foo-one- 0162 {1, true, {}}, // foo-a. 0163 }}, 0164 {2, false, { // bar- 0165 {2, false, {}}, // bar-mo- 0166 }}, 0167 }}; 0168 0169 QTest::newRow("nothing-but-foo-one-three") 0170 << QStringList{"-*", "foo-one-three"} 0171 << QStringList{"-*", "foo-one-three"} 0172 << CheckStateGroupData{1, true, { 0173 {1, true, { // foo- 0174 {1, true, {}}, // foo-one- 0175 {0, false, {}}, // foo-a. 0176 }}, 0177 {0, false, { // bar- 0178 {0, false, {}}, // bar-mo- 0179 }}, 0180 }}; 0181 } 0182 0183 void TestCheckGroup::doTestResult(const ClangTidy::CheckGroup* actualValue, const CheckStateGroupData& expectedValue) 0184 { 0185 if ((actualValue->enabledChecksCount() != expectedValue.enabledChecksCount) || 0186 (actualValue->hasSubGroupWithExplicitEnabledState() != expectedValue.hasSubGroupWithExplicitEnabledState)) { 0187 qDebug() << "For checkgroup" << actualValue->prefix(); 0188 qDebug() << "Actual enabledChecksCount:" << actualValue->enabledChecksCount() 0189 << "hasSubGroupWithExplicitEnabledState: " << actualValue->hasSubGroupWithExplicitEnabledState(); 0190 qDebug() << "Expected enabledChecksCount:" << expectedValue.enabledChecksCount 0191 << "hasSubGroupWithExplicitEnabledState: " << expectedValue.hasSubGroupWithExplicitEnabledState; 0192 } 0193 0194 QCOMPARE(actualValue->enabledChecksCount(), expectedValue.enabledChecksCount); 0195 QCOMPARE(actualValue->hasSubGroupWithExplicitEnabledState(), expectedValue.hasSubGroupWithExplicitEnabledState); 0196 0197 QCOMPARE(actualValue->subGroups().size(), expectedValue.subGroups.size()); 0198 0199 for (int i = 0; i < expectedValue.subGroups.size(); ++i) { 0200 const auto* actualSubGroup = actualValue->subGroups()[i]; 0201 doTestResult(actualSubGroup, expectedValue.subGroups[i]); 0202 } 0203 } 0204 0205 void TestCheckGroup::testSetEnabledChecks() 0206 { 0207 QFETCH(QStringList, input); 0208 QFETCH(QStringList, result); 0209 QFETCH(CheckStateGroupData, group); 0210 0211 ClangTidy::CheckGroup* checkGroup = ClangTidy::CheckGroup::fromPlainList({ 0212 "foo-one-two", 0213 "foo-one-three", 0214 "foo-a.two", 0215 "foo-a.three", 0216 "foo-b", 0217 "bar-no-way", 0218 "bar-no-sense"}); 0219 0220 checkGroup->setEnabledChecks(input); 0221 0222 QCOMPARE(checkGroup->enabledChecksRules(), result); 0223 0224 doTestResult(checkGroup, group); 0225 0226 delete checkGroup; 0227 } 0228 0229 0230 QTEST_GUILESS_MAIN(TestCheckGroup) 0231 0232 #include "moc_test_checkgroup.cpp"