package org.jooby.hbs;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.isA;
import org.jooby.Env;
import org.jooby.Renderer;
import org.jooby.internal.hbs.HbsEngine;
import org.jooby.internal.hbs.HbsHelpers;
import org.jooby.test.MockUnit;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import com.github.jknack.handlebars.Handlebars;
import com.google.inject.Binder;
import com.google.inject.binder.AnnotatedBindingBuilder;
import com.google.inject.binder.LinkedBindingBuilder;
import com.google.inject.multibindings.Multibinder;
import com.google.inject.name.Names;
import com.typesafe.config.Config;
@RunWith(PowerMockRunner.class)
@PrepareForTest({Hbs.class, Multibinder.class })
public class HbsTest {
@SuppressWarnings("unchecked")
@Test
public void configure() throws Exception {
new MockUnit(Env.class, Config.class, Binder.class)
.expect(unit -> {
Env env = unit.get(Env.class);
expect(env.name()).andReturn("dev");
})
.expect(unit -> {
AnnotatedBindingBuilder<Handlebars> hABB = unit.mock(AnnotatedBindingBuilder.class);
hABB.toInstance(isA(Handlebars.class));
Binder binder = unit.get(Binder.class);
expect(binder.bind(Handlebars.class)).andReturn(hABB);
})
.expect(unit -> {
Binder binder = unit.get(Binder.class);
Multibinder<Object> mbinder = unit.mock(Multibinder.class);
unit.mockStatic(Multibinder.class);
expect(Multibinder.newSetBinder(binder, Object.class, Names.named("hbs.helpers")))
.andReturn(mbinder);
LinkedBindingBuilder<Renderer> fLBB = unit.mock(LinkedBindingBuilder.class);
fLBB.toInstance(isA(HbsEngine.class));
Multibinder<Renderer> mfbinder = unit.mock(Multibinder.class);
expect(mfbinder.addBinding()).andReturn(fLBB);
expect(Multibinder.newSetBinder(binder, Renderer.class))
.andReturn(mfbinder);
AnnotatedBindingBuilder<HbsHelpers> hhABB = unit.mock(AnnotatedBindingBuilder.class);
hhABB.asEagerSingleton();
expect(binder.bind(HbsHelpers.class)).andReturn(hhABB);
})
.expect(unit -> {
})
.run(unit -> {
new Hbs()
.configure(unit.get(Env.class), unit.get(Config.class), unit.get(Binder.class));
});
}
}