package com.github.mustachejava; import org.junit.Test; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.StringReader; import java.io.Writer; import java.util.ArrayList; import java.util.HashMap; import java.util.List; public class AbstractClassTest { static abstract class AbstractFoo { public abstract String getValue(); } static class Foo extends AbstractFoo { @Override public String getValue() { return "I am Foo"; } } static class Bar extends AbstractFoo { @Override public String getValue() { return "I am Bar"; } } static class Container { public final AbstractFoo foo; public Container(final AbstractFoo foo) { this.foo = foo; } } @Test public void testAbstractClass() throws IOException { final List<Container> containers = new ArrayList<>(); containers.add(new Container(new Foo())); containers.add(new Container(new Bar())); HashMap<String, Object> scopes = new HashMap<>(); Writer writer = new OutputStreamWriter(System.out); MustacheFactory mf = new DefaultMustacheFactory(); Mustache mustache = mf.compile(new StringReader("{{#containers}} {{foo.value}} {{/containers}}"), "example"); scopes.put("containers", containers); mustache.execute(writer, scopes); writer.flush(); } @Test public void testAbstractClassNoDots() throws IOException { final List<Container> containers = new ArrayList<>(); containers.add(new Container(new Foo())); containers.add(new Container(new Bar())); HashMap<String, Object> scopes = new HashMap<>(); Writer writer = new OutputStreamWriter(System.out); MustacheFactory mf = new DefaultMustacheFactory(); Mustache mustache = mf.compile(new StringReader("{{#containers}} {{#foo}}{{value}}{{/foo}} {{/containers}}"), "example"); scopes.put("containers", containers); mustache.execute(writer, scopes); writer.flush(); } }