private void doTestImport(ClassLoaderFactory factory) throws Exception {
Compiler compiler = new Compiler();
List<JavaClassFileObject> files = compiler.compile("foo.A", "package foo;\n public class A {}");
assertEquals(1, files.size());
JavaClassFileObject aFile = files.get(0);
JavaArchive jar = ShrinkWrap.create(JavaArchive.class, "crash.jar");
jar.add(new ByteArrayAsset(aFile.getBytes()), "foo/A.class");
jar.setManifest(Thread.currentThread().getContextClassLoader().getResource("META-INF/MANIFEST.MF"));
ClassLoader cl = factory.getClassLoader(jar);
compiler = new Compiler(cl);
files = compiler.compile("B",
"import foo.A;\n" +
"public class B implements java.util.concurrent.Callable<A> {\n" +
"public A call() {\n" +
"return new A();\n" +
"}\n" +
"}");
assertEquals(1, files.size());
LoadingClassLoader loader = new LoadingClassLoader(cl, files);
Class<?> B = loader.findClass("B");
Callable<?> asCallable = (Callable<?>)B.newInstance();
Object ret = asCallable.call();
assertNotNull(ret);
Class<?> A = ret.getClass();
assertEquals("foo.A", A.getName());
assertEquals(cl, A.getClassLoader());
}