1
2
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
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 }