package org.trimou.handlebars;
import static org.junit.Assert.assertEquals;
import java.util.concurrent.Executors;
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.engine.locator.MapTemplateLocator;
import org.trimou.exception.MustacheProblem;
import org.trimou.util.ImmutableMap;
/**
*
* @author Martin Kouba
*/
public class AsyncHelperTest extends AbstractTest {
@Test
public void testAsyncHelper() {
MustacheEngine engine = MustacheEngineBuilder.newBuilder()
.setExecutorService(Executors.newFixedThreadPool(
Runtime.getRuntime().availableProcessors()))
.registerHelpers(
HelpersBuilder.empty().addAsync().addInclude().build())
.addTemplateLocator(new MapTemplateLocator(
ImmutableMap.of("template", "async")))
.build();
assertEquals("Hello async world!!",
engine.compileMustache("async_helper01",
"Hello {{#async}}{{include templateName}} {{world}}{{/async}}!")
.render(ImmutableMap.of("templateName", "template",
"world", "world!")));
}
@Test
public void testAsyncHelperNested() {
MustacheEngine engine = MustacheEngineBuilder.newBuilder()
.setExecutorService(Executors.newFixedThreadPool(
Runtime.getRuntime().availableProcessors()))
.registerHelpers(
HelpersBuilder.empty().addAsync().addInclude().build())
.addTemplateLocator(new MapTemplateLocator(
ImmutableMap.of("template", "async")))
.build();
assertEquals("Hello async world! No!",
engine.compileMustache("async_helper02",
"Hello {{#async}}{{include templateName}} {{#async}}{{#async}}{{world}}{{/async}}{{/async}}{{#async}}!{{/async}}{{/async}}{{#async}} No{{/async}}!")
.render(ImmutableMap.of("templateName", "template",
"world", "world")));
}
@Test
public void testAsyncHelperNeedsExecutorService() {
final MustacheEngine engine = MustacheEngineBuilder.newBuilder()
.registerHelpers(HelpersBuilder.empty().addAsync().build())
.build();
MustacheExceptionAssert
.expect(MustacheProblem.RENDER_ASYNC_PROCESSING_ERROR).check(
() -> engine
.compileMustache("async_helper03",
"{{#async}}foo{{/async}}")
.render(null));
}
}