Skip to content

Commit 5450ee8

Browse files
committed
Keep reconstructing the interpreter as ____int3rpr3t3r____ so that the
eager execution output template string itself is backwards compatible with Jinjava 2.8.x
1 parent bcdb8fd commit 5450ee8

22 files changed

Lines changed: 65 additions & 56 deletions

File tree

src/main/java/com/hubspot/jinjava/el/ext/ExtendedParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ public AstNode createAstNode(AstNode... children) {
129129
}
130130

131131
protected AstNode interpreter() {
132-
return new AstNull();
132+
return identifier(INTERPRETER);
133133
}
134134

135135
@Override

src/main/java/com/hubspot/jinjava/el/ext/eager/EvalResultHolder.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,14 @@ static String reconstructNode(
7676
if (astNode == null) {
7777
return "";
7878
}
79+
if (
80+
astNode instanceof AstIdentifier &&
81+
ExtendedParser.INTERPRETER.equals(((AstIdentifier) astNode).getName())
82+
) {
83+
return ExtendedParser.INTERPRETER;
84+
}
7985
preserveIdentifier =
80-
IdentifierPreservationStrategy.preserving(
81-
preserveIdentifier.isPreserving() ||
82-
(astNode instanceof AstIdentifier &&
83-
ExtendedParser.INTERPRETER.equals(((AstIdentifier) astNode).getName()))
84-
);
86+
IdentifierPreservationStrategy.preserving(preserveIdentifier.isPreserving());
8587
if (
8688
preserveIdentifier.isPreserving() &&
8789
!astNode.hasEvalResult() &&

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ private static String getIsIterable(String var, int forIndex, TagToken tagToken)
245245
) +
246246
// modulo indexing
247247
String.format(
248-
"{{ %s[%d %% filter:length.filter(%s, null)] }}",
248+
"{{ %s[%d %% filter:length.filter(%s, ____int3rpr3t3r____)] }}",
249249
var,
250250
forIndex,
251251
var

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ public void itPreserveDeferredVariableResolvingEqualToInOrCondition() {
216216

217217
assertThat(output)
218218
.isEqualTo(
219-
"{% if false || exptest:equalto.evaluate('a', null, deferred) %}preserved{% endif %}"
219+
"{% if false || exptest:equalto.evaluate('a', ____int3rpr3t3r____, deferred) %}preserved{% endif %}"
220220
);
221221
assertThat(interpreter.getErrors()).isEmpty();
222222
localContext.put("deferred", "a");
@@ -307,7 +307,8 @@ public void itPreservesForTag() {
307307
@Test
308308
public void itPreservesFilters() {
309309
String output = interpreter.render("{{ deferred|capitalize }}");
310-
assertThat(output).isEqualTo("{{ filter:capitalize.filter(deferred, null) }}");
310+
assertThat(output)
311+
.isEqualTo("{{ filter:capitalize.filter(deferred, ____int3rpr3t3r____) }}");
311312
assertThat(interpreter.getErrors()).isEmpty();
312313
localContext.put("deferred", "foo");
313314
assertThat(interpreter.render(output)).isEqualTo("Foo");
@@ -317,14 +318,17 @@ public void itPreservesFilters() {
317318
public void itPreservesFunctions() {
318319
String output = interpreter.render("{{ deferred|datetimeformat('%B %e, %Y') }}");
319320
assertThat(output)
320-
.isEqualTo("{{ filter:datetimeformat.filter(deferred, null, '%B %e, %Y') }}");
321+
.isEqualTo(
322+
"{{ filter:datetimeformat.filter(deferred, ____int3rpr3t3r____, '%B %e, %Y') }}"
323+
);
321324
assertThat(interpreter.getErrors()).isEmpty();
322325
}
323326

324327
@Test
325328
public void itPreservesRandomness() {
326329
String output = interpreter.render("{{ [1, 2, 3]|shuffle }}");
327-
assertThat(output).isEqualTo("{{ filter:shuffle.filter([1, 2, 3], null) }}");
330+
assertThat(output)
331+
.isEqualTo("{{ filter:shuffle.filter([1, 2, 3], ____int3rpr3t3r____) }}");
328332
assertThat(interpreter.getErrors()).isEmpty();
329333
}
330334

src/test/java/com/hubspot/jinjava/el/ext/ExtendedParserTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import de.odysseus.el.tree.impl.ast.AstMethod;
1212
import de.odysseus.el.tree.impl.ast.AstNested;
1313
import de.odysseus.el.tree.impl.ast.AstNode;
14-
import de.odysseus.el.tree.impl.ast.AstNull;
1514
import de.odysseus.el.tree.impl.ast.AstParameters;
1615
import de.odysseus.el.tree.impl.ast.AstString;
1716
import org.assertj.core.api.Assertions;
@@ -176,10 +175,12 @@ private void assertForExpression(
176175

177176
AstParameters astParameters = (AstParameters) astNode.getChild(1);
178177
assertThat(astParameters.getChild(0)).isInstanceOf(AstString.class);
179-
assertThat(astParameters.getChild(1)).isInstanceOf(AstNull.class);
178+
assertThat(astParameters.getChild(1)).isInstanceOf(AstIdentifier.class);
180179
assertThat(astParameters.getChild(2)).isInstanceOf(AstString.class);
181180

182181
assertThat(astParameters.getChild(0).eval(null, null)).isEqualTo(leftExpected);
182+
assertThat(((AstIdentifier) astParameters.getChild(1)).getName())
183+
.isEqualTo("____int3rpr3t3r____");
183184
assertThat(astParameters.getChild(2).eval(null, null)).isEqualTo(rightExpected);
184185
}
185186

src/test/java/com/hubspot/jinjava/el/ext/eager/EagerAstMethodTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ public void itPreservesUnresolvable() {
235235
fail("Should throw DeferredParsingException");
236236
} catch (DeferredParsingException e) {
237237
assertThat(e.getDeferredEvalResult())
238-
.isEqualTo("filter:upper.filter(foo_object.deferred, null)");
238+
.isEqualTo("filter:upper.filter(foo_object.deferred, ____int3rpr3t3r____)");
239239
}
240240
}
241241
}

src/test/java/com/hubspot/jinjava/lib/tag/eager/EagerImportTagTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -423,7 +423,7 @@ public void itCorrectlySetsAliasedPathForSecondPass() {
423423
assertThat(firstPassResult)
424424
.isEqualTo(
425425
"{% set deferred_import_resource_path = 'import-macro.jinja' %}{% macro m.print_path_macro(var) %}\n" +
426-
"{{ filter:print_path.filter(var, null) }}\n" +
426+
"{{ filter:print_path.filter(var, ____int3rpr3t3r____) }}\n" +
427427
"{{ var }}\n" +
428428
"{% endmacro %}{% set deferred_import_resource_path = null %}{{ m.print_path_macro(foo) }}"
429429
);
@@ -442,7 +442,7 @@ public void itCorrectlySetsPathForSecondPass() {
442442
assertThat(firstPassResult)
443443
.isEqualTo(
444444
"{% set deferred_import_resource_path = 'import-macro.jinja' %}{% macro print_path_macro(var) %}\n" +
445-
"{{ filter:print_path.filter(var, null) }}\n" +
445+
"{{ filter:print_path.filter(var, ____int3rpr3t3r____) }}\n" +
446446
"{{ var }}\n" +
447447
"{% endmacro %}{% set deferred_import_resource_path = null %}{{ print_path_macro(foo) }}"
448448
);
@@ -460,9 +460,9 @@ public void itCorrectlySetsNestedPathsForSecondPass() {
460460
);
461461
assertThat(firstPassResult)
462462
.isEqualTo(
463-
"{% set deferred_import_resource_path = 'double-import-macro.jinja' %}{% macro print_path_macro2(var) %}{{ filter:print_path.filter(var, null) }}\n" +
463+
"{% set deferred_import_resource_path = 'double-import-macro.jinja' %}{% macro print_path_macro2(var) %}{{ filter:print_path.filter(var, ____int3rpr3t3r____) }}\n" +
464464
"{% set deferred_import_resource_path = 'import-macro.jinja' %}{% macro print_path_macro(var) %}\n" +
465-
"{{ filter:print_path.filter(var, null) }}\n" +
465+
"{{ filter:print_path.filter(var, ____int3rpr3t3r____) }}\n" +
466466
"{{ var }}\n" +
467467
"{% endmacro %}{% set deferred_import_resource_path = 'double-import-macro.jinja' %}{{ print_path_macro(var) }}{% endmacro %}{% set deferred_import_resource_path = null %}{{ print_path_macro2(foo) }}"
468468
);

src/test/java/com/hubspot/jinjava/lib/tag/eager/EagerSetTagTest.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,9 @@ public void itDefersBlockWithFilter() {
142142
final String result = interpreter.render(template);
143143

144144
assertThat(result)
145-
.isEqualTo("{% set foo = filter:add.filter(2, null, deferred) %}{{ foo }}");
145+
.isEqualTo(
146+
"{% set foo = filter:add.filter(2, ____int3rpr3t3r____, deferred) %}{{ foo }}"
147+
);
146148
assertThat(
147149
context
148150
.getDeferredTokens()
@@ -177,7 +179,7 @@ public void itDefersDeferredBlockWithDeferredFilter() {
177179

178180
assertThat(result)
179181
.isEqualTo(
180-
"{% set foo %}{{ 1 + deferred }}{% endset %}{% set foo = filter:add.filter(foo, null, filter:int.filter(deferred, null)) %}{{ foo }}"
182+
"{% set foo %}{{ 1 + deferred }}{% endset %}{% set foo = filter:add.filter(foo, ____int3rpr3t3r____, filter:int.filter(deferred, ____int3rpr3t3r____)) %}{{ foo }}"
181183
);
182184
context.remove("foo");
183185
context.put("deferred", 2);
@@ -201,7 +203,7 @@ public void itDefersInDeferredExecutionModeWithFilter() {
201203

202204
assertThat(result)
203205
.isEqualTo(
204-
"{% set foo %}1{% endset %}{% set foo = filter:add.filter(1, null, deferred) %}{{ foo }}"
206+
"{% set foo %}1{% endset %}{% set foo = filter:add.filter(1, ____int3rpr3t3r____, deferred) %}{{ foo }}"
205207
);
206208
assertThat(
207209
context

src/test/java/com/hubspot/jinjava/util/EagerExpressionResolverTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -641,7 +641,7 @@ public void itHandlesDeferredExpTests() {
641641
interpreter.getContext().setThrowInterpreterErrors(true);
642642
String partiallyResolved = eagerExpressionResult.toString();
643643
assertThat(partiallyResolved)
644-
.isEqualTo("exptest:equalto.evaluateNegated(4, null, deferred)");
644+
.isEqualTo("exptest:equalto.evaluateNegated(4, ____int3rpr3t3r____, deferred)");
645645
assertThat(eagerExpressionResult.getDeferredWords())
646646
.containsExactlyInAnyOrder("deferred", "equalto.evaluateNegated");
647647
context.put("deferred", 4);
@@ -756,7 +756,7 @@ public void itHandlesDeferredMethod() {
756756
assertThat(eagerResolveExpression("deferred.append(foo)").toString())
757757
.isEqualTo("deferred.append('foo')");
758758
assertThat(eagerResolveExpression("deferred[1 + 1] | length").toString())
759-
.isEqualTo("filter:length.filter(deferred[2], null)");
759+
.isEqualTo("filter:length.filter(deferred[2], ____int3rpr3t3r____)");
760760
}
761761

762762
@Test
@@ -823,7 +823,7 @@ public void itDoesNotSplitJsonInArrayResolvedExpression() {
823823
@Test
824824
public void itHandlesRandom() {
825825
assertThat(eagerResolveExpression("range(1)|random").toString())
826-
.isEqualTo("filter:random.filter(range(1), null)");
826+
.isEqualTo("filter:random.filter(range(1), ____int3rpr3t3r____)");
827827
}
828828

829829
@Test
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
2
22
{% macro plus(foo, add) %}\
3-
{{ foo + (filter:int.filter(add, null)) }}\
3+
{{ foo + (filter:int.filter(add, ____int3rpr3t3r____)) }}\
44
{% endmacro %}\
55
{{ plus(deferred, 1.1) }}\
66
{% set deferred = deferred + 2 %}
77
{% macro plus(foo, add) %}\
8-
{{ foo + (filter:int.filter(add, null)) }}\
8+
{{ foo + (filter:int.filter(add, ____int3rpr3t3r____)) }}\
99
{% endmacro %}\
1010
{{ plus(deferred, 3.1) }}

0 commit comments

Comments
 (0)