TEST(InitListExpr, VectorLiteralListBraceRange) { RangeVerifier<InitListExpr> Verifier; Verifier.expectRange(2, 17, 2, 22); EXPECT_TRUE(Verifier.match( "typedef int int2 __attribute__((ext_vector_type(2)));\n" "int2 i2 = (int2){1, 2};", initListExpr())); }
TEST(InitListExpr, VectorLiteralInitListParens) { RangeVerifier<InitListExpr> Verifier; Verifier.expectRange(2, 26, 2, 31); EXPECT_TRUE(Verifier.match( "typedef int int2 __attribute__((ext_vector_type(2)));\n" "constant int2 i2 = (int2)(1, 2);", initListExpr(), Lang_OpenCL)); }
TEST(MemberExpr, ImplicitMemberRange) { RangeVerifier<MemberExpr> Verifier; Verifier.expectRange(2, 30, 2, 30); EXPECT_TRUE(Verifier.match("struct S { operator int() const; };\n" "int foo(const S& s) { return s; }", memberExpr())); }
TEST(CompoundLiteralExpr, CompoundVectorLiteralRange) { RangeVerifier<CompoundLiteralExpr> Verifier; Verifier.expectRange(2, 11, 2, 22); EXPECT_TRUE(Verifier.match( "typedef int int2 __attribute__((ext_vector_type(2)));\n" "int2 i2 = (int2){1, 2};", compoundLiteralExpr())); }
TEST(FriendDecl, FriendNonMemberFunctionDefinitionRange) { RangeVerifier<FriendDecl> Verifier; Verifier.expectRange(2, 1, 2, 28); EXPECT_TRUE(Verifier.match("struct A {\n" "friend int f() { return 0; }\n" "};\n", friendDecl())); }
TEST(FriendDecl, FriendNonMemberFunctionRange) { RangeVerifier<FriendDecl> Verifier; Verifier.expectRange(2, 1, 2, 15); EXPECT_TRUE(Verifier.match("struct A {\n" "friend void f();\n" "};\n", friendDecl())); }
TEST(UsingDecl, SourceRange) { RangeVerifier<UsingDecl> Verifier; Verifier.expectRange(2, 22, 2, 25); EXPECT_TRUE(Verifier.match( "class B { protected: int i; };\n" "class D : public B { B::i; };", usingDecl())); }
TEST(CXXTemporaryObjectExpr, SourceRange) { RangeVerifier<CXXTemporaryObjectExpr> Verifier; Verifier.expectRange(2, 6, 2, 12); EXPECT_TRUE(Verifier.match( "struct A { A(int, int); };\n" "A a( A{0, 0} );", temporaryObjectExpr(), Lang_CXX11)); }
TEST(FriendDecl, FriendElaboratedTypeRange) { RangeVerifier<FriendDecl> Verifier; Verifier.expectRange(2, 1, 2, 14); EXPECT_TRUE(Verifier.match("struct A {\n" "friend class B;\n" "};\n", friendDecl())); }
TEST(FriendDecl, FriendInlineFunctionRange) { RangeVerifier<FriendDecl> Verifier; Verifier.expectRange(2, 1, 2, 35); EXPECT_TRUE(Verifier.match("struct A {\n" "int inline friend f() { return 0; }" "};\n", friendDecl(), Lang_CXX11)); }
TEST(FriendDecl, FriendConstructorDestructorRange) { const std::string Code = "struct B {\n" "B();\n" "~B();\n" "};\n" "struct A {\n" "friend B::B(), B::~B();\n" "};\n"; RangeVerifier<FriendDecl> ConstructorVerifier; ConstructorVerifier.expectRange(6, 1, 6, 13); EXPECT_TRUE(ConstructorVerifier.match( Code, friendDecl(has(constructorDecl(ofClass(hasName("B"))))))); RangeVerifier<FriendDecl> DestructorVerifier; DestructorVerifier.expectRange(6, 1, 6, 22); EXPECT_TRUE(DestructorVerifier.match( Code, friendDecl(has(destructorDecl(ofClass(hasName("B"))))))); }
TEST(CompoundLiteralExpr, ParensCompoundVectorLiteralRange) { RangeVerifier<CompoundLiteralExpr> Verifier; Verifier.expectRange(2, 20, 2, 31); EXPECT_TRUE(Verifier.match( "typedef int int2 __attribute__((ext_vector_type(2)));\n" "constant int2 i2 = (int2)(1, 2);", compoundLiteralExpr(), Lang_OpenCL)); }
TEST(CXXConstructExpr, SourceRange) { RangeVerifier<CXXConstructExpr> Verifier; Verifier.expectRange(3, 14, 3, 19); EXPECT_TRUE(Verifier.match( "struct A { A(int, int); };\n" "void f(A a);\n" "void g() { f({0, 0}); }", constructExpr(), Lang_CXX11)); }
TEST(FriendDecl, FriendTemplateClassRange) { RangeVerifier<FriendDecl> Verifier; Verifier.expectRange(2, 1, 3, 14); EXPECT_TRUE(Verifier.match("struct A {\n" "template <typename T>\n" "friend class B;\n" "};\n", friendDecl())); }
TEST(FriendDecl, FriendTemplateFunctionRange) { RangeVerifier<FriendDecl> Verifier; Verifier.expectRange(2, 1, 3, 15); EXPECT_TRUE(Verifier.match("struct A {\n" "template <typename T>\n" "friend void f();\n" "};\n", friendDecl())); }
TEST(FriendDecl, FriendTemplateParameterRange) { RangeVerifier<FriendDecl> Verifier; Verifier.expectRange(3, 1, 3, 8); EXPECT_TRUE(Verifier.match("template <typename T>\n" "struct A {\n" "friend T;\n" "};\n", friendDecl(), Lang_CXX11)); }
TEST(FriendDecl, FriendSimpleTypeRange) { RangeVerifier<FriendDecl> Verifier; Verifier.expectRange(3, 1, 3, 8); EXPECT_TRUE(Verifier.match("class B;\n" "struct A {\n" "friend B;\n" "};\n", friendDecl(), Lang_CXX11)); }
TEST(CXXFunctionalCastExpr, SourceRange) { RangeVerifier<CXXFunctionalCastExpr> Verifier; Verifier.expectRange(2, 10, 2, 14); EXPECT_TRUE(Verifier.match( "int foo() {\n" " return int{};\n" "}", functionalCastExpr(), Lang_CXX11)); }
TEST(UnresolvedUsingValueDecl, SourceRange) { RangeVerifier<UnresolvedUsingValueDecl> Verifier; Verifier.expectRange(3, 3, 3, 6); EXPECT_TRUE(Verifier.match( "template <typename B>\n" "class D : public B {\n" " B::i;\n" "};", unresolvedUsingValueDecl())); }
TEST(FriendDecl, FriendDecltypeRange) { RangeVerifier<FriendDecl> Verifier; Verifier.expectRange(4, 1, 4, 8); EXPECT_TRUE(Verifier.match("struct A;\n" "A foo();\n" "struct A {\n" "friend decltype(foo());\n" "};\n", friendDecl(), Lang_CXX11)); }
TEST(ObjCMessageExpr, CXXConstructExprRange) { RangeVerifier<CXXConstructExpr> Verifier; Verifier.expectRange(5, 25, 5, 27); EXPECT_TRUE(Verifier.match( "struct A { int a; };\n" "@interface B {}\n" "+ (void) f1: (A)arg;\n" "@end\n" "void f2() { A a; [B f1: (a)]; }\n", constructExpr(), Lang_OBJCXX)); }
TEST(CXXUnresolvedConstructExpr, SourceRange) { RangeVerifier<CXXUnresolvedConstructExpr> Verifier; Verifier.expectRange(3, 10, 3, 12); std::vector<std::string> Args; Args.push_back("-fno-delayed-template-parsing"); EXPECT_TRUE(Verifier.match( "template <typename U>\n" "U foo() {\n" " return U{};\n" "}", unresolvedConstructExpr(), Args, Lang_CXX11)); }
TEST(FriendDecl, InstantiationSourceRange) { RangeVerifier<FriendDecl> Verifier; Verifier.expectRange(4, 3, 4, 35); EXPECT_TRUE(Verifier.match( "template <typename T> class S;\n" "template<class T> void operator+(S<T> x);\n" "template<class T> struct S {\n" " friend void operator+<>(S<T> src);\n" "};\n" "void test(S<double> s) { +s; }", friendDecl(hasParent(recordDecl(isTemplateInstantiation()))))); }
TEST(DynTypedNode, NNSLocSourceRange) { RangeVerifier<DynTypedNode> Verifier; Verifier.expectRange(1, 33, 1, 34); EXPECT_TRUE(Verifier.match("namespace N { typedef void T; } N::T f() {}", nestedNameSpecifierLoc())); }
TEST(DynTypedNode, TypeLocSourceRange) { RangeVerifier<DynTypedNode> Verifier; Verifier.expectRange(1, 1, 1, 8); EXPECT_TRUE(Verifier.match("void f() {}", typeLoc(loc(functionType())))); }
TEST(DynTypedNode, StmtSourceRange) { RangeVerifier<DynTypedNode> Verifier; Verifier.expectRange(1, 10, 1, 11); EXPECT_TRUE(Verifier.match("void f() {}", stmt())); }
TEST(DynTypedNode, DeclSourceRange) { RangeVerifier<DynTypedNode> Verifier; Verifier.expectRange(1, 1, 1, 11); EXPECT_TRUE(Verifier.match("void f() {}", decl())); }
TEST(CXXNewExpr, ParenRange) { RangeVerifier<CXXNewExpr> Verifier; Verifier.expectRange(1, 12, 1, 20); EXPECT_TRUE(Verifier.match("void f() { new int(); }", newExpr())); }
TEST(CXXNewExpr, ArrayRange) { RangeVerifier<CXXNewExpr> Verifier; Verifier.expectRange(1, 12, 1, 22); EXPECT_TRUE(Verifier.match("void f() { new int[10]; }", newExpr())); }
TEST(ParmVarDecl, KNRRange) { RangeVerifier<ParmVarDecl> Verifier; Verifier.expectRange(1, 8, 1, 8); EXPECT_TRUE(Verifier.match("void f(i) {}", varDecl(), Lang_C)); }