Skip to content

Commit 6497990

Browse files
committed
Actually it's fine to process extends roots in From and ImportTag
because they use child interpreters
1 parent de36db9 commit 6497990

10 files changed

Lines changed: 57 additions & 6 deletions

File tree

src/main/java/com/hubspot/jinjava/lib/tag/FromTag.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ public String interpret(TagNode tagNode, JinjavaInterpreter interpreter) {
9595
child.getContext().put(Context.IMPORT_RESOURCE_PATH_KEY, templateFile);
9696
JinjavaInterpreter.pushCurrent(child);
9797
try {
98-
child.render(node, false);
98+
child.render(node);
9999
} finally {
100100
JinjavaInterpreter.popCurrent();
101101
}

src/main/java/com/hubspot/jinjava/lib/tag/ImportTag.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public String interpret(TagNode tagNode, JinjavaInterpreter interpreter) {
102102
JinjavaInterpreter.pushCurrent(child);
103103

104104
try {
105-
child.render(node, false);
105+
child.render(node);
106106
} finally {
107107
JinjavaInterpreter.popCurrent();
108108
}

src/main/java/com/hubspot/jinjava/lib/tag/eager/EagerFromTag.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public String getEagerTagImage(TagToken tagToken, JinjavaInterpreter interpreter
7979
JinjavaInterpreter.pushCurrent(child);
8080
String output;
8181
try {
82-
output = child.render(node, false);
82+
output = child.render(node);
8383
} finally {
8484
JinjavaInterpreter.popCurrent();
8585
}

src/main/java/com/hubspot/jinjava/lib/tag/eager/EagerImportTag.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public String getEagerTagImage(TagToken tagToken, JinjavaInterpreter interpreter
6464
String output;
6565
try {
6666
eagerImportingStrategy.setup(child);
67-
output = child.render(node, false);
67+
output = child.render(node);
6868
} finally {
6969
JinjavaInterpreter.popCurrent();
7070
}

src/test/java/com/hubspot/jinjava/ExpectedTemplateInterpreter.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public class ExpectedTemplateInterpreter {
1515
private Jinjava jinjava;
1616
private JinjavaInterpreter interpreter;
1717
private String path;
18+
private boolean sensibleCurrentPath = false;
1819

1920
public ExpectedTemplateInterpreter(
2021
Jinjava jinjava,
@@ -26,6 +27,26 @@ public ExpectedTemplateInterpreter(
2627
this.path = path;
2728
}
2829

30+
public static ExpectedTemplateInterpreter withSensibleCurrentPath(
31+
Jinjava jinjava,
32+
JinjavaInterpreter interpreter,
33+
String path
34+
) {
35+
return new ExpectedTemplateInterpreter(jinjava, interpreter, path, true);
36+
}
37+
38+
private ExpectedTemplateInterpreter(
39+
Jinjava jinjava,
40+
JinjavaInterpreter interpreter,
41+
String path,
42+
boolean sensibleCurrentPath
43+
) {
44+
this.jinjava = jinjava;
45+
this.interpreter = interpreter;
46+
this.path = path;
47+
this.sensibleCurrentPath = sensibleCurrentPath;
48+
}
49+
2950
public String assertExpectedOutput(String name) {
3051
String template = getFixtureTemplate(name);
3152
String output = JinjavaInterpreter.getCurrent().render(template);
@@ -116,6 +137,13 @@ public String assertExpectedNonEagerOutput(String name) {
116137

117138
public String getFixtureTemplate(String name) {
118139
try {
140+
if (sensibleCurrentPath) {
141+
JinjavaInterpreter
142+
.getCurrent()
143+
.getContext()
144+
.getCurrentPathStack()
145+
.push(String.format("%s/%s.jinja", path, name), 0, 0);
146+
}
119147
return Resources.toString(
120148
Resources.getResource(String.format("%s/%s.jinja", path, name)),
121149
StandardCharsets.UTF_8

src/test/java/com/hubspot/jinjava/FullSnippetsTest.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public String getString(
3939
JinjavaInterpreter interpreter
4040
) throws IOException {
4141
return Resources.toString(
42-
Resources.getResource(String.format("tags/macrotag/%s", fullName)),
42+
Resources.getResource(relativePathResolver.resolve(fullName, interpreter)),
4343
StandardCharsets.UTF_8
4444
);
4545
}
@@ -66,7 +66,11 @@ public Optional<LocationResolver> getLocationResolver() {
6666
);
6767
interpreter = new JinjavaInterpreter(parentInterpreter);
6868
expectedTemplateInterpreter =
69-
new ExpectedTemplateInterpreter(jinjava, interpreter, "snippets");
69+
ExpectedTemplateInterpreter.withSensibleCurrentPath(
70+
jinjava,
71+
interpreter,
72+
"snippets"
73+
);
7074
localContext = interpreter.getContext();
7175

7276
JinjavaInterpreter.pushCurrent(interpreter);
@@ -101,4 +105,11 @@ public void itUsesLowerScopeValueInMacroEvaluation() {
101105
"uses-lower-scope-value-in-macro-evaluation"
102106
);
103107
}
108+
109+
@Test
110+
public void itFromTagDoesntStealExtends() {
111+
expectedTemplateInterpreter.assertExpectedOutput(
112+
"from-tag-doesnt-steal-extends/test"
113+
);
114+
}
104115
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{% block content %}
2+
yo
3+
{% endblock %}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{% set foo = 'hi' %}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<p>Test</p>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{% extends './base.jinja' %}
2+
{% from './something-to-import.jinja' import foo %}
3+
{{ foo }}
4+
Don't show me!
5+
{% block content %}
6+
<p>Test</p>
7+
{% endblock %}

0 commit comments

Comments
 (0)