88import com .hubspot .jinjava .interpret .Context ;
99import com .hubspot .jinjava .interpret .DeferredValue ;
1010import com .hubspot .jinjava .interpret .JinjavaInterpreter ;
11+ import com .hubspot .jinjava .lib .filter .Filter ;
1112import com .hubspot .jinjava .lib .tag .ImportTag ;
1213import com .hubspot .jinjava .lib .tag .ImportTagTest ;
1314import com .hubspot .jinjava .lib .tag .Tag ;
@@ -31,8 +32,9 @@ public class EagerImportTagTest extends ImportTagTest {
3132 private static final String TEMPLATE_FILE = "template.jinja" ;
3233
3334 @ Before
34- public void eagerSetup () {
35+ public void eagerSetup () throws Exception {
3536 context .put ("padding" , 42 );
37+ context .registerFilter (new PrintPathFilter ());
3638 interpreter =
3739 new JinjavaInterpreter (
3840 jinjava ,
@@ -409,9 +411,12 @@ public void itDefersTripleLayer() {
409411 // There are some extras due to deferred values copying up the context stack.
410412 assertThat (interpreter .render (result ).trim ())
411413 .isEqualTo (
412- "{'b': {'foo_b': 'ba', 'a': {'foo_a': 'a', 'something': 'somn'}, 'foo_a': 'a'}, " +
413- "'foo_c': 'cbaa', " +
414- "'a': {'foo_a': 'a', 'something': 'somn'}, 'foo_b': 'ba', 'foo_a': 'a'}"
414+ "{'b': {'foo_b': 'ba', 'a': " +
415+ "{'foo_a': 'a', 'import_resource_path': 'import-tree-a.jinja', 'something': 'somn'}, " +
416+ "'foo_a': 'a', 'import_resource_path': 'import-tree-b.jinja'}, " +
417+ "'foo_c': 'cbaa', 'a': {'foo_a': 'a', 'import_resource_path': " +
418+ "'import-tree-a.jinja', 'something': 'somn'}, " +
419+ "'foo_b': 'ba', 'foo_a': 'a', 'import_resource_path': 'import-tree-c.jinja'}"
415420 );
416421 }
417422
@@ -440,6 +445,64 @@ public void itDefersQuadLayer() {
440445 assertThat (interpreter .render (result ).trim ()).isEqualTo ("12345 cbaabaaba" );
441446 }
442447
448+ @ Test
449+ public void itCorrectlySetsAliasedPath () {
450+ setupResourceLocator ();
451+ context .put ("foo" , "foo" );
452+ String result = interpreter .render (
453+ "{% import 'import-macro.jinja' as m %}{{ m.print_path_macro(foo) }}"
454+ );
455+ assertThat (result .trim ()).isEqualTo ("import-macro.jinja\n foo" );
456+ }
457+
458+ @ Test
459+ public void itCorrectlySetsPath () {
460+ setupResourceLocator ();
461+ context .put ("foo" , "foo" );
462+ String result = interpreter .render (
463+ "{% import 'import-macro.jinja' %}{{ print_path_macro(foo) }}"
464+ );
465+ assertThat (result .trim ()).isEqualTo ("import-macro.jinja\n foo" );
466+ }
467+
468+ @ Test
469+ public void itCorrectlySetsAliasedPathForSecondPass () {
470+ setupResourceLocator ();
471+ context .put ("foo" , DeferredValue .instance ());
472+ String firstPassResult = interpreter .render (
473+ "{% import 'import-macro.jinja' as m %}{{ m.print_path_macro(foo) }}"
474+ );
475+ assertThat (firstPassResult )
476+ .isEqualTo (
477+ "{% set deferred_import_resource_path = 'import-macro.jinja' %}{% macro m.print_path_macro(var) %}\n " +
478+ "{{ var|print_path }}\n " +
479+ "{{ var }}\n " +
480+ "{% endmacro %}{% set deferred_import_resource_path = null %}{{ m.print_path_macro(foo) }}"
481+ );
482+ context .put ("foo" , "foo" );
483+ assertThat (interpreter .render (firstPassResult ).trim ())
484+ .isEqualTo ("import-macro.jinja\n foo" );
485+ }
486+
487+ @ Test
488+ public void itCorrectlySetsPathForSecondPass () {
489+ setupResourceLocator ();
490+ context .put ("foo" , DeferredValue .instance ());
491+ String firstPassResult = interpreter .render (
492+ "{% import 'import-macro.jinja' %}{{ print_path_macro(foo) }}"
493+ );
494+ assertThat (firstPassResult )
495+ .isEqualTo (
496+ "{% set deferred_import_resource_path = 'import-macro.jinja' %}{% macro print_path_macro(var) %}\n " +
497+ "{{ var|print_path }}\n " +
498+ "{{ var }}\n " +
499+ "{% endmacro %}{% set deferred_import_resource_path = null %}{{ print_path_macro(foo) }}"
500+ );
501+ context .put ("foo" , "foo" );
502+ assertThat (interpreter .render (firstPassResult ).trim ())
503+ .isEqualTo ("import-macro.jinja\n foo" );
504+ }
505+
443506 @ Test
444507 public void itImportsDoublyNamed () {
445508 setupResourceLocator ();
@@ -488,6 +551,19 @@ public Optional<LocationResolver> getLocationResolver() {
488551 );
489552 }
490553
554+ public static class PrintPathFilter implements Filter {
555+
556+ @ Override
557+ public Object filter (Object var , JinjavaInterpreter interpreter , String ... args ) {
558+ return interpreter .getContext ().getCurrentPathStack ().peek ().orElse ("/" );
559+ }
560+
561+ @ Override
562+ public String getName () {
563+ return "print_path" ;
564+ }
565+ }
566+
491567 @ Test
492568 @ Ignore
493569 @ Override
0 commit comments