Skip to content

Commit 1a2c80d

Browse files
committed
BROKEN: Add simple tests for ClassLoaderPlus
Unfortunately, the ClassLoaderPlus pollutes the current thread context class loader, so we either need to change that, or clear it out between tests. See next commit...
1 parent a083ec4 commit 1a2c80d

File tree

3 files changed

+76
-0
lines changed

3 files changed

+76
-0
lines changed
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package org.scijava.launcher;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
import java.io.File;
6+
import java.lang.reflect.Method;
7+
import java.net.URLClassLoader;
8+
import java.nio.file.Paths;
9+
10+
import static org.junit.jupiter.api.Assertions.*;
11+
import static org.junit.jupiter.api.Assumptions.assumeTrue;
12+
13+
/**
14+
* Tests {@link ClassLoaderPlus}.
15+
*
16+
* @author Curtis Rueden
17+
*/
18+
public class ClassLoaderPlusTest {
19+
20+
/** Tests {@link ClassLoaderPlus#get}. */
21+
@Test
22+
public void testGet() throws Exception {
23+
File jarFile = Paths.get("src", "test", "resources", "greet.jar").toFile();
24+
assumeTrue(jarFile.isFile());
25+
URLClassLoader greetLoader = ClassLoaderPlus.get(null, jarFile);
26+
assertNotNull(greetLoader);
27+
Class<?> greetClass = greetLoader.loadClass("com.example.greet.Greet");
28+
assertNotNull(greetClass);
29+
assertEquals("com.example.greet.Greet", greetClass.getName());
30+
}
31+
32+
@Test
33+
public void testGetFailure() throws Exception {
34+
File jarFile = Paths.get("src", "test", "resources", "ask.jar").toFile();
35+
assumeTrue(jarFile.isFile());
36+
URLClassLoader askLoader = ClassLoaderPlus.get(null, jarFile);
37+
assertNotNull(askLoader);
38+
Class<?> askClass = askLoader.loadClass("com.example.ask.Ask");
39+
assertNotNull(askClass);
40+
Exception expected = null;
41+
Object value = null;
42+
try {
43+
value = askClass.getMethod("question").invoke(null);
44+
}
45+
catch (Exception e) {
46+
expected = e;
47+
assertEquals(
48+
"java.lang.NoClassDefFoundError: com/example/greet/Greet",
49+
e.getCause().toString()
50+
);
51+
}
52+
if (expected == null) fail("Expected exception but got value: " + value);
53+
}
54+
55+
/** Tests {@link ClassLoaderPlus#getRecursively}. */
56+
@Test
57+
public void testGetRecursively() throws Exception {
58+
File jarDir = Paths.get("src", "test", "resources").toFile();
59+
assumeTrue(jarDir.isDirectory());
60+
URLClassLoader classLoader = ClassLoaderPlus.getRecursively(null, true, jarDir);
61+
assertNotNull(classLoader);
62+
Class<?> askClass = classLoader.loadClass("com.example.ask.Ask");
63+
Method questionMethod = askClass.getMethod("question()");
64+
Object question = questionMethod.invoke(null);
65+
assertEquals("Hello! How are you?", question);
66+
}
67+
68+
/** Tests {@link ClassLoaderPlus#getRecursively} failure cases. */
69+
@Test
70+
public void testGetRecursivelyFailure() throws Exception {
71+
File jarDir = Paths.get("src", "main", "java").toFile();
72+
assumeTrue(jarDir.isDirectory());
73+
URLClassLoader classLoader = ClassLoaderPlus.getRecursively(null, true, jarDir);
74+
assertNull(classLoader);
75+
}
76+
}

src/test/resources/ask.jar

1.33 KB
Binary file not shown.

src/test/resources/greet.jar

1.22 KB
Binary file not shown.

0 commit comments

Comments
 (0)