package junit3_tdtc.tutorial_0_basic;
import com.google.common.testing.junit3.TearDownTestCase;
import com.google.guiceberry.GuiceBerryModule;
import com.google.guiceberry.TestScoped;
import com.google.guiceberry.junit3.AutoTearDownGuiceBerry;
import com.google.inject.AbstractModule;
import com.google.inject.BindingAnnotation;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Scopes;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
public class Example2ScopesTest extends TearDownTestCase {
@Override
protected void setUp() throws Exception {
super.setUp();
AutoTearDownGuiceBerry.setUp(this, Env.class);
}
@Inject
@UnscopedIncrementingNumber
private Provider<Integer> unscopedIncrementingNumber;
@Inject
@TestScopedIncrementingNumber
private Provider<Integer> testScopedIncrementingNumber;
@Inject
@SingletonScopedIncrementingNumber
private Provider<Integer> singletonScopedIncrementingNumber;
public void testOne() throws Exception {
assertEquals(300, singletonScopedIncrementingNumber.get().intValue());
assertEquals(300, singletonScopedIncrementingNumber.get().intValue());
assertEquals(200, testScopedIncrementingNumber.get().intValue());
assertEquals(200, testScopedIncrementingNumber.get().intValue());
assertEquals(100, unscopedIncrementingNumber.get().intValue());
assertEquals(101, unscopedIncrementingNumber.get().intValue());
}
public void testTwo() throws Exception {
assertEquals(300, singletonScopedIncrementingNumber.get().intValue());
assertEquals(300, singletonScopedIncrementingNumber.get().intValue());
assertEquals(201, testScopedIncrementingNumber.get().intValue());
assertEquals(201, testScopedIncrementingNumber.get().intValue());
assertEquals(102, unscopedIncrementingNumber.get().intValue());
assertEquals(103, unscopedIncrementingNumber.get().intValue());
}
public static final class Env extends AbstractModule {
private static final class IncrementingProvider implements Provider<Integer> {
private int number;
public IncrementingProvider(int seed) {
this.number = seed;
}
public Integer get() {
return number++;
}
}
@Override
protected void configure() {
install(new GuiceBerryModule());
IncrementingProvider unscopedIncrementingNumberProvider =
new IncrementingProvider(100);
IncrementingProvider testScopedIncrementingNumberProvider =
new IncrementingProvider(200);
IncrementingProvider singletonScopedIncrementingNumberProvider =
new IncrementingProvider(300);
bind(Integer.class)
.annotatedWith(UnscopedIncrementingNumber.class)
.toProvider(unscopedIncrementingNumberProvider);
bind(Integer.class)
.annotatedWith(TestScopedIncrementingNumber.class)
.toProvider(testScopedIncrementingNumberProvider)
.in(TestScoped.class);
bind(Integer.class)
.annotatedWith(SingletonScopedIncrementingNumber.class)
.toProvider(singletonScopedIncrementingNumberProvider)
.in(Scopes.SINGLETON);
}
}
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
@BindingAnnotation
private @interface UnscopedIncrementingNumber {}
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
@BindingAnnotation
private @interface TestScopedIncrementingNumber {}
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
@BindingAnnotation
private @interface SingletonScopedIncrementingNumber {}
}