| /* |
| * 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. |
| */ |
| @Override |
| 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. |
| */ |
| @Override |
| 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); |
| } |
| } |