From 50e4203b52e4dc5a2453aa58f8b54e6bfcd0c918 Mon Sep 17 00:00:00 2001
From: Roberto Raggi <qtc-committer@nokia.com>
Date: Mon, 22 Dec 2008 10:56:29 +0100
Subject: [PATCH] More testing

---
 .../auto/cplusplus/semantic/tst_semantic.cpp  | 66 ++++++++++++++++++-
 1 file changed, 64 insertions(+), 2 deletions(-)

diff --git a/tests/auto/cplusplus/semantic/tst_semantic.cpp b/tests/auto/cplusplus/semantic/tst_semantic.cpp
index d9200bee4b5..239fcd33556 100644
--- a/tests/auto/cplusplus/semantic/tst_semantic.cpp
+++ b/tests/auto/cplusplus/semantic/tst_semantic.cpp
@@ -8,6 +8,7 @@
 #include <Semantic.h>
 #include <Scope.h>
 #include <Symbols.h>
+#include <CoreTypes.h>
 #include <Names.h>
 #include <Literals.h>
 
@@ -66,10 +67,12 @@ public:
     }
 
 private slots:
-    void function_declarations();
+    void function_declaration_1();
+    void function_declaration_2();
+    void function_definition_1();
 };
 
-void tst_Semantic::function_declarations()
+void tst_Semantic::function_declaration_1()
 {
     QSharedPointer<Document> doc = document("void foo();");
     QCOMPARE(doc->globals->symbolCount(), 1U);
@@ -91,6 +94,65 @@ void tst_Semantic::function_declarations()
     QCOMPARE(foo, QByteArray("foo"));
 }
 
+void tst_Semantic::function_declaration_2()
+{
+    QSharedPointer<Document> doc = document("void foo(const QString &s);");
+    QCOMPARE(doc->globals->symbolCount(), 1U);
+
+    Declaration *decl = doc->globals->symbolAt(0)->asDeclaration();
+    QVERIFY(decl);
+
+    FullySpecifiedType declTy = decl->type();
+    Function *funTy = declTy->asFunction();
+    QVERIFY(funTy);
+    QVERIFY(funTy->returnType()->isVoidType());
+    QCOMPARE(funTy->argumentCount(), 1U);
+
+    // check the formal argument.
+    Argument *arg = funTy->argumentAt(0)->asArgument();
+    QVERIFY(arg);
+    QVERIFY(arg->name());
+    QVERIFY(! arg->hasInitializer());
+
+    // check the argument's name.
+    NameId *argNameId = arg->name()->asNameId();
+    QVERIFY(argNameId);
+
+    Identifier *argId = argNameId->identifier();
+    QVERIFY(argId);
+
+    QCOMPARE(QByteArray(argId->chars(), argId->size()), QByteArray("s"));
+
+    // check the type of the formal argument
+    FullySpecifiedType argTy = arg->type();
+    QVERIFY(argTy->isReferenceType());
+    QVERIFY(argTy->asReferenceType()->elementType().isConst());
+
+    QVERIFY(decl->name()->isNameId());
+    Identifier *funId = decl->name()->asNameId()->identifier();
+    QVERIFY(funId);
+
+    const QByteArray foo(funId->chars(), funId->size());
+    QCOMPARE(foo, QByteArray("foo"));
+}
+
+void tst_Semantic::function_definition_1()
+{
+    QSharedPointer<Document> doc = document("void foo() {}");
+    QCOMPARE(doc->globals->symbolCount(), 1U);
+
+    Function *funTy = doc->globals->symbolAt(0)->asFunction();
+    QVERIFY(funTy);
+    QVERIFY(funTy->returnType()->isVoidType());
+    QCOMPARE(funTy->argumentCount(), 0U);
+
+    QVERIFY(funTy->name()->isNameId());
+    Identifier *funId = funTy->name()->asNameId()->identifier();
+    QVERIFY(funId);
+
+    const QByteArray foo(funId->chars(), funId->size());
+    QCOMPARE(foo, QByteArray("foo"));
+}
 
 QTEST_APPLESS_MAIN(tst_Semantic)
 #include "tst_semantic.moc"
-- 
GitLab