From 44f7461a8a72057b28b22ee860de7476e0985c37 Mon Sep 17 00:00:00 2001 From: pantor Date: Mon, 19 Mar 2018 10:30:26 +0100 Subject: [PATCH] allow empty lists for loops --- src/inja.hpp | 1 + test/src/unit-renderer.cpp | 3 +++ 2 files changed, 4 insertions(+) diff --git a/src/inja.hpp b/src/inja.hpp index dc70f9f..49595fd 100644 --- a/src/inja.hpp +++ b/src/inja.hpp @@ -380,6 +380,7 @@ public: template T eval_expression(const Parsed::ElementExpression& element, const json& data) { const json var = eval_function(element, data); + if (var.empty()) return T(); try { return var.get(); } catch (json::type_error& e) { diff --git a/test/src/unit-renderer.cpp b/test/src/unit-renderer.cpp index ffdbb00..07eff70 100644 --- a/test/src/unit-renderer.cpp +++ b/test/src/unit-renderer.cpp @@ -56,6 +56,9 @@ TEST_CASE("types") { CHECK( env.render("{% for v in vars %}{% if v > 0 %}+{% endif %}{% endfor %}", data) == "+++" ); // CHECK( env.render("{% if 1 >= 18 %}test{% endif %}{% for v in vars %}{% if v > 0 %}+{% else %}-{% endif %}{% endfor %}", data) == "+++----" ); + data["empty_loop"] = {}; + CHECK( env.render("{% for name in empty_loop %}a{% endfor %}", data) == "" ); + CHECK_THROWS_WITH( env.render("{% for name ins names %}a{% endfor %}", data), "[inja.exception.parser_error] unknown loop statement: for name ins names" ); // CHECK_THROWS_WITH( env.render("{% for name in relatives %}{{ name }}{% endfor %}", data), "[inja.exception.json_error] [json.exception.type_error.302] type must be array, but is object" ); }