summaryrefslogtreecommitdiff
path: root/tests/auto/cplusplus/findusages/tst_findusages.cpp
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/auto/cplusplus/findusages/tst_findusages.cpp
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/auto/cplusplus/findusages/tst_findusages.cpp')
-rw-r--r--tests/auto/cplusplus/findusages/tst_findusages.cpp41
1 files changed, 41 insertions, 0 deletions
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"