diff --git a/tests/auto/cplusplus/ast/ast.pro b/tests/auto/cplusplus/ast/ast.pro new file mode 100644 index 0000000000000000000000000000000000000000..6974c6bbb4c69f78c5816767bbcab9d083121ae2 --- /dev/null +++ b/tests/auto/cplusplus/ast/ast.pro @@ -0,0 +1,5 @@ +load(qttest_p4) +include(../shared/shared.pri) +QT = core + +SOURCES += tst_ast.cpp diff --git a/tests/auto/cplusplus/ast/tst_ast.cpp b/tests/auto/cplusplus/ast/tst_ast.cpp new file mode 100644 index 0000000000000000000000000000000000000000..93ad454e563487cd19e4726cf54c1d31f43040c2 --- /dev/null +++ b/tests/auto/cplusplus/ast/tst_ast.cpp @@ -0,0 +1,73 @@ + +#include <QtTest> +#include <QtDebug> + +#include <Control.h> +#include <Parser.h> +#include <AST.h> + +CPLUSPLUS_USE_NAMESPACE + +class tst_AST: public QObject +{ + Q_OBJECT + + Control control; + +public: + TranslationUnit *parse(const QByteArray &source, + TranslationUnit::ParseMode mode) + { + StringLiteral *fileId = control.findOrInsertFileName("<stdin>"); + TranslationUnit *unit = new TranslationUnit(&control, fileId); + unit->setSource(source.constData(), source.length()); + unit->parse(mode); + return unit; + } + + TranslationUnit *parseStatement(const QByteArray &source) + { return parse(source, TranslationUnit::ParseStatement); } + +private slots: + void if_statement(); + void if_else_statement(); +}; + +void tst_AST::if_statement() +{ + QSharedPointer<TranslationUnit> unit(parseStatement("if (a) b;")); + + AST *ast = unit->ast(); + QVERIFY(ast != 0); + + IfStatementAST *stmt = ast->asIfStatement(); + QVERIFY(stmt != 0); + QCOMPARE(stmt->if_token, 1U); + QCOMPARE(stmt->lparen_token, 2U); + QVERIFY(stmt->condition != 0); + QCOMPARE(stmt->rparen_token, 4U); + QVERIFY(stmt->statement != 0); + QCOMPARE(stmt->else_token, 0U); + QVERIFY(stmt->else_statement == 0); +} + +void tst_AST::if_else_statement() +{ + QSharedPointer<TranslationUnit> unit(parseStatement("if (a) b; else c;")); + + AST *ast = unit->ast(); + QVERIFY(ast != 0); + + IfStatementAST *stmt = ast->asIfStatement(); + QVERIFY(stmt != 0); + QCOMPARE(stmt->if_token, 1U); + QCOMPARE(stmt->lparen_token, 2U); + QVERIFY(stmt->condition != 0); + QCOMPARE(stmt->rparen_token, 4U); + QVERIFY(stmt->statement != 0); + QCOMPARE(stmt->else_token, 7U); + QVERIFY(stmt->else_statement != 0); +} + +QTEST_APPLESS_MAIN(tst_AST) +#include "tst_ast.moc" diff --git a/tests/auto/cplusplus/cplusplus.pro b/tests/auto/cplusplus/cplusplus.pro new file mode 100644 index 0000000000000000000000000000000000000000..e661c5e4089574751435016cf05dd4b0bd3bc367 --- /dev/null +++ b/tests/auto/cplusplus/cplusplus.pro @@ -0,0 +1,2 @@ +SUBDIRS = shared ast +CONFIG += ordered diff --git a/tests/auto/cplusplus/shared/shared.pri b/tests/auto/cplusplus/shared/shared.pri new file mode 100644 index 0000000000000000000000000000000000000000..bcb756ea34bdec219d05f0a1e9e8397bbab95959 --- /dev/null +++ b/tests/auto/cplusplus/shared/shared.pri @@ -0,0 +1,4 @@ + +DEFINES += HAVE_QT CPLUSPLUS_WITH_NAMESPACE +INCLUDEPATH += $$PWD/../../../../shared/cplusplus +LIBS += -L$$PWD -lCPlusPlusTestSupport diff --git a/tests/auto/cplusplus/shared/shared.pro b/tests/auto/cplusplus/shared/shared.pro new file mode 100644 index 0000000000000000000000000000000000000000..94003e3447e5858930df128f9d7faa34cb1851d0 --- /dev/null +++ b/tests/auto/cplusplus/shared/shared.pro @@ -0,0 +1,8 @@ + +TEMPLATE = lib +TARGET = CPlusPlusTestSupport +CONFIG += static +QT = core + +DEFINES += HAVE_QT CPLUSPLUS_WITH_NAMESPACE +include($$PWD/../../../../shared/cplusplus/cplusplus.pri)