Skip to content

Commit 1314cdc

Browse files
committed
Add extra tests regarding variable modification within a block
1 parent 6ef60d1 commit 1314cdc

File tree

6 files changed

+83
-4
lines changed

6 files changed

+83
-4
lines changed

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1789,4 +1789,29 @@ public void itDoesNotDeferBlockWhenOnlyMiddleDefersSecondPass() {
17891789
"does-not-defer-block-when-only-middle-defers/test.expected"
17901790
);
17911791
}
1792+
1793+
@Test
1794+
public void itPreservesBlocksForReconstructionOrder() {
1795+
expectedTemplateInterpreter.assertExpectedOutputNonIdempotent(
1796+
"preserves-blocks-for-reconstruction-order/test"
1797+
);
1798+
}
1799+
1800+
@Test
1801+
public void itPreservesBlocksForReconstructionOrderSecondPhase() {
1802+
localContext.put("deferred", "resolved");
1803+
String twoPhaseOutput = expectedTemplateInterpreter.assertExpectedOutput(
1804+
"preserves-blocks-for-reconstruction-order/test.expected"
1805+
);
1806+
expectedTemplateInterpreter.assertExpectedNonEagerOutput(
1807+
"preserves-blocks-for-reconstruction-order/test.expected"
1808+
);
1809+
// Sanity check
1810+
assertThat(twoPhaseOutput)
1811+
.isEqualToIgnoringWhitespace(
1812+
expectedTemplateInterpreter.renderTemplate(
1813+
"preserves-blocks-for-reconstruction-order/test"
1814+
)
1815+
);
1816+
}
17921817
}

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,7 @@ private ExpectedTemplateInterpreter(
4949
}
5050

5151
public String assertExpectedOutput(String name) {
52-
String template = getFixtureTemplate(name);
53-
String output = JinjavaInterpreter.getCurrent().render(template);
52+
String output = renderTemplate(name);
5453
assertThat(JinjavaInterpreter.getCurrent().getContext().getDeferredNodes())
5554
.as("Ensure no deferred nodes were created")
5655
.isEmpty();
@@ -60,9 +59,13 @@ public String assertExpectedOutput(String name) {
6059
return output;
6160
}
6261

63-
public String assertExpectedOutputNonIdempotent(String name) {
62+
public String renderTemplate(String name) {
6463
String template = getFixtureTemplate(name);
65-
String output = JinjavaInterpreter.getCurrent().render(template);
64+
return JinjavaInterpreter.getCurrent().render(template);
65+
}
66+
67+
public String assertExpectedOutputNonIdempotent(String name) {
68+
String output = renderTemplate(name);
6669
assertThat(JinjavaInterpreter.getCurrent().getContext().getDeferredNodes())
6770
.as("Ensure no deferred nodes were created")
6871
.isEmpty();
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{% if deferred %}
2+
{% set deferred_list = [] %}
3+
{% endif %}
4+
{% do deferred_list.append('Before block') %}
5+
Deferred list after block is: {{ deferred_list }}
6+
Deferred list after block should be: ['Before block']
7+
-----Pre-First-----
8+
{% block first -%}
9+
{%- endblock %}
10+
-----Post-First-----
11+
{% do deferred_list.append('After block') %}
12+
Deferred list after block is: {{ deferred_list }}
13+
Deferred list after block should be: ['Before block', 'After block']
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
Deferred list after block is: ['Before block']
2+
Deferred list after block should be: ['Before block']
3+
-----Pre-First-----
4+
5+
6+
Deferred list inside of block is: ['Before block', 'After block', 'In child block']
7+
Deferred list inside of block should be: ['Before block', 'After block', 'In child block']
8+
9+
-----Post-First-----
10+
11+
Deferred list after block is: ['Before block', 'After block']
12+
Deferred list after block should be: ['Before block', 'After block']
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{% set current_path = 'eager/preserves-blocks-for-reconstruction-order/base.jinja' %}\
2+
{% if deferred %}
3+
{% set deferred_list = [] %}
4+
{% endif %}
5+
{% do deferred_list.append('Before block') %}
6+
Deferred list after block is: {{ deferred_list }}
7+
Deferred list after block should be: ['Before block']
8+
-----Pre-First-----
9+
{% block first %}\
10+
{% set __temp_meta_current_path_1012932725__,current_path = current_path,'eager/preserves-blocks-for-reconstruction-order/test.jinja' %}
11+
{% do deferred_list.append('In child block') %}
12+
Deferred list inside of block is: {{ deferred_list }}
13+
Deferred list inside of block should be: ['Before block', 'After block', 'In child block']
14+
{% set current_path,__temp_meta_current_path_1012932725__ = __temp_meta_current_path_1012932725__,null %}\
15+
{% endblock first %}
16+
-----Post-First-----
17+
{% do deferred_list.append('After block') %}
18+
Deferred list after block is: {{ deferred_list }}
19+
Deferred list after block should be: ['Before block', 'After block']
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{% extends '../../eager/preserves-blocks-for-reconstruction-order/base.jinja' %}
2+
3+
{% block first %}
4+
{% do deferred_list.append('In child block') %}
5+
Deferred list inside of block is: {{ deferred_list }}
6+
Deferred list inside of block should be: ['Before block', 'After block', 'In child block']
7+
{% endblock %}

0 commit comments

Comments
 (0)