summaryrefslogtreecommitdiff
path: root/test/buildtool/build_engine
diff options
context:
space:
mode:
authorPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2025-03-24 15:44:11 +0100
committerPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2025-03-24 16:28:51 +0100
commitc39bac9d573f9692cd67ba79c1192f2554c7385d (patch)
treed94518554890b9e22c0cf528e82ba97637e1974b /test/buildtool/build_engine
parented2a48615e568a59409fc0dd7d7341d27af896ca (diff)
downloadjustbuild-c39bac9d573f9692cd67ba79c1192f2554c7385d.tar.gz
Test 'zip_map' expression
Diffstat (limited to 'test/buildtool/build_engine')
-rw-r--r--test/buildtool/build_engine/expression/expression.test.cpp117
1 files changed, 117 insertions, 0 deletions
diff --git a/test/buildtool/build_engine/expression/expression.test.cpp b/test/buildtool/build_engine/expression/expression.test.cpp
index 4afce50c..c16ffe97 100644
--- a/test/buildtool/build_engine/expression/expression.test.cpp
+++ b/test/buildtool/build_engine/expression/expression.test.cpp
@@ -1737,6 +1737,123 @@ TEST_CASE("Expression Evaluation", "[expression]") { // NOLINT
CHECK_FALSE(expr.Evaluate(env, fcts));
}
+ SECTION("zip_map expression") {
+ auto expr = Expression::FromJson(R"(
+ { "type": "zip_map" })"_json);
+ REQUIRE(expr);
+
+ // ranges are missing (should default to empty map)
+ auto result = expr.Evaluate(env, fcts);
+ REQUIRE(result);
+ REQUIRE(result->IsMap());
+ CHECK(result == Expression::FromJson(R"({})"_json));
+
+ // one range is missing (should default to empty map)
+ expr = Add(expr, "range_key", Expression::FromJson(R"(
+ { "type": "'"
+ , "$1": [""]})"_json));
+ REQUIRE(expr);
+
+ result = expr.Evaluate(env, fcts);
+ REQUIRE(result);
+ REQUIRE(result->IsMap());
+ CHECK(result == Expression::FromJson(R"({})"_json));
+
+ // ranges are lists with one entry
+ expr = Replace(expr, "range_key", Expression::FromJson(R"(
+ { "type": "'"
+ , "$1": ["foo"]})"_json));
+ expr = Add(expr, "range_val", Expression::FromJson(R"(
+ { "type": "'"
+ , "$1": ["bar"]})"_json));
+ REQUIRE(expr);
+
+ result = expr.Evaluate(env, fcts);
+ REQUIRE(result);
+ REQUIRE(result->IsMap());
+ CHECK(result == Expression::FromJson(R"({"foo" : "bar"})"_json));
+
+ // ranges are lists with multiple entries
+ expr = Replace(expr, "range_key", Expression::FromJson(R"(
+ { "type": "'"
+ , "$1": ["foo", "bar"]})"_json));
+ expr = Replace(expr, "range_val", Expression::FromJson(R"(
+ { "type": "'"
+ , "$1": ["bar", "baz"]})"_json));
+ REQUIRE(expr);
+
+ result = expr.Evaluate(env, fcts);
+ REQUIRE(result);
+ REQUIRE(result->IsMap());
+ CHECK(result ==
+ Expression::FromJson(R"({"bar": "baz", "foo": "bar"})"_json));
+
+ // ranges are lists with different sizes
+ expr = Replace(expr, "range_key", Expression::FromJson(R"(
+ { "type": "'"
+ , "$1": ["foo", "bar"]})"_json));
+ expr = Replace(expr, "range_val", Expression::FromJson(R"(
+ { "type": "'"
+ , "$1": ["bar"]})"_json));
+ REQUIRE(expr);
+
+ result = expr.Evaluate(env, fcts);
+ REQUIRE(result);
+ REQUIRE(result->IsMap());
+ CHECK(result == Expression::FromJson(R"({"foo": "bar"})"_json));
+
+ // fail if ranges are string
+ expr = Replace(expr, "range_key", Expression::FromJson(R"(
+ { "type": "'"
+ , "$1": [""]})"_json));
+ expr =
+ Replace(expr, "range_val", Expression::FromJson(R"("foo")"_json));
+ REQUIRE(expr);
+ CHECK_FALSE(expr.Evaluate(env, fcts));
+
+ expr = Replace(expr, "range_val", Expression::FromJson(R"(
+ { "type": "'"
+ , "$1": [""]})"_json));
+ expr =
+ Replace(expr, "range_key", Expression::FromJson(R"("foo")"_json));
+ REQUIRE(expr);
+ CHECK_FALSE(expr.Evaluate(env, fcts));
+
+ // fail if ranges are number
+ expr = Replace(expr, "range_key", Expression::FromJson(R"(
+ { "type": "'"
+ , "$1": [""]})"_json));
+ expr =
+ Replace(expr, "range_val", Expression::FromJson(R"("4711")"_json));
+ REQUIRE(expr);
+ CHECK_FALSE(expr.Evaluate(env, fcts));
+
+ expr = Replace(expr, "range_val", Expression::FromJson(R"(
+ { "type": "'"
+ , "$1": [""]})"_json));
+ expr =
+ Replace(expr, "range_key", Expression::FromJson(R"("4711")"_json));
+ REQUIRE(expr);
+ CHECK_FALSE(expr.Evaluate(env, fcts));
+
+ // fail if ranges are Boolean
+ expr = Replace(expr, "range_key", Expression::FromJson(R"(
+ { "type": "'"
+ , "$1": [""]})"_json));
+ expr =
+ Replace(expr, "range_val", Expression::FromJson(R"("true")"_json));
+ REQUIRE(expr);
+ CHECK_FALSE(expr.Evaluate(env, fcts));
+
+ expr = Replace(expr, "range_val", Expression::FromJson(R"(
+ { "type": "'"
+ , "$1": [""]})"_json));
+ expr =
+ Replace(expr, "range_key", Expression::FromJson(R"("true")"_json));
+ REQUIRE(expr);
+ CHECK_FALSE(expr.Evaluate(env, fcts));
+ }
+
SECTION("foldl expression") {
auto expr = Expression::FromJson(R"(
{ "type": "foldl"