package org.trimou.handlebars; import static org.junit.Assert.assertEquals; import java.util.List; import org.junit.Test; import org.trimou.AbstractTest; import org.trimou.MustacheExceptionAssert; import org.trimou.engine.MustacheEngine; import org.trimou.engine.MustacheEngineBuilder; import org.trimou.exception.MustacheProblem; import org.trimou.lambda.InputLiteralLambda; import org.trimou.util.ImmutableList; import org.trimou.util.ImmutableMap; /** * * @author Martin Kouba */ public class JoinHelperTest extends AbstractTest { @Test public void testJoinHelper() { final MustacheEngine engine = MustacheEngineBuilder.newBuilder() .registerHelpers(HelpersBuilder.empty().addJoin().build()) .addGlobalData("li", new InputLiteralLambda() { @Override public boolean isReturnValueInterpolated() { return false; } @Override public String invoke(String text) { return "<li>" + text + "</li>"; } }).build(); String[] array = { "alpha", "bravo", "charlie" }; List<String> list = ImmutableList.of("foo", "bar", "baz"); assertEquals("alphabravocharliefoo", engine.compileMustache("join_helper1", "{{join this 'foo' nullValue}}").render(array)); assertEquals("alpha : bravo : charlie", engine.compileMustache("join_helper2", "{{join this delimiter=' : '}}").render(array)); assertEquals("foo,bar,baz,alpha,bravo,charlie", engine.compileMustache("join_helper3", "{{join list array delimiter=','}}") .render(ImmutableMap.of("array", array, "list", list))); assertEquals("start,foo,bar,baz,middle,alpha,bravo,charlie,end", engine.compileMustache("join_helper4", "{{join 'start' list 'middle' array 'end' delimiter=','}}") .render(ImmutableMap.of("array", array, "list", list))); assertEquals("<start><end>", engine.compileMustache("join_helper5", "{{&join '<start>' '<end>'}}") .render(ImmutableMap.of("array", array, "list", list))); assertEquals("<start><end>", engine.compileMustache("join_helper6", "{{join '<start>' '<end>'}}") .render(ImmutableMap.of("array", array, "list", list))); assertEquals( "<li>foo</li>\n<li>bar</li>\n<li>baz</li>\n<li>Me</li>\n<li>alpha</li>\n<li>bravo</li>\n<li>charlie</li>", engine.compileMustache("join_helper7", "{{&join list 'Me' array delimiter='\n' lambda=li foo='baz'}}") .render(ImmutableMap.of("array", array, "list", list))); } @Test public void testJoinHelperValidation() { final MustacheEngine engine = MustacheEngineBuilder.newBuilder() .registerHelpers(HelpersBuilder.empty().addJoin().build()) .build(); MustacheExceptionAssert .expect(MustacheProblem.COMPILE_HELPER_VALIDATION_FAILURE) .check(() -> engine.compileMustache("join_helper_validation01", "{{join}}")); MustacheExceptionAssert .expect(MustacheProblem.RENDER_HELPER_INVALID_OPTIONS).check( () -> engine .compileMustache("join_helper_validation02", "{{join 'Me' lambda='foo'}}") .render(null)); } }