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

neil_a_wilson
16.44.2006 cf77becb4893685f0dd67e76724aa366b6d8f039
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/*
 * 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.
 * <p>
 * This class offers two major benefits over
 * {@link junit.framework.TestCase}:
 * <ul>
 * <li>It adds the ability to print error messages and automatically
 * have them include the class name
 * <li>It is possible to register dependencies which are initialized
 * during the {@link #setUp()} phase and finalized during the
 * {@link #tearDown()} phase of each test.
 * </ul>
 *
 * @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<TestCaseDependency> 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<TestCaseDependency>();
  }
 
  /**
   * 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<TestCaseDependency> i = dependencies.listIterator(size);
      while (i.hasPrevious()) {
        i.previous().tearDown();
      }
    }
  }
 
}