From 5a966f8daea84e65ea5384b119f12016ac8ba8d2 Mon Sep 17 00:00:00 2001
From: Roberto Raggi <qtc-committer@nokia.com>
Date: Mon, 29 Dec 2008 09:10:38 +0100
Subject: [PATCH] Test class specifiers with qualified names.

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

diff --git a/tests/auto/cplusplus/semantic/tst_semantic.cpp b/tests/auto/cplusplus/semantic/tst_semantic.cpp
index 30cbc73fc01..e36aba6cbc4 100644
--- a/tests/auto/cplusplus/semantic/tst_semantic.cpp
+++ b/tests/auto/cplusplus/semantic/tst_semantic.cpp
@@ -70,6 +70,7 @@ private slots:
     void function_declaration_1();
     void function_declaration_2();
     void function_definition_1();
+    void nested_class_1();
 };
 
 void tst_Semantic::function_declaration_1()
@@ -161,5 +162,51 @@ void tst_Semantic::function_definition_1()
     QCOMPARE(foo, QByteArray("foo"));
 }
 
+void tst_Semantic::nested_class_1()
+{
+    QSharedPointer<Document> doc = document(
+"class Object {\n"
+"    class Data;\n"
+"    Data *d;\n"
+"};\n"
+"class Object::Data {\n"
+"   Object *q;\n"
+"};\n"
+    );
+    QCOMPARE(doc->globals->symbolCount(), 2U);
+
+    Class *classObject = doc->globals->symbolAt(0)->asClass();
+    QVERIFY(classObject);
+    QVERIFY(classObject->name());
+    NameId *classObjectNameId = classObject->name()->asNameId();
+    QVERIFY(classObjectNameId);
+    Identifier *objectId = classObjectNameId->identifier();
+    QCOMPARE(QByteArray(objectId->chars(), objectId->size()), QByteArray("Object"));
+    QCOMPARE(classObject->baseClassCount(), 0U);
+    QEXPECT_FAIL("", "Requires support for forward classes", Continue);
+    QCOMPARE(classObject->members()->symbolCount(), 2U);
+
+    Class *classObjectData = doc->globals->symbolAt(1)->asClass();
+    QVERIFY(classObjectData);
+    QVERIFY(classObjectData->name());
+    QualifiedNameId *q = classObjectData->name()->asQualifiedNameId();
+    QVERIFY(q);
+    QCOMPARE(q->nameCount(), 2U);
+    QVERIFY(q->nameAt(0)->asNameId());
+    QVERIFY(q->nameAt(1)->asNameId());
+    QCOMPARE(q->nameAt(0), classObject->name());
+    QCOMPARE(doc->globals->lookat(q->nameAt(0)->asNameId()->identifier()), classObject);
+
+    Declaration *decl = classObjectData->memberAt(0)->asDeclaration();
+    QVERIFY(decl);
+    PointerType *ptrTy = decl->type()->asPointerType();
+    QVERIFY(ptrTy);
+    NamedType *namedTy = ptrTy->elementType()->asNamedType();
+    QVERIFY(namedTy);
+    QVERIFY(namedTy->name()->asNameId());
+    QCOMPARE(namedTy->name()->asNameId()->identifier(), objectId);
+}
+
+
 QTEST_APPLESS_MAIN(tst_Semantic)
 #include "tst_semantic.moc"
-- 
GitLab