11package com .vaadin .flow .server .frontend .scanner ;
22
3+ import java .io .IOException ;
34import java .util .ArrayList ;
45import java .util .Arrays ;
56import java .util .Collections ;
89import java .util .List ;
910import java .util .Set ;
1011
12+ import org .apache .commons .io .IOUtils ;
1113import org .junit .Assert ;
1214import org .junit .Rule ;
1315import org .junit .Test ;
@@ -22,6 +24,27 @@ public class ClassFinderTest {
2224 @ Rule
2325 public ExpectedException exception = ExpectedException .none ();
2426
27+ private final class FakeClassLoader extends ClassLoader {
28+ private final ClassLoader realClassLoader ;
29+
30+ private FakeClassLoader (ClassLoader realClassLoader ) {
31+ super (null );
32+ this .realClassLoader = realClassLoader ;
33+ }
34+
35+ protected Class <?> findClass (String name )
36+ throws ClassNotFoundException {
37+ try {
38+ byte [] bytes = IOUtils
39+ .toByteArray (realClassLoader .getResourceAsStream (
40+ name .replace ("." , "/" ) + ".class" ));
41+ return defineClass (name , bytes , 0 , bytes .length );
42+ } catch (IOException e ) {
43+ throw new ClassNotFoundException ("Failed" , e );
44+ }
45+ }
46+ }
47+
2548 private static class TestList extends ArrayList <String > {
2649
2750 }
@@ -91,4 +114,28 @@ public void orderIsDeterministic() {
91114 expected .add (NodeTestComponents .VaadinBowerComponent .class );
92115 Assert .assertEquals (expected , allClasses );
93116 }
117+
118+ public static class TestClass1 {
119+
120+ }
121+
122+ @ Test
123+ public void defaultsToContextClassLoader () throws Exception {
124+ ClassLoader contextClassLoader = Thread .currentThread ()
125+ .getContextClassLoader ();
126+
127+ ClassLoader loader1 = new FakeClassLoader (contextClassLoader );
128+ ClassLoader loader2 = new FakeClassLoader (contextClassLoader );
129+ Class <?> cls1 = loader1 .loadClass (
130+ "com.vaadin.flow.server.frontend.scanner.ClassFinderTest$TestClass1" );
131+ Class <?> cls2 = loader2 .loadClass (
132+ "com.vaadin.flow.server.frontend.scanner.ClassFinderTest$TestClass1" );
133+
134+ Assert .assertEquals (loader1 , cls1 .getClassLoader ());
135+ Assert .assertEquals (loader2 , cls2 .getClassLoader ());
136+
137+ DefaultClassFinder finder = new DefaultClassFinder (Set .of (cls1 , cls2 ));
138+ Assert .assertEquals (contextClassLoader , finder .getClassLoader ());
139+ }
140+
94141}
0 commit comments