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());
         }