summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorPrzemyslaw Gorszkowski <pgorszkowski@gmail.com>2013-08-11 22:10:26 +0200
committerErik Verbruggen <erik.verbruggen@digia.com>2013-08-20 14:13:19 +0200
commit3256b7b2ef7073264af3197bdcd62f4f9fe92ea1 (patch)
tree08037f987683a69e8549e16427778f2d25669c21 /tests
parent9de44134c0bf0af7f04384581fdc3cb268e65a81 (diff)
downloadqt-creator-3256b7b2ef7073264af3197bdcd62f4f9fe92ea1.tar.gz
C++: fix matching type with using from other namespace
example code: struct S { int s; }; namespace std { template <typename T> struct shared_ptr { T* operator->(); }; } namespace NS { using std::shared_ptr; } int main() { NS::shared_ptr<S> p;// for this shared_ptr return 0; } Fixes: * find usages * follow symbol * highlighting * marking Task-number: QTCREATORBUG-7978 Change-Id: I28994c960b87ddd400e1d7b860fca6c6683bbb5a Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/cplusplus/checksymbols/tst_checksymbols.cpp37
-rw-r--r--tests/auto/cplusplus/findusages/tst_findusages.cpp41
2 files changed, 78 insertions, 0 deletions
diff --git a/tests/auto/cplusplus/checksymbols/tst_checksymbols.cpp b/tests/auto/cplusplus/checksymbols/tst_checksymbols.cpp
index 75ae38c87d..0b00c25adf 100644
--- a/tests/auto/cplusplus/checksymbols/tst_checksymbols.cpp
+++ b/tests/auto/cplusplus/checksymbols/tst_checksymbols.cpp
@@ -201,6 +201,7 @@ private slots:
void test_alias_decl_QTCREATORBUG9386();
void test_completion_enum_inside_block_inside_function_QTCREATORBUG5456();
void test_completion_enum_inside_function_QTCREATORBUG5456();
+ void test_completion_using_inside_different_namespace_QTCREATORBUG7978();
};
void tst_CheckSymbols::test_checksymbols_TypeUse()
@@ -1821,5 +1822,41 @@ void tst_CheckSymbols::test_completion_enum_inside_function_QTCREATORBUG5456()
TestData::check(source, expectedUses);
}
+void tst_CheckSymbols::test_completion_using_inside_different_namespace_QTCREATORBUG7978()
+{
+ const QByteArray source =
+ "struct S {};\n"
+ "namespace std\n"
+ "{\n"
+ " template <typename T> struct shared_ptr{};\n"
+ "}\n"
+ "namespace NS\n"
+ "{\n"
+ " using std::shared_ptr;\n"
+ "}\n"
+ "void fun()\n"
+ "{\n"
+ " NS::shared_ptr<S> p;\n"
+ "}\n"
+ ;
+
+ const QList<Use> expectedUses = QList<Use>()
+ << Use(1, 8, 1, CppHighlightingSupport::TypeUse)
+ << Use(2, 11, 3, CppHighlightingSupport::TypeUse)
+ << Use(4, 24, 1, CppHighlightingSupport::TypeUse)
+ << Use(4, 34, 10, CppHighlightingSupport::TypeUse)
+ << Use(6, 11, 2, CppHighlightingSupport::TypeUse)
+ << Use(8, 11, 3, CppHighlightingSupport::TypeUse)
+ << Use(8, 16, 10, CppHighlightingSupport::TypeUse)
+ << Use(10, 6, 3, CppHighlightingSupport::FunctionUse)
+ << Use(12, 5, 2, CppHighlightingSupport::TypeUse)
+ << Use(12, 9, 10, CppHighlightingSupport::TypeUse)
+ << Use(12, 20, 1, CppHighlightingSupport::TypeUse)
+ << Use(12, 23, 1, CppHighlightingSupport::LocalUse)
+ ;
+
+ TestData::check(source, expectedUses);
+}
+
QTEST_APPLESS_MAIN(tst_CheckSymbols)
#include "tst_checksymbols.moc"
diff --git a/tests/auto/cplusplus/findusages/tst_findusages.cpp b/tests/auto/cplusplus/findusages/tst_findusages.cpp
index 9ab9d41af8..afc8ba35bb 100644
--- a/tests/auto/cplusplus/findusages/tst_findusages.cpp
+++ b/tests/auto/cplusplus/findusages/tst_findusages.cpp
@@ -108,6 +108,8 @@ private Q_SLOTS:
void using_insideNamespace();
void using_insideFunction();
void templatedFunction_QTCREATORBUG9749();
+
+ void usingInDifferentNamespace_QTCREATORBUG7978();
};
void tst_FindUsages::dump(const QList<Usage> &usages) const
@@ -866,5 +868,44 @@ void tst_FindUsages::templatedFunction_QTCREATORBUG9749()
QCOMPARE(findUsages.usages().size(), 2);
}
+void tst_FindUsages::usingInDifferentNamespace_QTCREATORBUG7978()
+{
+ const QByteArray src = "\n"
+ "struct S {};\n"
+ "namespace std\n"
+ "{\n"
+ " template <typename T> struct shared_ptr{};\n"
+ "}\n"
+ "namespace NS\n"
+ "{\n"
+ " using std::shared_ptr;\n"
+ "}\n"
+ "void fun()\n"
+ "{\n"
+ " NS::shared_ptr<S> p;\n"
+ "}\n"
+ ;
+
+ Document::Ptr doc = Document::create("usingInDifferentNamespace_QTCREATORBUG7978");
+ doc->setUtf8Source(src);
+ doc->parse();
+ doc->check();
+
+ QVERIFY(doc->diagnosticMessages().isEmpty());
+ QCOMPARE(doc->globalSymbolCount(), 4U);
+
+ Snapshot snapshot;
+ snapshot.insert(doc);
+
+ Namespace *ns = doc->globalSymbolAt(1)->asNamespace();
+ QVERIFY(ns);
+ QCOMPARE(ns->memberCount(), 1U);
+ Template *templateClass = ns->memberAt(0)->asTemplate();
+
+ FindUsages findUsages(src, doc, snapshot);
+ findUsages(templateClass);
+ QCOMPARE(findUsages.usages().size(), 3);
+}
+
QTEST_APPLESS_MAIN(tst_FindUsages)
#include "tst_findusages.moc"