package org.trimou.handlebars;
import static org.junit.Assert.assertEquals;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.junit.Test;
import org.trimou.AbstractTest;
import org.trimou.engine.MustacheEngine;
import org.trimou.engine.MustacheEngineBuilder;
import org.trimou.engine.MustacheTagInfo;
import org.trimou.engine.config.Configuration;
import org.trimou.engine.config.ConfigurationKey;
import org.trimou.engine.interpolation.BracketDotKeySplitter;
import org.trimou.engine.interpolation.MissingValueHandler;
import org.trimou.handlebars.EvalHelper.BracketDotNotation;
import org.trimou.util.ImmutableList;
import org.trimou.util.ImmutableMap;
/**
*
* @author Martin Kouba
*/
public class EvalHelperTest extends AbstractTest {
@Test
public void testHelper() {
final MustacheEngine engine = MustacheEngineBuilder.newBuilder()
.registerHelpers(HelpersBuilder.empty().addEval().build())
.build();
String[] array = { "alpha", "bravo", "charlie" };
List<String> list = ImmutableList.of("foo", "bar", "baz");
Map<String, Object> data = ImmutableMap
.of("array", array, "list", list);
assertEquals(
"foo:alpha,bar:bravo,baz:charlie",
engine.compileMustache(
"eval_helper1",
"{{#each list}}{{this}}:{{eval 'array' iter.position}}{{#if iter.hasNext}},{{/if}}{{/each}}")
.render(data));
}
@Test
public void testCustomNotation() {
final MustacheEngine engine = MustacheEngineBuilder
.newBuilder()
.setKeySplitter(new BracketDotKeySplitter())
.registerHelpers(
HelpersBuilder.empty()
.addEval(new BracketDotNotation()).build())
.build();
assertEquals(
"val",
engine.compileMustache("eval_helper_notation",
"{{eval 'this' this.keySet.iterator.next}}").render(
ImmutableMap.of("my.key", "val")));
}
@Test
public void testNullValue() {
final MustacheEngine engine = MustacheEngineBuilder.newBuilder()
.setMissingValueHandler(new MissingValueHandler() {
@Override
public void init(Configuration configuration) {
}
@Override
public Set<ConfigurationKey> getConfigurationKeys() {
return Collections.emptySet();
}
@Override
public Object handle(MustacheTagInfo tagInfo) {
return "Hello";
}
}).registerHelpers(HelpersBuilder.empty().addEval().build())
.build();
assertEquals(
"Hello",
engine.compileMustache("eval_null_val1", "{{eval 'foo' 'bar'}}")
.render(null));
assertEquals(
"",
engine.compileMustache("eval_null_val2",
"{{#eval 'foo' 'bar'}}{{this}}{{/eval}}").render(null));
}
}