diff options
Diffstat (limited to 'test/buildtool/build_engine/expression/expression.test.cpp')
-rw-r--r-- | test/buildtool/build_engine/expression/expression.test.cpp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/test/buildtool/build_engine/expression/expression.test.cpp b/test/buildtool/build_engine/expression/expression.test.cpp index f85c41d2..256eb392 100644 --- a/test/buildtool/build_engine/expression/expression.test.cpp +++ b/test/buildtool/build_engine/expression/expression.test.cpp @@ -13,6 +13,7 @@ // limitations under the License. #include <filesystem> +#include <sstream> #include <string> #include <vector> @@ -1553,6 +1554,54 @@ TEST_CASE("Expression Evaluation", "[expression]") { // NOLINT } } +TEST_CASE("Expression Assertions", "[expression]") { + using namespace std::string_literals; + auto env = Configuration{}; + auto fcts = FunctionMapPtr{}; + + SECTION("fail") { + auto expr = Expression::FromJson(R"( + { "type": "fail" + , "msg": {"type": "join", "$1": ["ErRoR", "mEsSaGe"]} + } + )"_json); + REQUIRE(expr); + + std::stringstream log{}; + CHECK(not expr.Evaluate(env, fcts, [&](auto msg) { log << msg; })); + CHECK(log.str().find("ErRoRmEsSaGe") != std::string::npos); + } + + SECTION("assert_non_empty") { + auto expr = Expression::FromJson(R"( + { "type": "assert_non_empty" + , "msg": "Found-Empty!!" + , "$1": {"type": "var", "name": "x"} + } + )"_json); + REQUIRE(expr); + + auto list = Expression::FromJson(R"([1, 2, 3])"_json); + CHECK(expr.Evaluate(env.Update("x", list), fcts) == list); + auto map = Expression::FromJson(R"({"foo": "bar"})"_json); + CHECK(expr.Evaluate(env.Update("x", map), fcts) == map); + + auto empty_list = Expression::FromJson(R"([])"_json); + std::stringstream log_list{}; + CHECK(not expr.Evaluate(env.Update("x", empty_list), + fcts, + [&](auto msg) { log_list << msg; })); + CHECK(log_list.str().find("Found-Empty!!") != std::string::npos); + + auto empty_map = Expression::FromJson(R"({})"_json); + std::stringstream log_map{}; + CHECK(not expr.Evaluate(env.Update("x", empty_map), + fcts, + [&](auto msg) { log_map << msg; })); + CHECK(log_map.str().find("Found-Empty!!") != std::string::npos); + } +} + TEST_CASE("Expression hash computation", "[expression]") { using namespace std::string_literals; using path = std::filesystem::path; |