Skip to content

Commit 993ad84

Browse files
committed
Apply tentative fix
1 parent be95382 commit 993ad84

8 files changed

Lines changed: 125 additions & 2 deletions

File tree

src/main/java/com/hubspot/jinjava/interpret/JinjavaInterpreter.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,7 @@ private String render(Node root, boolean processExtendRoots, long renderLimit) {
427427
output.addNode(pathSetter);
428428
Optional<String> basePath = context.getCurrentPathStack().peek();
429429
StringBuilder ignoredOutput = new StringBuilder();
430+
boolean preserveBlocks = false;
430431
// render all extend parents, keeping the last as the root output
431432
if (processExtendRoots) {
432433
Set<String> extendPaths = new HashSet<>();
@@ -495,10 +496,24 @@ private String render(Node root, boolean processExtendRoots, long renderLimit) {
495496
basePath = Optional.of(currentPath);
496497
}
497498
}
499+
if (context.getDeferredTokens().size() > numDeferredTokensBefore) {
500+
preserveBlocks = true;
501+
}
498502
}
499503

500504
int numDeferredTokensBefore = context.getDeferredTokens().size();
501505
resolveBlockStubs(output);
506+
if (preserveBlocks) {
507+
for (BlockPlaceholderOutputNode blockPlaceholder : output.getBlocks()) {
508+
blockPlaceholder.resolve(
509+
"{%% block %s %%}%s{%% endblock %s %%}".formatted(
510+
blockPlaceholder.getBlockName(),
511+
blockPlaceholder.getValue(),
512+
blockPlaceholder.getBlockName()
513+
)
514+
);
515+
}
516+
}
502517
if (context.getDeferredTokens().size() > numDeferredTokensBefore) {
503518
pathSetter.setValue(
504519
EagerReconstructionUtils.buildBlockOrInlineSetTag(

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1771,4 +1771,22 @@ public void itHandlesDeferredUsedInMultipleBlockLevelsSecondPass() {
17711771
"handles-deferred-used-in-multiple-block-levels/test.expected"
17721772
);
17731773
}
1774+
1775+
@Test
1776+
public void itDoesNotDeferBlockWhenOnlyMiddleDefers() {
1777+
expectedTemplateInterpreter.assertExpectedOutputNonIdempotent(
1778+
"does-not-defer-block-when-only-middle-defers/test"
1779+
);
1780+
}
1781+
1782+
@Test
1783+
public void itDoesNotDeferBlockWhenOnlyMiddleDefersSecondPass() {
1784+
localContext.put("deferred", "resolved");
1785+
expectedTemplateInterpreter.assertExpectedOutput(
1786+
"does-not-defer-block-when-only-middle-defers/test.expected"
1787+
);
1788+
expectedTemplateInterpreter.assertExpectedNonEagerOutput(
1789+
"does-not-defer-block-when-only-middle-defers/test.expected"
1790+
);
1791+
}
17741792
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{% set tracker_base = '1_base' %}
2+
3+
4+
-----Pre-First-----
5+
{% block first -%}
6+
{%- endblock %}
7+
-----Post-First-----
8+
-----Pre-Second-----
9+
{% block second -%}
10+
{%- endblock %}
11+
-----Post-Second-----
12+
We aren't deferring tracker base.{# This message WILL show up in final output #}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{% extends '../../eager/does-not-defer-block-when-only-middle-defers/base.jinja' %}
2+
{% set tracker_middle = '2_middle' %}
3+
{% block first %}
4+
I WON'T SHOW UP
5+
{% endblock %}
6+
7+
{% block second %}
8+
tracker_base is: {{ tracker_base }}? {{ tracker_base == '1_base' }}
9+
tracker_middle is: {{ tracker_middle }}? {{ tracker_middle == 'resolved' }}
10+
tracker_test is: {{ tracker_test }}? {{ tracker_test == 'resolved' }}
11+
{% endblock %}
12+
Deferring tracker middle.{# This message will not show up in final output #}
13+
{% set tracker_middle = deferred %}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
-----Pre-First-----
2+
3+
tracker_base is: 1_base? true
4+
tracker_middle is: resolved? true
5+
tracker_test is: resolved? true
6+
7+
-----Post-First-----
8+
-----Pre-Second-----
9+
10+
tracker_base is: 1_base? true
11+
tracker_middle is: resolved? true
12+
tracker_test is: resolved? true
13+
14+
-----Post-Second-----
15+
We aren't deferring tracker base.
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
{# Start Label: ignored_output_from_extends #}{% do %}
2+
3+
4+
5+
Deferring tracker test.
6+
{% set tracker_test = deferred %}
7+
8+
9+
10+
11+
12+
Deferring tracker middle.
13+
{% set tracker_middle = deferred %}
14+
{% enddo %}\
15+
{# End Label: ignored_output_from_extends #}{% set current_path = 'eager/does-not-defer-block-when-only-middle-defers/base.jinja' %}
16+
17+
18+
-----Pre-First-----
19+
{% set __temp_meta_current_path_1008935144__,current_path = current_path,'eager/does-not-defer-block-when-only-middle-defers/test.jinja' %}
20+
tracker_base is: 1_base? true
21+
tracker_middle is: {{ tracker_middle }}\
22+
? {{ tracker_middle == 'resolved' }}
23+
tracker_test is: {{ tracker_test }}\
24+
? {{ tracker_test == 'resolved' }}
25+
{% set current_path,__temp_meta_current_path_1008935144__ = __temp_meta_current_path_1008935144__,null %}
26+
-----Post-First-----
27+
-----Pre-Second-----
28+
{% set __temp_meta_current_path_245328778__,current_path = current_path,'eager/does-not-defer-block-when-only-middle-defers/middle.jinja' %}
29+
tracker_base is: 1_base? true
30+
tracker_middle is: {{ tracker_middle }}\
31+
? {{ tracker_middle == 'resolved' }}
32+
tracker_test is: {{ tracker_test }}\
33+
? {{ tracker_test == 'resolved' }}
34+
{% set current_path,__temp_meta_current_path_245328778__ = __temp_meta_current_path_245328778__,null %}
35+
-----Post-Second-----
36+
We aren't deferring tracker base.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{% extends '../../eager/does-not-defer-block-when-only-middle-defers/middle.jinja' %}
2+
3+
{% set tracker_test = '3_test' %}
4+
{% block first %}
5+
tracker_base is: {{ tracker_base }}? {{ tracker_base == '1_base' }}
6+
tracker_middle is: {{ tracker_middle }}? {{ tracker_middle == 'resolved' }}
7+
tracker_test is: {{ tracker_test }}? {{ tracker_test == 'resolved' }}
8+
{% endblock %}
9+
Deferring tracker test.{# This message will not show up in final output #}
10+
{% set tracker_test = deferred %}

src/test/resources/eager/handles-deferred-used-in-multiple-block-levels/test.expected.jinja

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,29 +20,33 @@ tracker_middle is: {{ tracker_middle }}\
2020
tracker_test is: {{ tracker_test }}\
2121
? {{ tracker_test == 'resolved' }}
2222
-----Pre-First-----
23+
{% block first %}\
2324
{% set __temp_meta_current_path_1057627035__,current_path = current_path,'eager/handles-deferred-used-in-multiple-block-levels/test.jinja' %}
2425
tracker_base is: {{ tracker_base }}\
2526
? {{ tracker_base == 'resolved' }}
2627
tracker_middle is: {{ tracker_middle }}\
2728
? {{ tracker_middle == 'resolved' }}
2829
tracker_test is: {{ tracker_test }}\
2930
? {{ tracker_test == 'resolved' }}
30-
{% set current_path,__temp_meta_current_path_1057627035__ = __temp_meta_current_path_1057627035__,null %}
31+
{% set current_path,__temp_meta_current_path_1057627035__ = __temp_meta_current_path_1057627035__,null %}\
32+
{% endblock first %}
3133
-----Post-First-----
3234
tracker_base is: 1_base? true
3335
tracker_middle is: {{ tracker_middle }}\
3436
? {{ tracker_middle == 'resolved' }}
3537
tracker_test is: {{ tracker_test }}\
3638
? {{ tracker_test == 'resolved' }}
3739
-----Pre-Second-----
40+
{% block second %}\
3841
{% set __temp_meta_current_path_697061783__,current_path = current_path,'eager/handles-deferred-used-in-multiple-block-levels/middle.jinja' %}
3942
tracker_base is: {{ tracker_base }}\
4043
? {{ tracker_base == 'resolved' }}
4144
tracker_middle is: {{ tracker_middle }}\
4245
? {{ tracker_middle == 'resolved' }}
4346
tracker_test is: {{ tracker_test }}\
4447
? {{ tracker_test == 'resolved' }}
45-
{% set current_path,__temp_meta_current_path_697061783__ = __temp_meta_current_path_697061783__,null %}
48+
{% set current_path,__temp_meta_current_path_697061783__ = __temp_meta_current_path_697061783__,null %}\
49+
{% endblock second %}
4650
-----Post-Second-----
4751
Deferring tracker base.
4852
{% set tracker_base = deferred %}

0 commit comments

Comments
 (0)