diff --git a/tests/driver/native/src/lib.rs b/tests/driver/native/src/lib.rs index d12dc87b..7882c5fa 100644 --- a/tests/driver/native/src/lib.rs +++ b/tests/driver/native/src/lib.rs @@ -72,6 +72,8 @@ pub mod jni { #[field] pub username: Field<'env, 'borrow, String>, pub password: String, + #[field] + pub bytes: Field<'env, 'borrow, Box<[i8]>>, } impl<'env: 'borrow, 'borrow> User<'env, 'borrow> { diff --git a/tests/driver/src/main/java/User.java b/tests/driver/src/main/java/User.java index 4a4f638c..474fa6bb 100644 --- a/tests/driver/src/main/java/User.java +++ b/tests/driver/src/main/java/User.java @@ -15,6 +15,7 @@ public class User { private String username; private String password; + private byte[] bytes; @Override public String toString() { @@ -155,6 +156,7 @@ public User(String username, String password) { this.username = username; this.password = password; + this.bytes = password.getBytes(); } public static String getNullableString(String v) { diff --git a/tests/mod.rs b/tests/mod.rs index df7939cb..28b8a336 100644 --- a/tests/mod.rs +++ b/tests/mod.rs @@ -253,6 +253,14 @@ fn vm_creation_and_object_usage() { assert_eq!("42__", User::cloneUser(&env, &borrow_user).password); // Mutable class fields work as expected assert_eq!("borrow__", borrow_user.username.get().expect("unable to get username")); + // This field is simply not updated on the java side + let expected = "42".as_bytes(); + assert_eq!( + unsafe { + &*std::ptr::slice_from_raw_parts(expected.as_ref().as_ptr() as *const i8, expected.as_ref().len()) + }.to_vec(), + borrow_user.bytes.get().expect("unable to get bytes").to_vec(), + ); assert_eq!(borrow_user.toString(&env), "User{username='borrow__', password='42__'}"); assert_eq!(borrow_user_opt.toString(&env), "User{username='borrow_opt____', password='42____'}");