#![cfg(feature = "invocation")] use jni::objects::{JMap, JObject}; mod util; use util::{attach_current_thread, unwrap}; #[test] pub fn jmap_push_and_iterate() { let env = attach_current_thread(); let data = &["hello", "world", "from", "test"]; // Create a new map. Use LinkedHashMap to have predictable iteration order let map_object = unwrap(&env, env.new_object("java/util/LinkedHashMap", "()V", &[])); let map = unwrap(&env, JMap::from_env(&env, map_object)); // Push all strings unwrap( &env, data.iter().try_for_each(|s| { env.new_string(s) .map(JObject::from) .and_then(|s| map.put(s, s).map(|_| ())) }), ); // Collect the keys using the JMap iterator let mut collected = Vec::new(); unwrap( &env, map.iter().and_then(|mut iter| { iter.try_for_each(|e| { env.get_string(e.0.into()) .map(|s| collected.push(String::from(s))) }) }), ); let orig = data.to_vec(); assert_eq!(orig, collected); }