/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at
* trunk/opends/resource/legal-notices/OpenDS.LICENSE
* or https://OpenDS.dev.java.net/OpenDS.LICENSE.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at
* trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
* add the following below this CDDL HEADER, with the fields enclosed
* by brackets "[]" replaced with your own identifying * information:
* Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*
*
* Portions Copyright 2006 Sun Microsystems, Inc.
*/
package org.opends.server;
import java.io.PrintStream;
import java.util.LinkedList;
import java.util.ListIterator;
import junit.framework.TestCase;
/**
* This class defines a base JUnit test case that should be subclassed
* by all unit tests used by the Directory Server.
*
* This class offers two major benefits over
* {@link junit.framework.TestCase}:
*
* - It adds the ability to print error messages and automatically
* have them include the class name
*
- It is possible to register dependencies which are initialized
* during the {@link #setUp()} phase and finalized during the
* {@link #tearDown()} phase of each test.
*
*
* @see org.opends.server.DirectoryServerTestSetup
* @author Neil A. Wilson
*/
public abstract class DirectoryServerTestCase extends TestCase {
// The print stream to use for printing error messages.
private PrintStream errorStream;
// List of test case dependencies required by each test.
private LinkedList dependencies;
/**
* Creates a new instance of this JUnit test case with the provided
* name.
*
* @param name
* The name to use for this JUnit test case.
*/
protected DirectoryServerTestCase(String name) {
super(name);
this.errorStream = System.err;
this.dependencies = new LinkedList();
}
/**
* Register a dependency with the test case.
*
* @param dependency
* The test case dependency.
*/
public final void registerDependency(TestCaseDependency dependency) {
dependencies.add(dependency);
}
/**
* Prints the provided message to the error stream, prepending the
* fully-qualified class name.
*
* @param message
* The message to be printed to the error stream.
*/
public final void printError(String message) {
errorStream.print(getClass().getName());
errorStream.print(" -- ");
errorStream.println(message);
}
/**
* Prints the stack trace for the provided exception to the error
* stream.
*
* @param exception
* The exception to be printed to the error stream.
*/
public final void printException(Throwable exception) {
exception.printStackTrace(errorStream);
}
/**
* Specifies the error stream to which messages will be printed.
*
* @param errorStream
* The error stream to which messages will be printed.
*/
public final void setErrorStream(PrintStream errorStream) {
this.errorStream = errorStream;
}
/**
* {@inheritDoc}
*/
@Override
protected void setUp() throws Exception {
// Initialize each dependency in order (oldest first).
for (TestCaseDependency dependency : dependencies) {
dependency.setUp();
}
}
/**
* {@inheritDoc}
*/
@Override
protected void tearDown() throws Exception {
// Clean up each dependency in reverse order (newest first).
int size = dependencies.size();
if (size != 0) {
ListIterator i = dependencies.listIterator(size);
while (i.hasPrevious()) {
i.previous().tearDown();
}
}
}
}