package com.netflix.fabricator.component;
import java.util.Properties;
import org.junit.Assert;
import org.junit.Test;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.TypeLiteral;
import com.netflix.fabricator.annotations.Type;
import com.netflix.fabricator.component.exception.ComponentAlreadyExistsException;
import com.netflix.fabricator.component.exception.ComponentCreationException;
import com.netflix.fabricator.guice.ComponentModuleBuilder;
import com.netflix.fabricator.properties.PropertiesConfigurationModule;
public class TestBindings {
@Type("somecomponent")
public static class SomeComponent {
public static class Builder {
private Class<?> clazz = null;
public void withClazz(Class<?> clazz) {
this.clazz = clazz;
}
public SomeComponent build() {
return new SomeComponent(this);
}
}
private final Class<?> clazz;
public static Builder builder() {
return new Builder();
}
private SomeComponent(Builder builder) {
this.clazz = builder.clazz;
}
public Class<?> getClazz() {
return clazz;
}
}
@Test
public void test() throws ComponentCreationException, ComponentAlreadyExistsException {
Properties props = new Properties();
props.setProperty("id1.somecomponent.clazz", "java.lang.String");
Injector injector = Guice.createInjector(
new PropertiesConfigurationModule(props),
new ComponentModuleBuilder<SomeComponent>()
.manager(SynchronizedComponentManager.class)
.build(SomeComponent.class)
);
ComponentManager<SomeComponent> manager = injector.getInstance(Key.get(new TypeLiteral<ComponentManager<SomeComponent>>() {}));
SomeComponent component = manager.get("id1");
Assert.assertEquals(String.class, component.getClazz());
}
}