@Test public void can_list_all_classes_reachable_in_a_classloader() throws Exception { ClassLoader classLoader = ClassLoaders.inMemoryClassLoader() .withParent(jdkClassLoader()) .withClassDefinition("a.A", SimpleClassGenerator.makeMarkerInterface("a.A")) .withClassDefinition("a.b.B", SimpleClassGenerator.makeMarkerInterface("a.b.B")) .withClassDefinition("c.C", SimpleClassGenerator.makeMarkerInterface("c.C")) // .withCodeSourceUrlOf(ClassLoaders.class) .build(); assertThat(ClassLoaders.in(classLoader).listOwnedClasses()).containsOnly("a.A", "a.b.B", "c.C"); assertThat(ClassLoaders.in(classLoader).omit("b", "c").listOwnedClasses()).containsOnly("a.A"); }
@Test public void can_load_a_class_in_memory_from_bytes() throws Exception { // given ClassLoader cl = ClassLoaders.inMemoryClassLoader() .withClassDefinition("yop.Dude", SimpleClassGenerator.makeMarkerInterface("yop.Dude")) .build(); // when Class<?> aClass = cl.loadClass("yop.Dude"); // then assertThat(aClass).isNotNull(); assertThat(aClass.getClassLoader()).isEqualTo(cl); assertThat(aClass.getName()).isEqualTo("yop.Dude"); }
@Test public void cannot_load_a_class_file_not_in_parent() throws Exception { // given ClassLoader cl = ClassLoaders.inMemoryClassLoader().withParent(jdkClassLoader()).build(); cl.loadClass("java.lang.String"); try { // when cl.loadClass("org.mockito.Mockito"); fail("should have not found Mockito class"); } catch (ClassNotFoundException e) { // then assertThat(e.getMessage()).contains("org.mockito.Mockito"); } }
@Test public void can_not_load_a_class_not_previously_registered_in_builder() throws Exception { // given ClassLoader cl = ClassLoaders.inMemoryClassLoader() .withClassDefinition("yop.Dude", SimpleClassGenerator.makeMarkerInterface("yop.Dude")) .build(); // when try { cl.loadClass("not.Defined"); fail(); } catch (ClassNotFoundException e) { // then assertThat(e.getMessage()).contains("not.Defined"); } }