package org.trimou.handlebars;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import org.trimou.AbstractTest;
import org.trimou.ArchiveType;
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 SwitchHelperTest extends AbstractTest {
@Test
public void testSwitchHelper() {
MustacheEngine engine = MustacheEngineBuilder.newBuilder()
.addGlobalData("type", ArchiveType.class)
.registerHelpers(HelpersBuilder.empty().addSwitch().build())
.build();
assertEquals("WAR",
engine.compileMustache("switch_helper1", "{{#switch this}}"
+ " {{#case type.WAR break=\"true\"}}WAR{{/case}}"
+ " {{#case type.EAR}}EAR{{/case}}"
+ " {{#case type.JAR}}JAR{{/case}}"
+ " {{#default}}none{{/default}}" + "{{/switch}}")
.render(new Hammer().getArchiveType()).trim());
assertEquals("baz", engine.compileMustache("switch_helper2",
"{{#switch this}}" + "{{#case \"foo\"}}A{{/case}}"
+ "{{#case \"bar\"}}B{{/case}}"
+ "{{#default}}{{this.up}}{{/default}}" + "{{/switch}}")
.render("baz").trim());
assertEquals("B", engine
.compileMustache("switch_helper3",
"{{#switch this}}" + "{{#case \"foo\"}}A{{/case}}"
+ "{{#case \"bar\" break=\"true\"}}B{{/case}}"
+ "{{#default}}C{{/default}}" + "{{/switch}}")
.render("bar").trim());
assertEquals("ABC", engine
.compileMustache("switch_helper4",
"{{#switch this}}" + "{{#case \"foo\"}}A{{/case}}"
+ "{{#case \"bar\"}}B{{/case}}"
+ "{{#default}}C{{/default}}" + "{{/switch}}")
.render("foo").trim());
}
@Test
public void testSwitchHelperValidation() {
final MustacheEngine engine = MustacheEngineBuilder.newBuilder()
.registerHelpers(HelpersBuilder.empty().addSwitch().build())
.build();
MustacheExceptionAssert
.expect(MustacheProblem.COMPILE_HELPER_VALIDATION_FAILURE)
.check(() -> engine.compileMustache(
"switch_helper_validation01", "{{switch}}"))
.check(() -> engine.compileMustache(
"switch_helper_validation02",
"{{#switch}}{{case \"true\"}}{{/switch}}"))
.check(() -> engine.compileMustache(
"switch_helper_validation03",
"{{#switch}}{{#case \"true\"}}{{/case}}{{default \"foo\"}}{{/switch}}"));
}
@Test
public void testSwitchHelperInvalidFlow() {
final MustacheEngine engine = MustacheEngineBuilder.newBuilder()
.registerHelpers(
HelpersBuilder.empty().addSet().addSwitch().build())
.build();
MustacheExceptionAssert
.expect(MustacheProblem.RENDER_HELPER_INVALID_OPTIONS)
.check(() -> engine
.compileMustache("switch_helper_invalid_flow01",
"{{#switch}}{{#set name=\"bar\"}}{{#case \"foo\"}}{{/case}}{{/set}}{{/switch}}")
.render("foo"));
}
@Test
public void testSwitchHelperCaseIsBreakByDefault() {
final MustacheEngine engine = MustacheEngineBuilder.newBuilder()
.registerHelpers(HelpersBuilder.empty().addSwitch(true).build())
.build();
assertEquals("A", engine
.compileMustache("switch_helper_break_by_default",
"{{#switch this}}" + "{{#case \"foo\"}}A{{/case}}"
+ "{{#case \"bar\"}}B{{/case}}"
+ "{{#default}}C{{/default}}" + "{{/switch}}")
.render("foo").trim());
}
}