package org.trimou.handlebars; import static org.junit.Assert.assertEquals; 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.util.ImmutableList; /** * * @author Martin Kouba */ public class RepeatHelperTest extends AbstractTest { @Test public void testHelper() throws InterruptedException { MustacheEngine engine = MustacheEngineBuilder.newBuilder() .registerHelpers( HelpersBuilder.empty().addRepeat().addInvoke().build()) .build(); assertEquals( "mememe", engine .compileMustache("repeat_01", "{{#repeat times=3}}me{{/repeat}}") .render(null)); assertEquals( "", engine .compileMustache("repeat_02", "{{#repeat while=this}}me{{/repeat}}") .render(false)); MustacheExceptionAssert.expect(MustacheProblem.RENDER_GENERIC_ERROR) .check(() -> engine .compileMustache("repeat_03", "{{#repeat while='this' limit=3}}me{{/repeat}}") .render(true)); assertEquals("foobar", engine.compileMustache("repeat_04", "{{#with this.iterator}}{{#repeat while=hasNext}}{{next}}{{/repeat}}{{/with}}") .render(ImmutableList.of("foo", "bar"))); assertEquals("barfoo", engine.compileMustache("repeat_05", "{{#invoke this.size on=this m='listIterator'}}{{#repeat while=hasPrevious}}{{previous}}{{/repeat}}{{/invoke}}") .render(ImmutableList.of("foo", "bar"))); } @Test public void testValidation() { MustacheExceptionAssert .expect(MustacheProblem.COMPILE_HELPER_VALIDATION_FAILURE) .check(() -> MustacheEngineBuilder.newBuilder() .registerHelpers( HelpersBuilder.empty().addRepeat().build()) .build() .compileMustache("repeat_validation_01", "{{repeat}}")) .check(() -> MustacheEngineBuilder.newBuilder() .registerHelpers( HelpersBuilder.empty().addRepeat().build()) .build().compileMustache("repeat_validation_02", "{{#repeat foo='bar'}}{{/repeat}}")) .check(() -> MustacheEngineBuilder.newBuilder() .registerHelpers( HelpersBuilder.empty().addRepeat().build()) .build().compileMustache("repeat_validation_03", "{{#repeat times='a'}}{{/repeat}}")); } }