File tree Expand file tree Collapse file tree 6 files changed +48
-0
lines changed
main/java/com/hubspot/jinjava/lib/tag
handles-deferred-break-in-for-loop
handles-deferred-continue-in-for-loop Expand file tree Collapse file tree 6 files changed +48
-0
lines changed Original file line number Diff line number Diff line change 22
33import com .hubspot .jinjava .doc .annotations .JinjavaDoc ;
44import com .hubspot .jinjava .doc .annotations .JinjavaTextMateSnippet ;
5+ import com .hubspot .jinjava .interpret .DeferredValueException ;
56import com .hubspot .jinjava .interpret .JinjavaInterpreter ;
67import com .hubspot .jinjava .interpret .NotInLoopException ;
78import com .hubspot .jinjava .tree .TagNode ;
@@ -31,6 +32,9 @@ public String getName() {
3132 public String interpret (TagNode tagNode , JinjavaInterpreter interpreter ) {
3233 Object loop = interpreter .getContext ().get (ForTag .LOOP );
3334 if (loop instanceof ForLoop ) {
35+ if (interpreter .getContext ().isDeferredExecutionMode ()) {
36+ throw new DeferredValueException ("Deferred break" );
37+ }
3438 ForLoop forLoop = (ForLoop ) loop ;
3539 forLoop .doBreak ();
3640 } else {
Original file line number Diff line number Diff line change 22
33import com .hubspot .jinjava .doc .annotations .JinjavaDoc ;
44import com .hubspot .jinjava .doc .annotations .JinjavaTextMateSnippet ;
5+ import com .hubspot .jinjava .interpret .DeferredValueException ;
56import com .hubspot .jinjava .interpret .JinjavaInterpreter ;
67import com .hubspot .jinjava .interpret .NotInLoopException ;
78import com .hubspot .jinjava .tree .TagNode ;
@@ -29,6 +30,9 @@ public String getName() {
2930 public String interpret (TagNode tagNode , JinjavaInterpreter interpreter ) {
3031 Object loop = interpreter .getContext ().get (ForTag .LOOP );
3132 if (loop instanceof ForLoop ) {
33+ if (interpreter .getContext ().isDeferredExecutionMode ()) {
34+ throw new DeferredValueException ("Deferred continue" );
35+ }
3236 ForLoop forLoop = (ForLoop ) loop ;
3337 forLoop .doContinue ();
3438 } else {
Original file line number Diff line number Diff line change 55import com .google .common .collect .ImmutableMap ;
66import com .google .common .collect .ImmutableSet ;
77import com .hubspot .jinjava .lib .tag .BlockTag ;
8+ import com .hubspot .jinjava .lib .tag .BreakTag ;
89import com .hubspot .jinjava .lib .tag .CallTag ;
10+ import com .hubspot .jinjava .lib .tag .ContinueTag ;
911import com .hubspot .jinjava .lib .tag .CycleTag ;
1012import com .hubspot .jinjava .lib .tag .DoTag ;
1113import com .hubspot .jinjava .lib .tag .ElseIfTag ;
@@ -54,6 +56,8 @@ public class EagerTagFactory {
5456 .add (ElseTag .class )
5557 .add (RawTag .class )
5658 .add (ExtendsTag .class ) // TODO support reconstructing extends tags
59+ .add (BreakTag .class ) // TODO support eager break tag
60+ .add (ContinueTag .class ) // TODO support eager continue tag
5761 .build ();
5862
5963 @ SuppressWarnings ("unchecked" )
Original file line number Diff line number Diff line change @@ -1644,4 +1644,24 @@ public void itWrapsMacroThatWouldChangeCurrentPathInChildScope() {
16441644 "wraps-macro-that-would-change-current-path-in-child-scope/test"
16451645 );
16461646 }
1647+
1648+ @ Test
1649+ public void itHandlesDeferredBreakInForLoop () {
1650+ String input = expectedTemplateInterpreter .getFixtureTemplate (
1651+ "handles-deferred-break-in-for-loop/test"
1652+ );
1653+ interpreter .render (input );
1654+ // We don't support this yet
1655+ assertThat (interpreter .getContext ().getDeferredNodes ()).isNotEmpty ();
1656+ }
1657+
1658+ @ Test
1659+ public void itHandlesDeferredContinueInForLoop () {
1660+ String input = expectedTemplateInterpreter .getFixtureTemplate (
1661+ "handles-deferred-continue-in-for-loop/test"
1662+ );
1663+ interpreter .render (input );
1664+ // We don't support this yet
1665+ assertThat (interpreter .getContext ().getDeferredNodes ()).isNotEmpty ();
1666+ }
16471667}
Original file line number Diff line number Diff line change 1+ Start loop
2+ {% for i in range (5) %}
3+ {% if deferred %}
4+ {% break %}
5+ {% endif %}
6+ i is: {{ i }}
7+ {% endfor %}
8+ End loop
Original file line number Diff line number Diff line change 1+ Start loop
2+ {% for i in range (5) %}
3+ {% if deferred %}
4+ {% continue %}
5+ {% endif %}
6+ i is: {{ i }}
7+ {% endfor %}
8+ End loop
You can’t perform that action at this time.
0 commit comments