package knorxx.framework.generator.dependency; import com.google.common.collect.Sets; import java.util.Set; import knorxx.framework.generator.BaseGeneratorTestWithMultipleClassLoader; import knorxx.framework.generator.JavaFileOnClasspath; import knorxx.framework.generator.dependency.testclass.bytecode.AnonymousInnerClass; import knorxx.framework.generator.dependency.testclass.bytecode.AnonymousInnerClassWithStaticHelperInSamePackage; import knorxx.framework.generator.dependency.testclass.bytecode.DependencyWithInnerClass; import knorxx.framework.generator.dependency.testclass.bytecode.Enumeration; import knorxx.framework.generator.dependency.testclass.bytecode.InnerClass; import knorxx.framework.generator.dependency.testclass.bytecode.NestedInnerClasses; import knorxx.framework.generator.dependency.testclass.bytecode.NestedStaticInnerClasses; import knorxx.framework.generator.dependency.testclass.bytecode.Simple; import knorxx.framework.generator.dependency.testclass.bytecode.StaticHelperClass; import knorxx.framework.generator.dependency.testclass.bytecode.StaticInnerClass; import static org.hamcrest.core.IsCollectionContaining.hasItems; import static org.junit.Assert.assertThat; import org.junit.Test; /** * * @author sj */ public class ByteCodeDependencyCollectorTest extends BaseGeneratorTestWithMultipleClassLoader { public ByteCodeDependencyCollectorTest(ClassLoader currentClassLoader) { super(currentClassLoader); } @Test public void simple() { test(Simple.class, Sets.newHashSet("java.awt.Color")); } @Test public void innerClass() { test(InnerClass.class, Sets.newHashSet("java.awt.Color", "java.awt.Rectangle")); } @Test public void staticInnerClass() { test(StaticInnerClass.class, Sets.newHashSet("java.awt.Color", "java.awt.Rectangle")); } @Test public void nestedStaticInnerClasses() { test(NestedStaticInnerClasses.class, Sets.newHashSet("java.awt.Color", "java.awt.Rectangle", "java.awt.Point")); } @Test public void nestedInnerClasses() { test(NestedInnerClasses.class, Sets.newHashSet("java.awt.Color", "java.awt.Rectangle", "java.awt.Point")); } @Test public void anonymousInnerClass() { test(AnonymousInnerClass.class, Sets.newHashSet("java.awt.Rectangle")); } @Test public void anonymousInnerClassWithStaticHelperInSamePackage() { test(AnonymousInnerClassWithStaticHelperInSamePackage.class, Sets.newHashSet(StaticHelperClass.class.getName())); } @Test public void dependencyWithInnerClass() { test(DependencyWithInnerClass.class, Sets.newHashSet("com.projetloki.genesis.Properties")); } @Test public void enumeration() { test(Enumeration.class, Sets.newHashSet("java.net.StandardProtocolFamily")); } private <T> void test(Class<T> javaClass, Set<String> expectedDependencies) { ByteCodeDependencyCollector dependencyCollector = new ByteCodeDependencyCollector(); Set<String> dependencies = dependencyCollector.collect(new JavaFileOnClasspath<>(javaClass), getCurrentClassLoader()); assertThat(dependencies, hasItems(expectedDependencies.toArray(new String[]{}))); } }