int returnedValuesNumber = getValuesReply.getNextValueAsInt();
logWriter.println("=> Returned values number = " + returnedValuesNumber);
assertEquals("Invalid number of values,", 1, returnedValuesNumber);
Value checkedObjectFieldValue = getValuesReply.getNextValueAsValue();
byte checkedObjectFieldTag = checkedObjectFieldValue.getTag();
logWriter.println("=> Returned field value tag for checked object= " + checkedObjectFieldTag
+ "(" + JDWPConstants.Tag.getName(checkedObjectFieldTag) + ")");
assertEquals("Invalid value tag for checked object,", JDWPConstants.Tag.OBJECT_TAG, checkedObjectFieldTag
, JDWPConstants.Tag.getName(JDWPConstants.Tag.OBJECT_TAG)
, JDWPConstants.Tag.getName(checkedObjectFieldTag));
long checkedObjectID = checkedObjectFieldValue.getLongValue();
logWriter.println("=> Returned checked ObjectID = " + checkedObjectID);
logWriter.println
("=> CHECK: send " + thisCommandName
+ " for this ObjectID for fields of different referenceTypes with with null values...");
CommandPacket checkedCommand = new CommandPacket(
JDWPCommands.ObjectReferenceCommandSet.CommandSetID,
JDWPCommands.ObjectReferenceCommandSet.GetValuesCommand);
checkedCommand.setNextValueAsObjectID(checkedObjectID);
checkedCommand.setNextValueAsInt(checkedFieldsNumber-1);
int fieldIndex = 1; // !!!
for (; fieldIndex < checkedFieldsNumber; fieldIndex++) {
checkedCommand.setNextValueAsFieldID(checkedFieldIDs[fieldIndex]);
}
ReplyPacket checkedReply =
debuggeeWrapper.vmMirror.performCommand(checkedCommand);
checkedCommand = null;
checkReplyPacket(checkedReply, thisCommandName);
returnedValuesNumber = checkedReply.getNextValueAsInt();
logWriter.println("=> Returned values number = " + returnedValuesNumber);
assertEquals("Invalid number of values,", checkedFieldsNumber - 1, returnedValuesNumber);
byte expectedFieldTags[] = {
JDWPConstants.Tag.ARRAY_TAG,
JDWPConstants.Tag.ARRAY_TAG,
JDWPConstants.Tag.OBJECT_TAG,
JDWPConstants.Tag.STRING_TAG,
JDWPConstants.Tag.THREAD_TAG,
JDWPConstants.Tag.THREAD_GROUP_TAG,
JDWPConstants.Tag.CLASS_OBJECT_TAG,
JDWPConstants.Tag.CLASS_LOADER_TAG,
};
logWriter.println("=> CHECK for returned values...");
for (int i = 0; i < returnedValuesNumber; i++) {
Value fieldValue = checkedReply.getNextValueAsValue();
byte fieldTag = fieldValue.getTag();
logWriter.println
("\n=> Check for returned value for field: " + checkedFieldNames[i+1] + " ...");
logWriter.println("=> Returned value tag = " + fieldTag
+ "(" + JDWPConstants.Tag.getName(fieldTag) + ")");
if ( (fieldTag != expectedFieldTags[i]) && (fieldTag != JDWPConstants.Tag.OBJECT_TAG) ) {
logWriter.println("\n## FAILURE: Unexpected value tag is returned");
logWriter.println("## Expected value tag = " + expectedFieldTags[i]
+ "(" + JDWPConstants.Tag.getName(expectedFieldTags[i]) + ")"
+ " or = " + JDWPConstants.Tag.OBJECT_TAG
+ "(" + JDWPConstants.Tag.getName(JDWPConstants.Tag.OBJECT_TAG) + ")");
fail("Unexpected value tag is returned");
}
long objectIDValue = fieldValue.getLongValue();
logWriter.println("=> ObjectId value = " + objectIDValue);
assertEquals("Invalid objectID value is returned,", 0, objectIDValue);
}
assertAllDataRead(checkedReply);