15f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/* 25f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more 35f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * contributor license agreements. See the NOTICE file distributed with 45f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * this work for additional information regarding copyright ownership. 55f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0 65f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * (the "License"); you may not use this file except in compliance with 75f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * the License. You may obtain a copy of the License at 85f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 95f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Unless required by applicable law or agreed to in writing, software 125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * See the License for the specific language governing permissions and 165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * limitations under the License. 175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/** 205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @author Vitaly A. Provodin 215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/** 245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Created on 01.02.2005 255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespackage org.apache.harmony.jpda.tests.jdwp.share; 275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.TestErrorException; 295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.share.JPDALogWriter; 305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.share.JPDATestOptions; 315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport junit.framework.TestCase; 335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/** 355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Basic class for all JDWP unit tests based on <code>JUnit</code> framework. 365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <p> 375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * This class extends JUnit interface <code>TestCase</code> and implements 385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <code>setUp()</code> and <code>tearDown()</code> being common for all 395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * JDWP tests. 405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <p> 415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * It also introduces <code>internalSetUp()</code> and 425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <code>internalTearDown()</code> that can be implemented to supply safe 435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * start up and shut down of debuggee. 445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespublic abstract class JDWPRawTestCase extends TestCase { 465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** Where to print log messages. */ 485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes protected JPDALogWriter logWriter; 495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** Test run options. */ 515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes protected JPDATestOptions settings; 525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * This method should be overridden in derived classes to return full name 555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * for debuggee class. 565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return full debuggee class name 585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes protected abstract String getDebuggeeClassName(); 605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 6232e3e8da6c42b15c1011f67930b460260704739aSebastien Hertz * Returns the signature of the debuggee class. This is computed based on 6332e3e8da6c42b15c1011f67930b460260704739aSebastien Hertz * {@link #getDebuggeeClassName}. 6432e3e8da6c42b15c1011f67930b460260704739aSebastien Hertz * 6532e3e8da6c42b15c1011f67930b460260704739aSebastien Hertz * @return full debuggee class signature. 6632e3e8da6c42b15c1011f67930b460260704739aSebastien Hertz */ 6732e3e8da6c42b15c1011f67930b460260704739aSebastien Hertz protected String getDebuggeeClassSignature() { 6832e3e8da6c42b15c1011f67930b460260704739aSebastien Hertz String debuggeeClassName = getDebuggeeClassName(); 693e35c96b816be002cbdbfd623f2b2d8300f62816Sebastien Hertz return getClassSignature(debuggeeClassName); 703e35c96b816be002cbdbfd623f2b2d8300f62816Sebastien Hertz } 713e35c96b816be002cbdbfd623f2b2d8300f62816Sebastien Hertz 723e35c96b816be002cbdbfd623f2b2d8300f62816Sebastien Hertz /** 733e35c96b816be002cbdbfd623f2b2d8300f62816Sebastien Hertz * Returns the signature matching the given class name 743e35c96b816be002cbdbfd623f2b2d8300f62816Sebastien Hertz * @param className 753e35c96b816be002cbdbfd623f2b2d8300f62816Sebastien Hertz * a fully qualified class name 763e35c96b816be002cbdbfd623f2b2d8300f62816Sebastien Hertz * @return the class signature 773e35c96b816be002cbdbfd623f2b2d8300f62816Sebastien Hertz */ 783e35c96b816be002cbdbfd623f2b2d8300f62816Sebastien Hertz protected static String getClassSignature(String className) { 7932e3e8da6c42b15c1011f67930b460260704739aSebastien Hertz StringBuilder builder = new StringBuilder(); 8032e3e8da6c42b15c1011f67930b460260704739aSebastien Hertz builder.append('L'); 813e35c96b816be002cbdbfd623f2b2d8300f62816Sebastien Hertz builder.append(className.replace('.', '/')); 8232e3e8da6c42b15c1011f67930b460260704739aSebastien Hertz builder.append(';'); 8332e3e8da6c42b15c1011f67930b460260704739aSebastien Hertz return builder.toString(); 8432e3e8da6c42b15c1011f67930b460260704739aSebastien Hertz } 8532e3e8da6c42b15c1011f67930b460260704739aSebastien Hertz 8632e3e8da6c42b15c1011f67930b460260704739aSebastien Hertz /** 873e35c96b816be002cbdbfd623f2b2d8300f62816Sebastien Hertz * Returns the signature of the given class. 883e35c96b816be002cbdbfd623f2b2d8300f62816Sebastien Hertz * @param c 893e35c96b816be002cbdbfd623f2b2d8300f62816Sebastien Hertz * a class 903e35c96b816be002cbdbfd623f2b2d8300f62816Sebastien Hertz * @return the class signature 913e35c96b816be002cbdbfd623f2b2d8300f62816Sebastien Hertz */ 923e35c96b816be002cbdbfd623f2b2d8300f62816Sebastien Hertz protected static String getClassSignature(Class<?> c) { 933e35c96b816be002cbdbfd623f2b2d8300f62816Sebastien Hertz String className = c.getName(); 943e35c96b816be002cbdbfd623f2b2d8300f62816Sebastien Hertz return getClassSignature(className); 953e35c96b816be002cbdbfd623f2b2d8300f62816Sebastien Hertz } 963e35c96b816be002cbdbfd623f2b2d8300f62816Sebastien Hertz 973e35c96b816be002cbdbfd623f2b2d8300f62816Sebastien Hertz /** 985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * This method will be invoked before starting each test. 995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 1005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @throws Exception 1015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * if any error occurs 1025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 1035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes protected void internalSetUp() throws Exception { 1045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 1075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * This method will be invoked after each test completed or any error 1085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * occurred. 1095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 1105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes protected void internalTearDown() { 1115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 1145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Overrides inherited JUnit method to provide initialization and invocation 1155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * of internalSetUp() and internalTearDown() methods. 1165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 1175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes protected void setUp() throws Exception { 1185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes super.setUp(); 1195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes settings = createTestOptions(); 1215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes settings.setDebuggeeClassName(getDebuggeeClassName()); 1225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter = new JPDALogWriter(System.out, null, settings.isVerbose()); 1245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("\n=====================================>>>"); 1265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("Run: " + getClass().getName() + "." + getName()); 1275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("----------------------------------------"); 1285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes try { 1305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes internalSetUp(); 1315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("----------------------------------------"); 1325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } catch (Throwable e) { 1335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.printError(e); 1345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("----------------------------------------"); 1355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes internalTearDown(); 1365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes throw new TestErrorException(e); 1375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 1415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Creates wrapper object for accessing test options; 1425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 1435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes protected JPDATestOptions createTestOptions() { 1445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return new JPDATestOptions(); 1455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 1485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Overrides inherited JUnit method to provide cleanup and invocation of 1495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * internalTearDown() method. 1505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 1515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes protected void tearDown() throws Exception { 1525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("----------------------------------------"); 1535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes internalTearDown(); 1545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes logWriter.println("<<<=====================================\n"); 1555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes super.tearDown(); 1575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1583e35c96b816be002cbdbfd623f2b2d8300f62816Sebastien Hertz 1593e35c96b816be002cbdbfd623f2b2d8300f62816Sebastien Hertz /** 1603e35c96b816be002cbdbfd623f2b2d8300f62816Sebastien Hertz * Helper method to print a message prefixed by the current test name. 1613e35c96b816be002cbdbfd623f2b2d8300f62816Sebastien Hertz * @param msg the message to print 1623e35c96b816be002cbdbfd623f2b2d8300f62816Sebastien Hertz */ 1633e35c96b816be002cbdbfd623f2b2d8300f62816Sebastien Hertz protected void printTestLog(String msg) { 1643e35c96b816be002cbdbfd623f2b2d8300f62816Sebastien Hertz String testName = getName(); 1653e35c96b816be002cbdbfd623f2b2d8300f62816Sebastien Hertz logWriter.println(">> " + testName + ": " + msg); 1663e35c96b816be002cbdbfd623f2b2d8300f62816Sebastien Hertz } 1675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes} 168