package test.mustache; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; import org.testng.Assert; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import org.testng.collections.Maps; import org.testng.mustache.Mustache; @Test public class MustacheTest { public static class Person { public String name; public Person(String n) { name = n; } } public static class Age { public int age; public Age(int a) { this.age = a; } } private static final List<Person> PEOPLE = new ArrayList<>( Arrays.asList(new Person("Carl"), new Person("Christopher"))); private static final List<Age> AGES = new ArrayList<>( Arrays.asList(new Age(42), new Age(43))); @DataProvider public Object[][] dp() { return new Object[][] { // Simple new Object[] { create("one", "ello", "two", "orld"), "H{{one}} W{{two}}", "Hello World" }, // Null condition new Object[] { Collections.emptyMap(), "E{{#foo}}xxx{{/foo}}lephant", "Elephant" }, // Null condition with new line new Object[] { Collections.emptyMap(), "Hello\n{{#foo}}@\n{{/foo}}World", "Hello\nWorld" }, // Simple scope new Object[] { create("person", new Person("John"), "day", "Monday"), "Hello {{#person}}{{name}}{{/person}}, {{day}}", "Hello John, Monday" }, // Scope with shadowing new Object[] { create("person", new Person("John"), "name", "Carl"), "Hello {{#person}}{{name}}{{/person}}, {{name}}", "Hello John, Carl" }, // Test iteration new Object[] { create("people", PEOPLE), "People:@{{#people}}-{{/people}}!", "People:@--!", }, // Nested scopes new Object[] { create("people", PEOPLE, "ages", AGES), ":@{{#people}}{{name}}{{#ages}}{{age}}{{/ages}}@{{/people}}!_", ":@Carl4243@Christopher4243@!_", }, }; } private Map<String, Object> create(Object... objects) { Map<String, Object> result = Maps.newHashMap(); for (int i = 0; i < objects.length; i += 2) { result.put((String) objects[i], objects[i + 1]); } return result; } @Test(dataProvider = "dp") public void runTest(Map<String, Object> model, String template, String expected) throws IOException { // InputStream is = new StringInputStream(template); Assert.assertEquals(new Mustache().run(template, model), expected); } }