package guiceberry2_junit3.tutorial_0_basic;
import com.google.inject.BindingAnnotation;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Scopes;
import com.google.inject.testing.guiceberry.GuiceBerryEnv;
import com.google.inject.testing.guiceberry.TestScoped;
import com.google.inject.testing.guiceberry.junit3.GuiceBerryJunit3Env;
import com.google.inject.testing.guiceberry.junit3.GuiceBerryJunit3TestCase;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@GuiceBerryEnv(Tutorial0Envs.EXAMPLE_2)
public class Example2ScopesTest extends GuiceBerryJunit3TestCase {
@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 GuiceBerryJunit3Env {
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() {
super.configure();
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 {}
}