diff options
author | Erik Verbruggen <erik.verbruggen@nokia.com> | 2010-02-06 14:32:25 +0100 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@nokia.com> | 2010-02-07 10:49:03 +0100 |
commit | 21488e8898b1aaf5d33b3a33b488e2e280219f06 (patch) | |
tree | 03f2bb0c876eaddd1112995f3c3907a2d2bf4f90 /tests/auto/cplusplus/ast | |
parent | ac6aba5ec34e2b2f7f83105e9a986e629e00ad14 (diff) | |
download | qt-creator-21488e8898b1aaf5d33b3a33b488e2e280219f06.tar.gz |
Added semantic checks for Q_ENUMS.
Diffstat (limited to 'tests/auto/cplusplus/ast')
-rw-r--r-- | tests/auto/cplusplus/ast/tst_ast.cpp | 43 |
1 files changed, 40 insertions, 3 deletions
diff --git a/tests/auto/cplusplus/ast/tst_ast.cpp b/tests/auto/cplusplus/ast/tst_ast.cpp index b23bd76eea..14e82b6e8b 100644 --- a/tests/auto/cplusplus/ast/tst_ast.cpp +++ b/tests/auto/cplusplus/ast/tst_ast.cpp @@ -19,19 +19,21 @@ public: TranslationUnit *parse(const QByteArray &source, TranslationUnit::ParseMode mode, - bool blockErrors = false) + bool blockErrors = false, + bool qtMocRun = false) { const StringLiteral *fileId = control.findOrInsertStringLiteral("<stdin>"); TranslationUnit *unit = new TranslationUnit(&control, fileId); unit->setObjCEnabled(true); + unit->setQtMocRunEnabled(qtMocRun); unit->setSource(source.constData(), source.length()); unit->blockErrors(blockErrors); unit->parse(mode); return unit; } - TranslationUnit *parseDeclaration(const QByteArray &source, bool blockErrors = false) - { return parse(source, TranslationUnit::ParseDeclaration, blockErrors); } + TranslationUnit *parseDeclaration(const QByteArray &source, bool blockErrors = false, bool qtMocRun = false) + { return parse(source, TranslationUnit::ParseDeclaration, blockErrors, qtMocRun); } TranslationUnit *parseExpression(const QByteArray &source) { return parse(source, TranslationUnit::ParseExpression); } @@ -83,6 +85,9 @@ private slots: void array_access_with_nested_expression(); void objc_msg_send_expression(); void objc_msg_send_expression_without_selector(); + + // Qt "keywords" + void q_enum_1(); }; void tst_AST::gcc_attributes_1() @@ -977,5 +982,37 @@ void tst_AST::objc_msg_send_expression_without_selector() QVERIFY(!bodyStatements->next->value->asReturnStatement()->expression); } +void tst_AST::q_enum_1() +{ + QSharedPointer<TranslationUnit> unit(parseDeclaration("\n" + "class Tst {\n" + "Q_ENUMS(e)\n" + "public:\n" + "enum e { x, y };\n" + "};\n", + false, true)); + QVERIFY(unit->ast()); + SimpleDeclarationAST *tstDecl = unit->ast()->asSimpleDeclaration(); + QVERIFY(tstDecl); + QVERIFY(! tstDecl->declarator_list); + QVERIFY(tstDecl->decl_specifier_list); + QVERIFY(tstDecl->decl_specifier_list->value); + QVERIFY(! tstDecl->decl_specifier_list->next); + ClassSpecifierAST *tst = tstDecl->decl_specifier_list->value->asClassSpecifier(); + QVERIFY(tst); + + QVERIFY(tst->member_specifier_list); + QVERIFY(tst->member_specifier_list->value); + QtEnumDeclarationAST *qtEnum = tst->member_specifier_list->value->asQtEnumDeclaration(); + QVERIFY(qtEnum); + QVERIFY(qtEnum->enumerator_list); + QVERIFY(qtEnum->enumerator_list->value); + QVERIFY(! qtEnum->enumerator_list->next); + + SimpleNameAST *e = qtEnum->enumerator_list->value->asSimpleName(); + QVERIFY(e); + QCOMPARE(unit->spell(e->identifier_token), "e"); +} + QTEST_APPLESS_MAIN(tst_AST) #include "tst_ast.moc" |