diff --git a/src/main/java/com/hubspot/jinjava/el/ext/ExtendedParser.java b/src/main/java/com/hubspot/jinjava/el/ext/ExtendedParser.java index 54726af70..6bf8132fb 100644 --- a/src/main/java/com/hubspot/jinjava/el/ext/ExtendedParser.java +++ b/src/main/java/com/hubspot/jinjava/el/ext/ExtendedParser.java @@ -281,7 +281,7 @@ protected AstNode nonliteral() throws ScanException, ParseException { switch (getToken().getSymbol()) { case IDENTIFIER: String name = consumeToken().getImage(); - if (getToken().getSymbol() == COLON) { + if (getToken().getSymbol() == COLON && getToken().getImage().equals(":")) { Symbol lookahead = lookahead(0).getSymbol(); if ( isPossibleExpTest(lookahead) && diff --git a/src/test/java/com/hubspot/jinjava/lib/tag/MacroTagTest.java b/src/test/java/com/hubspot/jinjava/lib/tag/MacroTagTest.java index de95f36d4..0d669f5ca 100644 --- a/src/test/java/com/hubspot/jinjava/lib/tag/MacroTagTest.java +++ b/src/test/java/com/hubspot/jinjava/lib/tag/MacroTagTest.java @@ -373,6 +373,32 @@ public void itCorrectlyScopesNestedMacroTags() { } } + @Test + public void itCallsMacroInTernaryWithVariableCondition() { + String template = + "{% macro greet(name) %}Hello {{ name }}{% endmacro %}" + + "{{ greet('world') if myVar else greet('nobody') }}"; + + context.put("myVar", true); + assertThat(jinjava.render(template, context).trim()).isEqualTo("Hello world"); + + context.put("myVar", false); + assertThat(jinjava.render(template, context).trim()).isEqualTo("Hello nobody"); + } + + @Test + public void itCallsMacroInStandardTernaryWithVariableCondition() { + String template = + "{% macro greet(name) %}Hello {{ name }}{% endmacro %}" + + "{{ myVar ? greet('world') : greet('nobody') }}"; + + context.put("myVar", true); + assertThat(jinjava.render(template, context).trim()).isEqualTo("Hello world"); + + context.put("myVar", false); + assertThat(jinjava.render(template, context).trim()).isEqualTo("Hello nobody"); + } + private Node snippet(String jinja) { return new TreeParser(interpreter, jinja).buildTree().getChildren().getFirst(); }