/**
 * Copyright (C) 2006 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.google.inject.util;

import junit.framework.TestCase;

/**
 * @author crazybob@google.com (Bob Lee)
 */
public class FinalizableReferenceQueueTest extends TestCase {

  public void testFinalizeReferentCalled() {
    MockReference reference = new MockReference();
    reference.enqueue();
    // wait up to 5s
    for (int i = 0; i < 50; i++) {
      if (reference.finalizeReferentCalled) {
        return;
      }
      try {
        Thread.sleep(10);
      } catch (InterruptedException e) { /* ignore */ }
    }
    fail();
  }

  static class MockReference extends FinalizableWeakReference<Object> {

    boolean finalizeReferentCalled;

    MockReference() {
      super(new Object());
    }

    public void finalizeReferent() {
      finalizeReferentCalled = true;
    }
  }
}
