diff options
author | Toni Uhlig <matzeton@googlemail.com> | 2021-11-15 12:51:46 +0100 |
---|---|---|
committer | Toni Uhlig <matzeton@googlemail.com> | 2021-11-15 12:51:46 +0100 |
commit | c6846d9c3a35145467c3276f35742e562d584b36 (patch) | |
tree | 8e1425fae4c5372bf2c3d122d7ef9c652dd00686 /deps/inja/test/test-functions.cpp | |
parent | c2ef613b99d01e742127d894756e49f42b1f264d (diff) | |
parent | 662f5a771f3807bf7ebd5a3989230d5d0a26659d (diff) |
Merge commit '662f5a771f3807bf7ebd5a3989230d5d0a26659d'
Signed-off-by: Toni Uhlig <matzeton@googlemail.com>
Diffstat (limited to 'deps/inja/test/test-functions.cpp')
-rw-r--r-- | deps/inja/test/test-functions.cpp | 51 |
1 files changed, 33 insertions, 18 deletions
diff --git a/deps/inja/test/test-functions.cpp b/deps/inja/test/test-functions.cpp index 4870205..667f553 100644 --- a/deps/inja/test/test-functions.cpp +++ b/deps/inja/test/test-functions.cpp @@ -3,7 +3,7 @@ TEST_CASE("functions") { inja::Environment env; - json data; + inja::json data; data["name"] = "Peter"; data["city"] = "New York"; data["names"] = {"Jeff", "Seb", "Peter", "Tom"}; @@ -56,8 +56,8 @@ TEST_CASE("functions") { SUBCASE("length") { CHECK(env.render("{{ length(names) }}", data) == "4"); // Length of array CHECK(env.render("{{ length(name) }}", data) == "5"); // Length of string - // CHECK_THROWS_WITH( env.render("{{ length(5) }}", data), "[inja.exception.json_error] - // [json.exception.type_error.302] type must be array, but is number" ); + // CHECK_THROWS_WITH( env.render("{{ length(5) }}", data), "[inja.exception.json_error] + // [json.exception.type_error.302] type must be array, but is number" ); } SUBCASE("sort") { @@ -70,6 +70,8 @@ TEST_CASE("functions") { SUBCASE("at") { CHECK(env.render("{{ at(names, 0) }}", data) == "Jeff"); CHECK(env.render("{{ at(names, i) }}", data) == "Seb"); + CHECK(env.render("{{ at(brother, \"name\") }}", data) == "Chris"); + CHECK(env.render("{{ at(at(brother, \"daughters\"), 0) }}", data) == "Maria"); // CHECK(env.render("{{ at(names, 45) }}", data) == "Jeff"); } @@ -86,7 +88,7 @@ TEST_CASE("functions") { } SUBCASE("round") { - CHECK(env.render("{{ round(4, 0) }}", data) == "4.0"); + CHECK(env.render("{{ round(4, 0) }}", data) == "4"); CHECK(env.render("{{ round(temperature, 2) }}", data) == "25.68"); // CHECK_THROWS_WITH( env.render("{{ round(name, 2) }}", data), "[inja.exception.json_error] // [json.exception.type_error.302] type must be number, but is string" ); @@ -148,8 +150,7 @@ TEST_CASE("functions") { CHECK(env.render("{{ default(name, \"nobody\") }}", data) == "Peter"); CHECK(env.render("{{ default(surname, \"nobody\") }}", data) == "nobody"); CHECK(env.render("{{ default(surname, \"{{ surname }}\") }}", data) == "{{ surname }}"); - CHECK_THROWS_WITH(env.render("{{ default(surname, lastname) }}", data), - "[inja.exception.render_error] (at 1:21) variable 'lastname' not found"); + CHECK_THROWS_WITH(env.render("{{ default(surname, lastname) }}", data), "[inja.exception.render_error] (at 1:21) variable 'lastname' not found"); } SUBCASE("exists") { @@ -166,10 +167,13 @@ TEST_CASE("functions") { CHECK(env.render("{{ existsIn(brother, \"parents\") }}", data) == "false"); CHECK(env.render("{{ existsIn(brother, property) }}", data) == "true"); CHECK(env.render("{{ existsIn(brother, name) }}", data) == "false"); - CHECK_THROWS_WITH(env.render("{{ existsIn(sister, \"lastname\") }}", data), - "[inja.exception.render_error] (at 1:13) variable 'sister' not found"); - CHECK_THROWS_WITH(env.render("{{ existsIn(brother, sister) }}", data), - "[inja.exception.render_error] (at 1:22) variable 'sister' not found"); + CHECK_THROWS_WITH(env.render("{{ existsIn(sister, \"lastname\") }}", data), "[inja.exception.render_error] (at 1:13) variable 'sister' not found"); + CHECK_THROWS_WITH(env.render("{{ existsIn(brother, sister) }}", data), "[inja.exception.render_error] (at 1:22) variable 'sister' not found"); + } + + SUBCASE("join") { + CHECK(env.render("{{ join(names, \" | \") }}", data) == "Jeff | Seb | Peter | Tom"); + CHECK(env.render("{{ join(vars, \", \") }}", data) == "2, 3, 4, 0, -1, -2, -3"); } SUBCASE("isType") { @@ -190,12 +194,22 @@ TEST_CASE("functions") { } } +TEST_CASE("assignments") { + inja::Environment env; + inja::json data; + data["age"] = 28; + + CHECK(env.render("{% set new_hour=23 %}{{ new_hour }}", data) == "23"); + CHECK(env.render("{% set time.start=18 %}{{ time.start }}pm", data) == "18pm"); + CHECK(env.render("{% set v1 = \"a\" %}{% set v2 = \"b\" %}{% set var = v1 + v2 %}{{ var }}", data) == "ab"); +} + TEST_CASE("callbacks") { inja::Environment env; - json data; + inja::json data; data["age"] = 28; - env.add_callback("double", 1, [](inja::Arguments &args) { + env.add_callback("double", 1, [](inja::Arguments& args) { int number = args.at(0)->get<int>(); return 2 * number; }); @@ -206,7 +220,7 @@ TEST_CASE("callbacks") { }); std::string greet = "Hello"; - env.add_callback("double-greetings", 0, [greet](inja::Arguments args) { return greet + " " + greet + "!"; }); + env.add_callback("double-greetings", 0, [greet](inja::Arguments) { return greet + " " + greet + "!"; }); env.add_callback("multiply", 2, [](inja::Arguments args) { double number1 = args.at(0)->get<double>(); @@ -226,11 +240,11 @@ TEST_CASE("callbacks") { return number1.length(); }); - env.add_void_callback("log", 1, [](inja::Arguments args) { - int a = 2; + env.add_void_callback("log", 1, [](inja::Arguments) { + }); - env.add_callback("multiply", 0, [](inja::Arguments args) { return 1.0; }); + env.add_callback("multiply", 0, [](inja::Arguments) { return 1.0; }); CHECK(env.render("{{ double(age) }}", data) == "56"); CHECK(env.render("{{ half(age) }}", data) == "14"); @@ -245,7 +259,7 @@ TEST_CASE("callbacks") { SUBCASE("Variadic") { env.add_callback("argmax", [](inja::Arguments& args) { - auto result = std::max_element(args.begin(), args.end(), [](const json* a, const json* b) { return *a < *b;}); + auto result = std::max_element(args.begin(), args.end(), [](const inja::json* a, const inja::json* b) { return *a < *b; }); return std::distance(args.begin(), result); }); @@ -256,7 +270,7 @@ TEST_CASE("callbacks") { TEST_CASE("combinations") { inja::Environment env; - json data; + inja::json data; data["name"] = "Peter"; data["city"] = "Brunswick"; data["age"] = 29; @@ -282,4 +296,5 @@ TEST_CASE("combinations") { CHECK(env.render("{{ not true }}", data) == "false"); CHECK(env.render("{{ not (true) }}", data) == "false"); CHECK(env.render("{{ true or (true or true) }}", data) == "true"); + CHECK(env.render("{{ at(list_of_objects, 1).b }}", data) == "3"); } |