#[cfg(feature = "loadjvm")]
#[cfg(any(target_os = "windows", target_vendor = "apple", target_os = "linux"))]
mod test {
use jni_simple::{JNI_CreateJavaVM_with_string_args, JNI_VERSION_1_8, load_jvm_from_library};
use std::ptr::null;
pub unsafe fn load_it() {
let java_home = std::env::var("JAVA_HOME").expect("JAVA_HOME not set");
const COMMON_LIBJVM_PATHS: &[&[&str]] = &[
&["lib", "server", "libjvm.so"], &["jre", "lib", "amd64", "server", "libjvm.so"], &["lib", "amd64", "server", "libjvm.so"], &["jre", "lib", "aarch32", "server", "libjvm.so"], &["lib", "aarch32", "server", "libjvm.so"], &["jre", "lib", "aarch64", "server", "libjvm.so"], &["lib", "aarch64", "server", "libjvm.so"], &["jre", "bin", "server", "jvm.dll"], &["bin", "server", "jvm.dll"], &["jre", "lib", "server", "libjvm.dylib"], &["Contents", "Home", "jre", "lib", "server", "libjvm.dylib"], &["lib", "server", "libjvm.dylib"], &["Contents", "Home", "lib", "server", "libjvm.dylib"], ];
for parts in COMMON_LIBJVM_PATHS {
let mut buf = std::path::PathBuf::from(&java_home);
for part in *parts {
buf.push(part);
}
if buf.try_exists().unwrap_or(false) {
let full_path = buf.to_str().expect("failed to convert path to string");
unsafe {
load_jvm_from_library(full_path).expect("Loading JVM failed");
return;
}
}
}
panic!("Loading JVM from {} failed", java_home);
}
#[test]
fn test() {
unsafe {
load_it();
let args: Vec<String> = vec![];
let (_, env) = JNI_CreateJavaVM_with_string_args(JNI_VERSION_1_8, &args, false).expect("failed to create jvm");
let sys = env.FindClass("java/lang/System");
let nano_time = env.GetStaticMethodID(sys, "nanoTime", "()J");
let nanos = env.CallStaticLongMethodA(sys, nano_time, null());
assert_ne!(nanos, 0);
}
}
}