View Javadoc
1   /**
2    * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3    */
4   package net.sourceforge.pmd.symboltable;
5   
6   import static org.junit.Assert.assertEquals;
7   import net.sourceforge.pmd.PMD;
8   import net.sourceforge.pmd.lang.java.symboltable.TypeSet;
9   import net.sourceforge.pmd.lang.java.typeresolution.PMDASMClassLoader;
10  
11  import org.junit.Test;
12  
13  import java.io.File;
14  import java.util.HashSet;
15  import java.util.Set;
16  
17  public class TypeSetTest {
18      private PMDASMClassLoader pmdClassLoader = PMDASMClassLoader.getInstance(TypeSetTest.class.getClassLoader());
19  
20      @Test
21      public void testASTCompilationUnitPackage() {
22          TypeSet t = new TypeSet();
23          t.setASTCompilationUnitPackage("java.lang.");
24          assertEquals("java.lang.", t.getASTCompilationUnitPackage());
25      }
26  
27      @Test
28      public void testAddImport() {
29          TypeSet t = new TypeSet();
30          t.addImport("java.io.File");
31          assertEquals(1, t.getImportsCount());
32      }
33  
34      @Test
35      public void testFindClassImplicitImport() throws Throwable {
36          TypeSet t = new TypeSet();
37          Class clazz = t.findClass("String");
38          assertEquals(String.class, clazz);
39      }
40  
41      @Test
42      public void testFindClassSamePackage() throws Throwable {
43          TypeSet t = new TypeSet();
44          t.setASTCompilationUnitPackage("net.sourceforge.pmd");
45          Class clazz = t.findClass("PMD");
46          assertEquals(PMD.class, clazz);
47      }
48  
49      @Test
50      public void testFindClassExplicitImport() throws Throwable {
51          TypeSet t = new TypeSet();
52          t.addImport("java.io.File");
53          Class clazz = t.findClass("File");
54          assertEquals(File.class, clazz);
55      }
56  
57      @Test
58      public void testFindClassImportOnDemand() throws Throwable {
59          TypeSet t = new TypeSet();
60          t.addImport("java.io.*");
61          Class clazz = t.findClass("File");
62          assertEquals(File.class, clazz);
63      }
64  
65      @Test
66      public void testFindClassPrimitive() throws Throwable {
67          TypeSet t = new TypeSet();
68          assertEquals(int.class, t.findClass("int"));
69      }
70  
71      @Test
72      public void testFindClassVoid() throws Throwable {
73          TypeSet t = new TypeSet();
74          assertEquals(void.class, t.findClass("void"));
75      }
76  
77      @Test
78      public void testFindFullyQualified() throws Throwable {
79          TypeSet t = new TypeSet();
80          assertEquals(String.class, t.findClass("java.lang.String"));
81          assertEquals(Set.class, t.findClass("java.util.Set"));
82      }
83  
84      // inner class tests
85      @Test
86      public void testPrimitiveTypeResolver() throws Throwable {
87          TypeSet.Resolver r = new TypeSet.PrimitiveTypeResolver();
88          assertEquals(int.class, r.resolve("int"));
89          assertEquals(byte.class, r.resolve("byte"));
90          assertEquals(long.class, r.resolve("long"));
91      }
92  
93      @Test
94      public void testVoidTypeResolver() throws Throwable {
95          TypeSet.Resolver r = new TypeSet.VoidResolver();
96          assertEquals(void.class, r.resolve("void"));
97      }
98  
99      @Test
100     public void testExplicitImportResolver() throws Throwable {
101         Set<String> imports = new HashSet<String>();
102         imports.add("java.io.File");
103         TypeSet.Resolver r = new TypeSet.ExplicitImportResolver(pmdClassLoader, imports);
104         assertEquals(File.class, r.resolve("File"));
105     }
106 
107     @Test
108     public void testImplicitImportResolverPass() throws Throwable {
109         TypeSet.Resolver r = new TypeSet.ImplicitImportResolver(pmdClassLoader);
110         assertEquals(String.class, r.resolve("String"));
111     }
112 
113     @Test(expected=ClassNotFoundException.class)
114     public void testImplicitImportResolverPassFail() throws Throwable {
115         TypeSet.Resolver r = new TypeSet.ImplicitImportResolver(pmdClassLoader);
116         r.resolve("PMD");
117     }
118 
119     @Test
120     public void testCurrentPackageResolverPass() throws Throwable {
121         TypeSet.Resolver r = new TypeSet.CurrentPackageResolver(pmdClassLoader, "net.sourceforge.pmd");
122         assertEquals(PMD.class, r.resolve("PMD"));
123     }
124 
125     @Test
126     public void testImportOnDemandResolverPass() throws Throwable {
127         TypeSet.Resolver r = getResolver();
128         assertEquals(Set.class, r.resolve("Set"));
129         assertEquals(File.class, r.resolve("File"));
130     }
131 
132     @Test(expected = ClassNotFoundException.class)
133     public void importOnDemandResolverFail1() throws Throwable {
134         TypeSet.Resolver r = getResolver();
135         r.resolve("foo");
136     }
137 
138     @Test(expected = ClassNotFoundException.class)
139     public void importOnDemandResolverFail2() throws Throwable {
140         TypeSet.Resolver r = getResolver();
141         r.resolve("String");
142     }
143 
144     private TypeSet.Resolver getResolver() {
145         Set<String> imports = new HashSet<String>();
146         imports.add("java.io.*");
147         imports.add("java.util.*");
148         TypeSet.Resolver r = new TypeSet.ImportOnDemandResolver(pmdClassLoader, imports);
149         return r;
150     }
151 
152     public static junit.framework.Test suite() {
153         return new junit.framework.JUnit4TestAdapter(TypeSetTest.class);
154     }
155 }