26 import java.foreign.annotations.NativeHeader;
27 import java.foreign.annotations.NativeLocation;
28 import java.foreign.annotations.NativeSetter;
29 import java.foreign.annotations.NativeStruct;
30 import java.foreign.memory.Pointer;
31 import java.io.File;
32 import java.io.IOException;
33 import java.lang.reflect.Method;
34 import java.lang.reflect.Modifier;
35 import java.nio.file.Files;
36 import java.nio.file.Path;
37 import java.nio.file.Paths;
38 import java.util.Arrays;
39 import java.util.ArrayList;
40 import java.util.spi.ToolProvider;
41 import org.testng.annotations.Test;
42 import static org.testng.Assert.assertTrue;
43
44 /*
45 * @test
46 * @bug 8221154 8221228 8221336 8221419 8221443
47 * @summary jextract should generate java source files
48 * @library ..
49 * @run testng SrcGenTest
50 */
51 public class SrcGenTest extends JextractToolRunner {
52 private static final ToolProvider JEXTRACT = ToolProvider.findFirst("jextract")
53 .orElseThrow(() ->
54 new RuntimeException("jextract tool not found")
55 );
56
57 private static final ToolProvider JAVAC = ToolProvider.findFirst("javac")
58 .orElseThrow(() ->
59 new RuntimeException("javac tool not found")
60 );
61
62 @Test
63 public void test() throws IOException {
64 Path inputDir = Paths.get(System.getProperty("test.src", "."));
65 Path outputDir = Paths.get(System.getProperty("test.classes", "."));
66 inputDir = inputDir.toAbsolutePath();
89 }
90
91 // delete .jar file generated by jextract
92 Files.delete(jarPath);
93
94 Path pkgDir = outputDir.resolve(pkgName);
95
96 String srcgentestIfaceName = headerInterfaceName("srcgentest.h");
97 String srcgentestForwarderName = staticForwarderName("srcgentest.h");
98 String dupnameIfaceName = headerInterfaceName("dupname.h");
99 String dupnameDupnameNotName = structInterfaceName("dupname.h", "dupnameNot");
100 String dupnameForwarderName = staticForwarderName("dupname.h");
101 String srcgentestPointName = structInterfaceName("srcgentest.h", "Point");
102 String srcgentestColorName = enumInterfaceName("srcgentest.h", "Color");
103 String srcgentestForwarderEnumName = enumForwarderInterfaceName("srcgentest.h", "Color");
104
105 // compile jextract generated java sources
106 ArrayList<String> javacOpts = new ArrayList<>();
107 javacOpts.add("-d");
108 javacOpts.add(outputDir.toString());
109 javacOpts.add(pkgDir.resolve(srcgentestIfaceName + ".java").toString());
110 javacOpts.add(pkgDir.resolve(srcgentestForwarderName + ".java").toString());
111 javacOpts.add(pkgDir.resolve("sub").resolve(dupnameIfaceName + ".java").toString());
112 javacOpts.add(pkgDir.resolve("sub").resolve(dupnameForwarderName + ".java").toString());
113 result = JAVAC.run(System.out, System.err, javacOpts.toArray(String[]::new));
114 if (result != 0) {
115 throw new RuntimeException(JAVAC.name() + " returns non-zero value");
116 }
117
118 // sanity checks for .class file existence
119 assertTrue(Files.isRegularFile(pkgDir.resolve(srcgentestIfaceName + ".class")));
120 assertTrue(Files.isRegularFile(pkgDir.resolve(srcgentestPointName + ".class")));
121 assertTrue(Files.isRegularFile(pkgDir.resolve(srcgentestColorName + ".class")));
122 assertTrue(Files.isRegularFile(pkgDir.resolve(srcgentestForwarderName + ".class")));
123 assertTrue(Files.isRegularFile(pkgDir.resolve(srcgentestForwarderEnumName + ".class")));
124 assertTrue(Files.isRegularFile(pkgDir.resolve("sub").resolve(dupnameForwarderName + ".class")));
125 assertTrue(Files.isRegularFile(pkgDir.resolve("sub").resolve(dupnameIfaceName + ".class")));
126 assertTrue(Files.isRegularFile(pkgDir.resolve("sub").resolve(dupnameDupnameNotName + ".class")));
127
128 checkClasses(outputDir, pkgName);
129 }
130
131 private void checkClasses(Path outputDir, String pkgName) {
132 Loader loader = classLoader(outputDir);
133 checkSubdirClass(loader, pkgName);
134 checkHeaderClass(loader, pkgName);
135 checkForwarderClass(loader, pkgName);
136 }
137
138 private void checkSubdirClass(Loader loader, String pkgName) {
|
26 import java.foreign.annotations.NativeHeader;
27 import java.foreign.annotations.NativeLocation;
28 import java.foreign.annotations.NativeSetter;
29 import java.foreign.annotations.NativeStruct;
30 import java.foreign.memory.Pointer;
31 import java.io.File;
32 import java.io.IOException;
33 import java.lang.reflect.Method;
34 import java.lang.reflect.Modifier;
35 import java.nio.file.Files;
36 import java.nio.file.Path;
37 import java.nio.file.Paths;
38 import java.util.Arrays;
39 import java.util.ArrayList;
40 import java.util.spi.ToolProvider;
41 import org.testng.annotations.Test;
42 import static org.testng.Assert.assertTrue;
43
44 /*
45 * @test
46 * @bug 8221154 8221228 8221336 8221419 8221443 8222274
47 * @summary jextract should generate java source files
48 * @library ..
49 * @run testng SrcGenTest
50 */
51 public class SrcGenTest extends JextractToolRunner {
52 private static final ToolProvider JEXTRACT = ToolProvider.findFirst("jextract")
53 .orElseThrow(() ->
54 new RuntimeException("jextract tool not found")
55 );
56
57 private static final ToolProvider JAVAC = ToolProvider.findFirst("javac")
58 .orElseThrow(() ->
59 new RuntimeException("javac tool not found")
60 );
61
62 @Test
63 public void test() throws IOException {
64 Path inputDir = Paths.get(System.getProperty("test.src", "."));
65 Path outputDir = Paths.get(System.getProperty("test.classes", "."));
66 inputDir = inputDir.toAbsolutePath();
89 }
90
91 // delete .jar file generated by jextract
92 Files.delete(jarPath);
93
94 Path pkgDir = outputDir.resolve(pkgName);
95
96 String srcgentestIfaceName = headerInterfaceName("srcgentest.h");
97 String srcgentestForwarderName = staticForwarderName("srcgentest.h");
98 String dupnameIfaceName = headerInterfaceName("dupname.h");
99 String dupnameDupnameNotName = structInterfaceName("dupname.h", "dupnameNot");
100 String dupnameForwarderName = staticForwarderName("dupname.h");
101 String srcgentestPointName = structInterfaceName("srcgentest.h", "Point");
102 String srcgentestColorName = enumInterfaceName("srcgentest.h", "Color");
103 String srcgentestForwarderEnumName = enumForwarderInterfaceName("srcgentest.h", "Color");
104
105 // compile jextract generated java sources
106 ArrayList<String> javacOpts = new ArrayList<>();
107 javacOpts.add("-d");
108 javacOpts.add(outputDir.toString());
109 javacOpts.add(outputDir.resolve("clang_support").resolve("stdbool_h.java").toString());
110 javacOpts.add(pkgDir.resolve(srcgentestIfaceName + ".java").toString());
111 javacOpts.add(pkgDir.resolve(srcgentestForwarderName + ".java").toString());
112 javacOpts.add(pkgDir.resolve("sub").resolve(dupnameIfaceName + ".java").toString());
113 javacOpts.add(pkgDir.resolve("sub").resolve(dupnameForwarderName + ".java").toString());
114 result = JAVAC.run(System.out, System.err, javacOpts.toArray(String[]::new));
115 if (result != 0) {
116 throw new RuntimeException(JAVAC.name() + " returns non-zero value");
117 }
118
119 // sanity checks for .class file existence
120 assertTrue(Files.isRegularFile(outputDir.resolve("clang_support").resolve("stdbool_h.class")));
121 assertTrue(Files.isRegularFile(pkgDir.resolve(srcgentestIfaceName + ".class")));
122 assertTrue(Files.isRegularFile(pkgDir.resolve(srcgentestPointName + ".class")));
123 assertTrue(Files.isRegularFile(pkgDir.resolve(srcgentestColorName + ".class")));
124 assertTrue(Files.isRegularFile(pkgDir.resolve(srcgentestForwarderName + ".class")));
125 assertTrue(Files.isRegularFile(pkgDir.resolve(srcgentestForwarderEnumName + ".class")));
126 assertTrue(Files.isRegularFile(pkgDir.resolve("sub").resolve(dupnameForwarderName + ".class")));
127 assertTrue(Files.isRegularFile(pkgDir.resolve("sub").resolve(dupnameIfaceName + ".class")));
128 assertTrue(Files.isRegularFile(pkgDir.resolve("sub").resolve(dupnameDupnameNotName + ".class")));
129
130 checkClasses(outputDir, pkgName);
131 }
132
133 private void checkClasses(Path outputDir, String pkgName) {
134 Loader loader = classLoader(outputDir);
135 checkSubdirClass(loader, pkgName);
136 checkHeaderClass(loader, pkgName);
137 checkForwarderClass(loader, pkgName);
138 }
139
140 private void checkSubdirClass(Loader loader, String pkgName) {
|