package com.github.mustachejava;
import org.junit.BeforeClass;
import org.junit.Test;
import java.io.File;
import java.io.StringWriter;
import java.util.Arrays;
import java.util.List;
import static org.junit.Assert.assertEquals;
public final class MultipleRecursivePartialsTest {
private static final String TEMPLATE_FILE = "multiple_recursive_partials.html";
private static File root;
@SuppressWarnings("unused")
private static class Model {
Type type;
List<Model> items;
Model(Type type, List<Model> items) {
this.type = type;
this.items = items;
}
Model(Type type) {
this.type = type;
}
Type getType() { return type; }
List<Model> getItems() { return items; }
}
@SuppressWarnings("unused")
private enum Type {
FOO, BAR;
boolean isFoo () { return this == FOO; }
boolean isBar() { return this == BAR; }
}
@BeforeClass
public static void setUp() throws Exception {
File file = new File("compiler/src/test/resources");
root = new File(file, TEMPLATE_FILE).exists() ? file : new File("src/test/resources");
}
@Test
public void shouldHandleTemplateWithMultipleRecursivePartials() throws Exception {
MustacheFactory factory = new DefaultMustacheFactory(root);
Mustache template = factory.compile(TEMPLATE_FILE);
StringWriter sw = new StringWriter();
Model model = new Model(Type.FOO, Arrays.asList(new Model(Type.BAR), new Model(Type.FOO)));
template.execute(sw, model);
assertEquals("I'm a foo!\nIn foo: I'm a bar!\n\nIn foo: I'm a foo!\n\n\n", sw.toString());
}
}