diff --git a/product/runtime/src/test/java/com/chaquo/java/PyObjectTest.java b/product/runtime/src/test/java/com/chaquo/java/PyObjectTest.java index 9fc9a366da..2c32be7f73 100644 --- a/product/runtime/src/test/java/com/chaquo/java/PyObjectTest.java +++ b/product/runtime/src/test/java/com/chaquo/java/PyObjectTest.java @@ -772,7 +772,7 @@ public void size() { } // ==== Object =========================================================== - + @SuppressWarnings("AssertEqualsBetweenInconvertibleTypes") @Test public void equals() { @@ -812,19 +812,22 @@ public void repr() { assertEquals("'hello'", pyobjecttest.get("str_var").repr()); } - @SuppressWarnings({"UnusedAssignment", "unused"}) @Test public void finalize_() { PyObject DT = pyobjecttest.get("DelTrigger"); PyObject TestCase = python.getModule("unittest").get("TestCase"); PyObject test = TestCase.call("__init__"); // https://stackoverflow.com/a/18084492/220765 + finalizeInner(DT, test); + DT.callAttr("assertTriggered", test, true); + } + // Setting a local variable to null doesn't reliably release the reference in a + // release build (#1061), so we wrap the reference's lifetime in a method call. + private void finalizeInner(PyObject DT, PyObject test) { DT.callAttr("reset"); PyObject dt = DT.call(); DT.callAttr("assertTriggered", test, false); - dt.toString(); // Prevent Android Studio 3.1 release build from nulling dt prematurely. - dt = null; - DT.callAttr("assertTriggered", test, true); + dt.id(); // Prevent Java from releasing dt before the first assertTriggered. } }