Test class specifiers with qualified names.

This commit is contained in:
Roberto Raggi
2008-12-29 09:10:38 +01:00
parent 0185a49a78
commit 5a966f8dae
@@ -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"