#![cfg(feature = "invocation")]
extern crate error_chain;
extern crate jni;
use jni::objects::AutoLocal;
use jni::objects::GlobalRef;
use jni::objects::JValue;
use jni::sys::jint;
mod util;
use util::{attach_current_thread, unwrap};
#[test]
#[ignore] pub fn global_ref_is_dropped() {
const VALUE: jint = 42;
let env = attach_current_thread();
let global_obj = {
let local_ref = AutoLocal::new(&env, unwrap(&env, env.new_object(
"java/util/concurrent/atomic/AtomicInteger",
"(I)V",
&[JValue::from(VALUE)]
)));
let global_ref = unwrap(&env, env.new_global_ref(local_ref.as_obj()));
let res = env.call_method(global_ref.as_obj(), "get", "()I", &[]);
assert_eq!(VALUE, unwrap(&env, unwrap(&env, res).i()));
let obj = global_ref.as_obj().into_inner();
let global_ref = unsafe { GlobalRef::from_raw(env.get_java_vm().unwrap(), obj) };
let res = env.call_method(global_ref.as_obj(), "get", "()I", &[]);
assert_eq!(VALUE, unwrap(&env, unwrap(&env, res).i()));
std::mem::forget(global_ref);
obj
};
let global_ref = unsafe { GlobalRef::from_raw(env.get_java_vm().unwrap(), global_obj) };
let res = env.call_method(global_ref.as_obj(), "get", "()I", &[]);
assert!(res.is_err());
}