package org.jooby.thymeleaf; import static org.easymock.EasyMock.expect; import static org.junit.Assert.assertEquals; import java.util.HashMap; import java.util.Locale; import java.util.Map; import org.jooby.Env; import org.jooby.MediaType; import org.jooby.Renderer; import org.jooby.View; import org.jooby.test.MockUnit; import org.jooby.test.MockUnit.Block; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import org.thymeleaf.TemplateEngine; import org.thymeleaf.context.Context; import com.google.common.collect.ImmutableMap; @RunWith(PowerMockRunner.class) @PrepareForTest({ThlEngine.class, TemplateEngine.class, Thlxss.class, Context.class }) public class ThlEngineTest { @Test public void newInstance() throws Exception { new MockUnit(TemplateEngine.class, Env.class) .run(unit -> { new ThlEngine(unit.get(TemplateEngine.class), unit.get(Env.class)); }); } @SuppressWarnings({"unchecked", "rawtypes" }) @Test public void renderer() throws Exception { new MockUnit(Env.class, View.class, Renderer.Context.class) .expect(unit -> { TemplateEngine engine = unit.powerMock(TemplateEngine.class); unit.registerMock(TemplateEngine.class, engine); }) .expect(viewName("index")) .expect(unit -> { Renderer.Context ctx = unit.get(Renderer.Context.class); expect(ctx.locals()).andReturn(new HashMap<>(ImmutableMap.of("_vname", "index"))); }) .expect(unit -> { Thlxss xss = unit.constructor(Thlxss.class) .args(Env.class) .build(unit.get(Env.class)); Map model = unit.mock(Map.class); expect(model.putIfAbsent("_vname", "index")).andReturn(null); expect(model.putIfAbsent("xss", xss)).andReturn(null); View view = unit.get(View.class); expect(view.model()).andReturn(model); Renderer.Context ctx = unit.get(Renderer.Context.class); expect(ctx.locale()).andReturn(Locale.CANADA); Context context = unit.constructor(Context.class) .args(Locale.class, Map.class) .build(Locale.CANADA, model); TemplateEngine engine = unit.get(TemplateEngine.class); expect(engine.process("index", context)).andReturn("..."); expect(ctx.type(MediaType.html)).andReturn(ctx); ctx.send("..."); }) .run(unit -> { ThlEngine engine = new ThlEngine(unit.get(TemplateEngine.class), unit.get(Env.class)); engine.render(unit.get(View.class), unit.get(Renderer.Context.class)); assertEquals("thymeleaf", engine.name()); }); } private Block viewName(final String vname) { return unit -> { View view = unit.get(View.class); expect(view.name()).andReturn(vname); }; } }