package com.hubspot.jinjava.tree;
import static org.assertj.core.api.Assertions.assertThat;
import java.nio.charset.StandardCharsets;
import org.junit.Before;
import org.junit.Test;
import com.google.common.base.Throwables;
import com.google.common.io.Resources;
import com.hubspot.jinjava.Jinjava;
import com.hubspot.jinjava.JinjavaConfig;
import com.hubspot.jinjava.interpret.JinjavaInterpreter;
public class TreeParserTest {
JinjavaInterpreter interpreter;
@Before
public void setup() {
interpreter = new Jinjava().newInterpreter();
}
@Test
public void parseHtmlWithCommentLines() {
parse("parse/tokenizer/comment-plus.jinja");
assertThat(interpreter.getErrors()).isEmpty();
}
@Test
public void itStripsRightWhiteSpace() throws Exception {
String expression = "{% for foo in [1,2,3] -%} \n .{{ foo }}\n{% endfor %}";
final Node tree = new TreeParser(interpreter, expression).buildTree();
assertThat(interpreter.render(tree)).isEqualTo(".1\n.2\n.3\n");
}
@Test
public void itStripsLeftWhiteSpace() throws Exception {
String expression = "{% for foo in [1,2,3] %}\n{{ foo }}. \n {%- endfor %}";
final Node tree = new TreeParser(interpreter, expression).buildTree();
assertThat(interpreter.render(tree)).isEqualTo("\n1.\n2.\n3.");
}
@Test
public void itStripsLeftAndRightWhiteSpace() throws Exception {
String expression = "{% for foo in [1,2,3] -%} \n .{{ foo }}. \n {%- endfor %}";
final Node tree = new TreeParser(interpreter, expression).buildTree();
assertThat(interpreter.render(tree)).isEqualTo(".1..2..3.");
}
@Test
public void itPreservesInnerWhiteSpace() throws Exception {
String expression = "{% for foo in [1,2,3] -%}\nL{% if true %}\n{{ foo }}\n{% endif %}R\n{%- endfor %}";
final Node tree = new TreeParser(interpreter, expression).buildTree();
assertThat(interpreter.render(tree)).isEqualTo("L\n1\nRL\n2\nRL\n3\nR");
}
@Test
public void itStripsLeftWhiteSpaceBeforeTag() throws Exception {
String expression = ".\n {%- for foo in [1,2,3] %} {{ foo }} {% endfor %} \n.";
final Node tree = new TreeParser(interpreter, expression).buildTree();
assertThat(interpreter.render(tree)).isEqualTo(". 1 2 3 \n.");
}
@Test
public void itStripsRightWhiteSpaceAfterTag() throws Exception {
String expression = ".\n {% for foo in [1,2,3] %} {{ foo }} {% endfor -%} \n.";
final Node tree = new TreeParser(interpreter, expression).buildTree();
assertThat(interpreter.render(tree)).isEqualTo(".\n 1 2 3 .");
}
@Test
public void itStripsAllOuterWhiteSpace() throws Exception {
String expression = ".\n {%- for foo in [1,2,3] -%} {{ foo }} {%- endfor -%} \n.";
final Node tree = new TreeParser(interpreter, expression).buildTree();
assertThat(interpreter.render(tree)).isEqualTo(".123.");
}
@Test
public void trimAndLstripBlocks() {
interpreter = new Jinjava(JinjavaConfig.newBuilder().withLstripBlocks(true).withTrimBlocks(true).build()).newInterpreter();
assertThat(interpreter.render(parse("parse/tokenizer/whitespace-tags.jinja")))
.isEqualTo("<div>\n"
+ " yay\n"
+ "</div>\n");
}
Node parse(String fixture) {
try {
return new TreeParser(interpreter, Resources.toString(
Resources.getResource(fixture), StandardCharsets.UTF_8)).buildTree();
} catch (Exception e) {
throw Throwables.propagate(e);
}
}
}