| 8589 | } |
| 8590 | |
| 8591 | void cpp11init() { |
| 8592 | #define testIsCpp11init(...) testIsCpp11init_(__FILE__, __LINE__, __VA_ARGS__) |
| 8593 | auto testIsCpp11init_ = [this](const char* file, int line, const std::string& code, const char* find, Token::Cpp11init expected) { |
| 8594 | SimpleTokenizer tokenizer(settingsDefault, *this); |
| 8595 | ASSERT_LOC(tokenizer.tokenize(code.data(), code.size()), file, line); |
| 8596 | |
| 8597 | const Token* tok = Token::findsimplematch(tokenizer.tokens(), find, strlen(find)); |
| 8598 | ASSERT_LOC(tok, file, line); |
| 8599 | ASSERT_LOC(tok->isCpp11init() == expected, file, line); |
| 8600 | }; |
| 8601 | |
| 8602 | testIsCpp11init("class X : public A<int>, C::D {};", |
| 8603 | "D {", |
| 8604 | Token::Cpp11init::NOINIT); |
| 8605 | |
| 8606 | testIsCpp11init("auto f() -> void {}", |
| 8607 | "void {", |
| 8608 | Token::Cpp11init::NOINIT); |
| 8609 | testIsCpp11init("auto f() & -> void {}", |
| 8610 | "void {", |
| 8611 | Token::Cpp11init::NOINIT); |
| 8612 | testIsCpp11init("auto f() const noexcept(false) -> void {}", |
| 8613 | "void {", |
| 8614 | Token::Cpp11init::NOINIT); |
| 8615 | testIsCpp11init("auto f() -> std::vector<int> { return {}; }", |
| 8616 | "{ return", |
| 8617 | Token::Cpp11init::NOINIT); |
| 8618 | testIsCpp11init("auto f() -> std::vector<int> { return {}; }", |
| 8619 | "vector", |
| 8620 | Token::Cpp11init::NOINIT); |
| 8621 | testIsCpp11init("auto f() -> std::vector<int> { return {}; }", |
| 8622 | "std ::", |
| 8623 | Token::Cpp11init::NOINIT); |
| 8624 | |
| 8625 | testIsCpp11init("class X{};", |
| 8626 | "{ }", |
| 8627 | Token::Cpp11init::NOINIT); |
| 8628 | testIsCpp11init("class X{}", // forgotten ; so not properly recognized as a class |
| 8629 | "{ }", |
| 8630 | Token::Cpp11init::CPP11INIT); |
| 8631 | |
| 8632 | testIsCpp11init("namespace abc::def { TEST(a, b) {} }", |
| 8633 | "{ TEST", |
| 8634 | Token::Cpp11init::NOINIT); |
| 8635 | testIsCpp11init("namespace { TEST(a, b) {} }", // anonymous namespace |
| 8636 | "{ TEST", |
| 8637 | Token::Cpp11init::NOINIT); |
| 8638 | |
| 8639 | testIsCpp11init("enum { e = decltype(s)::i };", |
| 8640 | "{ e", |
| 8641 | Token::Cpp11init::NOINIT); |
| 8642 | |
| 8643 | testIsCpp11init("template <typename T>\n" // #11378 |
| 8644 | "class D<M<T, 1>> : public B<M<T, 1>, T> {\n" |
| 8645 | "public:\n" |
| 8646 | " D(int x) : B<M<T, 1>, T>(x) {}\n" |
| 8647 | "};\n", |
| 8648 | "{ public:", |
nothing calls this directly
no test coverage detected