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 11.03.2005 25 */ 26 package org.apache.harmony.jpda.tests.jdwp.ObjectReference; 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 ObjectReference.GetValues command for static fields. 39 */ 40 public class GetValues002Test extends JDWPSyncTestCase { 41 42 static final String thisCommandName = "ObjectReference::GetValues command"; 43 static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ObjectReference/GetValues002Debuggee;"; 44 45 @Override 46 protected String getDebuggeeClassName() { 47 return "org.apache.harmony.jpda.tests.jdwp.ObjectReference.GetValues002Debuggee"; 48 } 49 50 /** 51 * This test exercises ObjectReference.GetValues command for static fields. 52 * <BR>The test starts GetValues002Debuggee class, gets objectID 53 * as value of static field of this class which (field) represents checked object. 54 * Then for this objectID test executes ObjectReference.GetValues command for special 55 * set of fieldIDs and checks that command returns expected jdwpTags for all checked 56 * fields and expected values for primitive fields. 57 */ 58 public void testGetValues002() { 59 String thisTestName = "testGetValues002"; 60 logWriter.println("==> " + thisTestName + " for " + thisCommandName + ": START..."); 61 synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY); 62 63 long refTypeID = getClassIDBySignature(debuggeeSignature); 64 65 logWriter.println("=> Debuggee class = " + getDebuggeeClassName()); 66 logWriter.println("=> referenceTypeID for Debuggee class = " + refTypeID); 67 68 String checkedFieldNames[] = { 69 "getValues002DebuggeeField", 70 71 "staticLongField", 72 "staticIntField", 73 "staticStringField", 74 "staticObjectField", 75 "staticBooleanField", 76 "staticByteField", 77 "staticCharField", 78 "staticShortField", 79 "staticFloatField", 80 "staticDoubleField", 81 "staticArrayField", 82 }; 83 long checkedFieldIDs[] = checkFields(refTypeID, checkedFieldNames); 84 int checkedFieldsNumber = checkedFieldNames.length; 85 86 logWriter.println 87 ("=> Send ReferenceType::GetValues command and and get ObjectID to check..."); 88 89 CommandPacket getValuesCommand = new CommandPacket( 90 JDWPCommands.ReferenceTypeCommandSet.CommandSetID, 91 JDWPCommands.ReferenceTypeCommandSet.GetValuesCommand); 92 getValuesCommand.setNextValueAsReferenceTypeID(refTypeID); 93 getValuesCommand.setNextValueAsInt(1); 94 getValuesCommand.setNextValueAsFieldID(checkedFieldIDs[0]); 95 96 ReplyPacket getValuesReply = debuggeeWrapper.vmMirror.performCommand(getValuesCommand); 97 getValuesCommand = null; 98 checkReplyPacket(getValuesReply, "ReferenceType::GetValues command"); 99 100 int returnedValuesNumber = getValuesReply.getNextValueAsInt(); 101 logWriter.println("=> Returned values number = " + returnedValuesNumber); 102 assertEquals("Invalid number of values,", 1, returnedValuesNumber); 103 104 Value checkedObjectFieldValue = getValuesReply.getNextValueAsValue(); 105 byte checkedObjectFieldTag = checkedObjectFieldValue.getTag(); 106 logWriter.println("=> Returned field value tag for checked object= " + checkedObjectFieldTag 107 + "(" + JDWPConstants.Tag.getName(checkedObjectFieldTag) + ")"); 108 assertEquals("Invalid value tag for checked object,", JDWPConstants.Tag.OBJECT_TAG, checkedObjectFieldTag 109 , JDWPConstants.Tag.getName(JDWPConstants.Tag.OBJECT_TAG) 110 , JDWPConstants.Tag.getName(checkedObjectFieldTag)); 111 112 long checkedObjectID = checkedObjectFieldValue.getLongValue(); 113 logWriter.println("=> Returned checked ObjectID = " + checkedObjectID); 114 logWriter.println("=> CHECK: send " + thisCommandName + " for this ObjectID and check reply..."); 115 116 CommandPacket checkedCommand = new CommandPacket( 117 JDWPCommands.ObjectReferenceCommandSet.CommandSetID, 118 JDWPCommands.ObjectReferenceCommandSet.GetValuesCommand); 119 checkedCommand.setNextValueAsObjectID(checkedObjectID); 120 checkedCommand.setNextValueAsInt(checkedFieldsNumber-1); 121 int fieldIndex = 1; // !!! 122 for (; fieldIndex < checkedFieldsNumber; fieldIndex++) { 123 checkedCommand.setNextValueAsFieldID(checkedFieldIDs[fieldIndex]); 124 } 125 126 ReplyPacket checkedReply = debuggeeWrapper.vmMirror.performCommand(checkedCommand); 127 checkedCommand = null; 128 checkReplyPacket(checkedReply, thisCommandName); 129 130 returnedValuesNumber = checkedReply.getNextValueAsInt(); 131 logWriter.println("=> Returned values number = " + returnedValuesNumber); 132 assertEquals("Invalid number of values,", checkedFieldsNumber - 1, returnedValuesNumber); 133 134 byte expectedFieldTags[] = { 135 0, // dummy 136 JDWPConstants.Tag.LONG_TAG, 137 JDWPConstants.Tag.INT_TAG, 138 JDWPConstants.Tag.STRING_TAG, 139 JDWPConstants.Tag.OBJECT_TAG, 140 JDWPConstants.Tag.BOOLEAN_TAG, 141 JDWPConstants.Tag.BYTE_TAG, 142 JDWPConstants.Tag.CHAR_TAG, 143 JDWPConstants.Tag.SHORT_TAG, 144 JDWPConstants.Tag.FLOAT_TAG, 145 JDWPConstants.Tag.DOUBLE_TAG, 146 JDWPConstants.Tag.ARRAY_TAG, 147 }; 148 149 logWriter.println("=> CHECK for returned values..."); 150 fieldIndex = 1; // !!! 151 for (; fieldIndex < checkedFieldsNumber; fieldIndex++) { 152 Value fieldValue = checkedReply.getNextValueAsValue(); 153 byte fieldTag = fieldValue.getTag(); 154 logWriter.println 155 ("\n=> Check for returned value for field: " + checkedFieldNames[fieldIndex] + " ..."); 156 logWriter.println("=> Returned value tag = " + fieldTag 157 + "(" + JDWPConstants.Tag.getName(fieldTag) + ")"); 158 159 assertEquals("Invalid value tag is returned,", expectedFieldTags[fieldIndex], fieldTag 160 , JDWPConstants.Tag.getName(expectedFieldTags[fieldIndex]) 161 , JDWPConstants.Tag.getName(fieldTag)); 162 163 switch ( fieldTag ) { 164 case JDWPConstants.Tag.INT_TAG: 165 int intValue = fieldValue.getIntValue(); 166 logWriter.println("=> Int value = " + intValue); 167 int expectedIntValue = 99; 168 assertEquals("Invalid int value,", expectedIntValue, intValue); 169 break; 170 case JDWPConstants.Tag.LONG_TAG: 171 long longValue = fieldValue.getLongValue(); 172 logWriter.println("=> Long value = " + longValue); 173 long expectedLongValue = 2147483647; 174 assertEquals("Invalid long value,", expectedLongValue, longValue); 175 break; 176 case JDWPConstants.Tag.STRING_TAG: 177 long stringIDValue = fieldValue.getLongValue(); 178 logWriter.println("=> StringID value = " + stringIDValue); 179 break; 180 case JDWPConstants.Tag.OBJECT_TAG: 181 long objectIDValue = fieldValue.getLongValue(); 182 logWriter.println("=> ObjectID value = " + objectIDValue); 183 break; 184 case JDWPConstants.Tag.BOOLEAN_TAG: 185 boolean booleanValue = fieldValue.getBooleanValue(); 186 logWriter.println("=> Boolean value = " + booleanValue); 187 boolean expectedBooleanValue = true; 188 assertEquals("Invalid boolean value,", expectedBooleanValue, booleanValue); 189 break; 190 case JDWPConstants.Tag.BYTE_TAG: 191 byte byteValue = fieldValue.getByteValue(); 192 logWriter.println("=> Byte value = " + byteValue); 193 byte expectedByteValue = 1; 194 assertEquals("Invalid byte value,", expectedByteValue, byteValue); 195 break; 196 case JDWPConstants.Tag.CHAR_TAG: 197 char charValue = fieldValue.getCharValue(); 198 logWriter.println("=> Char value = " + (int)charValue); 199 char expectedCharValue = 97; 200 assertEquals("Invalid char value,", expectedCharValue, charValue); 201 break; 202 case JDWPConstants.Tag.SHORT_TAG: 203 short shortValue = fieldValue.getShortValue(); 204 logWriter.println("=> Short value = " + shortValue); 205 short expectedShortValue = 2; 206 assertEquals("Invalid short value,", expectedShortValue, shortValue); 207 break; 208 case JDWPConstants.Tag.FLOAT_TAG: 209 float floatValue = fieldValue.getFloatValue(); 210 logWriter.println("=> Float value = " + floatValue); 211 float expectedFloatValue = 2; 212 assertEquals("Invalid float value,", expectedFloatValue, floatValue, 0); 213 break; 214 case JDWPConstants.Tag.DOUBLE_TAG: 215 double doubleValue = fieldValue.getDoubleValue(); 216 logWriter.println("=> Double value = " + doubleValue); 217 double expectedDoubleValue = 3.1; 218 assertEquals("Invalid double value,", expectedDoubleValue, doubleValue, 0); 219 break; 220 case JDWPConstants.Tag.ARRAY_TAG: 221 long arrayIDValue = fieldValue.getLongValue(); 222 logWriter.println("=> ArrayID value = " + arrayIDValue); 223 break; 224 } 225 } 226 227 assertAllDataRead(checkedReply); 228 229 logWriter.println 230 ("=> CHECK PASSED: All expected field values are got and have expected attributes"); 231 232 synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE); 233 logWriter.println("==> " + thisTestName + " for " + thisCommandName + ": FINISH"); 234 } 235 } 236