Alien-SmokeQt
view release on metacpan or search on metacpan
generator/parser/tests/test_parser.cpp view on Meta::CPAN
// QCOMPARE(control.lookupType(n1), (Type*)type1);
// QCOMPARE(control.lookupType(n2), (Type*)0);
// }
void testTokenTable()
{
QCOMPARE(token_name(Token_EOF), "eof");
QCOMPARE(token_name('a'), "a");
QCOMPARE(token_name(Token_delete), "delete");
}
///@todo reenable
// void testLexer()
// {
// QByteArray code("#include <foo.h>");
// TokenStream token_stream;
// LocationTable location_table;
// LocationTable line_table;
// Control control;
//
// Lexer lexer(token_stream, location_table, line_table, &control);
// lexer.tokenize(code, code.size()+1);
// QCOMPARE(control.problem(0).message(), QString("expected end of line"));
//
// QByteArray code2("class Foo { int foo() {} }; ");
// lexer.tokenize(code2, code2.size()+1);
// QCOMPARE(control.problemCount(), 1); //we still have the old problem in the list
// }
void testParser()
{
QByteArray clazz("struct A { int i; A() : i(5) { } virtual void test() = 0; };");
pool mem_pool;
TranslationUnitAST* ast = parse(clazz, &mem_pool);
QVERIFY(ast != 0);
QVERIFY(ast->declarations != 0);
}
void testManyComparisons()
{
//Should not crash
{
QByteArray clazz("void test() { if(val < f && val < val1 && val < val2 && val < val3 ){ } }");
pool mem_pool;
TranslationUnitAST* ast = parse(clazz, &mem_pool);
QVERIFY(ast != 0);
QVERIFY(ast->declarations != 0);
dumper.dump(ast, lastSession->token_stream);
}
{
QByteArray clazz("void test() { if(val < f && val < val1 && val < val2 && val < val3 && val < val4 && val < val5 && val < val6 && val < val7 && val < val8 && val < val9 && val < val10 && val < val11 && val < val12 && val < val13 && val < val14 ...
pool mem_pool;
TranslationUnitAST* ast = parse(clazz, &mem_pool);
QVERIFY(ast != 0);
QVERIFY(ast->declarations != 0);
}
}
void testParserFail()
{
QByteArray stuff("foo bar !!! nothing that really looks like valid c++ code");
pool mem_pool;
TranslationUnitAST *ast = parse(stuff, &mem_pool);
QVERIFY(ast->declarations == 0);
QVERIFY(control.problems().count() > 3);
}
void testPartialParseFail() {
{
QByteArray method("struct C { Something invalid is here };");
pool mem_pool;
TranslationUnitAST* ast = parse(method, &mem_pool);
QVERIFY(ast != 0);
QVERIFY(hasKind(ast, AST::Kind_ClassSpecifier));
}
{
QByteArray method("void test() { Something invalid is here };");
pool mem_pool;
TranslationUnitAST* ast = parse(method, &mem_pool);
QVERIFY(ast != 0);
QVERIFY(hasKind(ast, AST::Kind_FunctionDefinition));
}
{
QByteArray method("void test() { {Something invalid is here };");
pool mem_pool;
TranslationUnitAST* ast = parse(method, &mem_pool);
QVERIFY(ast != 0);
QVERIFY(hasKind(ast, AST::Kind_FunctionDefinition));
QVERIFY(ast->hadMissingCompoundTokens);
}
{
QByteArray method("void test() { case:{};");
pool mem_pool;
TranslationUnitAST* ast = parse(method, &mem_pool);
QVERIFY(ast != 0);
QVERIFY(hasKind(ast, AST::Kind_FunctionDefinition));
QVERIFY(ast->hadMissingCompoundTokens);
}
}
void testParseMethod()
{
QByteArray method("void A::test() { }");
pool mem_pool;
TranslationUnitAST* ast = parse(method, &mem_pool);
QVERIFY(ast != 0);
QVERIFY(hasKind(ast, AST::Kind_FunctionDefinition));
}
///@todo reenable
// void testMethodArgs()
// {
// QByteArray method("int A::test(int primitive, B* pointer) { return primitive; }");
// pool mem_pool;
// Parser parser(&control);
// TranslationUnitAST* ast = parser.parse(method.constData(),
// method.size() + 1, &mem_pool);
// // return type
// SimpleTypeSpecifierAST* retType = static_cast<SimpleTypeSpecifierAST*>
// (getAST(ast, AST::Kind_SimpleTypeSpecifier));
// QCOMPARE((TOKEN_KIND)parser.token_stream.kind(retType->start_token),
( run in 0.734 second using v1.01-cache-2.11-cpan-d7f47b0818f )