1
14
15 package gate.util;
16
17 import java.net.URL;
18
19 import junit.framework.*;
20
21
22 public class TestReload extends TestCase{
23
24 public TestReload(String name) { super(name); }
25
26
27 public void setUp() {
28 }
30
31 public static Test suite() {
32 return new TestSuite(TestReload.class);
33 }
35
36 public void testReload() throws Exception {
37 ReloadingClassLoader loader = new ReloadingClassLoader();
38 URL url = new URL("http://gate.ac.uk/tests/first.jar");
42 loader.load(url);
43 Class c = loader.loadClass("loader.Scratch", true);
45 String firstResult = c.newInstance().toString();
46
47 loader.unload(url);
49
50 try{
52 c = loader.loadClass("loader.Scratch", true);
53 Assert.assertTrue("Class was found after being unloaded!", false);
54 }catch(ClassNotFoundException cnfe){
55 if(DEBUG) System.out.println("OK: got exception");
56 }
57
58 url = new URL("http://gate.ac.uk/tests/second.jar");
60 loader.load(url);
61
62 c = loader.loadClass("loader.Scratch", true);
64 String secondResult = c.newInstance().toString();
65
66 Assert.assertTrue("Got same result from different versions of the class",
68 !firstResult.equals(secondResult));
69 }
70
71 public void testUnload() throws Exception {
72 ReloadingClassLoader loader = new ReloadingClassLoader();
73 URL url = new URL("http://gate.ac.uk/tests/first.jar");
77
78 loader.load(url);
79 Class c = loader.loadClass("loader.Scratch", true);
81 String firstResult = c.newInstance().toString();
82
83 loader.unload(url);
85
86 try{
88 c = loader.loadClass("loader.Scratch", true);
89 Assert.assertTrue("Class was found after being unloaded!", false);
90 }catch(ClassNotFoundException cnfe){
91 if(DEBUG) System.out.println("OK: got exception");
92 }
93 }
94
95 public void testCache() throws Exception {
96 ReloadingClassLoader loader = new ReloadingClassLoader();
97 long timeFresh = 0;
98 long startTime;
99 long endTime;
100 URL url = new URL("http://gate.ac.uk/tests/first.jar");
102 for(int i = 0; i< 100; i++){
103 loader.load(url);
104 startTime = System.currentTimeMillis();
105 Class c = loader.loadClass("loader.Scratch", true);
107 endTime = System.currentTimeMillis();
108 timeFresh += endTime - startTime;
109 loader.unload(url);
110 }
111
112 loader.load(url);
114 Class c = loader.loadClass("loader.Scratch", true);
116 long timeCache = 0;
117 for(int i = 0; i< 100; i++){
118 startTime = System.currentTimeMillis();
119 c = loader.loadClass("loader.Scratch", true);
121 endTime = System.currentTimeMillis();
122 timeCache += endTime - startTime;
123 }
124 Assert.assertTrue("Cached classes load slower than fresh ones!",
125 timeCache < timeFresh);
126 }
127
128
129
130 private static final boolean DEBUG = false;
131 }