package com.netflix.governator.autobindmultiple; import com.google.common.base.Function; import com.google.common.collect.Iterables; import com.google.common.collect.Sets; import com.google.inject.Inject; import com.google.inject.Injector; import com.google.inject.Singleton; import com.netflix.governator.LifecycleInjectorBuilderProvider; import com.netflix.governator.autobindmultiple.basic.BaseForMocks; import com.netflix.governator.autobindmultiple.generic.BaseForGenericMocks; import com.netflix.governator.guice.LifecycleInjectorBuilder; import com.tngtech.java.junit.dataprovider.DataProviderRunner; import com.tngtech.java.junit.dataprovider.UseDataProvider; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import java.util.Set; @RunWith(DataProviderRunner.class) public class TestAutoBindMultiple extends LifecycleInjectorBuilderProvider { @Singleton public static class Container { private final Set<BaseForMocks> mocks; @Inject public Container(Set<BaseForMocks> mocks) { this.mocks = mocks; } public Set<BaseForMocks> getMocks() { return mocks; } } @Singleton public static class GenericContainer { private final Set<BaseForGenericMocks<Integer>> mocks; @Inject public GenericContainer(Set<BaseForGenericMocks<Integer>> mocks) { this.mocks = mocks; } public Set<BaseForGenericMocks<Integer>> getMocks() { return mocks; } } @Test @UseDataProvider("builders") public void testBasic(LifecycleInjectorBuilder lifecycleInjectorBuilder) { Injector injector = lifecycleInjectorBuilder.usingBasePackages("com.netflix.governator.autobindmultiple.basic").createInjector(); Container container = injector.getInstance(Container.class); Assert.assertEquals(container.getMocks().size(), 3); Iterable<String> transformed = Iterables.transform ( container.getMocks(), new Function<BaseForMocks, String>() { @Override public String apply(BaseForMocks mock) { return mock.getValue(); } } ); Assert.assertEquals(Sets.<String>newHashSet(transformed), Sets.newHashSet("A", "B", "C")); } @Test @UseDataProvider("builders") public void testGeneric(LifecycleInjectorBuilder lifecycleInjectorBuilder) { Injector injector = lifecycleInjectorBuilder.usingBasePackages("com.netflix.governator.autobindmultiple.generic").createInjector(); GenericContainer container = injector.getInstance(GenericContainer.class); Assert.assertEquals(container.getMocks().size(), 3); Iterable<Integer> transformed = Iterables.transform ( container.getMocks(), new Function<BaseForGenericMocks<Integer>, Integer>() { @Override public Integer apply(BaseForGenericMocks<Integer> mock) { return mock.getValue(); } } ); Assert.assertEquals(Sets.<Integer>newHashSet(transformed), Sets.newHashSet(1, 2, 3)); } }