summaryrefslogtreecommitdiffstats
path: root/container-di/src/test
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2020-08-21 17:41:51 +0200
committerJon Marius Venstad <venstad@gmail.com>2020-08-21 17:41:51 +0200
commitdbcc9107e3ae49e61270e002e241d9a07864facd (patch)
tree761f8a8199bdfb4475324c9c080181eebdb2a07e /container-di/src/test
parent67e528443cca68cc527e50c2714ad1717563c458 (diff)
Call deconstruct in reverse dependency order
Diffstat (limited to 'container-di/src/test')
-rw-r--r--container-di/src/test/java/com/yahoo/container/di/componentgraph/core/ComponentGraphTest.java32
1 files changed, 32 insertions, 0 deletions
diff --git a/container-di/src/test/java/com/yahoo/container/di/componentgraph/core/ComponentGraphTest.java b/container-di/src/test/java/com/yahoo/container/di/componentgraph/core/ComponentGraphTest.java
index e7b269e5172..2a30d71c338 100644
--- a/container-di/src/test/java/com/yahoo/container/di/componentgraph/core/ComponentGraphTest.java
+++ b/container-di/src/test/java/com/yahoo/container/di/componentgraph/core/ComponentGraphTest.java
@@ -27,6 +27,7 @@ import org.junit.Test;
import java.lang.annotation.Annotation;
import java.util.Collections;
import java.util.HashMap;
+import java.util.List;
import java.util.Set;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
@@ -87,6 +88,28 @@ public class ComponentGraphTest {
}
@Test
+ public void all_created_components_are_returned_in_reverse_topological_order() {
+ Node innerComponent = mockComponentNode(SimpleComponent.class);
+ Node middleComponent = mockComponentNode(ComponentTakingComponent.class);
+ Node outerComponent = mockComponentNode(ComponentTakingComponentTakingComponent.class);
+ middleComponent.inject(innerComponent);
+ outerComponent.inject(innerComponent);
+
+ ComponentGraph componentGraph = new ComponentGraph();
+ componentGraph.add(innerComponent);
+ componentGraph.add(middleComponent);
+ componentGraph.add(outerComponent);
+ componentGraph.complete();
+
+ innerComponent.constructInstance();
+ middleComponent.constructInstance();
+ outerComponent.constructInstance();
+
+ assertEquals(List.of(outerComponent.constructedInstance().get(), middleComponent.constructedInstance().get(), innerComponent.constructedInstance().get()),
+ componentGraph.allConstructedComponentsAndProviders());
+ }
+
+ @Test
public void component_can_be_injected_into_another_component() {
Node injectedComponent = mockComponentNode(SimpleComponent.class);
Node targetComponent = mockComponentNode(ComponentTakingComponent.class);
@@ -526,6 +549,15 @@ public class ComponentGraphTest {
}
}
+ public static class ComponentTakingComponentTakingComponent extends AbstractComponent {
+ private final ComponentTakingComponent injectedComponent;
+
+ public ComponentTakingComponentTakingComponent(ComponentTakingComponent injectedComponent) {
+ assertThat(injectedComponent, notNullValue());
+ this.injectedComponent = injectedComponent;
+ }
+ }
+
@SuppressWarnings("unused")
public static class ComponentTakingConfigAndComponent extends AbstractComponent {
private final TestConfig config;