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