1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 */ 18 19 /** 20 * @author Anatoly F. Bondarenko 21 */ 22 23 /** 24 * Created on 20.05.2005 25 */ 26 package org.apache.harmony.jpda.tests.jdwp.ReferenceType; 27 28 import org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket; 29 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPCommands; 30 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants; 31 import org.apache.harmony.jpda.tests.framework.jdwp.ReplyPacket; 32 import org.apache.harmony.jpda.tests.framework.jdwp.Value; 33 import org.apache.harmony.jpda.tests.jdwp.share.JDWPSyncTestCase; 34 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer; 35 36 37 /** 38 * JDWP Unit test for ReferenceType.GetValues command for field from another class. 39 */ 40 public class GetValues004Test extends JDWPSyncTestCase { 41 42 static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues004Debuggee;"; 43 static final String anotherClassSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ReferenceType/RFGetValues004AnotherClass;"; 44 getDebuggeeClassName()45 protected String getDebuggeeClassName() { 46 return "org.apache.harmony.jpda.tests.jdwp.ReferenceType.GetValues004Debuggee"; 47 } 48 49 /** 50 * This testcase exercises ReferenceType.GetValues command for field from another class. 51 * <BR>The test starts GetValues004Debuggee and checks that 52 * ReferenceType.GetValues command runs correctly for field declaring 53 * in some another class than passed to GetValues command ReferenceTypeID which is 54 * not assignable from that another class. 55 * <BR>Test expects that INVALID_FIELDID error is returned. 56 */ testGetValues004()57 public void testGetValues004() { 58 String thisTestName = "testGetValues004"; 59 logWriter.println("==> " + thisTestName + " for ReferenceType.GetValues command: START..."); 60 synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY); 61 62 logWriter.println 63 ("\n=> Get anotherClassRefTypeID for checkedClass class = RFGetValues003AnotherClass..."); 64 long anotherClassRefTypeID = 0; 65 try { 66 anotherClassRefTypeID = debuggeeWrapper.vmMirror.getClassID(anotherClassSignature); 67 } catch ( Throwable thrown) { 68 logWriter.println("## FAILURE: Can not get anotherClassRefTypeID:"); 69 logWriter.println("## Exception: " + thrown); 70 fail("Can not get anotherClassRefTypeID, Exception: " + thrown); 71 } 72 if ( anotherClassRefTypeID == -1 ) { 73 logWriter.println("## FAILURE: Can not get debuggeeRefTypeID for given signature!"); 74 logWriter.println("## Signature = |" + anotherClassSignature + "|"); 75 fail("Can not get debuggeeRefTypeID for given signature:<" + anotherClassSignature + ">"); 76 } 77 logWriter.println("=> anotherClassRefTypeID = " + anotherClassRefTypeID); 78 79 logWriter.println 80 ("\n=> Get anotherClassCheckedFieldID for field of anotherClass..."); 81 String anotherClassCheckedFieldName = "anotherClassStaticIntVar"; 82 long anotherClassCheckedFieldID = 0; 83 try { 84 anotherClassCheckedFieldID 85 = debuggeeWrapper.vmMirror.getFieldID(anotherClassRefTypeID, anotherClassCheckedFieldName); 86 } catch ( Throwable thrown) { 87 logWriter.println("## FAILURE: Can not get anotherClassCheckedFieldID:"); 88 logWriter.println("## Exception: " + thrown); 89 fail("Can not get anotherClassCheckedFieldID, Exception: " + thrown); 90 } 91 logWriter.println("=> superClassCheckedFieldID = " + anotherClassCheckedFieldID); 92 93 logWriter.println 94 ("\n=> Get debuggeeRefTypeID for debuggee class = " + getDebuggeeClassName() + "..."); 95 long debuggeeRefTypeID = 0; 96 try { 97 debuggeeRefTypeID = debuggeeWrapper.vmMirror.getClassID(debuggeeSignature); 98 } catch ( Throwable thrown) { 99 logWriter.println("## FAILURE: Can not get debuggeeRefTypeID:"); 100 logWriter.println("## Exception: " + thrown); 101 fail("Can not get debuggeeRefTypeID, Exception: " + thrown); 102 } 103 if ( debuggeeRefTypeID == -1 ) { 104 logWriter.println("## FAILURE: Can not get debuggeeRefTypeID for given signature!"); 105 logWriter.println("## Signature = |" + debuggeeSignature + "|"); 106 fail("Can not get debuggeeRefTypeID for given signature:<" + debuggeeSignature + ">"); 107 } 108 logWriter.println("=> debuggeeRefTypeID = " + debuggeeRefTypeID); 109 110 logWriter.println 111 ("\n=> CHECK ReferenceType::GetValues command for debuggeeRefTypeID, anotherClassCheckedFieldID..."); 112 logWriter.println 113 ("=> 'INVALID_FIELDID' error is expected as anotherClassCheckedField is not field of debuggee class!"); 114 CommandPacket getValuesCommand = new CommandPacket( 115 JDWPCommands.ReferenceTypeCommandSet.CommandSetID, 116 JDWPCommands.ReferenceTypeCommandSet.GetValuesCommand); 117 getValuesCommand.setNextValueAsReferenceTypeID(debuggeeRefTypeID); 118 getValuesCommand.setNextValueAsInt(1); 119 getValuesCommand.setNextValueAsFieldID(anotherClassCheckedFieldID); 120 ReplyPacket getValuesReply = debuggeeWrapper.vmMirror.performCommand(getValuesCommand); 121 short errorCode = getValuesReply.getErrorCode(); 122 if ( errorCode != JDWPConstants.Error.NONE ) { 123 checkReplyPacket(getValuesReply, "ReferenceType::GetValues command", JDWPConstants.Error.INVALID_FIELDID); 124 logWriter.println("=> CHECK PASSED: Expected error (INVALID_FIELDID) is returned"); 125 synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE); 126 return; 127 } 128 logWriter.println 129 ("## FAILURE: ReferenceType::GetValues command does NOT return expected error - INVALID_FIELDID"); 130 131 // next is only for extra info 132 //int returnedValuesNumber = 133 getValuesReply.getNextValueAsInt(); 134 Value fieldValue = getValuesReply.getNextValueAsValue(); 135 byte fieldTag = fieldValue.getTag(); 136 logWriter.println("## Returned value tag = " + fieldTag 137 + "(" + JDWPConstants.Tag.getName(fieldTag) + ")"); 138 if ( fieldTag == JDWPConstants.Tag.INT_TAG ) { 139 int intValue = fieldValue.getIntValue(); 140 logWriter.println("## Returned value = " + intValue); 141 } 142 synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE); 143 fail("ReferenceType::GetValues command does NOT return expected error - INVALID_FIELDID"); 144 } 145 } 146