44 import java.util.jar.JarEntry; 45 import java.util.jar.JarInputStream; 46 import java.util.jar.JarOutputStream; 47 import javax.tools.JavaCompiler; 48 import javax.tools.StandardJavaFileManager; 49 import javax.tools.ToolProvider; 50 import jdk.internal.org.objectweb.asm.ClassReader; 51 import jdk.internal.org.objectweb.asm.tree.ClassNode; 52 import jdk.internal.org.objectweb.asm.util.ASMifier; 53 import jdk.internal.org.objectweb.asm.util.CheckClassAdapter; 54 import jdk.internal.org.objectweb.asm.util.Textifier; 55 import jdk.internal.org.objectweb.asm.util.TraceClassVisitor; 56 import static org.testng.Assert.assertEquals; 57 import static org.testng.Assert.assertNotNull; 58 import static org.testng.Assert.assertTrue; 59 import static org.testng.Assert.fail; 60 import org.testng.annotations.BeforeClass; 61 import org.testng.annotations.DataProvider; 62 import org.testng.annotations.Factory; 63 import org.testng.annotations.Test; 64 import com.sun.tools.jextract.*; 65 66 /* 67 * @test 68 * @summary Main test runner created all cases 69 * @modules java.base/jdk.internal.org.objectweb.asm 70 * @modules java.base/jdk.internal.org.objectweb.asm.tree 71 * @modules java.base/jdk.internal.org.objectweb.asm.util 72 * @modules jdk.jextract/com.sun.tools.jextract 73 * @build InMemoryFileManager 74 * @run testng Runner 75 */ 76 public class Runner { 77 private final Path nativeSrc; 78 private final Path[] javaSrcFiles; 79 private final Context ctx; 80 private final String pkg; 81 82 private InMemoryFileManager<StandardJavaFileManager> mfm; 83 private ClassLoader expectedCL; 84 private Map<String, byte[]> actualClz; 85 private ClassLoader actualCL; 86 private Object[][] clz_data; 87 88 public Runner(Path nativeSrc, String pkg, Path[] javaSrcFiles) { 89 ctx = Context.newInstance(); 90 this.nativeSrc = nativeSrc; 91 this.pkg = pkg; 92 this.javaSrcFiles = javaSrcFiles; 93 } 94 95 private Map<String, byte[]> extract(String pkg) throws IOException { 96 if (!Files.isReadable(nativeSrc)) { 97 throw new IllegalArgumentException("Cannot read the file: " + nativeSrc); 98 } 99 Path p = nativeSrc.toAbsolutePath(); 100 ctx.usePackageForFolder(p.getParent(), pkg); 101 ctx.addSource(p); 102 ctx.parse(AsmCodeFactory::new); 103 return ctx.collectClasses(pkg); 104 } 105 106 private InMemoryFileManager<StandardJavaFileManager> compileJavaCode() { 107 JavaCompiler cl = ToolProvider.getSystemJavaCompiler(); 108 StandardJavaFileManager sfm = cl.getStandardFileManager(null, null, null); 109 InMemoryFileManager<StandardJavaFileManager> fm = new InMemoryFileManager<>(sfm); 110 JavaCompiler.CompilationTask task = cl.getTask(null, fm, null, null, 111 null, sfm.getJavaFileObjects(javaSrcFiles)); 112 task.call(); 113 return fm; 114 } 115 116 @Test 117 public void testJarManifest() throws IOException { 118 // Get the jar 119 ByteArrayOutputStream bos = new ByteArrayOutputStream(); 120 ctx.collectJarFile(new JarOutputStream(bos), pkg); 121 122 System.out.println("Jar built, verifying..."); | 44 import java.util.jar.JarEntry; 45 import java.util.jar.JarInputStream; 46 import java.util.jar.JarOutputStream; 47 import javax.tools.JavaCompiler; 48 import javax.tools.StandardJavaFileManager; 49 import javax.tools.ToolProvider; 50 import jdk.internal.org.objectweb.asm.ClassReader; 51 import jdk.internal.org.objectweb.asm.tree.ClassNode; 52 import jdk.internal.org.objectweb.asm.util.ASMifier; 53 import jdk.internal.org.objectweb.asm.util.CheckClassAdapter; 54 import jdk.internal.org.objectweb.asm.util.Textifier; 55 import jdk.internal.org.objectweb.asm.util.TraceClassVisitor; 56 import static org.testng.Assert.assertEquals; 57 import static org.testng.Assert.assertNotNull; 58 import static org.testng.Assert.assertTrue; 59 import static org.testng.Assert.fail; 60 import org.testng.annotations.BeforeClass; 61 import org.testng.annotations.DataProvider; 62 import org.testng.annotations.Factory; 63 import org.testng.annotations.Test; 64 import com.sun.tools.jextract.Context; 65 66 /* 67 * @test 68 * @summary Main test runner created all cases 69 * @modules java.base/jdk.internal.org.objectweb.asm 70 * @modules java.base/jdk.internal.org.objectweb.asm.tree 71 * @modules java.base/jdk.internal.org.objectweb.asm.util 72 * @modules jdk.jextract/com.sun.tools.jextract 73 * @build InMemoryFileManager 74 * @run testng Runner 75 */ 76 public class Runner { 77 private final Path nativeSrc; 78 private final Path[] javaSrcFiles; 79 private final Context ctx; 80 private final String pkg; 81 82 private InMemoryFileManager<StandardJavaFileManager> mfm; 83 private ClassLoader expectedCL; 84 private Map<String, byte[]> actualClz; 85 private ClassLoader actualCL; 86 private Object[][] clz_data; 87 88 public Runner(Path nativeSrc, String pkg, Path[] javaSrcFiles) { 89 this.ctx = new Context(); 90 this.nativeSrc = nativeSrc; 91 this.pkg = pkg; 92 this.javaSrcFiles = javaSrcFiles; 93 } 94 95 private Map<String, byte[]> extract(String pkg) throws IOException { 96 if (!Files.isReadable(nativeSrc)) { 97 throw new IllegalArgumentException("Cannot read the file: " + nativeSrc); 98 } 99 Path p = nativeSrc.toAbsolutePath(); 100 ctx.usePackageForFolder(p.getParent(), pkg); 101 ctx.addSource(p); 102 ctx.parse(); 103 return ctx.collectClasses(pkg); 104 } 105 106 private InMemoryFileManager<StandardJavaFileManager> compileJavaCode() { 107 JavaCompiler cl = ToolProvider.getSystemJavaCompiler(); 108 StandardJavaFileManager sfm = cl.getStandardFileManager(null, null, null); 109 InMemoryFileManager<StandardJavaFileManager> fm = new InMemoryFileManager<>(sfm); 110 JavaCompiler.CompilationTask task = cl.getTask(null, fm, null, null, 111 null, sfm.getJavaFileObjects(javaSrcFiles)); 112 task.call(); 113 return fm; 114 } 115 116 @Test 117 public void testJarManifest() throws IOException { 118 // Get the jar 119 ByteArrayOutputStream bos = new ByteArrayOutputStream(); 120 ctx.collectJarFile(new JarOutputStream(bos), pkg); 121 122 System.out.println("Jar built, verifying..."); |