001: /*
002: * JBoss, Home of Professional Open Source.
003: * Copyright 2006, Red Hat Middleware LLC, and individual contributors
004: * as indicated by the @author tags. See the copyright.txt file in the
005: * distribution for a full listing of individual contributors.
006: *
007: * This is free software; you can redistribute it and/or modify it
008: * under the terms of the GNU Lesser General Public License as
009: * published by the Free Software Foundation; either version 2.1 of
010: * the License, or (at your option) any later version.
011: *
012: * This software is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this software; if not, write to the Free
019: * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
021: */
022: package org.jboss.test;
023:
024: import java.net.URL;
025: import java.security.AccessController;
026: import java.security.PrivilegedAction;
027: import java.util.Arrays;
028:
029: import junit.framework.AssertionFailedError;
030: import junit.framework.TestCase;
031:
032: import org.jboss.logging.Logger;
033:
034: /**
035: * An abstract Test Case.
036: *
037: * @author <a href="adrian@jboss.com">Adrian Brock</a>
038: * @version $Revision: 57204 $
039: */
040: public abstract class AbstractTestCase extends TestCase {
041: /** The start time */
042: long startTime;
043:
044: /**
045: * Create a new abstract test case
046: *
047: * @param name the test name
048: */
049: public AbstractTestCase(String name) {
050: super (name);
051: }
052:
053: /**
054: * Get the log for this test
055: *
056: * @return the log
057: */
058: public abstract Logger getLog();
059:
060: public URL getResource(final String name) {
061: final Class clazz = getClass();
062: PrivilegedAction action = new PrivilegedAction() {
063: public Object run() {
064: return clazz.getResource(name);
065: }
066: };
067: return (URL) AccessController.doPrivileged(action);
068: }
069:
070: protected void setUp() throws Exception {
071: log("Starting");
072: startTime = System.currentTimeMillis();
073: }
074:
075: protected void tearDown() throws Exception {
076: getLog().debug(
077: getName() + " took "
078: + (System.currentTimeMillis() - startTime)
079: + "ms");
080: log("Stopping");
081: }
082:
083: /**
084: * Callback for configuring logging at the start of the test
085: */
086: protected void configureLogging() {
087: }
088:
089: /**
090: * Enable trace for a logging category
091: *
092: * @param name the logging category
093: */
094: protected abstract void enableTrace(String name);
095:
096: /**
097: * Assert two float values are equal
098: *
099: * @param one the expected value
100: * @param two the actual value
101: */
102: protected void assertEquals(float one, float two) {
103: assertEquals(one, two, 0f);
104: }
105:
106: /**
107: * Assert two double values are equal
108: *
109: * @param one the expected value
110: * @param two the actual value
111: */
112: protected void assertEquals(double one, double two) {
113: assertEquals(one, two, 0f);
114: }
115:
116: /**
117: * Assert to arrays are equal
118: *
119: * @param expected the expected array
120: * @param actual the actual array
121: */
122: protected void assertEquals(Object[] expected, Object[] actual) {
123: if (Arrays.equals(expected, actual) == false)
124: throw new AssertionFailedError("expected: "
125: + Arrays.asList(expected) + " actual: "
126: + Arrays.asList(actual));
127: }
128:
129: /**
130: * Assert to arrays are equal
131: *
132: * @param context the context
133: * @param expected the expected array
134: * @param actual the actual array
135: */
136: protected void assertEquals(String context, Object[] expected,
137: Object[] actual) {
138: if (Arrays.equals(expected, actual) == false)
139: throw new AssertionFailedError(context + " expected: "
140: + Arrays.asList(expected) + " actual: "
141: + Arrays.asList(actual));
142: }
143:
144: /**
145: * Check we have the expected exception
146: *
147: * @param expected the excepted class of the exception
148: * @param throwable the real exception
149: */
150: protected void checkThrowable(Class expected, Throwable throwable) {
151: if (expected == null)
152: fail("Must provide an expected class");
153: if (throwable == null)
154: fail("Must provide a throwable for comparison");
155: if (expected.equals(throwable.getClass()) == false) {
156: getLog().error("Unexpected throwable", throwable);
157: fail("Unexpected throwable: " + throwable);
158: } else {
159: getLog().debug(
160: "Got expected " + expected.getName() + "("
161: + throwable + ")");
162: }
163: }
164:
165: /**
166: * Log an event with the given context
167: *
168: * @param context the context
169: */
170: private void log(String context) {
171: getLog().debug("==== " + context + " " + getName() + " ====");
172: }
173: }
|