summaryrefslogtreecommitdiff
path: root/tests/auto/cplusplus/findusages/tst_findusages.cpp
diff options
context:
space:
mode:
authorPrzemyslaw Gorszkowski <pgorszkowski@gmail.com>2013-06-07 08:15:19 +0200
committerErik Verbruggen <erik.verbruggen@digia.com>2013-06-17 11:04:47 +0200
commit94dd4e740a3b6acf28cd3df4015af6f612aae6d5 (patch)
tree8f05c901bfb95f7c80f652a8d099572130de1620 /tests/auto/cplusplus/findusages/tst_findusages.cpp
parentafe1d5ee654c55d720545131d408d6baf24829cb (diff)
downloadqt-creator-94dd4e740a3b6acf28cd3df4015af6f612aae6d5.tar.gz
C++: fix 'find usages' for templates
Fix find usages for template class(class name and template parameters) or template function(template parameters). Fixed: * marking * find usages * follow symbol Change-Id: I22fdbc11260cbd8ee9aafdd76aaeee0f4f49f9fd 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.cpp114
1 files changed, 113 insertions, 1 deletions
diff --git a/tests/auto/cplusplus/findusages/tst_findusages.cpp b/tests/auto/cplusplus/findusages/tst_findusages.cpp
index 18f94ce0b2..15962325e1 100644
--- a/tests/auto/cplusplus/findusages/tst_findusages.cpp
+++ b/tests/auto/cplusplus/findusages/tst_findusages.cpp
@@ -96,11 +96,14 @@ private Q_SLOTS:
void instantiateTemplateWithNestedClass();
void operatorAsteriskOfNestedClassOfTemplateClass_QTCREATORBUG9006();
void operatorArrowOfNestedClassOfTemplateClass_QTCREATORBUG9005();
+ void templateClassParameters();
+ void templateClass_className();
+ void templateFunctionParameters();
+
void anonymousClass_QTCREATORBUG8963();
void using_insideGlobalNamespace();
void using_insideNamespace();
void using_insideFunction();
-
};
void tst_FindUsages::inlineMethod()
@@ -706,5 +709,114 @@ void tst_FindUsages::operatorArrowOfNestedClassOfTemplateClass_QTCREATORBUG9005(
QCOMPARE(findUsages.usages().size(), 2);
}
+void tst_FindUsages::templateClassParameters()
+{
+ const QByteArray src = "\n"
+ "template <class T>\n"
+ "struct TS\n"
+ "{\n"
+ " void set(T t) { T t1 = t; }\n"
+ " T get();\n"
+ " T t;\n"
+ "};\n"
+ ;
+
+ Document::Ptr doc = Document::create("templateClassParameters");
+ doc->setUtf8Source(src);
+ doc->parse();
+ doc->check();
+
+ QVERIFY(doc->diagnosticMessages().isEmpty());
+ QCOMPARE(doc->globalSymbolCount(), 1U);
+
+ Snapshot snapshot;
+ snapshot.insert(doc);
+
+ Template *templateClassTS = doc->globalSymbolAt(0)->asTemplate();
+ QVERIFY(templateClassTS);
+ QCOMPARE(templateClassTS->memberCount(), 2U);
+ QCOMPARE(templateClassTS->templateParameterCount(), 1U);
+ TypenameArgument *templArgument = templateClassTS->templateParameterAt(0)->asTypenameArgument();
+ QVERIFY(templArgument);
+
+ FindUsages findUsages(src, doc, snapshot);
+ findUsages(templArgument);
+ QCOMPARE(findUsages.usages().size(), 5);
+}
+
+void tst_FindUsages::templateClass_className()
+{
+ const QByteArray src = "\n"
+ "template <class T>\n"
+ "struct TS\n"
+ "{\n"
+ " TS();\n"
+ " ~TS();\n"
+ "};\n"
+ "template <class T>\n"
+ "TS<T>::TS()\n"
+ "{\n"
+ "}\n"
+ "template <class T>\n"
+ "TS<T>::~TS()\n"
+ "{\n"
+ "}\n"
+ ;
+
+ Document::Ptr doc = Document::create("templateClass_className");
+ doc->setUtf8Source(src);
+ doc->parse();
+ doc->check();
+
+ QVERIFY(doc->diagnosticMessages().isEmpty());
+ QCOMPARE(doc->globalSymbolCount(), 3U);
+
+ Snapshot snapshot;
+ snapshot.insert(doc);
+
+ Template *templateClassTS = doc->globalSymbolAt(0)->asTemplate();
+ QVERIFY(templateClassTS);
+ Class *classTS = templateClassTS->memberAt(1)->asClass();
+ QVERIFY(classTS);
+ QCOMPARE(classTS->memberCount(), 2U);
+
+ FindUsages findUsages(src, doc, snapshot);
+ findUsages(classTS);
+ QCOMPARE(findUsages.usages().size(), 6);
+}
+
+void tst_FindUsages::templateFunctionParameters()
+{
+ const QByteArray src = "\n"
+ "template<class T>\n"
+ "T foo(T t)\n"
+ "{\n"
+ " typename T;\n"
+ "}\n"
+ ;
+
+ Document::Ptr doc = Document::create("templateFunctionParameters");
+ doc->setUtf8Source(src);
+ doc->parse();
+ doc->check();
+
+ QVERIFY(doc->diagnosticMessages().isEmpty());
+ QCOMPARE(doc->globalSymbolCount(), 1U);
+
+ Snapshot snapshot;
+ snapshot.insert(doc);
+
+ Template *templateFunctionTS = doc->globalSymbolAt(0)->asTemplate();
+ QVERIFY(templateFunctionTS);
+ QCOMPARE(templateFunctionTS->memberCount(), 2U);
+ QCOMPARE(templateFunctionTS->templateParameterCount(), 1U);
+ TypenameArgument *templArgument = templateFunctionTS->templateParameterAt(0)->asTypenameArgument();
+ QVERIFY(templArgument);
+
+ FindUsages findUsages(src, doc, snapshot);
+ findUsages(templArgument);
+ QCOMPARE(findUsages.usages().size(), 4);
+}
+
QTEST_APPLESS_MAIN(tst_FindUsages)
#include "tst_findusages.moc"