You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2017/12/07 15:01:01 UTC
[isis] 05/18: ISIS-1782: adds unit test for Module.Util
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 7f004a58dae9d5cf7f9fa7eacce37e9b7b4dba03
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Dec 4 08:43:31 2017 +0000
ISIS-1782: adds unit test for Module.Util
---
.../Module_Util_transitiveDependenciesOf_Test.java | 182 +++++++++++++++++++++
1 file changed, 182 insertions(+)
diff --git a/core/applib/src/test/java/org/apache/isis/applib/modules/Module_Util_transitiveDependenciesOf_Test.java b/core/applib/src/test/java/org/apache/isis/applib/modules/Module_Util_transitiveDependenciesOf_Test.java
new file mode 100644
index 0000000..5394cff
--- /dev/null
+++ b/core/applib/src/test/java/org/apache/isis/applib/modules/Module_Util_transitiveDependenciesOf_Test.java
@@ -0,0 +1,182 @@
+package org.apache.isis.applib.modules;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+import static org.junit.Assert.assertTrue;
+
+public class Module_Util_transitiveDependenciesOf_Test {
+
+ @Rule
+ public ExpectedException expectedException = ExpectedException.none();
+
+ public class ModuleImpl extends ModuleAbstract {
+ private final String name;
+ public ModuleImpl(final String name) {
+ this.name = name;
+ }
+ @Override
+ public String toString() {
+ return name;
+ }
+ }
+
+ static class ModuleP {}
+ static class ModuleQ {}
+ static class ModuleR {}
+
+ static class ServiceX {}
+ static class ServiceY {}
+ static class ServiceZ {}
+
+ final Module moduleF = new ModuleImpl("F");
+ final Module moduleE = new ModuleImpl("E") {
+ @Override public Set<Class<?>> getAdditionalServices() {
+ return Sets.<Class<?>>newHashSet(ServiceX.class);
+ }
+ @Override
+ public Set<Class<?>> getDependenciesAsClass() {
+ return Sets.<Class<?>>newHashSet(ModuleP.class);
+ }
+ };
+ final Module moduleD = new ModuleImpl("D") {
+ @Override public Set<Module> getDependencies() {
+ return Sets.newHashSet(moduleE);
+ }
+ };
+
+ final Module moduleC = new ModuleImpl("C") {
+ @Override public Set<Module> getDependencies() {
+ return Sets.newHashSet(moduleE, moduleD);
+ }
+ @Override
+ public Set<Class<?>> getDependenciesAsClass() {
+ return Sets.newHashSet(ModuleQ.class, ModuleR.class);
+ }
+ @Override
+ public Set<Class<?>> getAdditionalServices() {
+ return Sets.newHashSet(ServiceY.class, ServiceZ.class);
+ }
+ };
+ final Module moduleB = new ModuleImpl("B") {
+ @Override public Set<Module> getDependencies() {
+ return Sets.newHashSet(moduleF, moduleC);
+ }
+ };
+ final Module moduleA = new ModuleImpl("A") {
+ @Override public Set<Module> getDependencies() {
+ return Sets.newHashSet(moduleE, moduleC);
+ }
+ };
+
+ final Module moduleG = new ModuleImpl("G") {
+ @Override public Set<Module> getDependencies() {
+ return Sets.newHashSet(moduleH);
+ }
+ };
+ final Module moduleH = new ModuleImpl("H") {
+ @Override public Set<Module> getDependencies() {
+ return Sets.newHashSet(moduleI);
+ }
+ };
+
+ final Module moduleI = new ModuleImpl("I") {
+ @Override public Set<Module> getDependencies() {
+ return Sets.newHashSet(moduleG);
+ }
+ };
+
+
+ @Test
+ public void no_cyclic_dependencies() throws Exception {
+
+ // moduleF
+ // moduleE [P; X]
+ // moduleD -> moduleE
+ // moduleC [Q,R; Y,Z] -> moduleE, moduleD
+ // moduleB -> moduleF, moduleC
+ // moduleA -> moduleE, moduleC
+
+ assertTransitiveDependencies(
+ moduleF, Arrays.asList(moduleF));
+ assertTransitiveDependenciesAsClass(
+ moduleF, Collections.<Class<?>>emptyList());
+ assertTransitiveServices(
+ moduleF, Collections.<Class<?>>emptyList());
+
+ assertTransitiveDependencies(
+ moduleE, Arrays.asList(moduleE));
+ assertTransitiveDependenciesAsClass(
+ moduleE, Lists.<Class<?>>newArrayList(ModuleP.class));
+ assertTransitiveServices(
+ moduleE, Lists.<Class<?>>newArrayList(ServiceX.class));
+
+ assertTransitiveDependencies(
+ moduleD, Arrays.asList(moduleE, moduleD));
+ assertTransitiveDependenciesAsClass(
+ moduleD, Lists.<Class<?>>newArrayList(ModuleP.class));
+ assertTransitiveServices(
+ moduleD, Lists.<Class<?>>newArrayList(ServiceX.class));
+
+ assertTransitiveDependencies(
+ moduleC, Arrays.asList(moduleE, moduleD, moduleC));
+ assertTransitiveDependenciesAsClass(
+ moduleC, Arrays.asList(ModuleP.class, ModuleQ.class, ModuleR.class));
+ assertTransitiveServices(
+ moduleC, Arrays.asList(ServiceX.class, ServiceY.class, ServiceZ.class));
+
+ assertTransitiveDependencies(
+ moduleB, Arrays.asList(moduleE, moduleD, moduleC, moduleF, moduleB));
+ assertTransitiveDependenciesAsClass(
+ moduleB, Arrays.asList(ModuleP.class, ModuleQ.class, ModuleR.class));
+ assertTransitiveServices(
+ moduleB, Arrays.asList(ServiceX.class, ServiceY.class, ServiceZ.class));
+
+ assertTransitiveDependencies(
+ moduleA, Arrays.asList(moduleE, moduleD, moduleC, moduleA));
+ assertTransitiveDependenciesAsClass(
+ moduleA, Arrays.asList(ModuleP.class, ModuleQ.class, ModuleR.class));
+ assertTransitiveServices(
+ moduleA, Arrays.asList(ServiceX.class, ServiceY.class, ServiceZ.class));
+
+ }
+
+ @Test
+ public void with_cyclic_dependencies() throws Exception {
+
+ expectedException.expect(IllegalStateException.class);
+
+ Module.Util.transitiveDependenciesOf(moduleG);
+ }
+
+ void assertTransitiveDependencies(
+ final Module module, final List<Module> expected) {
+ final List<Module> dependencies = Module.Util.transitiveDependenciesOf(module);
+ assertTrue(dependencies.containsAll(expected));
+ assertTrue(expected.containsAll(dependencies));
+ }
+
+ void assertTransitiveServices(
+ final Module module, final List<Class<?>> expected) {
+ final List<Class<?>> services = Module.Util.transitiveAdditionalServicesOf(module);
+ assertTrue(services.containsAll(expected));
+ assertTrue(expected.containsAll(services));
+ }
+
+ void assertTransitiveDependenciesAsClass(
+ final Module module, final List<Class<?>> expected) {
+ final List<Class<?>> dependenciesAsClass = Module.Util.transitiveDependenciesAsClassOf(module);
+ assertTrue(dependenciesAsClass.containsAll(expected));
+ assertTrue(expected.containsAll(dependenciesAsClass));
+ }
+
+}
\ No newline at end of file
--
To stop receiving notification emails like this one, please contact
"commits@isis.apache.org" <co...@isis.apache.org>.