extern crate jni_sys;
extern crate rust_jni;
#[cfg(test)]
mod native_method_env {
use rust_jni::__generator::*;
use rust_jni::{self, *};
use std::mem;
use std::ptr;
unsafe fn check_exception_message(env: &JniEnv, message: &str, token: &NoException) {
let raw_env = env.raw_env();
let exception_occured_fn = (**raw_env).ExceptionOccurred.unwrap();
let throwable = exception_occured_fn(raw_env);
assert_ne!(throwable, ptr::null_mut());
let exception_clear_fn = (**raw_env).ExceptionClear.unwrap();
exception_clear_fn(raw_env);
let throwable = java::lang::Throwable::__from_jni(&env, throwable);
let actual_message = throwable.get_message(&token).unwrap();
assert_eq!(actual_message.as_string(&token), message);
mem::forget(throwable);
}
#[test]
fn test() {
let init_arguments = InitArguments::get_default(JniVersion::V8).unwrap();
let vm = JavaVM::create(&init_arguments).unwrap();
let env = vm.attach(&AttachArguments::new(&init_arguments)).unwrap();
let token = env.token();
unsafe {
let raw_env = env.raw_env();
let result = 10;
let actual_result =
rust_jni::__generator::native_method_wrapper(raw_env, |native_env, _| {
assert_eq!(native_env.raw_jvm(), vm.raw_jvm());
assert_eq!(native_env.raw_env(), raw_env);
assert_eq!(native_env.version(), init_arguments.version());
Ok(result)
});
assert_eq!(actual_result, result);
let message = "test-message";
let actual_result: i32 =
rust_jni::__generator::native_method_wrapper(raw_env, |native_env, token| {
assert_eq!(native_env.raw_jvm(), vm.raw_jvm());
assert_eq!(native_env.raw_env(), raw_env);
assert_eq!(native_env.version(), init_arguments.version());
let message = java::lang::String::new(native_env, message, &token).unwrap();
Err(java::lang::Throwable::new(native_env, &message, &token).unwrap())
});
assert_eq!(actual_result, i32::default());
check_exception_message(&env, message, &token);
let actual_result: i32 =
rust_jni::__generator::native_method_wrapper(raw_env, |native_env, _| {
assert_eq!(native_env.raw_jvm(), vm.raw_jvm());
assert_eq!(native_env.raw_env(), raw_env);
assert_eq!(native_env.version(), init_arguments.version());
panic!(message);
});
assert_eq!(actual_result, i32::default());
check_exception_message(&env, &format!("Rust panic: {}", message), &token);
}
}
}