package org.springframework.guice; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import javax.inject.Inject; import javax.inject.Named; import org.junit.Before; import org.junit.Test; import com.google.inject.Injector; import com.google.inject.Key; import com.google.inject.name.Names; public abstract class AbstractCompleteWiringTests { private Injector injector; @Before public void init() { this.injector = createInjector(); } protected abstract Injector createInjector(); @Test public void injectInstance() { Bar bar = new Bar(); this.injector.injectMembers(bar); assertNotNull(bar.service); } @Test public void memberInjector() { Bar bar = new Bar(); this.injector.getMembersInjector(Bar.class).injectMembers(bar); assertNotNull(bar.service); } @Test public void getInstanceUnbound() { assertNotNull(this.injector.getInstance(Foo.class)); } @Test public void getInstanceBound() { assertNotNull(this.injector.getInstance(Service.class)); } @Test public void getInstanceBoundWithNoInterface() { Baz instance = this.injector.getInstance(Baz.class); assertNotNull(instance); assertEquals(instance, this.injector.getInstance(Baz.class)); } @Test public void getProviderUnbound() { assertNotNull(this.injector.getProvider(Foo.class).get()); } @Test public void getProviderBound() { assertNotNull(this.injector.getProvider(Service.class).get()); } @Test public void getNamedInstance() { assertNotNull(this.injector.getInstance(Key.get(Thang.class, Names.named("thing")))); } @Test public void getNamedInjectedInstance() { assertNotNull(this.injector.getInstance(Thing.class).thang); } public interface Service { } public static class MyService implements Service { } public static class Foo { @Inject public Foo(Service service) { } } public static class Bar { private Service service; @Inject public void setService(Service service) { this.service = service; } } public static class Baz { @Inject public Baz(Service service) { } } public static class Thing { private Thang thang; @Inject public void setThang(@Named("thing") Thang thang) { this.thang = thang; } } public static class Thang { } }