summaryrefslogtreecommitdiff
path: root/test/buildtool/build_engine/expression/expression.test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/buildtool/build_engine/expression/expression.test.cpp')
-rw-r--r--test/buildtool/build_engine/expression/expression.test.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/test/buildtool/build_engine/expression/expression.test.cpp b/test/buildtool/build_engine/expression/expression.test.cpp
index 256eb392..18189baf 100644
--- a/test/buildtool/build_engine/expression/expression.test.cpp
+++ b/test/buildtool/build_engine/expression/expression.test.cpp
@@ -1600,6 +1600,33 @@ TEST_CASE("Expression Assertions", "[expression]") {
[&](auto msg) { log_map << msg; }));
CHECK(log_map.str().find("Found-Empty!!") != std::string::npos);
}
+
+ SECTION("assert") {
+ auto expr = Expression::FromJson(R"(
+ { "type": "assert"
+ , "predicate": {"type": "[]", "index": 0
+ , "list": {"type": "var", "name": "_"}}
+ , "msg": ["First entry UNTRUE", {"type": "var", "name": "_"}]
+ , "$1": {"type": "++", "$1": [{"type": "var", "name": "x"}
+ , ["b", "c"]]}
+ })"_json);
+ REQUIRE(expr);
+
+ CHECK(expr.Evaluate(
+ env.Update("x", Expression::FromJson(R"(["a"])"_json)),
+ fcts) == Expression::FromJson(R"(["a", "b", "c"])"_json));
+
+ std::stringstream log{};
+ CHECK(not expr.Evaluate(
+ env.Update("x", Expression::FromJson(R"([false, "foo"])"_json)),
+ fcts,
+ [&](auto msg) { log << msg; }));
+ // log must contain the canoncial (minimal) repesentation of evaluating
+ // "msg"
+ CHECK(
+ log.str().find(R"(["First entry UNTRUE",[false,"foo","b","c"])"s) !=
+ std::string::npos);
+ }
}
TEST_CASE("Expression hash computation", "[expression]") {