diff --git a/src/main/java/com/hubspot/jinjava/interpret/UnknownTagException.java b/src/main/java/com/hubspot/jinjava/interpret/UnknownTagException.java index 2bdbaac42..ff004c06d 100644 --- a/src/main/java/com/hubspot/jinjava/interpret/UnknownTagException.java +++ b/src/main/java/com/hubspot/jinjava/interpret/UnknownTagException.java @@ -6,24 +6,32 @@ public class UnknownTagException extends TemplateSyntaxException { private static final long serialVersionUID = 1L; private final String tag; - private final String defintion; + private final String definition; public UnknownTagException(String tag, String definition, int lineNumber, int startPosition) { super(definition, "Unknown tag: " + tag, lineNumber, startPosition); this.tag = tag; - this.defintion = definition; + this.definition = definition; } public UnknownTagException(TagToken tagToken) { - this(tagToken.getTagName(), tagToken.getImage(), tagToken.getLineNumber(), tagToken.getStartPosition()); + this(tagToken.getRawTagName(), tagToken.getImage(), tagToken.getLineNumber(), tagToken.getStartPosition()); } public String getTag() { return tag; } + /** + * @deprecated use correct spelling + */ + @Deprecated public String getDefintion() { - return defintion; + return definition; + } + + public String getDefinition() { + return definition; } } diff --git a/src/main/java/com/hubspot/jinjava/tree/TreeParser.java b/src/main/java/com/hubspot/jinjava/tree/TreeParser.java index f861e6209..d77abe1b5 100644 --- a/src/main/java/com/hubspot/jinjava/tree/TreeParser.java +++ b/src/main/java/com/hubspot/jinjava/tree/TreeParser.java @@ -121,8 +121,7 @@ private Node text(TextToken textToken) { final Node lastSibling = getLastSibling(); // if last sibling was a tag and has rightTrimAfterEnd, strip whitespace - if (lastSibling != null - && lastSibling instanceof TagNode + if (lastSibling instanceof TagNode && lastSibling.getMaster().isRightTrimAfterEnd()) { textToken.setLeftTrim(true); } @@ -167,7 +166,7 @@ private Node tag(TagToken tagToken) { // if a tag has left trim, mark the last sibling to trim right whitespace if (tagToken.isLeftTrim()) { final Node lastSibling = getLastSibling(); - if (lastSibling != null && lastSibling instanceof TextNode) { + if (lastSibling instanceof TextNode) { lastSibling.getMaster().setRightTrim(true); } } diff --git a/src/main/java/com/hubspot/jinjava/tree/parse/TagToken.java b/src/main/java/com/hubspot/jinjava/tree/parse/TagToken.java index d4f0edbfe..166b3fe52 100644 --- a/src/main/java/com/hubspot/jinjava/tree/parse/TagToken.java +++ b/src/main/java/com/hubspot/jinjava/tree/parse/TagToken.java @@ -25,6 +25,7 @@ public class TagToken extends Token { private static final long serialVersionUID = -4927751270481832992L; private String tagName; + private String rawTagName; private String helpers; public TagToken(String image, int lineNumber, int startPosition) { @@ -69,12 +70,17 @@ else if (nameStart != -1 && !Character.isJavaIdentifierPart(c)) { } if (pos < content.length()) { - tagName = content.substring(nameStart, pos).toLowerCase(); + rawTagName = content.substring(nameStart, pos); helpers = content.substring(pos); } else { - tagName = content.toLowerCase().trim(); + rawTagName = content.trim(); helpers = ""; } + tagName = rawTagName.toLowerCase(); + } + + public String getRawTagName() { + return rawTagName; } public String getTagName() { diff --git a/src/test/java/com/hubspot/jinjava/interpret/TemplateErrorTest.java b/src/test/java/com/hubspot/jinjava/interpret/TemplateErrorTest.java index 010faf57f..3a5afeb10 100644 --- a/src/test/java/com/hubspot/jinjava/interpret/TemplateErrorTest.java +++ b/src/test/java/com/hubspot/jinjava/interpret/TemplateErrorTest.java @@ -2,12 +2,26 @@ import static org.assertj.core.api.Assertions.assertThat; +import org.junit.Before; import org.junit.Test; import com.google.common.collect.ImmutableMap; +import com.hubspot.jinjava.Jinjava; public class TemplateErrorTest { + private Context context; + private JinjavaInterpreter interpreter; + + @Before + public void setup() { + interpreter = new Jinjava().newInterpreter(); + JinjavaInterpreter.pushCurrent(interpreter); + + context = interpreter.getContext(); + } + + @Test public void itShowsFriendlyNameOfBaseObjectForPropNotFound() { TemplateError e = TemplateError.fromUnknownProperty(new Object(), "foo", 123, 4); @@ -22,8 +36,8 @@ public void itUsesOverloadedToStringForBaseObject() { @Test public void itShowsFieldNameForUnknownTagError() { - TemplateError e = TemplateError.fromException(new UnknownTagException("unknown", "{% unknown() %}", 11, 3)); - assertThat(e.getFieldName()).isEqualTo("unknown"); + TemplateError e = TemplateError.fromException(new UnknownTagException("unKnown", "{% unKnown() %}", 11, 3)); + assertThat(e.getFieldName()).isEqualTo("unKnown"); } @Test @@ -32,4 +46,9 @@ public void itShowsFieldNameForSyntaxError() { assertThat(e.getFieldName()).isEqualTo("da codez"); } + @Test + public void itRetainsFieldNameCaseForUnknownToken() { + interpreter.render("{% unKnown() %}"); + assertThat(interpreter.getErrors().get(0).getFieldName()).isEqualTo("unKnown"); + } } diff --git a/src/test/java/com/hubspot/jinjava/tree/FailOnUnknownTokensTest.java b/src/test/java/com/hubspot/jinjava/tree/FailOnUnknownTokensTest.java index 909a865d6..0ae9e5a7a 100644 --- a/src/test/java/com/hubspot/jinjava/tree/FailOnUnknownTokensTest.java +++ b/src/test/java/com/hubspot/jinjava/tree/FailOnUnknownTokensTest.java @@ -1,7 +1,6 @@ package com.hubspot.jinjava.tree; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assert.*; import java.util.HashMap; import java.util.Map; @@ -17,25 +16,24 @@ public class FailOnUnknownTokensTest { private static Jinjava jinjava; @Before - public void setUp() throws Exception { + public void setUp() { JinjavaConfig.Builder builder = JinjavaConfig.newBuilder(); builder.withFailOnUnknownTokens(true); JinjavaConfig config = builder.build(); jinjava = new Jinjava(config); - } @Test(expected = FatalTemplateErrorsException.class) public void itThrowsExceptionOnUnknownToken() { - Map context = new HashMap(); + Map context = new HashMap<>(); context.put("token1", "test"); String template = "hello {{ token1 }} and {{ token2 }}"; - String str = jinjava.render(template, context); + jinjava.render(template, context); } @Test public void itReplaceTokensWithoutException() { - Map context = new HashMap(); + Map context = new HashMap<>(); context.put("token1", "test"); context.put("token2", "test1"); String template = "hello {{ token1 }} and {{ token2 }}";