public void testImportFromJar() throws Exception { doTestImport(new ClassLoaderFactory() { @Override public ClassLoader getClassLoader(JavaArchive jar) throws Exception { File tmp = File.createTempFile("crash", ".jar"); assertTrue(tmp.delete()); jar.as(ZipExporter.class).exportTo(tmp); return new URLClassLoader(new URL[]{tmp.toURI().toURL()}); } }); }
public void testCompilationFailure() throws Exception { Compiler compiler = new Compiler(); try { compiler.compile("foo.A", "package foo;\n public class A {"); } catch (CompilationFailureException e) { List<Diagnostic<? extends JavaFileObject>> errors = e.getErrors(); assertEquals(1, errors.size()); Diagnostic<? extends JavaFileObject> error = errors.get(0); assertEndsWith("/foo/A.java", error.getSource().getName()); } } }
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()); }
public void testCompile() throws Exception { Compiler compiler = new Compiler(); List<JavaClassFileObject> files = compiler.compile("A", "public class A implements java.util.concurrent.Callable<String> {\n" + "public String call() {\n" + "return \"hello\";\n" + "}\n" + "}"); assertEquals(1, files.size()); LoadingClassLoader loader = new LoadingClassLoader(Thread.currentThread().getContextClassLoader(), files); Class<?> A = loader.findClass("A"); Callable<String> asCallable = (Callable<String>)A.newInstance(); String ret = asCallable.call(); assertEquals("hello", ret); }
public void testImportFromFolder() throws Exception { doTestImport(new ClassLoaderFactory() { @Override public ClassLoader getClassLoader(JavaArchive jar) throws Exception { File tmp = File.createTempFile("root", "tmp"); assertTrue(tmp.delete()); assertTrue(tmp.mkdir()); tmp.deleteOnExit(); jar.as(ExplodedExporter.class).exportExploded(tmp, "root"); URL url = new File(tmp, "root").toURI().toURL(); return new URLClassLoader(new URL[]{url}); } }); }
public void testImportFromNestedJar() throws Exception { doTestImport(new ClassLoaderFactory() { @Override public ClassLoader getClassLoader(final JavaArchive jar) throws Exception {