/** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ package net.sourceforge.pmd.lang.java.symboltable; import static org.junit.Assert.assertEquals; import java.io.File; import java.util.HashSet; import java.util.Set; import org.junit.Test; import net.sourceforge.pmd.PMD; import net.sourceforge.pmd.lang.java.typeresolution.PMDASMClassLoader; public class TypeSetTest { private PMDASMClassLoader pmdClassLoader = PMDASMClassLoader.getInstance(TypeSetTest.class.getClassLoader()); @Test public void testASTCompilationUnitPackage() { TypeSet t = new TypeSet(); t.setASTCompilationUnitPackage("java.lang."); assertEquals("java.lang.", t.getASTCompilationUnitPackage()); } @Test public void testAddImport() { TypeSet t = new TypeSet(); t.addImport("java.io.File"); assertEquals(1, t.getImportsCount()); } @Test public void testFindClassImplicitImport() throws ClassNotFoundException { TypeSet t = new TypeSet(); Class<?> clazz = t.findClass("String"); assertEquals(String.class, clazz); } @Test public void testFindClassSamePackage() throws ClassNotFoundException { TypeSet t = new TypeSet(); t.setASTCompilationUnitPackage("net.sourceforge.pmd"); Class<?> clazz = t.findClass("PMD"); assertEquals(PMD.class, clazz); } @Test public void testFindClassExplicitImport() throws ClassNotFoundException { TypeSet t = new TypeSet(); t.addImport("java.io.File"); Class<?> clazz = t.findClass("File"); assertEquals(File.class, clazz); } @Test public void testFindClassImportOnDemand() throws ClassNotFoundException { TypeSet t = new TypeSet(); t.addImport("java.io.*"); Class<?> clazz = t.findClass("File"); assertEquals(File.class, clazz); } @Test public void testFindClassPrimitive() throws ClassNotFoundException { TypeSet t = new TypeSet(); assertEquals(int.class, t.findClass("int")); } @Test public void testFindClassVoid() throws ClassNotFoundException { TypeSet t = new TypeSet(); assertEquals(void.class, t.findClass("void")); } @Test public void testFindFullyQualified() throws ClassNotFoundException { TypeSet t = new TypeSet(); assertEquals(String.class, t.findClass("java.lang.String")); assertEquals(Set.class, t.findClass("java.util.Set")); } // inner class tests @Test public void testPrimitiveTypeResolver() throws ClassNotFoundException { TypeSet.Resolver r = new TypeSet.PrimitiveTypeResolver(); assertEquals(int.class, r.resolve("int")); assertEquals(byte.class, r.resolve("byte")); assertEquals(long.class, r.resolve("long")); } @Test(expected = ClassNotFoundException.class) public void testPrimitiveTypeResolverWithNull() throws ClassNotFoundException { TypeSet.Resolver r = new TypeSet.PrimitiveTypeResolver(); r.resolve(null); } @Test public void testVoidTypeResolver() throws ClassNotFoundException { TypeSet.Resolver r = new TypeSet.VoidResolver(); assertEquals(void.class, r.resolve("void")); } @Test(expected = ClassNotFoundException.class) public void testVoidTypeResolverWithNull() throws ClassNotFoundException { TypeSet.Resolver r = new TypeSet.VoidResolver(); r.resolve(null); } @Test public void testExplicitImportResolver() throws ClassNotFoundException { Set<String> imports = new HashSet<>(); imports.add("java.io.File"); TypeSet.Resolver r = new TypeSet.ExplicitImportResolver(pmdClassLoader, imports); assertEquals(File.class, r.resolve("File")); } @Test(expected = ClassNotFoundException.class) public void testExplicitImportResolverWithNull() throws ClassNotFoundException { Set<String> imports = new HashSet<>(); imports.add("java.io.File"); TypeSet.Resolver r = new TypeSet.ExplicitImportResolver(pmdClassLoader, imports); r.resolve(null); } @Test(expected = ClassNotFoundException.class) public void testExplicitImportResolverWithNullAndEmptyImports() throws ClassNotFoundException { TypeSet.Resolver r = new TypeSet.ExplicitImportResolver(pmdClassLoader, new HashSet<String>()); r.resolve(null); } @Test public void testImplicitImportResolverPass() throws ClassNotFoundException { TypeSet.Resolver r = new TypeSet.ImplicitImportResolver(pmdClassLoader); assertEquals(String.class, r.resolve("String")); } @Test(expected = ClassNotFoundException.class) public void testImplicitImportResolverPassFail() throws ClassNotFoundException { TypeSet.Resolver r = new TypeSet.ImplicitImportResolver(pmdClassLoader); r.resolve("PMD"); } @Test(expected = ClassNotFoundException.class) public void testImplicitImportResolverWithNull() throws ClassNotFoundException { TypeSet.Resolver r = new TypeSet.ImplicitImportResolver(pmdClassLoader); r.resolve(null); } @Test public void testCurrentPackageResolverPass() throws ClassNotFoundException { TypeSet.Resolver r = new TypeSet.CurrentPackageResolver(pmdClassLoader, "net.sourceforge.pmd"); assertEquals(PMD.class, r.resolve("PMD")); } @Test(expected = ClassNotFoundException.class) public void testCurrentPackageResolverWithNull() throws ClassNotFoundException { TypeSet.Resolver r = new TypeSet.CurrentPackageResolver(pmdClassLoader, "net.sourceforge.pmd"); r.resolve(null); } @Test public void testImportOnDemandResolverPass() throws ClassNotFoundException { TypeSet.Resolver r = getResolver(); assertEquals(Set.class, r.resolve("Set")); assertEquals(File.class, r.resolve("File")); } @Test(expected = ClassNotFoundException.class) public void testImportOnDemandResolverWithNull() throws ClassNotFoundException { TypeSet.Resolver r = getResolver(); r.resolve(null); } @Test(expected = ClassNotFoundException.class) public void importOnDemandResolverFail1() throws ClassNotFoundException { TypeSet.Resolver r = getResolver(); r.resolve("foo"); } @Test(expected = ClassNotFoundException.class) public void importOnDemandResolverFail2() throws ClassNotFoundException { TypeSet.Resolver r = getResolver(); r.resolve("String"); } private TypeSet.Resolver getResolver() { Set<String> imports = new HashSet<>(); imports.add("java.io.*"); imports.add("java.util.*"); TypeSet.Resolver r = new TypeSet.ImportOnDemandResolver(pmdClassLoader, imports); return r; } @Test(expected = ClassNotFoundException.class) public void testFullyQualifiedNameResolverWithNull() throws ClassNotFoundException { TypeSet.Resolver r = new TypeSet.FullyQualifiedNameResolver(pmdClassLoader); r.resolve(null); } }