// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. use jni::{objects::JObject, JavaVM}; use std::error::Error; mod common; use common::foo_class::*; #[test] fn jni_access() -> Result<(), Box> { // Create the environment let vm = JavaVM::new( jni::InitArgsBuilder::new() .version(jni::JNIVersion::V8) .option("-Xcheck:jni") .build()?, )?; let mut env = vm.attach_current_thread()?; // Load `Foo.class` { let foo_class = compile_foo()?; let loaded_foo = env.define_class(CLASS_DESC, &JObject::null(), &foo_class)?; env.delete_local_ref(loaded_foo)?; } let foo_obj = pourover::call_constructor!(&mut env, &FOO, "(I)V", 123)?; let inner_int = pourover::call_method!(&mut env, &FOO, "getFoo", "()I", &foo_obj)?; assert_eq!(123, inner_int); env.delete_local_ref(foo_obj)?; let static_int = pourover::call_static_method!(&mut env, &FOO, "smfoo", "()I")?; assert_eq!(3, static_int); Ok(()) }