summaryrefslogtreecommitdiff
path: root/tests/auto/cplusplus/ast
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@nokia.com>2010-02-06 14:32:25 +0100
committerErik Verbruggen <erik.verbruggen@nokia.com>2010-02-07 10:49:03 +0100
commit21488e8898b1aaf5d33b3a33b488e2e280219f06 (patch)
tree03f2bb0c876eaddd1112995f3c3907a2d2bf4f90 /tests/auto/cplusplus/ast
parentac6aba5ec34e2b2f7f83105e9a986e629e00ad14 (diff)
downloadqt-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.cpp43
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"