diff options
author | Klaus Aehlig <klaus.aehlig@huawei.com> | 2024-07-26 10:00:31 +0200 |
---|---|---|
committer | Klaus Aehlig <klaus.aehlig@huawei.com> | 2024-07-26 16:59:52 +0200 |
commit | d3268a5bf2e89ed32515933d0aa09c16f35e3b1d (patch) | |
tree | 1e4a1429cbd412f1b7321e10e2760bb2e757df4a /test/buildtool/build_engine | |
parent | 1bf8196856c631640659e0a70d900ed7950a5e30 (diff) | |
download | justbuild-d3268a5bf2e89ed32515933d0aa09c16f35e3b1d.tar.gz |
Add quasiquote expression
Diffstat (limited to 'test/buildtool/build_engine')
-rw-r--r-- | test/buildtool/build_engine/expression/expression.test.cpp | 54 |
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" |