blob: 9daf24f9559d878d9dae63623df71a2b16cc28cf [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @author Vitaly A. Provodin
*/
/**
* Created on 01.02.2005
*/
package org.apache.harmony.jpda.tests.jdwp.share;
import org.apache.harmony.jpda.tests.framework.TestErrorException;
import org.apache.harmony.jpda.tests.share.JPDALogWriter;
import org.apache.harmony.jpda.tests.share.JPDATestOptions;
import junit.framework.TestCase;
/**
* Basic class for all JDWP unit tests based on <code>JUnit</code> framework.
* <p>
* This class extends JUnit interface <code>TestCase</code> and implements
* <code>setUp()</code> and <code>tearDown()</code> being common for all
* JDWP tests.
* <p>
* It also introduces <code>internalSetUp()</code> and
* <code>internalTearDown()</code> that can be implemented to supply safe
* start up and shut down of debuggee.
*/
public abstract class JDWPRawTestCase extends TestCase {
/** Where to print log messages. */
protected JPDALogWriter logWriter;
/** Test run options. */
protected JPDATestOptions settings;
/**
* This method should be overridden in derived classes to return full name
* for debuggee class.
*
* @return full debuggee class name
*/
protected abstract String getDebuggeeClassName();
/**
* Returns the signature of the debuggee class. This is computed based on
* {@link #getDebuggeeClassName}.
*
* @return full debuggee class signature.
*/
protected String getDebuggeeClassSignature() {
String debuggeeClassName = getDebuggeeClassName();
return getClassSignature(debuggeeClassName);
}
/**
* Returns the signature matching the given class name
* @param className
* a fully qualified class name
* @return the class signature
*/
protected static String getClassSignature(String className) {
StringBuilder builder = new StringBuilder();
builder.append('L');
builder.append(className.replace('.', '/'));
builder.append(';');
return builder.toString();
}
/**
* Returns the signature of the given class.
* @param c
* a class
* @return the class signature
*/
protected static String getClassSignature(Class<?> c) {
String className = c.getName();
return getClassSignature(className);
}
/**
* This method will be invoked before starting each test.
*
* @throws Exception
* if any error occurs
*/
protected void internalSetUp() throws Exception {
}
/**
* This method will be invoked after each test completed or any error
* occurred.
*/
protected void internalTearDown() {
}
/**
* Overrides inherited JUnit method to provide initialization and invocation
* of internalSetUp() and internalTearDown() methods.
*/
protected void setUp() throws Exception {
super.setUp();
settings = createTestOptions();
settings.setDebuggeeClassName(getDebuggeeClassName());
logWriter = new JPDALogWriter(System.out, null, settings.isVerbose());
logWriter.println("\n=====================================>>>");
logWriter.println("Run: " + getClass().getName() + "." + getName());
logWriter.println("----------------------------------------");
try {
internalSetUp();
logWriter.println("----------------------------------------");
} catch (Throwable e) {
logWriter.printError(e);
logWriter.println("----------------------------------------");
internalTearDown();
throw new TestErrorException(e);
}
}
/**
* Creates wrapper object for accessing test options;
*/
protected JPDATestOptions createTestOptions() {
return new JPDATestOptions();
}
/**
* Overrides inherited JUnit method to provide cleanup and invocation of
* internalTearDown() method.
*/
protected void tearDown() throws Exception {
logWriter.println("----------------------------------------");
internalTearDown();
logWriter.println("<<<=====================================\n");
super.tearDown();
}
/**
* Helper method to print a message prefixed by the current test name.
* @param msg the message to print
*/
protected void printTestLog(String msg) {
String testName = getName();
logWriter.println(">> " + testName + ": " + msg);
}
}