@@ -33,11 +33,44 @@ class TestAstUtils : public TestFixture {
3333private:
3434
3535 void run () override {
36+ TEST_CASE (findLambdaEndToken);
3637 TEST_CASE (isReturnScope);
3738 TEST_CASE (isVariableChanged);
3839 TEST_CASE (isVariableChangedByFunctionCall);
3940 }
4041
42+ bool findLambdaEndToken (const char code[]) {
43+ Settings settings;
44+ Tokenizer tokenizer (&settings, this );
45+ std::istringstream istr (code);
46+ tokenizer.tokenize (istr, " test.cpp" );
47+ const Token * const tokEnd = ::findLambdaEndToken (tokenizer.tokens ());
48+ return tokEnd && tokEnd->next () == nullptr ;
49+ }
50+
51+ void findLambdaEndToken () {
52+ ASSERT (nullptr == ::findLambdaEndToken (nullptr ));
53+ ASSERT_EQUALS (false , findLambdaEndToken (" void f() { }" ));
54+ ASSERT_EQUALS (true , findLambdaEndToken (" []{ }" ));
55+ ASSERT_EQUALS (true , findLambdaEndToken (" []{ return 0 }" ));
56+ ASSERT_EQUALS (true , findLambdaEndToken (" [](){ }" ));
57+ ASSERT_EQUALS (true , findLambdaEndToken (" [&](){ }" ));
58+ ASSERT_EQUALS (true , findLambdaEndToken (" [&, i](){ }" ));
59+ ASSERT_EQUALS (true , findLambdaEndToken (" [](void) { return -1 }" ));
60+ ASSERT_EQUALS (true , findLambdaEndToken (" [](int a, int b) { return a + b }" ));
61+ ASSERT_EQUALS (true , findLambdaEndToken (" [](int a, int b) mutable { return a + b }" ));
62+ ASSERT_EQUALS (true , findLambdaEndToken (" [](int a, int b) constexpr { return a + b }" ));
63+ ASSERT_EQUALS (true , findLambdaEndToken (" [](void) -> int { return -1 }" ));
64+ ASSERT_EQUALS (true , findLambdaEndToken (" [](void) mutable -> int { return -1 }" ));
65+ ASSERT_EQUALS (false , findLambdaEndToken (" [](void) foo -> int { return -1 }" ));
66+ ASSERT_EQUALS (true , findLambdaEndToken (" [](void) constexpr -> int { return -1 }" ));
67+ ASSERT_EQUALS (true , findLambdaEndToken (" [](void) constexpr -> int* { return x }" ));
68+ ASSERT_EQUALS (true , findLambdaEndToken (" [](void) constexpr -> const * int { return x }" ));
69+ ASSERT_EQUALS (true , findLambdaEndToken (" [](void) mutable -> const * int { return x }" ));
70+ ASSERT_EQUALS (true , findLambdaEndToken (" [](void) constexpr -> const ** int { return x }" ));
71+ ASSERT_EQUALS (true , findLambdaEndToken (" [](void) constexpr -> const * const* int { return x }" ));
72+ }
73+
4174 bool isReturnScope (const char code[], int offset) {
4275 Settings settings;
4376 Tokenizer tokenizer (&settings, this );
0 commit comments