mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

matthew_swift
28.47.2010 f2160f4bd1c8ac67e5a86a6710d431e8932877f9
sdk/tests/unit-tests-testng/src/org/opends/sdk/OpenDSTestCase.java
@@ -40,11 +40,11 @@
/**
 * This class defines a base test case that should be subclassed by all
 * unit tests used by OpenDS.
 * This class defines a base test case that should be subclassed by all unit
 * tests used by OpenDS.
 * <p>
 * This class adds the ability to print error messages and automatically
 * have them include the class name.
 * This class adds the ability to print error messages and automatically have
 * them include the class name.
 */
@Test(sequential = true)
public abstract class OpenDSTestCase
@@ -60,64 +60,36 @@
  //
  /**
   * A list of all parameters that were generated by a @DataProvider and
   * passed to a test method of this class. TestListener helps us keep
   * this so that once all of the tests are finished, we can clear it
   * out in an @AfterClass method. We can't just clear it out right away
   * in the TestListener because some methods share a @DataProvider.
   * A list of all parameters that were generated by a @DataProvider and passed
   * to a test method of this class. TestListener helps us keep this so that
   * once all of the tests are finished, we can clear it out in an @AfterClass
   * method. We can't just clear it out right away in the TestListener because
   * some methods share a @DataProvider.
   */
  private final IdentityHashMap<Object[], Object> successfulTestParams = new IdentityHashMap<Object[], Object>();
  /**
   * These are test parameters from a test that has failed. We need to
   * keep these around because the test report expects to find them when
   * printing out failures.
   * These are test parameters from a test that has failed. We need to keep
   * these around because the test report expects to find them when printing out
   * failures.
   */
  private final IdentityHashMap<Object[], Object> failedTestParams = new IdentityHashMap<Object[], Object>();
  /**
   * Adds testParams to the list of all test parameters, so it can be
   * null'ed out later if it's not part.
   */
  void addParamsFromSuccessfulTests(Object[] testParams)
  {
    if (testParams != null)
    {
      successfulTestParams.put(testParams, testParams);
    }
  }
  /**
   * Adds testParams to the list of all failed test parameters, so that
   * we know to NOT null it out later.
   */
  void addParamsFromFailedTest(Object[] testParams)
  {
    if (testParams != null)
    {
      failedTestParams.put(testParams, testParams);
    }
  }
  /**
   * null out all test parameters except the ones used in failed tests
   * since we might need these again.
   * null out all test parameters except the ones used in failed tests since we
   * might need these again.
   */
  @AfterClass(alwaysRun = true)
  public void clearSuccessfulTestParams()
  {
    Set<Object[]> paramsSet = successfulTestParams.keySet();
    final Set<Object[]> paramsSet = successfulTestParams.keySet();
    if (paramsSet == null)
    { // Can this ever happen?
      return;
    }
    for (Object[] params : paramsSet)
    for (final Object[] params : paramsSet)
    {
      if (failedTestParams.containsKey(params))
      {
@@ -136,12 +108,11 @@
  /**
   * The member variables of a test class can prevent lots of memory
   * from being reclaimed, so we use reflection to null out all of the
   * member variables after the tests have run. Since all tests must
   * inherit from DirectoryServerTestCase, TestNG guarantees that this
   * method runs after all of the subclass methods, so this isn't too
   * dangerous.
   * The member variables of a test class can prevent lots of memory from being
   * reclaimed, so we use reflection to null out all of the member variables
   * after the tests have run. Since all tests must inherit from
   * DirectoryServerTestCase, TestNG guarantees that this method runs after all
   * of the subclass methods, so this isn't too dangerous.
   */
  @AfterClass(alwaysRun = true)
  public void nullMemberVariablesAfterTest()
@@ -152,27 +123,25 @@
    while (OpenDSTestCase.class.isAssignableFrom(cls)
        && !OpenDSTestCase.class.equals(cls))
    {
      Field fields[] = cls.getDeclaredFields();
      for (int i = 0; i < fields.length; i++)
      final Field fields[] = cls.getDeclaredFields();
      for (final Field field : fields)
      {
        Field field = fields[i];
        int modifiers = field.getModifiers();
        Class<?> fieldClass = field.getType();
        final int modifiers = field.getModifiers();
        final Class<?> fieldClass = field.getType();
        // If it's a non-static non-final non-primitive type, then null
        // it out
        // so that the garbage collector can reclaim it and everything
        // it
        // references.
        if (!fieldClass.isPrimitive() && !fieldClass.isEnum()
            && !Modifier.isFinal(modifiers)
            && !Modifier.isStatic(modifiers))
            && !Modifier.isFinal(modifiers) && !Modifier.isStatic(modifiers))
        {
          field.setAccessible(true);
          try
          {
            field.set(this, null);
          }
          catch (IllegalAccessException e)
          catch (final IllegalAccessException e)
          {
            // We're only doing this to save memory, so it's no big deal
            // if we can't set it.
@@ -182,4 +151,32 @@
      cls = cls.getSuperclass();
    }
  }
  /**
   * Adds testParams to the list of all failed test parameters, so that we know
   * to NOT null it out later.
   */
  void addParamsFromFailedTest(final Object[] testParams)
  {
    if (testParams != null)
    {
      failedTestParams.put(testParams, testParams);
    }
  }
  /**
   * Adds testParams to the list of all test parameters, so it can be null'ed
   * out later if it's not part.
   */
  void addParamsFromSuccessfulTests(final Object[] testParams)
  {
    if (testParams != null)
    {
      successfulTestParams.put(testParams, testParams);
    }
  }
}