From 1f61dbc3802b73f5ec31a629ff22c92fa01164b1 Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Mon, 26 Oct 2009 15:00:56 +0100
Subject: [PATCH] Test GenTemplateInstance.

---
 .../auto/cplusplus/semantic/tst_semantic.cpp  | 28 +++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/tests/auto/cplusplus/semantic/tst_semantic.cpp b/tests/auto/cplusplus/semantic/tst_semantic.cpp
index cf2f6e23180..4e1586e68b5 100644
--- a/tests/auto/cplusplus/semantic/tst_semantic.cpp
+++ b/tests/auto/cplusplus/semantic/tst_semantic.cpp
@@ -12,6 +12,8 @@
 #include <Names.h>
 #include <Literals.h>
 #include <DiagnosticClient.h>
+#include <GenTemplateInstance.h>
+#include <Overview.h>
 
 using namespace CPlusPlus;
 
@@ -101,6 +103,8 @@ private slots:
     void const_1();
     void const_2();
     void pointer_to_function_1();
+
+    void template_instance_1();
 };
 
 void tst_Semantic::function_declaration_1()
@@ -389,5 +393,29 @@ void tst_Semantic::pointer_to_function_1()
     QCOMPARE(funTy->scope(), decl->scope());
 }
 
+void tst_Semantic::template_instance_1()
+{
+    QSharedPointer<Document> doc = document("void append(const _Tp &value);");
+    QCOMPARE(doc->errorCount, 0U);
+    QCOMPARE(doc->globals->symbolCount(), 1U);
+
+    Declaration *decl = doc->globals->symbolAt(0)->asDeclaration();
+    QVERIFY(decl);
+
+    GenTemplateInstance::Substitution subst;
+    Name *nameTp = control.nameId(control.findOrInsertIdentifier("_Tp"));
+    FullySpecifiedType intTy(control.integerType(IntegerType::Int));
+    subst.append(qMakePair(nameTp, intTy));
+
+    GenTemplateInstance inst(&control, subst);
+    FullySpecifiedType genTy = inst(decl->type());
+
+    Overview oo;
+    oo.setShowReturnTypes(true);
+
+    const QString genDecl = oo.prettyType(genTy);
+    QCOMPARE(genDecl, QString::fromLatin1("void(const int &)"));
+}
+
 QTEST_APPLESS_MAIN(tst_Semantic)
 #include "tst_semantic.moc"
-- 
GitLab