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" ); }