package com.netflix.governator;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.IdentityHashMap;
import java.util.List;
import com.google.inject.AbstractModule;
import com.google.inject.Module;
import com.google.inject.Stage;
public class TestSupport {
private static final class InstancesModule extends AbstractModule {
final List<Object> instances;
public InstancesModule(Object... instances) {
this.instances = new ArrayList<>(Arrays.asList(instances));
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
protected void configure() {
for (Object o : instances) {
Class clz = (Class) o.getClass();
bind(clz).toInstance(o);
}
}
}
private InstancesModule module = new InstancesModule();
private IdentityHashMap<GovernatorFeature<?>, Object> features = new IdentityHashMap<>();
public static Module asModule(final Object o) {
return asModule(o);
}
public static Module asModule(final Object... instances) {
return new InstancesModule(instances);
}
public static LifecycleInjector inject(final Object... instances) {
return InjectorBuilder.fromModule(new InstancesModule(instances)).createInjector();
}
public <T> TestSupport withFeature(GovernatorFeature<T> feature, T value) {
this.features.put(feature, value);
return this;
}
public TestSupport withSingleton(final Object... instances) {
module.instances.addAll(Arrays.asList(instances));
return this;
}
public LifecycleInjector inject() {
return new LifecycleInjectorCreator().withFeatures(features).createInjector(Stage.PRODUCTION, module);
}
}