< prev index next >

test/jdk/com/sun/tools/jextract/test8221154/SrcGenTest.java

Print this page

        

@@ -19,27 +19,32 @@
  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  * or visit www.oracle.com if you need additional information or have any
  * questions.
  */
 
+import java.foreign.memory.Pointer;
 import java.io.File;
 import java.io.IOException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.Arrays;
 import java.util.ArrayList;
 import java.util.spi.ToolProvider;
 import org.testng.annotations.Test;
 import static org.testng.Assert.assertTrue;
 
 /*
  * @test
  * @bug 8221154
  * @summary jextract should generate java source files
+ * @library ..
  * @run testng SrcGenTest
  */
-public class SrcGenTest {
+public class SrcGenTest extends JextractToolRunner {
     private static final ToolProvider JEXTRACT = ToolProvider.findFirst("jextract")
             .orElseThrow(() ->
                     new RuntimeException("jextract tool not found")
             );
 

@@ -96,7 +101,55 @@
         assertTrue(Files.isRegularFile(pkgDir.resolve("srcgentest.class")));
         assertTrue(Files.isRegularFile(pkgDir.resolve("srcgentest$Point.class")));
         assertTrue(Files.isRegularFile(pkgDir.resolve("srcgentest$Color.class")));
         assertTrue(Files.isRegularFile(pkgDir.resolve("srcgentest_h.class")));
         assertTrue(Files.isRegularFile(pkgDir.resolve("srcgentest_h$Color.class")));
+
+        checkClasses(outputDir, pkgName);
+    }
+
+    private void checkClasses(Path outputDir, String pkgName) {
+        Loader loader = classLoader(outputDir);
+        Class<?> forwarderCls = loader.loadClass(pkgName + ".srcgentest_h");
+        assertTrue(forwarderCls != null);
+
+        // check "sum" method
+        Method sumMethod = findFirstMethod(forwarderCls, "sum");
+        assertTrue(sumMethod.getReturnType() == int.class);
+        Class<?>[] sumParamTypes = sumMethod.getParameterTypes();
+        assertTrue(sumParamTypes.length == 2);
+        assertTrue(sumParamTypes[0] == int.class);
+        assertTrue(sumParamTypes[1] == Object[].class);
+        assertTrue(Modifier.isStatic(sumMethod.getModifiers()));
+
+        // check "x_coord" method
+        Method xCoordMethod = findFirstMethod(forwarderCls, "x_coord");
+        assertTrue(xCoordMethod.getReturnType() == int.class);
+        Class<?>[] xCoordParamTypes = xCoordMethod.getParameterTypes();
+        assertTrue(xCoordParamTypes.length == 1);
+        assertTrue(xCoordParamTypes[0] == Pointer.class);
+
+        // check "y_coord" method
+        Method yCoordMethod = findFirstMethod(forwarderCls, "y_coord");
+        assertTrue(yCoordMethod.getReturnType() == int.class);
+        Class<?>[] yCoordParamTypes = yCoordMethod.getParameterTypes();
+        assertTrue(yCoordParamTypes.length == 1);
+        assertTrue(yCoordParamTypes[0] == Pointer.class);
+
+        // global variable "num" getter
+        Method numGet = findGlobalVariableGet(forwarderCls, "num");
+        assertTrue(numGet != null);
+
+        // anonymous enum fields
+        assertTrue(findField(forwarderCls, "R") != null);
+        assertTrue(findField(forwarderCls, "G") != null);
+        assertTrue(findField(forwarderCls, "B") != null);
+
+        // enum interface class
+        Class<?> colorCls = Arrays.stream(forwarderCls.getClasses())
+            .filter(c -> c.getSimpleName().equals("Color")).findFirst().get();
+        assertTrue(Modifier.isInterface(colorCls.getModifiers()));
+        checkIntField(colorCls, "RED", 0);
+        checkIntField(colorCls, "GREEN", 1);
+        checkIntField(colorCls, "BLUE", 2);
     }
 }
< prev index next >