OSDN Git Service

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