summaryrefslogtreecommitdiff
path: root/test/buildtool/build_engine/expression/expression.test.cpp
diff options
context:
space:
mode:
authorKlaus Aehlig <klaus.aehlig@huawei.com>2024-04-22 13:25:03 +0200
committerKlaus Aehlig <klaus.aehlig@huawei.com>2024-04-24 12:30:09 +0200
commita61f044171247baaca7cc08283231f64eaf09e88 (patch)
tree8a15cc95d4fdd7005ac2d853a4c527001b13db5f /test/buildtool/build_engine/expression/expression.test.cpp
parenta664558b32a3af0c3606715c069ecf64218964aa (diff)
downloadjustbuild-a61f044171247baaca7cc08283231f64eaf09e88.tar.gz
expressions: add basic test for assertions
Diffstat (limited to 'test/buildtool/build_engine/expression/expression.test.cpp')
-rw-r--r--test/buildtool/build_engine/expression/expression.test.cpp49
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;