diff --git a/src/test/java/com/samskivert/mustache/MustacheTest.java b/src/test/java/com/samskivert/mustache/MustacheTest.java index 78480a8..e32e689 100644 --- a/src/test/java/com/samskivert/mustache/MustacheTest.java +++ b/src/test/java/com/samskivert/mustache/MustacheTest.java @@ -8,7 +8,10 @@ import java.io.IOException; import java.io.Writer; import java.text.SimpleDateFormat; import java.util.Arrays; +import java.util.Collections; import java.util.Date; +import java.util.Iterator; +import java.util.Optional; import java.util.TimeZone; import org.junit.Test; @@ -123,6 +126,22 @@ public class MustacheTest extends SharedTests }); } + @Test public void testOptionalSupportingCollector () { + Mustache.Compiler comp = Mustache.compiler().withCollector(new DefaultCollector() { + public Iterator toIterator (final Object value) { + if (value instanceof Optional) { + Optional opt = (Optional) value; + return opt.isPresent() ? Collections.singleton(opt.get()).iterator() : + Collections.emptyList().iterator(); + } else return super.toIterator(value); + } + }); + test(comp, "test", "{{#foo}}{{.}}{{/foo}}", context("foo", Optional.of("test"))); + test(comp, "", "{{#foo}}{{.}}{{/foo}}", context("foo", Optional.empty())); + test(comp, "", "{{^foo}}{{.}}{{/foo}}", context("foo", Optional.of("test"))); + test(comp, "test", "{{^foo}}test{{/foo}}", context("foo", Optional.empty())); + } + @Test public void testCompoundVariable () { test("hello", "{{foo.bar.baz}}", new Object() { Object foo () {