1*a87dc23aSBalazs Benics //===- CallbacksUnaryOperator.cpp -----------------------------------------===//
20741a2c9SStefan Pintilie //
30741a2c9SStefan Pintilie // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40741a2c9SStefan Pintilie // See https://llvm.org/LICENSE.txt for license information.
50741a2c9SStefan Pintilie // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60741a2c9SStefan Pintilie //
70741a2c9SStefan Pintilie //===----------------------------------------------------------------------===//
80741a2c9SStefan Pintilie
90741a2c9SStefan Pintilie #include "CallbacksCommon.h"
100741a2c9SStefan Pintilie
TEST(RecursiveASTVisitor,StmtCallbacks_TraverseUnaryOperator)110741a2c9SStefan Pintilie TEST(RecursiveASTVisitor, StmtCallbacks_TraverseUnaryOperator) {
120741a2c9SStefan Pintilie class RecordingVisitor : public RecordingVisitorBase<RecordingVisitor> {
130741a2c9SStefan Pintilie public:
140741a2c9SStefan Pintilie RecordingVisitor(ShouldTraversePostOrder ShouldTraversePostOrderValue)
150741a2c9SStefan Pintilie : RecordingVisitorBase(ShouldTraversePostOrderValue) {}
160741a2c9SStefan Pintilie
170741a2c9SStefan Pintilie bool TraverseUnaryOperator(UnaryOperator *UO) {
180741a2c9SStefan Pintilie recordCallback(__func__, UO, [&]() {
190741a2c9SStefan Pintilie RecordingVisitorBase::TraverseUnaryOperator(UO);
200741a2c9SStefan Pintilie });
210741a2c9SStefan Pintilie return true;
220741a2c9SStefan Pintilie }
230741a2c9SStefan Pintilie
240741a2c9SStefan Pintilie bool WalkUpFromStmt(Stmt *S) {
250741a2c9SStefan Pintilie recordCallback(__func__, S,
260741a2c9SStefan Pintilie [&]() { RecordingVisitorBase::WalkUpFromStmt(S); });
270741a2c9SStefan Pintilie return true;
280741a2c9SStefan Pintilie }
290741a2c9SStefan Pintilie };
300741a2c9SStefan Pintilie
310741a2c9SStefan Pintilie StringRef Code = R"cpp(
320741a2c9SStefan Pintilie void test() {
330741a2c9SStefan Pintilie 1;
340741a2c9SStefan Pintilie -2;
350741a2c9SStefan Pintilie 3;
360741a2c9SStefan Pintilie }
370741a2c9SStefan Pintilie )cpp";
380741a2c9SStefan Pintilie
390741a2c9SStefan Pintilie EXPECT_TRUE(visitorCallbackLogEqual(
400741a2c9SStefan Pintilie RecordingVisitor(ShouldTraversePostOrder::No), Code,
410741a2c9SStefan Pintilie R"txt(
420741a2c9SStefan Pintilie WalkUpFromStmt CompoundStmt
430741a2c9SStefan Pintilie WalkUpFromStmt IntegerLiteral(1)
440741a2c9SStefan Pintilie TraverseUnaryOperator UnaryOperator(-)
450741a2c9SStefan Pintilie WalkUpFromStmt UnaryOperator(-)
460741a2c9SStefan Pintilie WalkUpFromStmt IntegerLiteral(2)
470741a2c9SStefan Pintilie WalkUpFromStmt IntegerLiteral(3)
480741a2c9SStefan Pintilie )txt"));
490741a2c9SStefan Pintilie
500741a2c9SStefan Pintilie EXPECT_TRUE(visitorCallbackLogEqual(
510741a2c9SStefan Pintilie RecordingVisitor(ShouldTraversePostOrder::Yes), Code,
520741a2c9SStefan Pintilie R"txt(
530741a2c9SStefan Pintilie WalkUpFromStmt IntegerLiteral(1)
540741a2c9SStefan Pintilie TraverseUnaryOperator UnaryOperator(-)
550741a2c9SStefan Pintilie WalkUpFromStmt IntegerLiteral(2)
560741a2c9SStefan Pintilie WalkUpFromStmt UnaryOperator(-)
570741a2c9SStefan Pintilie WalkUpFromStmt IntegerLiteral(3)
580741a2c9SStefan Pintilie WalkUpFromStmt CompoundStmt
590741a2c9SStefan Pintilie )txt"));
600741a2c9SStefan Pintilie }
610741a2c9SStefan Pintilie
TEST(RecursiveASTVisitor,StmtCallbacks_TraverseUnaryOperator_WalkUpFromUnaryOperator)620741a2c9SStefan Pintilie TEST(RecursiveASTVisitor,
630741a2c9SStefan Pintilie StmtCallbacks_TraverseUnaryOperator_WalkUpFromUnaryOperator) {
640741a2c9SStefan Pintilie class RecordingVisitor : public RecordingVisitorBase<RecordingVisitor> {
650741a2c9SStefan Pintilie public:
660741a2c9SStefan Pintilie RecordingVisitor(ShouldTraversePostOrder ShouldTraversePostOrderValue)
670741a2c9SStefan Pintilie : RecordingVisitorBase(ShouldTraversePostOrderValue) {}
680741a2c9SStefan Pintilie
690741a2c9SStefan Pintilie bool TraverseUnaryOperator(UnaryOperator *UO) {
700741a2c9SStefan Pintilie recordCallback(__func__, UO, [&]() {
710741a2c9SStefan Pintilie RecordingVisitorBase::TraverseUnaryOperator(UO);
720741a2c9SStefan Pintilie });
730741a2c9SStefan Pintilie return true;
740741a2c9SStefan Pintilie }
750741a2c9SStefan Pintilie
760741a2c9SStefan Pintilie bool WalkUpFromStmt(Stmt *S) {
770741a2c9SStefan Pintilie recordCallback(__func__, S,
780741a2c9SStefan Pintilie [&]() { RecordingVisitorBase::WalkUpFromStmt(S); });
790741a2c9SStefan Pintilie return true;
800741a2c9SStefan Pintilie }
810741a2c9SStefan Pintilie
820741a2c9SStefan Pintilie bool WalkUpFromExpr(Expr *E) {
830741a2c9SStefan Pintilie recordCallback(__func__, E,
840741a2c9SStefan Pintilie [&]() { RecordingVisitorBase::WalkUpFromExpr(E); });
850741a2c9SStefan Pintilie return true;
860741a2c9SStefan Pintilie }
870741a2c9SStefan Pintilie
880741a2c9SStefan Pintilie bool WalkUpFromUnaryOperator(UnaryOperator *UO) {
890741a2c9SStefan Pintilie recordCallback(__func__, UO, [&]() {
900741a2c9SStefan Pintilie RecordingVisitorBase::WalkUpFromUnaryOperator(UO);
910741a2c9SStefan Pintilie });
920741a2c9SStefan Pintilie return true;
930741a2c9SStefan Pintilie }
940741a2c9SStefan Pintilie };
950741a2c9SStefan Pintilie
960741a2c9SStefan Pintilie StringRef Code = R"cpp(
970741a2c9SStefan Pintilie void test() {
980741a2c9SStefan Pintilie 1;
990741a2c9SStefan Pintilie -2;
1000741a2c9SStefan Pintilie 3;
1010741a2c9SStefan Pintilie }
1020741a2c9SStefan Pintilie )cpp";
1030741a2c9SStefan Pintilie
1040741a2c9SStefan Pintilie EXPECT_TRUE(visitorCallbackLogEqual(
1050741a2c9SStefan Pintilie RecordingVisitor(ShouldTraversePostOrder::No), Code,
1060741a2c9SStefan Pintilie R"txt(
1070741a2c9SStefan Pintilie WalkUpFromStmt CompoundStmt
1080741a2c9SStefan Pintilie WalkUpFromExpr IntegerLiteral(1)
1090741a2c9SStefan Pintilie WalkUpFromStmt IntegerLiteral(1)
1100741a2c9SStefan Pintilie TraverseUnaryOperator UnaryOperator(-)
1110741a2c9SStefan Pintilie WalkUpFromUnaryOperator UnaryOperator(-)
1120741a2c9SStefan Pintilie WalkUpFromExpr UnaryOperator(-)
1130741a2c9SStefan Pintilie WalkUpFromStmt UnaryOperator(-)
1140741a2c9SStefan Pintilie WalkUpFromExpr IntegerLiteral(2)
1150741a2c9SStefan Pintilie WalkUpFromStmt IntegerLiteral(2)
1160741a2c9SStefan Pintilie WalkUpFromExpr IntegerLiteral(3)
1170741a2c9SStefan Pintilie WalkUpFromStmt IntegerLiteral(3)
1180741a2c9SStefan Pintilie )txt"));
1190741a2c9SStefan Pintilie
1200741a2c9SStefan Pintilie EXPECT_TRUE(visitorCallbackLogEqual(
1210741a2c9SStefan Pintilie RecordingVisitor(ShouldTraversePostOrder::Yes), Code,
1220741a2c9SStefan Pintilie R"txt(
1230741a2c9SStefan Pintilie WalkUpFromExpr IntegerLiteral(1)
1240741a2c9SStefan Pintilie WalkUpFromStmt IntegerLiteral(1)
1250741a2c9SStefan Pintilie TraverseUnaryOperator UnaryOperator(-)
1260741a2c9SStefan Pintilie WalkUpFromExpr IntegerLiteral(2)
1270741a2c9SStefan Pintilie WalkUpFromStmt IntegerLiteral(2)
1280741a2c9SStefan Pintilie WalkUpFromUnaryOperator UnaryOperator(-)
1290741a2c9SStefan Pintilie WalkUpFromExpr UnaryOperator(-)
1300741a2c9SStefan Pintilie WalkUpFromStmt UnaryOperator(-)
1310741a2c9SStefan Pintilie WalkUpFromExpr IntegerLiteral(3)
1320741a2c9SStefan Pintilie WalkUpFromStmt IntegerLiteral(3)
1330741a2c9SStefan Pintilie WalkUpFromStmt CompoundStmt
1340741a2c9SStefan Pintilie )txt"));
1350741a2c9SStefan Pintilie }
1360741a2c9SStefan Pintilie
TEST(RecursiveASTVisitor,StmtCallbacks_WalkUpFromUnaryOperator)1370741a2c9SStefan Pintilie TEST(RecursiveASTVisitor, StmtCallbacks_WalkUpFromUnaryOperator) {
1380741a2c9SStefan Pintilie class RecordingVisitor : public RecordingVisitorBase<RecordingVisitor> {
1390741a2c9SStefan Pintilie public:
1400741a2c9SStefan Pintilie RecordingVisitor(ShouldTraversePostOrder ShouldTraversePostOrderValue)
1410741a2c9SStefan Pintilie : RecordingVisitorBase(ShouldTraversePostOrderValue) {}
1420741a2c9SStefan Pintilie
1430741a2c9SStefan Pintilie bool WalkUpFromStmt(Stmt *S) {
1440741a2c9SStefan Pintilie recordCallback(__func__, S,
1450741a2c9SStefan Pintilie [&]() { RecordingVisitorBase::WalkUpFromStmt(S); });
1460741a2c9SStefan Pintilie return true;
1470741a2c9SStefan Pintilie }
1480741a2c9SStefan Pintilie
1490741a2c9SStefan Pintilie bool WalkUpFromExpr(Expr *E) {
1500741a2c9SStefan Pintilie recordCallback(__func__, E,
1510741a2c9SStefan Pintilie [&]() { RecordingVisitorBase::WalkUpFromExpr(E); });
1520741a2c9SStefan Pintilie return true;
1530741a2c9SStefan Pintilie }
1540741a2c9SStefan Pintilie
1550741a2c9SStefan Pintilie bool WalkUpFromUnaryOperator(UnaryOperator *UO) {
1560741a2c9SStefan Pintilie recordCallback(__func__, UO, [&]() {
1570741a2c9SStefan Pintilie RecordingVisitorBase::WalkUpFromUnaryOperator(UO);
1580741a2c9SStefan Pintilie });
1590741a2c9SStefan Pintilie return true;
1600741a2c9SStefan Pintilie }
1610741a2c9SStefan Pintilie };
1620741a2c9SStefan Pintilie
1630741a2c9SStefan Pintilie StringRef Code = R"cpp(
1640741a2c9SStefan Pintilie void test() {
1650741a2c9SStefan Pintilie 1;
1660741a2c9SStefan Pintilie -2;
1670741a2c9SStefan Pintilie 3;
1680741a2c9SStefan Pintilie }
1690741a2c9SStefan Pintilie )cpp";
1700741a2c9SStefan Pintilie
1710741a2c9SStefan Pintilie EXPECT_TRUE(visitorCallbackLogEqual(
1720741a2c9SStefan Pintilie RecordingVisitor(ShouldTraversePostOrder::No), Code,
1730741a2c9SStefan Pintilie R"txt(
1740741a2c9SStefan Pintilie WalkUpFromStmt CompoundStmt
1750741a2c9SStefan Pintilie WalkUpFromExpr IntegerLiteral(1)
1760741a2c9SStefan Pintilie WalkUpFromStmt IntegerLiteral(1)
1770741a2c9SStefan Pintilie WalkUpFromUnaryOperator UnaryOperator(-)
1780741a2c9SStefan Pintilie WalkUpFromExpr UnaryOperator(-)
1790741a2c9SStefan Pintilie WalkUpFromStmt UnaryOperator(-)
1800741a2c9SStefan Pintilie WalkUpFromExpr IntegerLiteral(2)
1810741a2c9SStefan Pintilie WalkUpFromStmt IntegerLiteral(2)
1820741a2c9SStefan Pintilie WalkUpFromExpr IntegerLiteral(3)
1830741a2c9SStefan Pintilie WalkUpFromStmt IntegerLiteral(3)
1840741a2c9SStefan Pintilie )txt"));
1850741a2c9SStefan Pintilie
1860741a2c9SStefan Pintilie EXPECT_TRUE(visitorCallbackLogEqual(
1870741a2c9SStefan Pintilie RecordingVisitor(ShouldTraversePostOrder::Yes), Code,
1880741a2c9SStefan Pintilie R"txt(
1890741a2c9SStefan Pintilie WalkUpFromExpr IntegerLiteral(1)
1900741a2c9SStefan Pintilie WalkUpFromStmt IntegerLiteral(1)
1910741a2c9SStefan Pintilie WalkUpFromExpr IntegerLiteral(2)
1920741a2c9SStefan Pintilie WalkUpFromStmt IntegerLiteral(2)
1930741a2c9SStefan Pintilie WalkUpFromUnaryOperator UnaryOperator(-)
1940741a2c9SStefan Pintilie WalkUpFromExpr UnaryOperator(-)
1950741a2c9SStefan Pintilie WalkUpFromStmt UnaryOperator(-)
1960741a2c9SStefan Pintilie WalkUpFromExpr IntegerLiteral(3)
1970741a2c9SStefan Pintilie WalkUpFromStmt IntegerLiteral(3)
1980741a2c9SStefan Pintilie WalkUpFromStmt CompoundStmt
1990741a2c9SStefan Pintilie )txt"));
2000741a2c9SStefan Pintilie }
201