Merge "Fix ReferenceTest#test_subclass."
diff --git a/harmony-tests/src/test/java/org/apache/harmony/tests/java/lang/ref/ReferenceTest.java b/harmony-tests/src/test/java/org/apache/harmony/tests/java/lang/ref/ReferenceTest.java
index a091793..7a3496e 100644
--- a/harmony-tests/src/test/java/org/apache/harmony/tests/java/lang/ref/ReferenceTest.java
+++ b/harmony-tests/src/test/java/org/apache/harmony/tests/java/lang/ref/ReferenceTest.java
@@ -35,45 +35,22 @@
static TestWeakReference twr;
static AssertionFailedError error;
static boolean testObjectFinalized;
+
static class TestWeakReference<T> extends WeakReference<T> {
public volatile boolean clearSeen = false;
public volatile boolean enqueueSeen = false;
- public TestWeakReference(T referent) {
- super(referent);
- }
-
public TestWeakReference(T referent, ReferenceQueue<? super T> q) {
super(referent, q);
}
public void clear() {
clearSeen = true;
- if (testObjectFinalized) {
- error = new AssertionFailedError("Clear should happen " +
- "before finalization.");
- throw error;
- }
- if (enqueueSeen) {
- error = new AssertionFailedError("Clear should happen " +
- "before enqueue.");
- throw error;
- }
super.clear();
}
public boolean enqueue() {
enqueueSeen = true;
- // if (!clearSeen) {
- // error = new AssertionFailedError("Clear should happen " +
- // "before enqueue.");
- // throw error;
- // }
-
- /* Do this last; it may notify the main test thread,
- * and anything we'd do after it (e.g., setting clearSeen)
- * wouldn't be seen.
- */
return super.enqueue();
}
}
@@ -218,12 +195,13 @@
assertNotNull("Object not garbage collected.", ref);
assertTrue("Unexpected reference.", ref == twr);
assertNull("Object could not be reclaimed.", twr.get());
- //assertTrue("Overridden clear() should have been called.",
- // twr.clearSeen);
- assertTrue("Overridden enqueue() should have been called.",
- twr.enqueueSeen);
- assertTrue("finalize() should have been called.",
- testObjectFinalized);
+
+ // enqueue() and clear() will not be called by the garbage collector. The GC
+ // will perform the equivalent operations directly.
+ assertFalse(twr.clearSeen);
+ assertFalse(twr.enqueueSeen);
+
+ assertTrue(testObjectFinalized);
} catch (InterruptedException e) {
fail("InterruptedException : " + e.getMessage());
}