diff options
author | Yitzhak Mandelbaum <yitzhakm@google.com> | 2019-09-26 00:53:56 +0000 |
---|---|---|
committer | Yitzhak Mandelbaum <yitzhakm@google.com> | 2019-09-26 00:53:56 +0000 |
commit | fff381358d2e5443086f2d994c624b043cffc14b (patch) | |
tree | 8cf0cf2e4c9a007acbcf386ae8795a0fca853cbc /unittests | |
parent | 4cd0ed30b2c0c425debc1684478e3b49584ba464 (diff) | |
download | clang-fff381358d2e5443086f2d994c624b043cffc14b.tar.gz |
[libTooling] Add `run` combinator to Stencils.
Summary:
This revision adds `run`, a StencilPart that runs a user-defined function that
computes a result over `MatchFinder::MatchResult`.
Reviewers: gribozavr
Subscribers: cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D67969
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@372936 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'unittests')
-rw-r--r-- | unittests/Tooling/StencilTest.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/unittests/Tooling/StencilTest.cpp b/unittests/Tooling/StencilTest.cpp index cc0e8facca..2202693f02 100644 --- a/unittests/Tooling/StencilTest.cpp +++ b/unittests/Tooling/StencilTest.cpp @@ -29,6 +29,7 @@ using stencil::access; using stencil::cat; using stencil::dPrint; using stencil::ifBound; +using stencil::run; using stencil::text; // Create a valid translation-unit from a statement. @@ -283,6 +284,15 @@ TEST_F(StencilTest, AccessOpImplicitThis) { EXPECT_THAT_EXPECTED(Stencil.eval(StmtMatch->Result), HasValue("field")); } +TEST_F(StencilTest, RunOp) { + StringRef Id = "id"; + auto SimpleFn = [Id](const MatchResult &R) { + return std::string(R.Nodes.getNodeAs<Stmt>(Id) != nullptr ? "Bound" + : "Unbound"); + }; + testExpr(Id, "3;", cat(run(SimpleFn)), "Bound"); +} + TEST(StencilEqualityTest, Equality) { auto Lhs = cat("foo", dPrint("dprint_id")); auto Rhs = cat("foo", dPrint("dprint_id")); @@ -307,4 +317,12 @@ TEST(StencilEqualityTest, InEqualitySelection) { auto S2 = cat(node("node")); EXPECT_NE(S1, S2); } + +// `run` is opaque. +TEST(StencilEqualityTest, InEqualityRun) { + auto F = [](const MatchResult &R) { return "foo"; }; + auto S1 = cat(run(F)); + auto S2 = cat(run(F)); + EXPECT_NE(S1, S2); +} } // namespace |