/** Makes an effort to remove both temporary directories. */
  @After
  public void clean() {
    if (directory != null) {
      directory.remove();
    }

    if (second_directory != null) {
      second_directory.remove();
    }
  }
  /** Performs the tests. */
  @Test
  public void perform() {
    // Get the File objects corresponding to both directories.
    File root = directory.root();
    File second_root = second_directory.root();

    // Make sure the two directories are not the same.
    if (root.equals(second_root)) {
      Assert.fail("temporary directories created with the " + "same path");
    }

    // Make sure both directories are indeed directories and exist.
    if (!root.isDirectory() || !second_root.isDirectory()) {
      Assert.fail("temporary directory does not exist or is " + "not a directory");
    }

    // Delete the second directory - it is no longer needed.
    second_directory.remove();

    // There is a potential race condition here - the second directory could
    // be re-created before this statement runs. However, this is not the
    // common case when the library is being tested.
    if (second_root.exists()) {
      Assert.fail("temporary directory not removed");
    }

    // Try to add a file to the first directory.
    try {
      directory.add(new String[] {"subdir", "file.txt"}, "contents");
    } catch (Exception e) {
      e.printStackTrace();
      Assert.fail("unable to create file in temporary directory");
    }

    // Delete the first directory. This ensures that recursive deletion
    // works.
    directory.remove();

    if (root.exists()) Assert.fail("temporary directory not removed");
  }