diff --git a/src/test/java/spoon/test/architecture/SpoonArchitectureEnforcerTest.java b/src/test/java/spoon/test/architecture/SpoonArchitectureEnforcerTest.java index f6d7c29c875..84841122d46 100644 --- a/src/test/java/spoon/test/architecture/SpoonArchitectureEnforcerTest.java +++ b/src/test/java/spoon/test/architecture/SpoonArchitectureEnforcerTest.java @@ -1,5 +1,6 @@ package spoon.test.architecture; +import org.apache.commons.lang3.StringUtils; import org.junit.Test; import spoon.Launcher; import spoon.SpoonAPI; @@ -19,6 +20,7 @@ import spoon.reflect.visitor.filter.AbstractFilter; import spoon.reflect.visitor.filter.TypeFilter; +import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.TreeSet; @@ -248,6 +250,8 @@ public void testSpecPackage() throws Exception { officialPackages.add("spoon.support.reflect.cu"); officialPackages.add("spoon.support.reflect.declaration"); officialPackages.add("spoon.support.reflect.eval"); + officialPackages.add("spoon.reflect.meta"); + officialPackages.add("spoon.reflect.meta.impl"); officialPackages.add("spoon.support.reflect.reference"); officialPackages.add("spoon.support.reflect"); officialPackages.add("spoon.support.template"); @@ -280,19 +284,36 @@ public void process(CtPackage element) { assertSetEquals("you have created a new package or removed an existing one, please declare it explicitly in SpoonArchitectureEnforcerTest#testSpecPackage", officialPackages, currentPackages); } - public static void assertSetEquals(String msg, Set set1, Set set2){ - + private static void assertSetEquals(String msg, Set set1, Set set2){ if(set1 == null || set2 ==null){ throw new IllegalArgumentException(); } - if(set1.size()!=set2.size()){ - throw new AssertionError(msg); + if(set1.size() != set2.size()){ + throw new AssertionError(msg+"\n\nDetails: "+computeDifference(set1, set2)); } if (!set1.containsAll(set2)) { - throw new AssertionError(msg); + throw new AssertionError(msg+"\n\nDetails: "+computeDifference(set1, set2)); + } + + } + + private static String computeDifference(Set set1, Set set2) { + Set results = new HashSet<>(); + + for (Object o : set1) { + if (!set2.contains(o)) { + results.add("Missing package "+o+" in computed set"); + } else { + set2.remove(o); + } + } + + for (Object o : set2) { + results.add("Package "+o+" presents in computed but not expected set."); } + return StringUtils.join(results, "\n"); } }