diff --git a/plugins/clang/tests/test_codecompletion.cpp b/plugins/clang/tests/test_codecompletion.cpp --- a/plugins/clang/tests/test_codecompletion.cpp +++ b/plugins/clang/tests/test_codecompletion.cpp @@ -1115,8 +1115,19 @@ { QFETCH(QString, code); QFETCH(CompletionItems, expectedItems); - - executeCompletionTest(code, expectedItems); + QFETCH(QStringList, hints); + + executeCompletionTest(code, expectedItems, NoMacroOrBuiltin, [&](const ClangCodeCompletionItemTester& tester) { + QStringList actualHints; + for (const auto& item : tester.items) { + if (item->argumentHintDepth() == 1) { + actualHints << tester.itemData(item).toString() + tester.itemData(item, KTextEditor:: CodeCompletionModel::Arguments).toString(); + } + } + actualHints.sort(); + hints.sort(); + QCOMPARE(actualHints, hints); + }); } void TestCodeCompletion::testArgumentHintCompletion_data() @@ -1127,46 +1138,70 @@ QTest::addColumn("code"); QTest::addColumn("expectedItems"); + QTest::addColumn("hints"); QTest::newRow("global function") << "void foo(int);\n" "int main() { \nfoo( " << CompletionItems{{2,4}, { "foo", "foo", "main" - }}; + }} + << QStringList{"foo(int)"}; QTest::newRow("member function") << "struct Struct{ void foo(int);}\n" "int main() {Struct s; \ns.foo( " << CompletionItems{{2,6}, { "Struct", "foo", "main", "s" - }}; + }} + << QStringList{"foo(int)"}; QTest::newRow("template function") << "template void foo(T);\n" "int main() { \nfoo( " << CompletionItems{{2,6}, { "foo", "foo", "main" - }}; + }} + << QStringList{"foo(T)"}; QTest::newRow("overloaded functions") << "void foo(int); void foo(int, double)\n" "int main() { \nfoo( " << CompletionItems{{2,6}, { "foo", "foo", "foo", "foo", "main" - }}; + }} + << QStringList{"foo(int)", "foo(int, double)"}; QTest::newRow("overloaded functions2") << "void foo(int); void foo(int, double)\n" "int main() { foo(1,\n " << CompletionItems{{2,1}, { "foo", "foo", "foo", "main" - }}; + }} + << QStringList{"foo(int, double)"}; + + QTest::newRow("constructor") + << "struct foo { foo(int); foo(int, double); }\n" + "int main() { foo f(\n " + << CompletionItems{{2,1}, { + "f", "foo", "foo", "foo", "foo", "foo", + "main" + }} + << QStringList{"foo(int)", "foo(int, double)", "foo(foo &&)", "foo(const foo &)"}; + + QTest::newRow("constructor2") + << "struct foo { foo(int); foo(int, double); }\n" + "int main() { foo f(1,\n " + << CompletionItems{{2,1}, { + "f", "foo", "foo", + "main" + }} + << QStringList{"foo(int, double)"}; } void TestCodeCompletion::testArgumentHintCompletionDefaultParameters()