package org.watertemplate.interpreter.parser;
import org.junit.Test;
import org.watertemplate.TemplateMap;
import java.util.Locale;
import static org.junit.Assert.assertEquals;
public class AbstractSyntaxTreeIfTest {
private static final Locale locale = Locale.US;
@Test
public void normalIf() {
AbstractSyntaxTree abs =
new AbstractSyntaxTree.If(
new AbstractSyntaxTree.Id("condition"), new AbstractSyntaxTree.Id("if_statements"),
new AbstractSyntaxTree.Id("else_statements")
);
TemplateMap.Arguments arguments = new TemplateMap.Arguments();
arguments.add("if_statements", "condition was true");
arguments.add("else_statements", "condition was false");
arguments.add("condition", true);
Object result = abs.string(arguments, locale);
assertEquals("condition was true", result);
arguments.add("condition", false);
result = abs.string(arguments, locale);
assertEquals("condition was false", result);
}
@Test
public void ifConditionWithNestedProperties() {
AbstractSyntaxTree abs =
new AbstractSyntaxTree.If(
new AbstractSyntaxTree.Id("condition",
new AbstractSyntaxTree.Id("nested_condition")), new AbstractSyntaxTree.Id("if_statements"),
new AbstractSyntaxTree.Id("else_statements")
);
TemplateMap.Arguments arguments = new TemplateMap.Arguments();
arguments.add("if_statements", "nested condition was true");
arguments.add("else_statements", "nested condition was false");
arguments.addMappedObject("condition", null, (ignore, map) -> map.add("nested_condition", true));
Object result = abs.string(arguments, locale);
assertEquals("nested condition was true", result);
arguments.addMappedObject("condition", null, (ignore, map) -> map.add("nested_condition", false));
result = abs.string(arguments, locale);
assertEquals("nested condition was false", result);
}
@Test
public void ifWithoutElse() {
AbstractSyntaxTree abs =
new AbstractSyntaxTree.If(
new AbstractSyntaxTree.Id("condition"), new AbstractSyntaxTree.Id("if_statements")
);
TemplateMap.Arguments arguments = new TemplateMap.Arguments();
arguments.add("if_statements", "condition was true");
arguments.add("condition", true);
Object result = abs.string(arguments, locale);
assertEquals("condition was true", result);
arguments.add("condition", false);
result = abs.string(arguments, locale);
assertEquals("", result);
}
}