@@ -109,6 +109,51 @@ Hello default
109109 EXPECT_EQ (expectedResult, result);
110110}
111111
112+ TEST (UserCallableTest, ReflectedCallable)
113+ {
114+ std::string source = R"(
115+ {% set callable = reflected.basicCallable %}{{ callable() }}
116+ {{ reflected.basicCallable() }}
117+ {% set inner = reflected.getInnerStruct() %}{{ inner.strValue }}
118+ {% set innerValue = reflected.getInnerStructValue() %}{{ innerValue.strValue }}
119+ {{ innerReflected.strValue }}
120+ )" ;
121+
122+ Template tpl;
123+ auto parseRes = tpl.Load (source);
124+ EXPECT_TRUE (parseRes.has_value ());
125+ if (!parseRes)
126+ {
127+ std::cout << parseRes.error () << std::endl;
128+ return ;
129+ }
130+
131+ TestStruct reflected;
132+ auto innerReflected = std::make_shared<TestInnerStruct>();
133+ innerReflected->strValue = " !!Hello World!!" ;
134+ reflected.intValue = 100500 ;
135+ reflected.innerStruct = std::make_shared<TestInnerStruct>();
136+ reflected.innerStruct ->strValue = " Hello World!" ;
137+ {
138+ jinja2::ValuesMap params;
139+ params[" reflected" ] = jinja2::Reflect (reflected);
140+ params[" innerReflected" ] = jinja2::Reflect (innerReflected);
141+
142+ std::string result = tpl.RenderAsString (params);
143+ std::cout << result << std::endl;
144+ std::string expectedResult = R"(
145+ 100500
146+ 100500
147+ Hello World!
148+ Hello World!
149+ !!Hello World!!
150+ )" ;
151+ EXPECT_EQ (expectedResult, result);
152+ }
153+ EXPECT_EQ (1L , innerReflected.use_count ());
154+ EXPECT_EQ (1L , reflected.innerStruct .use_count ());
155+ }
156+
112157struct UserCallableParamConvertTestTag ;
113158using UserCallableParamConvertTest = InputOutputPairTest<UserCallableParamConvertTestTag>;
114159
@@ -266,7 +311,7 @@ INSTANTIATE_TEST_CASE_P(MapParamConvert, UserCallableParamConvertTest, ::testing
266311 InputOutputPair{" GMapFn(simpleMapValue) | dictsort" ,
267312 " ['boolValue': true, 'dblVal': 100.5, 'intVal': 10, 'stringVal': 'string100.5']" },
268313 InputOutputPair{" GMapFn(reflectedVal) | dictsort" ,
269- " ['boolValue': false, 'dblValue': 0, 'innerStruct': {'strValue': 'Hello World!'}, "
314+ " ['basicCallable': <callable>, ' boolValue': false, 'dblValue': 0, 'getInnerStruct': <callable>, 'getInnerStructValue': <callable> , 'innerStruct': {'strValue': 'Hello World!'}, "
270315 " 'innerStructList': [{'strValue': 'Hello World!'}, {'strValue': 'Hello World!'}, "
271316 " {'strValue': 'Hello World!'}, {'strValue': 'Hello World!'}, {'strValue': 'Hello World!'}, "
272317 " {'strValue': 'Hello World!'}, {'strValue': 'Hello World!'}, {'strValue': 'Hello World!'}, "
0 commit comments