File indexing completed on 2024-05-12 04:39:23
0001 /* 0002 SPDX-FileCopyrightText: 2016 Carlos Nihelton <carlosnsoliveira@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "test_replacementparser.h" 0008 0009 // SUT 0010 #include "parsers/replacementparser.h" 0011 // KDevPlatform 0012 #include <tests/autotestshell.h> 0013 #include <tests/testcore.h> 0014 // Qt 0015 #include <QTest> 0016 0017 using namespace KDevelop; 0018 using namespace ClangTidy; 0019 0020 void ReplacementsParserTester::initTestCase() 0021 { 0022 // Called before the first testfunction is executed 0023 AutoTestShell::init({ "kdevclangtidy" }); 0024 TestCore::initialize(Core::NoUi); 0025 } 0026 0027 void ReplacementsParserTester::cleanupTestCase() 0028 { 0029 // Called after the last testfunction was executed 0030 TestCore::shutdown(); 0031 } 0032 0033 void ReplacementsParserTester::doTest() 0034 { 0035 ReplacementParser parser("data/plugin.cpp.yaml", "data/plugin.cpp"); 0036 parser.parse(); 0037 auto v = parser.allReplacements(); 0038 0039 QVERIFY(!v.isEmpty()); 0040 QCOMPARE(v.length(), static_cast<int>(parser.count())); 0041 0042 QCOMPARE(v[0].range.document.str(), QStringLiteral("data/plugin.cpp")); 0043 QCOMPARE(v[0].offset, size_t(6263)); 0044 QCOMPARE(v[0].length, size_t(1)); 0045 QCOMPARE(v[0].replacementText, QString()); 0046 QCOMPARE(v[0].range.start().line() + 1, 155); // as would appear in editor. 0047 QCOMPARE(v[0].range.start().column() + 1, 9); // as would appear in editor. 0048 0049 QCOMPARE(v[1].range.document.str(), QStringLiteral("data/plugin.cpp")); 0050 QCOMPARE(v[1].offset, size_t(6267)); 0051 QCOMPARE(v[1].length, size_t(0)); 0052 QCOMPARE(v[1].replacementText, QString(" == nullptr")); 0053 QCOMPARE(v[1].range.start().line() + 1, 155); 0054 QCOMPARE(v[1].range.start().column() + 1, 13); 0055 0056 QCOMPARE(v[2].range.document.str(), QStringLiteral("data/plugin.cpp")); 0057 QCOMPARE(v[2].offset, size_t(6561)); 0058 QCOMPARE(v[2].length, size_t(1)); 0059 QCOMPARE(v[2].replacementText, QString()); 0060 QCOMPARE(v[2].range.start().line() + 1, 162); 0061 QCOMPARE(v[2].range.start().column() + 1, 9); 0062 0063 QCOMPARE(v[3].range.document.str(), QStringLiteral("data/plugin.cpp")); 0064 QCOMPARE(v[3].offset, size_t(6569)); 0065 QCOMPARE(v[3].length, size_t(0)); 0066 QCOMPARE(v[3].replacementText, QStringLiteral(" == nullptr")); 0067 QCOMPARE(v[3].range.start().line() + 1, 162); 0068 QCOMPARE(v[3].range.start().column() + 1, 17); 0069 0070 QCOMPARE(v[4].range.document.str(), QStringLiteral("data/plugin.cpp")); 0071 QCOMPARE(v[4].offset, size_t(7233)); 0072 QCOMPARE(v[4].length, size_t(69)); 0073 QCOMPARE(v[4].replacementText, QStringLiteral("// TODO(cnihelton): auto detect clang-tidy executable" 0074 " instead of hard-coding it.")); 0075 QCOMPARE(v[4].range.start().line() + 1, 181); 0076 QCOMPARE(v[4].range.start().column() + 1, 5); 0077 0078 QCOMPARE(v[5].range.document.str(), QStringLiteral("data/plugin.cpp")); 0079 QCOMPARE(v[5].offset, size_t(8800)); 0080 QCOMPARE(v[5].length, size_t(4)); 0081 QCOMPARE(v[5].replacementText, QStringLiteral("auto ")); 0082 QCOMPARE(v[5].range.start().line() + 1, 210); 0083 QCOMPARE(v[5].range.start().column() + 1, 9); 0084 0085 QCOMPARE(v[6].range.document.str(), QStringLiteral("data/plugin.cpp")); 0086 QCOMPARE(v[6].offset, size_t(8945)); 0087 QCOMPARE(v[6].length, size_t(4)); 0088 QCOMPARE(v[6].replacementText, QStringLiteral("auto ")); 0089 QCOMPARE(v[6].range.start().line() + 1, 214); 0090 QCOMPARE(v[6].range.start().column() + 1, 5); 0091 0092 QCOMPARE(v[7].range.document.str(), QStringLiteral("data/plugin.cpp")); 0093 QCOMPARE(v[7].offset, size_t(9406)); 0094 QCOMPARE(v[7].length, size_t(1)); 0095 QCOMPARE(v[7].replacementText, QString()); 0096 QCOMPARE(v[7].range.start().line() + 1, 238); 0097 QCOMPARE(v[7].range.start().column() + 1, 9); 0098 0099 // Invalid stuff. 0100 // Modified the plugin.cpp.yaml file to try to cause and exception during parsing. 0101 // Added three lines from other file, which goes beyond the end of the plugin.cpp file in the last offsets. 0102 // The parser didn't throw exception event though it might have generated empty ranges for the last replacements. 0103 // And also invalidates the generated replacement. 0104 QVERIFY(!v[15].range.isValid()); 0105 QCOMPARE(v[15].range.document.str(), QStringLiteral("")); 0106 QCOMPARE(v[15].offset, size_t(0)); 0107 QCOMPARE(v[15].length, size_t(0)); 0108 QCOMPARE(v[15].replacementText, QString()); 0109 QCOMPARE(v[15].range.start().line() + 1, 0); 0110 QCOMPARE(v[15].range.start().column() + 1, 0); 0111 0112 // testing multibyte chars in source code. 0113 ReplacementParser nihonParser("data/nihon_plugin.cpp.yaml", "data/nihon_plugin.cpp"); 0114 nihonParser.parse(); 0115 auto nv = nihonParser.allReplacements(); 0116 QVERIFY(!nv.isEmpty()); 0117 QCOMPARE(nv.length(), static_cast<int>(nihonParser.count())); 0118 0119 QCOMPARE(nv[0].range.document.str(), QStringLiteral("data/nihon_plugin.cpp")); 0120 QCOMPARE(nv[0].offset, size_t(10165)); 0121 QCOMPARE(nv[0].length, size_t(1)); 0122 QCOMPARE(nv[0].replacementText, QString()); 0123 QCOMPARE(nv[0].range.start().line() + 1, 288); 0124 QCOMPARE(nv[0].range.start().column() + 1, 9); 0125 0126 QCOMPARE(nv[1].range.document.str(), QStringLiteral("data/nihon_plugin.cpp")); 0127 QCOMPARE(nv[1].offset, size_t(10169)); 0128 QCOMPARE(nv[1].length, size_t(0)); 0129 QCOMPARE(nv[1].replacementText, QStringLiteral(" == nullptr")); 0130 QCOMPARE(nv[1].range.start().line() + 1, 288); 0131 QCOMPARE(nv[1].range.start().column() + 1, 13); 0132 0133 QCOMPARE(nv[2].range.document.str(), QStringLiteral("data/nihon_plugin.cpp")); 0134 QCOMPARE(nv[2].offset, size_t(10463)); 0135 QCOMPARE(nv[2].length, size_t(1)); 0136 QCOMPARE(nv[2].replacementText, QString()); 0137 QCOMPARE(nv[2].range.start().line() + 1, 295); 0138 QCOMPARE(nv[2].range.start().column() + 1, 9); 0139 0140 QCOMPARE(nv[3].range.document.str(), QStringLiteral("data/nihon_plugin.cpp")); 0141 QCOMPARE(nv[3].offset, size_t(10471)); 0142 QCOMPARE(nv[3].length, size_t(0)); 0143 QCOMPARE(nv[3].replacementText, QStringLiteral(" == nullptr")); 0144 QCOMPARE(nv[3].range.start().line() + 1, 295); 0145 QCOMPARE(nv[3].range.start().column() + 1, 17); 0146 0147 QCOMPARE(nv[4].range.document.str(), QStringLiteral("data/nihon_plugin.cpp")); 0148 QCOMPARE(nv[4].offset, size_t(11135)); 0149 QCOMPARE(nv[4].length, size_t(69)); 0150 QCOMPARE(nv[4].replacementText, QStringLiteral("// TODO(cnihelton): auto detect clang-tidy executable " 0151 "instead of hard-coding it.")); 0152 QCOMPARE(nv[4].range.start().line() + 1, 314); 0153 QCOMPARE(nv[4].range.start().column() + 1, 5); 0154 } 0155 0156 QTEST_GUILESS_MAIN(ReplacementsParserTester); 0157 0158 #include "moc_test_replacementparser.cpp"