Skip to content

Commit

Permalink
Merge pull request #413 from Roobun/treeParser
Browse files Browse the repository at this point in the history
Several parse errors
  • Loading branch information
boulter authored Mar 19, 2020
2 parents de78549 + 0f6f34a commit 672d778
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 11 deletions.
25 changes: 14 additions & 11 deletions src/main/java/com/hubspot/jinjava/tree/TreeParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -66,18 +66,21 @@ public Node buildTree() {
}
}

if (parent != root) {
interpreter.addError(
TemplateError.fromException(
new MissingEndTagException(
((TagNode) parent).getEndName(),
parent.getMaster().getImage(),
parent.getLineNumber(),
parent.getStartPosition()
do {
if (parent != root) {
interpreter.addError(
TemplateError.fromException(
new MissingEndTagException(
((TagNode) parent).getEndName(),
parent.getMaster().getImage(),
parent.getLineNumber(),
parent.getStartPosition()
)
)
)
);
}
);
parent = parent.getParent();
}
} while (parent.getParent() != null);

return root;
}
Expand Down
37 changes: 37 additions & 0 deletions src/test/java/com/hubspot/jinjava/tree/TreeParserTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,43 @@ public void itWarnsAgainstUnclosedComment() {
assertThat(interpreter.getErrors().get(0).getFieldName()).isEqualTo("comment");
}

@Test
public void itWarnsTwiceAgainstUnclosedForTag() {
String expression = "{% for item in list %}\n{% for elem in items %}";
final Node tree = new TreeParser(interpreter, expression).buildTree();
assertThat(interpreter.getErrors()).hasSize(2);
assertThat(interpreter.getErrors().get(0).getFieldName())
.isEqualTo("{% for elem in items %}");
assertThat(interpreter.getErrors().get(0).getLineno()).isEqualTo(2);
assertThat(interpreter.getErrors().get(1).getFieldName())
.isEqualTo("{% for item in list %}");
assertThat(interpreter.getErrors().get(1).getLineno()).isEqualTo(1);
}

@Test
public void itWarnsTwiceAgainstUnclosedIfTag() {
String expression = "{% if 1 > 2 %}\n{% if 2 > 1 %}";
final Node tree = new TreeParser(interpreter, expression).buildTree();
assertThat(interpreter.getErrors()).hasSize(2);
assertThat(interpreter.getErrors().get(0).getFieldName()).isEqualTo("{% if 2 > 1 %}");
assertThat(interpreter.getErrors().get(0).getLineno()).isEqualTo(2);
assertThat(interpreter.getErrors().get(1).getFieldName()).isEqualTo("{% if 1 > 2 %}");
assertThat(interpreter.getErrors().get(1).getLineno()).isEqualTo(1);
}

@Test
public void itWarnsTwiceAgainstUnclosedBlockTag() {
String expression = "{% block first %}\n{% block second %}";
final Node tree = new TreeParser(interpreter, expression).buildTree();
assertThat(interpreter.getErrors()).hasSize(2);
assertThat(interpreter.getErrors().get(0).getFieldName())
.isEqualTo("{% block second %}");
assertThat(interpreter.getErrors().get(0).getLineno()).isEqualTo(2);
assertThat(interpreter.getErrors().get(1).getFieldName())
.isEqualTo("{% block first %}");
assertThat(interpreter.getErrors().get(1).getLineno()).isEqualTo(1);
}

Node parse(String fixture) {
try {
return new TreeParser(
Expand Down

0 comments on commit 672d778

Please sign in to comment.