@Test
  public void testCheckNotFinalized3() {
    Runnable task = mock(Runnable.class);

    ObjectFinalizer finalizer = new ObjectFinalizer(task, "DESCRIPTION");
    finalizer.checkNotFinalized();
  }
  /** Test of checkNotFinalized method, of class ObjectFinalizer. */
  @Test(expected = IllegalStateException.class)
  public void testCheckNotFinalized1() {
    Runnable task = mock(Runnable.class);

    ObjectFinalizer finalizer = new ObjectFinalizer(task, "DESCRIPTION");
    finalizer.doFinalize();
    finalizer.checkNotFinalized();
  }
  @Test(expected = TestException.class)
  public void testDoFinalizePropagatesException() {
    Runnable task = mock(Runnable.class);
    doThrow(TestException.class).when(task).run();

    ObjectFinalizer finalizer = new ObjectFinalizer(task, "DESCRIPTION");
    finalizer.doFinalize();
  }
  /** Test of doFinalize method, of class ObjectFinalizer. */
  @Test
  public void testDoFinalize() {
    Runnable task = mock(Runnable.class);

    ObjectFinalizer finalizer = new ObjectFinalizer(task, "DESCRIPTION");
    assertTrue(finalizer.doFinalize());

    verify(task).run();
    verifyNoMoreInteractions(task);
  }
  /** Test of markFinalized method, of class ObjectFinalizer. */
  @Test
  public void testMarkFinalized() {
    Runnable task = mock(Runnable.class);

    ObjectFinalizer finalizer = new ObjectFinalizer(task, "DESCRIPTION");
    finalizer.markFinalized();
    assertFalse(finalizer.doFinalize());

    verifyZeroInteractions(task);
  }
  @Test
  public void testIsFinalized2() {
    Runnable task = mock(Runnable.class);

    ObjectFinalizer finalizer = new ObjectFinalizer(task, "DESCRIPTION");
    assertFalse(finalizer.isFinalized());

    finalizer.markFinalized();

    assertTrue(finalizer.isFinalized());
  }
  @Test
  public void testFinalizeAfterMarkFinalized() {
    Runnable task = mock(Runnable.class);

    ObjectFinalizer finalizer = new ObjectFinalizer(task, "DESCRIPTION");
    finalizer.markFinalized();
    try (LogCollector logs = LogCollectorTest.startCollecting()) {
      finalizeObject(finalizer);
      assertEquals(0, logs.getNumberOfLogs());
    }

    verifyZeroInteractions(task);
  }
 @SuppressWarnings("FinalizeCalledExplicitly")
 private static void finalizeObject(ObjectFinalizer finalizer) {
   finalizer.finalize();
 }