package org.trimou.handlebars; import static org.junit.Assert.assertEquals; import org.junit.Test; import org.trimou.AbstractTest; import org.trimou.Hammer; import org.trimou.MustacheExceptionAssert; import org.trimou.engine.MustacheEngine; import org.trimou.engine.MustacheEngineBuilder; import org.trimou.exception.MustacheProblem; /** * * @author Martin Kouba */ public class ChooseHelperTest extends AbstractTest { @Test public void testChooseHelper() { MustacheEngine engine = MustacheEngineBuilder.newBuilder() .registerHelpers(HelpersBuilder.empty().addChoose().build()) .build(); assertEquals("transient", engine.compileMustache("choose_helper1", "{{#choose}}" + "{{#when up.isPersistent}}persistent{{/when}}" + "{{#otherwise}}transient{{/otherwise}}" + "{{/choose}}") .render(new Hammer())); assertEquals("P", engine.compileMustache("choose_helper2", "{{#choose}}" + "{{#when up}}P{{/when}}" + "{{#otherwise}}T{{/otherwise}}" + "{{/choose}}") .render("not a falsy")); assertEquals("2", engine.compileMustache("choose_helper3", "{{#choose}}" + "{{#when up.null}}1{{/when}}" + "{{#when up.age}}2{{/when}}" + "{{#otherwise}}3{{/otherwise}}" + "{{/choose}}") .render(new Hammer())); } @Test public void testChooseHelperValidation() { final MustacheEngine engine = MustacheEngineBuilder.newBuilder() .registerHelpers(HelpersBuilder.empty().addChoose().build()) .build(); MustacheExceptionAssert .expect(MustacheProblem.COMPILE_HELPER_VALIDATION_FAILURE) .check(() -> engine.compileMustache( "choose_helper_validation01", "{{choose}}")) .check(() -> engine.compileMustache( "choose_helper_validation02", "{{#choose}}{{when \"true\"}}{{/choose}}")) .check(() -> engine.compileMustache( "choose_helper_validation03", "{{#choose}}{{#when \"true\"}}{{/when}}{{otherwise \"foo\"}}{{/choose}}")); } @Test public void testChooseHelperInvalidFlow() { final MustacheEngine engine = MustacheEngineBuilder.newBuilder() .registerHelpers( HelpersBuilder.empty().addSet().addChoose().build()) .build(); MustacheExceptionAssert .expect(MustacheProblem.RENDER_HELPER_INVALID_OPTIONS) .check(() -> engine .compileMustache("choose_helper_invalid_flow01", "{{#choose}}{{#set name=\"bar\"}}{{#when \"foo\"}}{{/when}}{{/set}}{{/choose}}") .render("foo")); } }