View Javadoc
1   /*
2    * MIT License
3    * Copyright (c) 2006-2025 JMockit developers
4    * See LICENSE file for full license text.
5    */
6   package mockit.internal.util;
7   
8   import static org.junit.jupiter.api.Assertions.assertEquals;
9   import static org.junit.jupiter.api.Assertions.assertNotNull;
10  import static org.junit.jupiter.api.Assertions.assertNull;
11  import static org.junit.jupiter.api.Assertions.assertThrows;
12  
13  import org.junit.jupiter.api.Test;
14  
15  final class ClassLoadTest {
16  
17      @Test
18      void loadClassByInternalNameReturnsCorrectClass() {
19          Class<String> cls = ClassLoad.loadByInternalName("java/lang/String");
20          assertEquals(String.class, cls);
21      }
22  
23      @Test
24      void loadClassByNameReturnsCorrectClass() {
25          Class<Integer> cls = ClassLoad.loadClass("java.lang.Integer");
26          assertEquals(Integer.class, cls);
27      }
28  
29      @Test
30      void loadClassThrowsForUnknownClass() {
31          assertThrows(IllegalArgumentException.class, () -> ClassLoad.loadClass("com.example.DoesNotExist"));
32      }
33  
34      @Test
35      void loadClassAtStartupReturnsCorrectClass() {
36          Class<String> cls = ClassLoad.loadClassAtStartup("java.lang.String");
37          assertEquals(String.class, cls);
38      }
39  
40      @Test
41      void loadClassAtStartupThrowsForUnknownClass() {
42          assertThrows(IllegalArgumentException.class, () -> ClassLoad.loadClassAtStartup("com.example.DoesNotExist"));
43      }
44  
45      @Test
46      void loadClassWithLoaderReturnsNullForUnknownClass() {
47          Class<?> cls = ClassLoad.loadClass(ClassLoadTest.class.getClassLoader(), "com.example.DoesNotExist");
48          assertNull(cls);
49      }
50  
51      @Test
52      void loadClassWithNullLoaderReturnsNullForUnknownClass() {
53          // Bootstrap classloader - can load JDK classes but not application classes
54          Class<?> cls = ClassLoad.loadClass(null, "com.example.DoesNotExist");
55          assertNull(cls);
56      }
57  
58      @Test
59      void loadFromLoaderReturnsCorrectClass() {
60          Class<String> cls = ClassLoad.loadFromLoader(ClassLoadTest.class.getClassLoader(), "java.lang.String");
61          assertEquals(String.class, cls);
62      }
63  
64      @Test
65      void loadFromLoaderThrowsForUnknownClass() {
66          assertThrows(IllegalArgumentException.class,
67                  () -> ClassLoad.loadFromLoader(ClassLoadTest.class.getClassLoader(), "com.example.DoesNotExist"));
68      }
69  
70      @Test
71      void searchTypeInClasspathReturnsClassWhenFound() {
72          Class<? extends String> cls = ClassLoad.searchTypeInClasspath("java.lang.String");
73          assertEquals(String.class, cls);
74      }
75  
76      @Test
77      void searchTypeInClasspathReturnsNullForUnknownClass() {
78          Class<?> cls = ClassLoad.searchTypeInClasspath("com.example.DoesNotExist");
79          assertNull(cls);
80      }
81  
82      @Test
83      void searchTypeInClasspathWithInitializeTrue() {
84          Class<?> cls = ClassLoad.searchTypeInClasspath("java.lang.String", true);
85          assertNotNull(cls);
86          assertEquals(String.class, cls);
87      }
88  
89      @Test
90      void registerLoadedClassAndRetrieve() {
91          ClassLoad.registerLoadedClass(ClassLoadTest.class);
92          Class<ClassLoadTest> cls = ClassLoad.loadClass(ClassLoadTest.class.getName());
93          assertEquals(ClassLoadTest.class, cls);
94      }
95  
96      @Test
97      void getSuperClassForKnownClass() {
98          String superClass = ClassLoad.getSuperClass("java/lang/String");
99          assertEquals("java/lang/Object", superClass);
100     }
101 
102     @Test
103     void getSuperClassReturnsObjectForObjectItself() {
104         String superClass = ClassLoad.getSuperClass("java/lang/Object");
105         assertEquals(ClassLoad.OBJECT, superClass);
106     }
107 
108     @Test
109     void addAndGetSuperClass() {
110         ClassLoad.addSuperClass("com/example/Child", "com/example/Parent");
111         String superClass = ClassLoad.getSuperClass("com/example/Child");
112         assertEquals("com/example/Parent", superClass);
113     }
114 }