< prev index next >

test/jdk/com/sun/tools/jextract/JextractToolProviderTest.java

Print this page

        

*** 19,58 **** * 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.io.PrintWriter; import java.io.StringWriter; import java.nio.file.Paths; import java.nio.file.Files; import java.util.spi.ToolProvider; /* * @test * @modules jdk.jextract * @build JextractToolProviderTest ! * @run main JextractToolProviderTest */ public class JextractToolProviderTest { private static final ToolProvider JEXTRACT_TOOL = ToolProvider.findFirst("jextract") .orElseThrow(() -> new RuntimeException("jextract tool not found") ); private static String testSrcDir = System.getProperty("test.src", "."); private static String testClassesDir = System.getProperty("test.classes", "."); ! private static String getFilePath(String dir, String fileName) { ! return Paths.get(dir, fileName).toAbsolutePath().toString(); } ! private static String getInputFilePath(String fileName) { return getFilePath(testSrcDir, fileName); } ! private static String getOutputFilePath(String fileName) { return getFilePath(testClassesDir, fileName); } private static int checkJextract(String expected, String... options) { StringWriter writer = new StringWriter(); --- 19,72 ---- * 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.lang.reflect.Method; + import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; + import java.net.URL; + import java.net.URLClassLoader; + import java.nicl.metadata.Header; + import java.nicl.metadata.LibraryDependencies; + import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.Files; import java.util.spi.ToolProvider; + import org.testng.annotations.Test; + + import static org.testng.Assert.assertEquals; + import static org.testng.Assert.assertNotEquals; + import static org.testng.Assert.assertNotNull; + import static org.testng.Assert.assertTrue; + import static org.testng.Assert.assertFalse; /* * @test * @modules jdk.jextract * @build JextractToolProviderTest ! * @run testng/othervm -Duser.language=en JextractToolProviderTest */ public class JextractToolProviderTest { private static final ToolProvider JEXTRACT_TOOL = ToolProvider.findFirst("jextract") .orElseThrow(() -> new RuntimeException("jextract tool not found") ); private static String testSrcDir = System.getProperty("test.src", "."); private static String testClassesDir = System.getProperty("test.classes", "."); ! private static Path getFilePath(String dir, String fileName) { ! return Paths.get(dir, fileName).toAbsolutePath(); } ! private static Path getInputFilePath(String fileName) { return getFilePath(testSrcDir, fileName); } ! private static Path getOutputFilePath(String fileName) { return getFilePath(testClassesDir, fileName); } private static int checkJextract(String expected, String... options) { StringWriter writer = new StringWriter();
*** 70,108 **** return result; } private static void checkSuccess(String expected, String... options) { int result = checkJextract(null, options); ! if (result != 0) { ! throw new AssertionError("Sucess excepted, failed: " + result); ! } } private static void checkFailure(String expected, String... options) { int result = checkJextract(expected, options); ! if (result == 0) { ! throw new AssertionError("Failure excepted, succeeded!"); } } ! public static void main(String[] args) throws Exception { checkFailure(null); // no options checkSuccess(null, "--help"); checkSuccess(null, "-h"); checkSuccess(null, "-?"); // error for non-existent header file ! checkFailure("Cannot open header file", "--dry-run", getInputFilePath("non_existent.h")); // only dry-run, don't produce any output ! String simpleJar = getOutputFilePath("simple.jar"); ! checkSuccess(null, "--dry-run", getInputFilePath("simple.h")); ! if (Files.isRegularFile(Paths.get(simpleJar))) { ! throw new AssertionError(simpleJar + "output file should not have been produced"); } // simple output file check ! checkSuccess(null, "-o", simpleJar, getInputFilePath("simple.h")); ! if (!Files.isRegularFile(Paths.get(simpleJar))) { ! throw new AssertionError(simpleJar + "output file not produced"); } } } --- 84,269 ---- return result; } private static void checkSuccess(String expected, String... options) { int result = checkJextract(null, options); ! assertEquals(result, 0, "Sucess excepted, failed: " + result); } private static void checkFailure(String expected, String... options) { int result = checkJextract(expected, options); ! assertNotEquals(result, 0, "Failure excepted, succeeded!"); ! } ! ! private static void deleteFile(Path path) { ! try { ! Files.delete(path); ! } catch (IOException ioExp) { ! System.err.println(ioExp); ! } ! } ! ! private static Class<?> loadClass(Path path, String className) { ! try { ! URLClassLoader ucl = new URLClassLoader(new URL[] { path.toUri().toURL() }, null); ! return Class.forName(className, false, ucl); ! } catch (RuntimeException re) { ! throw re; ! } catch (Exception e) { ! throw new RuntimeException(e); } } ! private static Method findMethod(Class<?> cls, String name, Class<?>... argTypes) { ! try { ! return cls.getMethod(name, argTypes); ! } catch (RuntimeException re) { ! throw re; ! } catch (Exception e) { ! throw new RuntimeException(e); ! } ! } ! ! @Test ! public void testHelp() { checkFailure(null); // no options checkSuccess(null, "--help"); checkSuccess(null, "-h"); checkSuccess(null, "-?"); + } // error for non-existent header file ! @Test ! public void testNonExistentHeader() { ! checkFailure("Cannot open header file", "--dry-run", ! getInputFilePath("non_existent.h").toString()); ! } + @Test + public void testDryRun() { // only dry-run, don't produce any output ! Path simpleJar = getOutputFilePath("simple.jar"); ! deleteFile(simpleJar); ! checkSuccess(null, "--dry-run", getInputFilePath("simple.h").toString()); ! try { ! assertFalse(Files.isRegularFile(simpleJar)); ! } finally { ! deleteFile(simpleJar); ! } } + + @Test + public void testOutputFileOption() { // simple output file check ! Path simpleJar = getOutputFilePath("simple.jar"); ! deleteFile(simpleJar); ! checkSuccess(null, "-o", simpleJar.toString(), ! getInputFilePath("simple.h").toString()); ! try { ! assertTrue(Files.isRegularFile(simpleJar)); ! } finally { ! deleteFile(simpleJar); ! } ! } ! ! @Test ! public void testOutputClass() { ! Path helloJar = getOutputFilePath("hello.jar"); ! deleteFile(helloJar); ! Path helloH = getInputFilePath("hello.h"); ! checkSuccess(null, "-o", helloJar.toString(), helloH.toString()); ! try { ! Class<?> cls = loadClass(helloJar, "hello"); ! // check header annotation ! Header header = cls.getAnnotation(Header.class); ! assertNotNull(header); ! assertEquals(header.path(), helloH.toString()); ! ! // check a method for "void func()" ! assertNotNull(findMethod(cls, "func", Object[].class)); ! } finally { ! deleteFile(helloJar); ! } ! } ! ! @Test ! public void testOutputClassPackageOption() { ! Path helloJar = getOutputFilePath("hello.jar"); ! deleteFile(helloJar); ! Path helloH = getInputFilePath("hello.h"); ! checkSuccess(null, "-t", "com.acme", "-o", helloJar.toString(), helloH.toString()); ! try { ! Class<?> cls = loadClass(helloJar, "com.acme.hello"); ! // check header annotation ! Header header = cls.getAnnotation(Header.class); ! assertNotNull(header); ! assertEquals(header.path(), helloH.toString()); ! ! // check a method for "void func()" ! assertNotNull(findMethod(cls, "func", Object[].class)); ! } finally { ! deleteFile(helloJar); ! } ! } ! ! @Test ! public void test_option_L_without_l() { ! Path helloJar = getOutputFilePath("hello.jar"); ! deleteFile(helloJar); ! Path helloH = getInputFilePath("hello.h"); ! Path linkDir = getInputFilePath("libs"); ! String warning = "WARNING: -L option specified without any -l option"; ! checkSuccess(warning, "-L", linkDir.toString(), "-o", helloJar.toString(), helloH.toString()); ! } ! ! @Test ! public void test_option_rpath_without_l() { ! Path helloJar = getOutputFilePath("hello.jar"); ! deleteFile(helloJar); ! Path helloH = getInputFilePath("hello.h"); ! Path rpathDir = getInputFilePath("libs"); ! String warning = "WARNING: -rpath option specified without any -l option"; ! checkSuccess(warning, "-rpath", rpathDir.toString(), "-o", helloJar.toString(), helloH.toString()); ! } ! ! @Test ! public void test_option_l() { ! Path helloJar = getOutputFilePath("hello.jar"); ! deleteFile(helloJar); ! Path helloH = getInputFilePath("hello.h"); ! checkSuccess(null, "-l", "hello", "-o", helloJar.toString(), helloH.toString()); ! try { ! Class<?> cls = loadClass(helloJar, "hello"); ! // check LibraryDependencies annotation capture -l value ! LibraryDependencies libDeps = cls.getAnnotation(LibraryDependencies.class); ! assertNotNull(libDeps); ! assertEquals(libDeps.names().length, 1); ! assertEquals(libDeps.names()[0], "hello"); ! // no library paths (rpath) set ! assertEquals(libDeps.paths().length, 0); ! } finally { ! deleteFile(helloJar); ! } ! } ! ! @Test ! public void test_option_l_and_rpath() { ! Path helloJar = getOutputFilePath("hello.jar"); ! deleteFile(helloJar); ! Path helloH = getInputFilePath("hello.h"); ! Path rpathDir = getInputFilePath("libs"); ! checkSuccess(null, "-l", "hello", "-rpath", rpathDir.toString(), ! "-o", helloJar.toString(), helloH.toString()); ! try { ! Class<?> cls = loadClass(helloJar, "hello"); ! // check LibraryDependencies annotation captures -l and -rpath values ! LibraryDependencies libDeps = cls.getAnnotation(LibraryDependencies.class); ! assertNotNull(libDeps); ! assertEquals(libDeps.names().length, 1); ! assertEquals(libDeps.names()[0], "hello"); ! assertEquals(libDeps.paths().length, 1); ! assertEquals(libDeps.paths()[0], rpathDir.toString()); ! } finally { ! deleteFile(helloJar); } } }
< prev index next >