diff --git a/src/main/java/com/hubspot/jinjava/lib/tag/BreakTag.java b/src/main/java/com/hubspot/jinjava/lib/tag/BreakTag.java index 3c05f260b..55a795f81 100644 --- a/src/main/java/com/hubspot/jinjava/lib/tag/BreakTag.java +++ b/src/main/java/com/hubspot/jinjava/lib/tag/BreakTag.java @@ -2,6 +2,7 @@ import com.hubspot.jinjava.doc.annotations.JinjavaDoc; import com.hubspot.jinjava.doc.annotations.JinjavaTextMateSnippet; +import com.hubspot.jinjava.interpret.DeferredValue; import com.hubspot.jinjava.interpret.DeferredValueException; import com.hubspot.jinjava.interpret.JinjavaInterpreter; import com.hubspot.jinjava.interpret.NotInLoopException; @@ -37,6 +38,8 @@ public String interpret(TagNode tagNode, JinjavaInterpreter interpreter) { } ForLoop forLoop = (ForLoop) loop; forLoop.doBreak(); + } else if (loop instanceof DeferredValue) { + throw new DeferredValueException("Deferred break"); } else { throw new NotInLoopException(TAG_NAME); } diff --git a/src/main/java/com/hubspot/jinjava/lib/tag/ContinueTag.java b/src/main/java/com/hubspot/jinjava/lib/tag/ContinueTag.java index 2671ed38b..4d74aad5f 100644 --- a/src/main/java/com/hubspot/jinjava/lib/tag/ContinueTag.java +++ b/src/main/java/com/hubspot/jinjava/lib/tag/ContinueTag.java @@ -2,6 +2,7 @@ import com.hubspot.jinjava.doc.annotations.JinjavaDoc; import com.hubspot.jinjava.doc.annotations.JinjavaTextMateSnippet; +import com.hubspot.jinjava.interpret.DeferredValue; import com.hubspot.jinjava.interpret.DeferredValueException; import com.hubspot.jinjava.interpret.JinjavaInterpreter; import com.hubspot.jinjava.interpret.NotInLoopException; @@ -35,6 +36,8 @@ public String interpret(TagNode tagNode, JinjavaInterpreter interpreter) { } ForLoop forLoop = (ForLoop) loop; forLoop.doContinue(); + } else if (loop instanceof DeferredValue) { + throw new DeferredValueException("Deferred continue"); } else { throw new NotInLoopException(TAG_NAME); } diff --git a/src/test/java/com/hubspot/jinjava/EagerTest.java b/src/test/java/com/hubspot/jinjava/EagerTest.java index 7947f8ed4..e9581f736 100644 --- a/src/test/java/com/hubspot/jinjava/EagerTest.java +++ b/src/test/java/com/hubspot/jinjava/EagerTest.java @@ -1655,6 +1655,16 @@ public void itHandlesDeferredBreakInForLoop() { assertThat(interpreter.getContext().getDeferredNodes()).isNotEmpty(); } + @Test + public void itHandlesBreakInDeferredForLoop() { + String input = expectedTemplateInterpreter.getFixtureTemplate( + "handles-break-in-deferred-for-loop/test" + ); + interpreter.render(input); + // We don't support this yet + assertThat(interpreter.getContext().getDeferredNodes()).isNotEmpty(); + } + @Test public void itHandlesDeferredContinueInForLoop() { String input = expectedTemplateInterpreter.getFixtureTemplate( @@ -1665,6 +1675,16 @@ public void itHandlesDeferredContinueInForLoop() { assertThat(interpreter.getContext().getDeferredNodes()).isNotEmpty(); } + @Test + public void itHandlesContinueInDeferredForLoop() { + String input = expectedTemplateInterpreter.getFixtureTemplate( + "handles-continue-in-deferred-for-loop/test" + ); + interpreter.render(input); + // We don't support this yet + assertThat(interpreter.getContext().getDeferredNodes()).isNotEmpty(); + } + @Test public void itReconstructsFromedMacro() { expectedTemplateInterpreter.assertExpectedOutput("reconstructs-fromed-macro/test"); diff --git a/src/test/resources/eager/handles-break-in-deferred-for-loop/test.jinja b/src/test/resources/eager/handles-break-in-deferred-for-loop/test.jinja new file mode 100644 index 000000000..7351688c7 --- /dev/null +++ b/src/test/resources/eager/handles-break-in-deferred-for-loop/test.jinja @@ -0,0 +1,8 @@ +Start loop +{% for i in deferred %} + {% if i %} + {% break %} + {% endif %} + i is: {{ i }} +{% endfor %} +End loop \ No newline at end of file diff --git a/src/test/resources/eager/handles-continue-in-deferred-for-loop/test.jinja b/src/test/resources/eager/handles-continue-in-deferred-for-loop/test.jinja new file mode 100644 index 000000000..28624a299 --- /dev/null +++ b/src/test/resources/eager/handles-continue-in-deferred-for-loop/test.jinja @@ -0,0 +1,8 @@ +Start loop +{% for i in deferred %} + {% if i %} + {% continue %} + {% endif %} + i is: {{ i }} +{% endfor %} +End loop \ No newline at end of file