summaryrefslogtreecommitdiff
path: root/test/buildtool/build_engine
diff options
context:
space:
mode:
authorKlaus Aehlig <klaus.aehlig@huawei.com>2024-07-26 10:00:31 +0200
committerKlaus Aehlig <klaus.aehlig@huawei.com>2024-07-26 16:59:52 +0200
commitd3268a5bf2e89ed32515933d0aa09c16f35e3b1d (patch)
tree1e4a1429cbd412f1b7321e10e2760bb2e757df4a /test/buildtool/build_engine
parent1bf8196856c631640659e0a70d900ed7950a5e30 (diff)
downloadjustbuild-d3268a5bf2e89ed32515933d0aa09c16f35e3b1d.tar.gz
Add quasiquote expression
Diffstat (limited to 'test/buildtool/build_engine')
-rw-r--r--test/buildtool/build_engine/expression/expression.test.cpp54
1 files changed, 54 insertions, 0 deletions
diff --git a/test/buildtool/build_engine/expression/expression.test.cpp b/test/buildtool/build_engine/expression/expression.test.cpp
index 888e7216..3ee12f79 100644
--- a/test/buildtool/build_engine/expression/expression.test.cpp
+++ b/test/buildtool/build_engine/expression/expression.test.cpp
@@ -405,6 +405,60 @@ TEST_CASE("Expression Evaluation", "[expression]") { // NOLINT
CHECK(result_empty == Expression::FromJson(R"(null)"_json));
}
+ SECTION("quasi-quote expression") {
+ auto expr = Expression::FromJson(R"({"type": "`", "$1":
+ { "foo": {"type": ",", "$1": {"type": "var", "name": "foo_var"}}
+ , "bar": [ 1, 2, ["deep", "literals"]
+ , {"type": ",@", "$1": {"type": "var", "name": "bar_var"}}
+ , 3
+ , {"type": ",", "$1": {"type": "var", "name": "bar_plain"}}
+ , 4, 5
+ , {"type": ",", "$1": {"type": "var", "name": "foo_var"}}
+ , [ "deep", "expansion"
+ , {"type": ",", "$1": {"type": "var", "name": "bar_plain"}}
+ , {"type": ",@", "$1": {"type": "var", "name": "bar_var"}}
+ , {"type": ",", "$1": {"type": "var", "name": "foo_var"}}
+ ]
+ ]
+ }
+ })"_json);
+ REQUIRE(expr);
+ env = env.Update("foo_var", "foo value"s);
+ env = env.Update("bar_var",
+ Expression::FromJson(R"(["b", "a", "r"])"_json));
+ env =
+ env.Update("bar_plain",
+ Expression::FromJson(R"(["kept", "as", "list"])"_json));
+ auto result = expr.Evaluate(env, fcts);
+ auto expected = Expression::FromJson(R"(
+ { "foo": "foo value"
+ , "bar": [ 1, 2, ["deep", "literals"]
+ , "b", "a", "r"
+ , 3
+ , ["kept", "as", "list"]
+ , 4, 5
+ , "foo value"
+ , [ "deep", "expansion"
+ , ["kept", "as", "list"]
+ , "b", "a", "r"
+ , "foo value"
+ ]
+ ]
+ })"_json);
+
+ CHECK(result == expected);
+
+ auto doc_example_a = Expression::FromJson(
+ R"({"type": "`", "$1": [1, 2, {"type": ",@", "$1": [3, 4]}]})"_json);
+ auto result_a = doc_example_a.Evaluate(env, fcts);
+ CHECK(result_a == Expression::FromJson(R"([1, 2, 3, 4])"_json));
+
+ auto doc_example_b = Expression::FromJson(
+ R"({"type": "`", "$1": [1, 2, {"type": ",", "$1": [3, 4]}]})"_json);
+ auto result_b = doc_example_b.Evaluate(env, fcts);
+ CHECK(result_b == Expression::FromJson(R"([1, 2, [3, 4]])"_json));
+ }
+
SECTION("if expression") {
auto expr = Expression::FromJson(R"(
{ "type": "if"