From 2f962ef097f2206ccca453fc688ef81cbcf3f337 Mon Sep 17 00:00:00 2001 From: Flex Ferrum Date: Mon, 14 Oct 2019 21:11:54 +0300 Subject: [PATCH] Resolves #166 Add global intrinsic functions into the proper map --- src/template_impl.h | 2 +- test/extends_test.cpp | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/template_impl.h b/src/template_impl.h index 5ffe65f..c225d05 100644 --- a/src/template_impl.h +++ b/src/template_impl.h @@ -187,7 +187,7 @@ class TemplateImpl : public ITemplateImpl } convertFn(params); - SetupGlobals(intParams); + SetupGlobals(extParams); RendererCallback callback(this); RenderContext context(intParams, extParams, &callback); diff --git a/test/extends_test.cpp b/test/extends_test.cpp index 92eed78..5214d1f 100644 --- a/test/extends_test.cpp +++ b/test/extends_test.cpp @@ -195,6 +195,29 @@ TEST_F(ExtendsTest, ScopedBlocksExtends) EXPECT_STREQ(expectedResult.c_str(), result.c_str()); } +TEST_F(ExtendsTest, NoScopedGlobalVarsAccess) +{ + m_templateFs->AddFile("base.j2tpl", + "Hello World! ->{% block b1 %}=>block b1<={% endblock %}<- ->{% block b2 %}{% endblock b2%}{% block b3 %}Parent block loop {% for i " + "in range(num) %}Foo{{i+1}},{% endfor %}{% endblock b3%}<-"); + m_templateFs->AddFile( + "derived.j2tpl", + R"({% extends "base.j2tpl" %}{%block b1%}Extended block b1!{{super()}}{%endblock%}Some Stuff{%block b2%}Extended block b2!{%endblock%}{% block b3 %}This is overriden block "A". {% for i in range(num) %}Foo{{i+1}},{% endfor %}{% endblock b3 %})"); + + auto baseTpl = m_env.LoadTemplate("base.j2tpl").value(); + auto tpl = m_env.LoadTemplate("derived.j2tpl").value(); + + m_env.AddGlobal("num", 3); + + std::string baseResult = baseTpl.RenderAsString(jinja2::ValuesMap{}).value(); + std::cout << baseResult << std::endl; + std::string expectedResult = "Hello World! ->=>block b1<=<- ->Parent block loop Foo1,Foo2,Foo3,<-"; + EXPECT_STREQ(expectedResult.c_str(), baseResult.c_str()); + std::string result = tpl.RenderAsString(jinja2::ValuesMap{}).value(); + std::cout << result << std::endl; + expectedResult = "Hello World! ->Extended block b1!=>block b1<=<- ->Extended block b2!This is overriden block \"A\". Foo1,Foo2,Foo3,<-"; + EXPECT_STREQ(expectedResult.c_str(), result.c_str()); +} TEST_F(ExtendsTest, MacroUsage) {