< 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 >