From 0f45894bed32589aa93b938810f4f339192167e2 Mon Sep 17 00:00:00 2001 From: Edgar Espina Date: Mon, 29 Oct 2018 21:52:13 -0300 Subject: [PATCH] Force MapValueResolver fix #654 --- .../com/github/jknack/handlebars/Context.java | 12 +++++++- .../jknack/handlebars/issues/Issue654.java | 29 +++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 handlebars/src/test/java/com/github/jknack/handlebars/issues/Issue654.java diff --git a/handlebars/src/main/java/com/github/jknack/handlebars/Context.java b/handlebars/src/main/java/com/github/jknack/handlebars/Context.java index 18b3d9cc4..1e3eec24c 100644 --- a/handlebars/src/main/java/com/github/jknack/handlebars/Context.java +++ b/handlebars/src/main/java/com/github/jknack/handlebars/Context.java @@ -29,7 +29,9 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import java.util.stream.Stream; +import com.github.jknack.handlebars.context.MapValueResolver; import com.github.jknack.handlebars.internal.path.ThisPath; import com.github.jknack.handlebars.io.TemplateSource; @@ -290,7 +292,15 @@ public Builder combine(final Map model) { */ public Builder resolver(final ValueResolver... resolvers) { notEmpty(resolvers, "At least one value-resolver must be present."); - context.setResolver(new CompositeValueResolver(resolvers)); + boolean mapResolver = Stream.of(resolvers).anyMatch(MapValueResolver.class::isInstance); + if (!mapResolver) { + ValueResolver[] safeResolvers = new ValueResolver[resolvers.length + 1]; + System.arraycopy(resolvers, 0, safeResolvers, 0, resolvers.length); + safeResolvers[safeResolvers.length - 1] = MapValueResolver.INSTANCE; + context.setResolver(new CompositeValueResolver(safeResolvers)); + } else { + context.setResolver(new CompositeValueResolver(resolvers)); + } return this; } diff --git a/handlebars/src/test/java/com/github/jknack/handlebars/issues/Issue654.java b/handlebars/src/test/java/com/github/jknack/handlebars/issues/Issue654.java new file mode 100644 index 000000000..5e11093b8 --- /dev/null +++ b/handlebars/src/test/java/com/github/jknack/handlebars/issues/Issue654.java @@ -0,0 +1,29 @@ +package com.github.jknack.handlebars.issues; + +import com.github.jknack.handlebars.Context; +import com.github.jknack.handlebars.context.JavaBeanValueResolver; +import com.github.jknack.handlebars.context.MapValueResolver; +import com.github.jknack.handlebars.v4Test; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class Issue654 extends v4Test { + + @Test + public void makeSureMapResolverIsAlwaysPresent() throws Exception { + Context ctx = Context.newBuilder($("foo", "bar")) + .resolver(JavaBeanValueResolver.INSTANCE) + .build(); + assertEquals("bar", ctx.get("foo")); + } + + @Test + public void ignoreMapResolverWhenItIsProvided() throws Exception { + Context ctx = Context.newBuilder($("foo", "bar")) + .resolver(MapValueResolver.INSTANCE) + .build(); + assertEquals("bar", ctx.get("foo")); + } + +}