OSDN Git Service

ClassLoaderの作成にはdoPrivilegeメソッドで囲まなければならない.
[stigmata/digger.git] / src / test / java / jp / sourceforge / stigmata / digger / ClasspathContextTest.java
1 package jp.sourceforge.stigmata.digger;
2
3 import java.io.File;
4 import java.net.URL;
5
6 import org.junit.Assert;
7 import org.junit.Before;
8 import org.junit.Test;
9
10 /**
11  * test for ClasspathContext class.
12  * 
13  * @author Haruaki Tamada
14  */
15 public class ClasspathContextTest{
16     private static final String ASM_FILE = "target/asm-all-4.0.jar";
17     private ClasspathContext context;
18
19     @Before
20     public void setup(){
21         context = new ClasspathContext();
22     }
23
24     @Test
25     public void testBasic() throws ClassNotFoundException{
26         Assert.assertEquals(0, context.getClasspathSize());
27
28         Class<?> classFileEntryClass = context.findClass("jp.sourceforge.stigmata.digger.ClassFileEntry");
29         Class<?> classpathContextClass = context.findClass("jp.sourceforge.stigmata.digger.ClasspathContext");
30
31         Assert.assertNotNull(classFileEntryClass);
32         Assert.assertNotNull(classpathContextClass);
33         Assert.assertNotNull(context.findEntry("jp.sourceforge.stigmata.digger.ClassFileEntry"));
34         Assert.assertNotNull(context.findEntry("jp.sourceforge.stigmata.digger.ClasspathContext"));
35     }
36
37     @Test
38     public void testBasic2() throws Exception{
39         context.addClasspath(new File("target/classes").toURI().toURL());
40         Assert.assertEquals(1, context.getClasspathSize());
41         Assert.assertEquals(new File("target/classes").toURI().toURL(), context.getClasspathList()[0]);
42
43         context.clear();
44         Assert.assertEquals(0, context.getClasspathSize());
45     }
46
47     @Test
48     public void testParent() throws Exception{
49         ClasspathContext subContext = new ClasspathContext(context);
50         context.addClasspath(new File("target/classes").toURI().toURL());
51         subContext.addClasspath(new File(ASM_FILE).toURI().toURL());
52
53         Assert.assertEquals(1, context.getClasspathSize());
54         Assert.assertEquals(2, subContext.getClasspathSize());
55
56         URL[] url = subContext.getClasspathList();
57         Assert.assertEquals(new File("target/classes").toURI().toURL(), url[0]);
58         Assert.assertEquals(new File(ASM_FILE).toURI().toURL(), url[1]);
59
60         subContext.clear();
61         Assert.assertEquals(1, subContext.getClasspathSize());
62
63         subContext.clearAll();
64         Assert.assertEquals(0, subContext.getClasspathSize());
65     }
66
67     @Test
68     public void testParent2() throws Exception{
69         ClasspathContext subContext = new ClasspathContext(context);
70         context.addClasspath(new File("target/classes").toURI().toURL());
71         subContext.addClasspath(new File(ASM_FILE).toURI().toURL());
72
73         Assert.assertTrue(context.isIncludeSystemClasses());
74         subContext.setIncludeSystemClasses(false);
75         Assert.assertFalse(context.isIncludeSystemClasses());
76     }
77
78     @Test(expected=ClassNotFoundException.class)
79     public void testNotExistedClass() throws Exception{
80         context.findClass("not.exists.ClassName");
81     }
82
83     @Test
84     public void testFindEntryNotExistedClass() throws Exception{
85         Assert.assertFalse(context.hasEntry("not.exists.ClassName"));
86         Assert.assertNull(context.findEntry("not.exists.ClassName"));
87     }
88
89     @Test
90     public void testFindEntryNotSearchSystemClasspath() throws Exception{
91         context.setIncludeSystemClasses(false);
92         Assert.assertFalse(context.hasEntry("jp.sourceforge.stigmata.digger.ClasspathContext"));
93         Assert.assertNull(context.findEntry("jp.sourceforge.stigmata.digger.ClasspathContext"));
94     }
95
96     @Test
97     public void testFindEntryNotSearchSystemClasspath2() throws Exception{
98         context.addClasspath(new File("target/classes").toURI().toURL());
99         context.setIncludeSystemClasses(false);
100         // fail because classpath was not set.
101         Assert.assertFalse(context.hasEntry("org.objectweb.asm.ClassReader"));
102         Assert.assertNull(context.findEntry("org.objectweb.asm.ClassReader"));
103     }
104
105     @Test
106     public void testFindEntryNotSearchSystemClasspath3() throws Exception{
107         context.addClasspath(new File("target/classes").toURI().toURL());
108         context.setIncludeSystemClasses(false);
109         // always success to load
110         Assert.assertTrue(context.hasEntry("java.lang.Object"));
111         Assert.assertNotNull(context.findClass("java.lang.Object"));
112         // success because addClasspath method was called above.
113         Assert.assertTrue(context.hasEntry("jp.sourceforge.stigmata.digger.ClasspathContext"));
114         Assert.assertNotNull(context.findClass("jp.sourceforge.stigmata.digger.ClasspathContext"));
115     }
116
117     @Test
118     public void testFindEntryNotSearchSystemClasspath4() throws Exception{
119         context.addClasspath(new File("target/classes").toURI().toURL());
120         context.addClasspath(new File(ASM_FILE).toURI().toURL());
121         context.setIncludeSystemClasses(false);
122
123         Assert.assertTrue(context.hasEntry("java.lang.Object"));
124         Assert.assertNotNull(context.findClass("java.lang.Object"));
125         Assert.assertTrue(context.hasEntry("jp.sourceforge.stigmata.digger.ClasspathContext"));
126         Assert.assertNotNull(context.findClass("jp.sourceforge.stigmata.digger.ClasspathContext"));
127         Assert.assertTrue(context.hasEntry("org.objectweb.asm.ClassReader"));
128         Assert.assertNotNull(context.findClass("org.objectweb.asm.ClassReader"));
129     }
130
131     @Test(expected=ClassNotFoundException.class)
132     public void testNotSearchSystemClasspath() throws Exception{
133         context.setIncludeSystemClasses(false);
134         context.findClass("jp.sourceforge.stigmata.digger.ClasspathContext");
135     }
136
137     @Test(expected=ClassNotFoundException.class)
138     public void testNotSearchSystemClasspath2() throws Exception{
139         context.addClasspath(new File("target/classes").toURI().toURL());
140         context.setIncludeSystemClasses(false);
141         // fail because classpath was not set.
142         context.findClass("org.objectweb.asm.ClassReader");
143     }
144
145     @Test
146     public void testNotSearchSystemClasspath3() throws Exception{
147         context.addClasspath(new File("target/classes").toURI().toURL());
148         context.setIncludeSystemClasses(false);
149         // always success to load
150         Assert.assertNotNull(context.findClass("java.lang.Object"));
151         // success because addClasspath method was called above.
152         Assert.assertNotNull(context.findClass("jp.sourceforge.stigmata.digger.ClasspathContext"));
153     }
154
155     @Test
156     public void testNotSearchSystemClasspath4() throws Exception{
157         context.addClasspath(new File("target/classes").toURI().toURL());
158         context.addClasspath(new File(ASM_FILE).toURI().toURL());
159         context.setIncludeSystemClasses(false);
160         Assert.assertNotNull(context.findClass("java.lang.Object"));
161         Assert.assertNotNull(context.findClass("jp.sourceforge.stigmata.digger.ClasspathContext"));
162         Assert.assertNotNull(context.findClass("org.objectweb.asm.ClassReader"));
163     }
164
165     @Test
166     public void testSubContextBasic() throws ClassNotFoundException{
167         ClasspathContext subContext = new ClasspathContext(context);
168         Class<?> classFileEntryClass = subContext.findClass("jp.sourceforge.stigmata.digger.ClassFileEntry");
169         Class<?> classpathContextClass = subContext.findClass("jp.sourceforge.stigmata.digger.ClasspathContext");
170
171         Assert.assertNotNull(classFileEntryClass);
172         Assert.assertNotNull(classpathContextClass);
173     }
174
175     @Test(expected=ClassNotFoundException.class)
176     public void testSubContextNotExistedClass() throws Exception{
177         ClasspathContext subContext = new ClasspathContext(context);
178         subContext.findClass("not.exists.class");
179     }
180
181     @Test(expected=ClassNotFoundException.class)
182     public void testSubContextNotSearchSystemClasspath() throws Exception{
183         context.setIncludeSystemClasses(false);
184
185         ClasspathContext subContext = new ClasspathContext(context);
186         subContext.findClass("jp.sourceforge.stigmata.digger.ClasspathContext");
187     }
188
189     @Test(expected=ClassNotFoundException.class)
190     public void testSubContextNotSearchSystemClasspath2() throws Exception{
191         context.addClasspath(new File("target/classes").toURI().toURL());
192         context.setIncludeSystemClasses(false);
193
194         ClasspathContext subContext = new ClasspathContext(context);
195         // fail because classpath was not set.
196         subContext.findClass("org.objectweb.asm.ClassReader");
197     }
198
199     public void testSubContextNotSearchSystemClasspath3() throws Exception{
200         context.addClasspath(new File("target/classes").toURI().toURL());
201         context.setIncludeSystemClasses(false);
202
203         ClasspathContext subContext = new ClasspathContext(context);
204         // always success to load
205         Assert.assertNotNull(subContext.findClass("java.lang.Object"));
206         // success because addClasspath method was called above.
207         Assert.assertNotNull(subContext.findClass("jp.sourceforge.stigmata.digger.ClasspathContext"));
208     }
209
210     @Test
211     public void testSubContextNotSearchSystemClasspath4() throws Exception{
212         context.addClasspath(new File("target/classes").toURI().toURL());
213         context.addClasspath(new File(ASM_FILE).toURI().toURL());
214         context.setIncludeSystemClasses(false);
215
216         ClasspathContext subContext = new ClasspathContext(context);
217         Assert.assertNotNull(subContext.findClass("java.lang.Object"));
218         Assert.assertNotNull(subContext.findClass("jp.sourceforge.stigmata.digger.ClasspathContext"));
219         Assert.assertNotNull(subContext.findClass("org.objectweb.asm.ClassReader"));
220     }
221
222     @Test
223     public void testWarLoader() throws Exception{
224         context.addClasspath(new File("target/test-classes/resources/samplewar.war").toURI().toURL());
225
226         Assert.assertNotNull(context.findClass("HelloWorld"));
227
228         ClasspathContext subContext = new ClasspathContext(context);
229         Assert.assertNotNull(subContext.findClass("HelloWorld"));
230     }
231 }