diff options
author | Przemyslaw Gorszkowski <pgorszkowski@gmail.com> | 2013-07-04 09:09:35 +0200 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@digia.com> | 2013-07-12 16:12:59 +0200 |
commit | 3cde52846eceba5ee89b2c1d6816d1b97add1ccb (patch) | |
tree | 92559c57b01f3d906fbc17f7451ac3a4de99a618 /src/plugins/cpptools/cppcompletion_test.cpp | |
parent | 43a3334347b66621fc5ebcc3cc7527ba6a645577 (diff) | |
download | qt-creator-3cde52846eceba5ee89b2c1d6816d1b97add1ccb.tar.gz |
C++: fix local types and members
It fixes code model when we have local type which contains a member
of other type, e.g.:
struct OtherType { int otherTypeMember; };
void foo()
{
struct LocalType
{
int localTypeMember;
OtherType ot;
};
LocalType lt;
lt.ot.//no code completion
}
Change-Id: I018f492a6c48bfcbba0ef376ef005825e2b13f35
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
Diffstat (limited to 'src/plugins/cpptools/cppcompletion_test.cpp')
-rw-r--r-- | src/plugins/cpptools/cppcompletion_test.cpp | 202 |
1 files changed, 202 insertions, 0 deletions
diff --git a/src/plugins/cpptools/cppcompletion_test.cpp b/src/plugins/cpptools/cppcompletion_test.cpp index 01c8072cf3..3486b2466a 100644 --- a/src/plugins/cpptools/cppcompletion_test.cpp +++ b/src/plugins/cpptools/cppcompletion_test.cpp @@ -2825,3 +2825,205 @@ void CppToolsPlugin::test_completion_lambdaCalls_5() QVERIFY(completions.contains(QLatin1String("S"))); QVERIFY(completions.contains(QLatin1String("bar"))); } + +void CppToolsPlugin::test_completion_local_type_and_member_1() +{ + TestData data; + data.srcText = + "struct OtherType { int otherTypeMember; };\n" + "void foo()\n" + "{\n" + " struct LocalType\n" + " {\n" + " int localTypeMember;\n" + " OtherType ot;\n" + " };\n" + " LocalType lt;\n" + " @\n" + " // padding so we get the scope right\n" + "}\n" + ; + setup(&data); + + Utils::ChangeSet change; + QString txt = QLatin1String("lt.ot."); + change.insert(data.pos, txt); + QTextCursor cursor(data.doc); + change.apply(&cursor); + data.pos += txt.length(); + + QStringList completions = getCompletions(data); + + QCOMPARE(completions.size(), 2); + QVERIFY(completions.contains(QLatin1String("OtherType"))); + QVERIFY(completions.contains(QLatin1String("otherTypeMember"))); +} + +void CppToolsPlugin::test_completion_local_type_and_member_2() +{ + TestData data; + data.srcText = + "void foo()\n" + "{\n" + " struct OtherType { int otherTypeMember; };\n" + " struct LocalType\n" + " {\n" + " int localTypeMember;\n" + " OtherType ot;\n" + " };\n" + " LocalType lt;\n" + " @\n" + " // padding so we get the scope right\n" + "}\n" + ; + setup(&data); + + Utils::ChangeSet change; + QString txt = QLatin1String("lt.ot."); + change.insert(data.pos, txt); + QTextCursor cursor(data.doc); + change.apply(&cursor); + data.pos += txt.length(); + + QStringList completions = getCompletions(data); + + QCOMPARE(completions.size(), 2); + QVERIFY(completions.contains(QLatin1String("OtherType"))); + QVERIFY(completions.contains(QLatin1String("otherTypeMember"))); +} + +void CppToolsPlugin::test_completion_local_type_and_member_3() +{ + TestData data; + data.srcText = + "void foo()\n" + "{\n" + " struct OtherType { int otherTypeMember; };\n" + " {\n" + " struct LocalType\n" + " {\n" + " int localTypeMember;\n" + " OtherType ot;\n" + " };\n" + " LocalType lt;\n" + " @\n" + " // padding so we get the scope right\n" + " }\n" + "}\n" + ; + setup(&data); + + Utils::ChangeSet change; + QString txt = QLatin1String("lt.ot."); + change.insert(data.pos, txt); + QTextCursor cursor(data.doc); + change.apply(&cursor); + data.pos += txt.length(); + + QStringList completions = getCompletions(data); + + QCOMPARE(completions.size(), 2); + QVERIFY(completions.contains(QLatin1String("OtherType"))); + QVERIFY(completions.contains(QLatin1String("otherTypeMember"))); +} + +void CppToolsPlugin::test_completion_local_type_and_member_4() +{ + TestData data; + data.srcText = + "namespace NS {struct OtherType { int otherTypeMember; };}\n" + "void foo()\n" + "{\n" + " struct LocalType\n" + " {\n" + " int localTypeMember;\n" + " NS::OtherType ot;\n" + " };\n" + " LocalType lt;\n" + " @\n" + " // padding so we get the scope right\n" + "}\n" + ; + setup(&data); + + Utils::ChangeSet change; + QString txt = QLatin1String("lt.ot."); + change.insert(data.pos, txt); + QTextCursor cursor(data.doc); + change.apply(&cursor); + data.pos += txt.length(); + + QStringList completions = getCompletions(data); + + QCOMPARE(completions.size(), 2); + QVERIFY(completions.contains(QLatin1String("OtherType"))); + QVERIFY(completions.contains(QLatin1String("otherTypeMember"))); +} + +void CppToolsPlugin::test_completion_local_type_and_member_5() +{ + TestData data; + data.srcText = + "namespace NS {struct OtherType { int otherTypeMember; };}\n" + "void foo()\n" + "{\n" + " using namespace NS;\n" + " struct LocalType\n" + " {\n" + " int localTypeMember;\n" + " OtherType ot;\n" + " };\n" + " LocalType lt;\n" + " @\n" + " // padding so we get the scope right\n" + "}\n" + ; + setup(&data); + + Utils::ChangeSet change; + QString txt = QLatin1String("lt.ot."); + change.insert(data.pos, txt); + QTextCursor cursor(data.doc); + change.apply(&cursor); + data.pos += txt.length(); + + QStringList completions = getCompletions(data); + + QCOMPARE(completions.size(), 2); + QVERIFY(completions.contains(QLatin1String("OtherType"))); + QVERIFY(completions.contains(QLatin1String("otherTypeMember"))); +} + +void CppToolsPlugin::test_completion_local_type_and_member_6() +{ + TestData data; + data.srcText = + "namespace NS {struct OtherType { int otherTypeMember; };}\n" + "void foo()\n" + "{\n" + " using NS::OtherType;\n" + " struct LocalType\n" + " {\n" + " int localTypeMember;\n" + " OtherType ot;\n" + " };\n" + " LocalType lt;\n" + " @\n" + " // padding so we get the scope right\n" + "}\n" + ; + setup(&data); + + Utils::ChangeSet change; + QString txt = QLatin1String("lt.ot."); + change.insert(data.pos, txt); + QTextCursor cursor(data.doc); + change.apply(&cursor); + data.pos += txt.length(); + + QStringList completions = getCompletions(data); + + QCOMPARE(completions.size(), 2); + QVERIFY(completions.contains(QLatin1String("OtherType"))); + QVERIFY(completions.contains(QLatin1String("otherTypeMember"))); +} |