aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp
diff options
context:
space:
mode:
authorPrzemyslaw Gorszkowski <pgorszkowski@gmail.com>2014-10-07 10:01:14 +0200
committerNikolai Kosjar <nikolai.kosjar@theqtcompany.com>2014-11-07 11:34:28 +0100
commit0ff1cba77b280030e0b59977d30ad351bc512b1c (patch)
tree1ca8dd13e9a0153db207892b34cfb5485f2d5c84 /src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp
parent2de666da613fbc5f75d5133bae9efabca0cb4b77 (diff)
C++: fix follow symbol for const arguments
Fixed case: class Foo {}; void foo(int v) {} void foo(const char *v) {} void foo(const Foo &v) {} void foo(char v) {} void test() { foo(5); foo("hoo"); foo('a'); char *var = "var"; foo(var); // Jumps to last override, regardless of its type Foo f; foo(f); // Jumps to last override } Task-number: QTCREATORBUG-13128 Change-Id: I038553bb3bdbe1c300fc01573c14b6fedf0320cd Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Diffstat (limited to 'src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp')
-rw-r--r--src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp106
1 files changed, 67 insertions, 39 deletions
diff --git a/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp b/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp
index 811552971f..2637efc51d 100644
--- a/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp
+++ b/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp
@@ -931,45 +931,6 @@ void CppEditorPlugin::test_FollowSymbolUnderCursor_data()
"};\n"
);
- QTest::newRow("matchFunctionSignature_FollowCall_1") << _(
- "class Bar {};\n"
- "void $foo(int) {}\n"
- "void foo(const char *) {}\n"
- "void foo(const Bar &) {}\n"
- "void foo(char) {}\n"
- "\n"
- "void t()\n"
- "{\n"
- " @foo(5);\n"
- "}\n"
- );
-
- QTest::newRow("matchFunctionSignature_FollowCall_2") << _(
- "class Bar {};\n"
- "void foo(int) {}\n"
- "void $foo(const char *) {}\n"
- "void foo(const Bar &) {}\n"
- "void foo(char) {}\n"
- "\n"
- "void t()\n"
- "{\n"
- " @foo(\"hoo\");\n"
- "}\n"
- );
-
- QTest::newRow("matchFunctionSignature_FollowCall_3") << _(
- "class Bar {};\n"
- "void foo(int) {}\n"
- "void foo(const char *) {}\n"
- "void foo(const Bar &) {}\n"
- "void $foo(char) {}\n"
- "\n"
- "void t()\n"
- "{\n"
- " @foo('a');\n"
- "}\n"
- );
-
QTest::newRow("infiniteLoopLocalTypedef_QTCREATORBUG-11999") << _(
"template<class MyTree>\n"
"class TreeConstIterator\n"
@@ -993,6 +954,73 @@ void CppEditorPlugin::test_FollowSymbolUnderCursor()
F2TestCase(F2TestCase::FollowSymbolUnderCursorAction, singleDocument(source));
}
+void CppEditorPlugin::test_FollowSymbolUnderCursor_followCall_data()
+{
+ QTest::addColumn<QByteArray>("variableDeclaration"); // without semicolon, can be ""
+ QTest::addColumn<QByteArray>("callArgument");
+ QTest::addColumn<QByteArray>("expectedSignature"); // you might need to add a function
+ // declaration with such a signature
+
+ QTest::newRow("intLiteral-to-int")
+ << _("")
+ << _("5")
+ << _("int");
+ QTest::newRow("charLiteral-to-const-char-ptr")
+ << _("")
+ << _("\"hoo\"")
+ << _("const char *");
+ QTest::newRow("charLiteral-to-int")
+ << _("")
+ << _("'a'")
+ << _("char");
+
+ QTest::newRow("charPtr-to-constCharPtr")
+ << _("char *var = \"var\"")
+ << _("var")
+ << _("const char *");
+ QTest::newRow("charPtr-to-constCharPtr")
+ << _("char *var = \"var\"")
+ << _("var")
+ << _("const char *");
+ QTest::newRow("constCharPtr-to-constCharPtr")
+ << _("const char *var = \"var\"")
+ << _("var")
+ << _("const char *");
+
+ QTest::newRow("Bar-to-constBarRef")
+ << _("Bar var")
+ << _("var")
+ << _("const Bar &");
+}
+
+void CppEditorPlugin::test_FollowSymbolUnderCursor_followCall()
+{
+ QFETCH(QByteArray, variableDeclaration);
+ QFETCH(QByteArray, callArgument);
+ QFETCH(QByteArray, expectedSignature);
+
+ const QByteArray templateSource =
+ "class Bar {};\n"
+ "void fun(int);\n"
+ "void fun(const char *);\n"
+ "void fun(const Bar &);\n"
+ "void fun(char);\n"
+ "void fun(double);\n"
+ "\n"
+ "void t()\n"
+ "{\n"
+ " " + variableDeclaration + ";\n"
+ " @fun(" + callArgument + ");\n"
+ "}\n";
+
+ const QByteArray matchText = " fun(" + expectedSignature + ")";
+ const QByteArray replaceText = " $fun(" + expectedSignature + ")";
+ QByteArray source = templateSource;
+ source.replace(matchText, replaceText);
+ QVERIFY(source != templateSource);
+ F2TestCase(F2TestCase::FollowSymbolUnderCursorAction, singleDocument(source));
+}
+
void CppEditorPlugin::test_FollowSymbolUnderCursor_multipleDocuments_data()
{
QTest::addColumn<QList<TestDocumentPtr> >("documents");