diff options
author | Przemyslaw Gorszkowski <pgorszkowski@gmail.com> | 2014-10-07 10:01:14 +0200 |
---|---|---|
committer | Nikolai Kosjar <nikolai.kosjar@theqtcompany.com> | 2014-11-07 11:34:28 +0100 |
commit | 0ff1cba77b280030e0b59977d30ad351bc512b1c (patch) | |
tree | 1ca8dd13e9a0153db207892b34cfb5485f2d5c84 /src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp | |
parent | 2de666da613fbc5f75d5133bae9efabca0cb4b77 (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.cpp | 106 |
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"); |