Skip to content

Commit

Permalink
#1023 Update populator tests to cover StrategyComponentPopulator
Browse files Browse the repository at this point in the history
  • Loading branch information
GuusLieben committed Nov 30, 2023
1 parent 2fda209 commit cf25b0c
Showing 1 changed file with 24 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,12 @@
import org.dockbox.hartshorn.application.context.DependencyGraph;
import org.dockbox.hartshorn.application.context.validate.CyclicDependencyGraphValidator;
import org.dockbox.hartshorn.component.ComponentKey;
import org.dockbox.hartshorn.component.ComponentPopulator;
import org.dockbox.hartshorn.component.ComponentRequiredException;
import org.dockbox.hartshorn.component.ComponentResolutionException;
import org.dockbox.hartshorn.component.ContextualComponentPopulator;
import org.dockbox.hartshorn.component.Scope;
import org.dockbox.hartshorn.component.populate.StrategyComponentPopulator;
import org.dockbox.hartshorn.component.processing.Binds.BindingType;
import org.dockbox.hartshorn.inject.ApplicationDependencyResolver;
import org.dockbox.hartshorn.inject.AutoConfiguringDependencyContext;
Expand Down Expand Up @@ -244,13 +246,23 @@ void testEnabledInjectDoesNotInjectTwice() {
Assertions.assertEquals(1, instance.singletonEnableable().enabled());
}

@Test
public static Stream<Arguments> componentPopulators() {
return Stream.of(
Arguments.of((Function<ApplicationContext, ComponentPopulator>) ContextualComponentPopulator::new),
Arguments.of((Function<ApplicationContext, ComponentPopulator>) context -> {
return StrategyComponentPopulator.create(Customizer.useDefaults()).initialize(SimpleSingleElementContext.create(context));
})
);
}

@ParameterizedTest
@MethodSource("componentPopulators")
@TestComponents(bindings = @TestBinding(type = SampleInterface.class, implementation = SampleImplementation.class))
public void testTypesCanBePopulated() {
public void testTypesCanBePopulated(Function<ApplicationContext, ComponentPopulator> populatorFactory) {
PopulatedType populatedType = new PopulatedType();
Assertions.assertNull(populatedType.sampleInterface());

new ContextualComponentPopulator(this.applicationContext).populate(populatedType);
populatorFactory.apply(this.applicationContext).populate(populatedType);
Assertions.assertNotNull(populatedType.sampleInterface());
Assertions.assertEquals(SampleImplementation.NAME, populatedType.sampleInterface().name());
}
Expand Down Expand Up @@ -303,24 +315,26 @@ void testProvidersCanApply(String meta, String name, boolean field, String field
}
}

@Test
void testContextFieldsAreInjected() {
@ParameterizedTest
@MethodSource("componentPopulators")
void testContextFieldsAreInjected(Function<ApplicationContext, ComponentPopulator> populatorFactory) {
String contextName = "InjectedContext";
this.applicationContext.add(new SampleContext(contextName));
ContextualComponentPopulator populator = new ContextualComponentPopulator(this.applicationContext);

ComponentPopulator populator = populatorFactory.apply(this.applicationContext);
ContextInjectedType instance = populator.populate(new ContextInjectedType());

Assertions.assertNotNull(instance.context());
Assertions.assertEquals(contextName, instance.context().name());
}

@Test
void testNamedContextFieldsAreInjected() {
@ParameterizedTest
@MethodSource("componentPopulators")
void testNamedContextFieldsAreInjected(Function<ApplicationContext, ComponentPopulator> populatorFactory) {
String contextName = "InjectedContext";
this.applicationContext.add("another", new SampleContext(contextName));

ContextualComponentPopulator populator = new ContextualComponentPopulator(this.applicationContext);
ComponentPopulator populator = populatorFactory.apply(this.applicationContext);
ContextInjectedType instance = populator.populate(new ContextInjectedType());

Assertions.assertNotNull(instance.anotherContext());
Expand Down

0 comments on commit cf25b0c

Please sign in to comment.