From fc285535730903767f796adf94fbeff56a2450d8 Mon Sep 17 00:00:00 2001 From: Roberto Raggi <qtc-committer@nokia.com> Date: Mon, 15 Dec 2008 11:35:38 +0100 Subject: [PATCH] Initial work on a test suite for our C++ engine. --- tests/auto/cplusplus/ast/ast.pro | 5 ++ tests/auto/cplusplus/ast/tst_ast.cpp | 73 ++++++++++++++++++++++++++ tests/auto/cplusplus/cplusplus.pro | 2 + tests/auto/cplusplus/shared/shared.pri | 4 ++ tests/auto/cplusplus/shared/shared.pro | 8 +++ 5 files changed, 92 insertions(+) create mode 100644 tests/auto/cplusplus/ast/ast.pro create mode 100644 tests/auto/cplusplus/ast/tst_ast.cpp create mode 100644 tests/auto/cplusplus/cplusplus.pro create mode 100644 tests/auto/cplusplus/shared/shared.pri create mode 100644 tests/auto/cplusplus/shared/shared.pro diff --git a/tests/auto/cplusplus/ast/ast.pro b/tests/auto/cplusplus/ast/ast.pro new file mode 100644 index 00000000000..6974c6bbb4c --- /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 00000000000..93ad454e563 --- /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 00000000000..e661c5e4089 --- /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 00000000000..bcb756ea34b --- /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 00000000000..94003e3447e --- /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) -- GitLab