diff --git a/tests/Java.Interop-Tests/Java.Interop/JniRuntimeJniValueManagerContract.cs b/tests/Java.Interop-Tests/Java.Interop/JniRuntimeJniValueManagerContract.cs index 782b6e765..d95aa49c8 100644 --- a/tests/Java.Interop-Tests/Java.Interop/JniRuntimeJniValueManagerContract.cs +++ b/tests/Java.Interop-Tests/Java.Interop/JniRuntimeJniValueManagerContract.cs @@ -159,6 +159,30 @@ public unsafe void CreatePeer_UsesFallbackType () Assert.AreSame (typeof (IJavaInterfaceInvoker), p!.GetType ()); } + [Test] + public void CreatePeer_ReplaceableDoesNotReplace () + { + var v = new AnotherJavaInterfaceImpl (); + var lref = v.PeerReference.NewLocalRef (); + v.Dispose (); + + try { + var peer1 = valueManager.CreatePeer (ref lref, JniObjectReferenceOptions.Copy, typeof (AnotherJavaInterfaceImpl)); + Assert.IsTrue ( + peer1!.JniManagedPeerState.HasFlag (JniManagedPeerStates.Replaceable), + $"Expected peer1.JniManagedPeerState to have .Replaceable, but was {peer1.JniManagedPeerState}."); + var peer2 = valueManager.CreatePeer (ref lref, JniObjectReferenceOptions.Copy, typeof (AnotherJavaInterfaceImpl)); + Assert.IsTrue ( + peer2!.JniManagedPeerState.HasFlag (JniManagedPeerStates.Replaceable), + $"Expected peer2.JniManagedPeerState to have .Replaceable, but was {peer1.JniManagedPeerState}."); + Assert.AreNotSame (peer1, peer2, "Expected peer1 and peer2 to be different instances."); + var peeked = valueManager.PeekPeer (peer2.PeerReference); + Assert.AreSame (peer1, peeked, "Expected peer1 and peeked to be the same instance."); + } finally { + JniObjectReference.Dispose (ref lref); + } + } + [Test] public void CreateValue () {