package org.sdif4j.testing.guice;
import com.google.inject.Injector;
import org.sdif4j.InjectContext;
import org.sdif4j.guice.GuiceInjectContext;
import org.sdif4j.testing.*;
import org.testng.annotations.Guice;
import org.testng.annotations.Test;
import javax.inject.Inject;
import javax.inject.Named;
import static org.testng.Assert.*;
@Guice(modules = GuiceTestModule.class)
public class GuiceTest {
@Inject
@Named("key")
private String testKey;
@Inject
private InjectContext injectContext;
@Test
public void testAutoInject() {
assertEquals(testKey, "value");
}
@Test
public void testInjectContextInstance() {
final InjectContext injectContext = this.injectContext;
assertTrue(injectContext instanceof GuiceInjectContext);
assertTrue(this.injectContext.getInstance(InjectContext.class) == injectContext);
final Injector injector = this.injectContext.getInstance(Injector.class);
assertTrue(injector.getInstance(InjectContext.class) == this.injectContext);
}
@Test
public void testNamed() {
assertEquals(injectContext.getInstance(String.class, "key"), "value");
}
@Test
public void testEagerSingleton() {
assertEquals(TestEagerSingleton.getInstantCount(), 1);
final TestSingleton is1 = injectContext.getInstance(TestSingleton.class);
final TestSingleton is2 = injectContext.getInstance(TestSingleton.class);
final TestEagerSingleton s1 = injectContext.getInstance(TestEagerSingleton.class);
final TestEagerSingleton s2 = injectContext.getInstance(TestEagerSingleton.class);
assertEquals(TestEagerSingleton.getInstantCount(), 1);
assertNotNull(is1);
assertTrue(is1 == is2);
assertTrue(is2 == s1);
assertTrue(s1 == s2);
}
@Test
public void testLazySingleton() {
assertEquals(TestLazySingleton.getInstantCount(), 0);
final TestLazySingleton s1 = injectContext.getInstance(TestLazySingleton.class);
final TestLazySingleton s2 = injectContext.getInstance(TestLazySingleton.class);
assertEquals(TestLazySingleton.getInstantCount(), 1);
assertNotNull(s1);
assertTrue(s1 == s2);
}
@Test
public void testInjectConstructorSingleton() {
final InjectConstructorSingleton singleton = injectContext.getInstance(InjectConstructorSingleton.class);
assertTrue(singleton.getTestSingleton() == injectContext.getInstance(TestSingleton.class));
}
@Test
public void testPrototype() {
final TestPrototype testPrototype1 = injectContext.getInstance(TestPrototype.class);
final TestPrototype testPrototype2 = injectContext.getInstance(TestPrototype.class);
assertNotNull(testPrototype1);
assertNotNull(testPrototype2);
assertTrue(testPrototype1 != testPrototype2);
}
@Test
public void testInjectMembers() {
class TestInjectable {
@Inject
@Named("key")
String testKey;
}
final TestInjectable testInjectable = new TestInjectable();
injectContext.injectMembers(testInjectable);
assertEquals(testInjectable.testKey, "value");
}
}