From 19f1f6ca7962c5c3c3506a1a3b5a612827137f6e Mon Sep 17 00:00:00 2001 From: Erik Verbruggen Date: Tue, 20 Mar 2012 13:59:38 +0100 Subject: [PATCH] Added test for lambda function definitions. Change-Id: I2233aa98a07e9c23463d4bec0b09dcccb89deb58 Reviewed-by: Roberto Raggi --- .../auto/cplusplus/semantic/tst_semantic.cpp | 44 +++++++++++++++---- 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/tests/auto/cplusplus/semantic/tst_semantic.cpp b/tests/auto/cplusplus/semantic/tst_semantic.cpp index 994785a02ca..c8a0dd78bc9 100644 --- a/tests/auto/cplusplus/semantic/tst_semantic.cpp +++ b/tests/auto/cplusplus/semantic/tst_semantic.cpp @@ -52,6 +52,9 @@ #include //TESTED_COMPONENT=src/libs/cplusplus + +#define NO_PARSER_OR_SEMANTIC_ERROR_MESSAGES + using namespace CPlusPlus; class tst_Semantic: public QObject @@ -68,13 +71,15 @@ public: TranslationUnit *parse(const QByteArray &source, TranslationUnit::ParseMode mode, bool enableObjc, - bool qtMocRun) + bool qtMocRun, + bool enableCxx11) { const StringLiteral *fileId = control->stringLiteral(""); TranslationUnit *unit = new TranslationUnit(control.data(), fileId); unit->setSource(source.constData(), source.length()); unit->setObjCEnabled(enableObjc); unit->setQtMocRunEnabled(qtMocRun); + unit->setCxxOxEnabled(enableCxx11); unit->parse(mode); return unit; } @@ -84,7 +89,9 @@ public: public: Document(TranslationUnit *unit) - : unit(unit), globals(unit->control()->newNamespace(0, 0)), errorCount(0) + : unit(unit) + , globals(unit->control()->newNamespace(0, 0)) + , errorCount(0) { } ~Document() @@ -114,23 +121,31 @@ public: { } virtual void report(int /*level*/, - const StringLiteral * /*fileName*/, - unsigned /*line*/, unsigned /*column*/, - const char * /*format*/, va_list /*ap*/) + const StringLiteral *fileName, + unsigned line, unsigned column, + const char *format, va_list ap) { ++errorCount; -// qDebug() << fileName->chars()<<':'<chars()<<':'< document(const QByteArray &source, bool enableObjc = false, bool qtMocRun = false) + QSharedPointer document(const QByteArray &source, bool enableObjc = false, bool qtMocRun = false, bool enableCxx11 = false) { diag.errorCount = 0; // reset the error count. - TranslationUnit *unit = parse(source, TranslationUnit::ParseTranlationUnit, enableObjc, qtMocRun); + TranslationUnit *unit = parse(source, TranslationUnit::ParseTranlationUnit, enableObjc, qtMocRun, enableCxx11); QSharedPointer doc(new Document(unit)); doc->check(); doc->errorCount = diag.errorCount; @@ -164,6 +179,8 @@ private slots: void q_enum_1(); + void lambda_1(); + void diagnostic_error(); }; @@ -697,6 +714,17 @@ void tst_Semantic::q_enum_1() QCOMPARE(e->name->identifier()->chars(), "e"); } +void tst_Semantic::lambda_1() +{ + QSharedPointer doc = document("\n" + "void f() {\n" + " auto func = [](int a, int b) {return a + b;};\n" + "}\n", false, false, true); + + QCOMPARE(doc->errorCount, 0U); + QCOMPARE(doc->globals->memberCount(), 1U); +} + void tst_Semantic::diagnostic_error() { QSharedPointer doc = document("\n"