Add missing tests for parent traversal

This commit is contained in:
Stephen Kelly 2020-01-19 16:27:26 +00:00
parent 61b5634080
commit 514e3c3694
1 changed files with 60 additions and 0 deletions

View File

@ -1633,6 +1633,15 @@ void foo()
traverse(ast_type_traits::TK_IgnoreImplicitCastsAndParentheses,
Matcher)));
auto ParentMatcher = floatLiteral(hasParent(varDecl(hasName("i"))));
EXPECT_TRUE(
notMatches(VarDeclCode, traverse(ast_type_traits::TK_AsIs, ParentMatcher)));
EXPECT_TRUE(
matches(VarDeclCode,
traverse(ast_type_traits::TK_IgnoreUnlessSpelledInSource,
ParentMatcher)));
EXPECT_TRUE(
matches(VarDeclCode, decl(traverse(ast_type_traits::TK_AsIs,
anyOf(cxxRecordDecl(), varDecl())))));
@ -1714,6 +1723,13 @@ void bar()
functionDecl(hasName("foo"), traverse(ast_type_traits::TK_AsIs,
hasDescendant(floatLiteral())))));
EXPECT_TRUE(
notMatches(Code, traverse(ast_type_traits::TK_AsIs, floatLiteral(hasParent(callExpr(callee(functionDecl(hasName("foo")))))))));
EXPECT_TRUE(
matches(Code,
traverse(ast_type_traits::TK_IgnoreUnlessSpelledInSource,
floatLiteral(hasParent(callExpr(callee(functionDecl(hasName("foo")))))))));
Code = R"cpp(
void foo()
{
@ -1724,6 +1740,10 @@ void foo()
matches(Code,
traverse(ast_type_traits::TK_IgnoreUnlessSpelledInSource,
varDecl(hasInitializer(integerLiteral(equals(3)))))));
EXPECT_TRUE(
matches(Code,
traverse(ast_type_traits::TK_IgnoreUnlessSpelledInSource,
integerLiteral(equals(3), hasParent(varDecl(hasName("i")))))));
}
template <typename MatcherT>
@ -1905,12 +1925,21 @@ void func14() {
returnStmt(forFunction(functionDecl(hasName("func1"))),
hasReturnValue(integerLiteral(equals(42)))))));
EXPECT_TRUE(matches(
Code, traverse(ast_type_traits::TK_IgnoreUnlessSpelledInSource,
integerLiteral(equals(42), hasParent(returnStmt(forFunction(functionDecl(hasName("func1"))))))
)));
EXPECT_TRUE(matches(
Code,
traverse(ast_type_traits::TK_IgnoreUnlessSpelledInSource,
returnStmt(forFunction(functionDecl(hasName("func2"))),
hasReturnValue(cxxTemporaryObjectExpr(
hasArgument(0, integerLiteral(equals(42)))))))));
EXPECT_TRUE(matches(
Code,
traverse(ast_type_traits::TK_IgnoreUnlessSpelledInSource,
integerLiteral(equals(42), hasParent(cxxTemporaryObjectExpr(hasParent(returnStmt(forFunction(functionDecl(hasName("func2")))))))))));
EXPECT_TRUE(matches(
Code, traverse(ast_type_traits::TK_IgnoreUnlessSpelledInSource,
@ -1919,6 +1948,10 @@ void func14() {
cxxFunctionalCastExpr(hasSourceExpression(
integerLiteral(equals(42)))))))));
EXPECT_TRUE(matches(
Code, traverse(ast_type_traits::TK_IgnoreUnlessSpelledInSource,
integerLiteral(equals(42), hasParent(cxxFunctionalCastExpr(hasParent(returnStmt(forFunction(functionDecl(hasName("func3")))) )))))));
EXPECT_TRUE(matches(
Code, traverse(ast_type_traits::TK_IgnoreUnlessSpelledInSource,
returnStmt(forFunction(functionDecl(hasName("func4"))),
@ -1957,18 +1990,32 @@ void func14() {
hasReturnValue(
declRefExpr(to(varDecl(hasName("a")))))))));
EXPECT_TRUE(matches(
Code, traverse(ast_type_traits::TK_IgnoreUnlessSpelledInSource,
declRefExpr(to(varDecl(hasName("a"))), hasParent(returnStmt(forFunction(functionDecl(hasName("func10")))))))));
EXPECT_TRUE(matches(
Code, traverse(ast_type_traits::TK_IgnoreUnlessSpelledInSource,
returnStmt(forFunction(functionDecl(hasName("func11"))),
hasReturnValue(
declRefExpr(to(varDecl(hasName("b")))))))));
EXPECT_TRUE(matches(
Code, traverse(ast_type_traits::TK_IgnoreUnlessSpelledInSource,
declRefExpr(to(varDecl(hasName("b"))), hasParent(returnStmt(forFunction(functionDecl(hasName("func11"))))))
)));
EXPECT_TRUE(matches(
Code, traverse(ast_type_traits::TK_IgnoreUnlessSpelledInSource,
returnStmt(forFunction(functionDecl(hasName("func12"))),
hasReturnValue(
declRefExpr(to(varDecl(hasName("c")))))))));
EXPECT_TRUE(matches(
Code, traverse(ast_type_traits::TK_IgnoreUnlessSpelledInSource,
declRefExpr(to(varDecl(hasName("c"))), hasParent(returnStmt(forFunction(functionDecl(hasName("func12"))))))
)));
EXPECT_TRUE(matches(
Code,
traverse(
@ -1980,6 +2027,19 @@ void func14() {
varDecl(hasName("c"))))))),
has(parmVarDecl(hasName("d")))))));
EXPECT_TRUE(matches(
Code,
traverse(
ast_type_traits::TK_IgnoreUnlessSpelledInSource,
declRefExpr(to(varDecl(hasName("a"))), hasParent( lambdaExpr(forFunction(functionDecl(hasName("func13")))) )))));
EXPECT_TRUE(matches(
Code,
traverse(
ast_type_traits::TK_IgnoreUnlessSpelledInSource,
varDecl(hasName("b"), hasInitializer(declRefExpr(to(
varDecl(hasName("c"))))), hasParent( lambdaExpr(forFunction(functionDecl(hasName("func13")))) )))));
EXPECT_TRUE(matches(
Code, traverse(ast_type_traits::TK_IgnoreUnlessSpelledInSource,
lambdaExpr(