Skip to content
Snippets Groups Projects
Commit 5a966f8d authored by Roberto Raggi's avatar Roberto Raggi
Browse files

Test class specifiers with qualified names.

parent 0185a49a
No related branches found
No related tags found
No related merge requests found
...@@ -70,6 +70,7 @@ private slots: ...@@ -70,6 +70,7 @@ private slots:
void function_declaration_1(); void function_declaration_1();
void function_declaration_2(); void function_declaration_2();
void function_definition_1(); void function_definition_1();
void nested_class_1();
}; };
void tst_Semantic::function_declaration_1() void tst_Semantic::function_declaration_1()
...@@ -161,5 +162,51 @@ void tst_Semantic::function_definition_1() ...@@ -161,5 +162,51 @@ void tst_Semantic::function_definition_1()
QCOMPARE(foo, QByteArray("foo")); 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) QTEST_APPLESS_MAIN(tst_Semantic)
#include "tst_semantic.moc" #include "tst_semantic.moc"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment