001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: *
015: * See the License for the specific language governing permissions and
016: * limitations under the License.
017: */
018:
019: /**
020: * @author Anatoly F. Bondarenko
021: * @version $Revision: 1.5 $
022: */
023:
024: /**
025: * Created on 13.07.2005
026: */package org.apache.harmony.jpda.tests.jdwp.ObjectReference;
027:
028: import org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket;
029: import org.apache.harmony.jpda.tests.framework.jdwp.JDWPCommands;
030: import org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
031: import org.apache.harmony.jpda.tests.framework.jdwp.ReplyPacket;
032: import org.apache.harmony.jpda.tests.framework.jdwp.Value;
033: import org.apache.harmony.jpda.tests.jdwp.share.JDWPSyncTestCase;
034: import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
035:
036: /**
037: * JDWP Unit test for ObjectReference.GetValues command for Object fields with value=null.
038: */
039: public class GetValues003Test extends JDWPSyncTestCase {
040:
041: static final String this CommandName = "ObjectReference::GetValues command";
042: static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ObjectReference/GetValues003Debuggee;";
043:
044: protected String getDebuggeeClassName() {
045: return "org.apache.harmony.jpda.tests.jdwp.ObjectReference.GetValues003Debuggee";
046: }
047:
048: /**
049: * This test exercises ObjectReference.GetValues command for static fields.
050: * <BR>The test starts GetValues003Debuggee class, gets objectID
051: * as value of static field of this class which (field) represents checked object.
052: * Then for this objectID test executes ObjectReference.GetValues command for
053: * fields of different referenceTypes with value=null for all fields.
054: * The test expects the all returned values should be represented by expected
055: * JDWP tag with null value.
056: */
057: public void testGetValues003() {
058: String this TestName = "testGetValues003";
059: logWriter.println("==> " + this TestName + " for "
060: + this CommandName + ": START...");
061: synchronizer
062: .receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
063:
064: long refTypeID = getClassIDBySignature(debuggeeSignature);
065:
066: logWriter.println("=> Debuggee class = "
067: + getDebuggeeClassName());
068: logWriter.println("=> referenceTypeID for Debuggee class = "
069: + refTypeID);
070:
071: String checkedFieldNames[] = { "testedObject",
072:
073: "intArrayField", "objectArrayField", "objectField",
074: "stringField", "threadField", "threadGroupField",
075: "classField", "classLoaderField", };
076: long checkedFieldIDs[] = checkFields(refTypeID,
077: checkedFieldNames);
078: int checkedFieldsNumber = checkedFieldNames.length;
079:
080: logWriter
081: .println("=> Send ReferenceType::GetValues command and get ObjectID to check...");
082:
083: CommandPacket getValuesCommand = new CommandPacket(
084: JDWPCommands.ReferenceTypeCommandSet.CommandSetID,
085: JDWPCommands.ReferenceTypeCommandSet.GetValuesCommand);
086: getValuesCommand.setNextValueAsReferenceTypeID(refTypeID);
087: getValuesCommand.setNextValueAsInt(1);
088: getValuesCommand.setNextValueAsFieldID(checkedFieldIDs[0]);
089: ReplyPacket getValuesReply = debuggeeWrapper.vmMirror
090: .performCommand(getValuesCommand);
091: getValuesCommand = null;
092: checkReplyPacket(getValuesReply,
093: "ReferenceType::GetValue command");
094:
095: int returnedValuesNumber = getValuesReply.getNextValueAsInt();
096: logWriter.println("=> Returned values number = "
097: + returnedValuesNumber);
098: assertEquals("Invalid number of values,", 1,
099: returnedValuesNumber);
100:
101: Value checkedObjectFieldValue = getValuesReply
102: .getNextValueAsValue();
103: byte checkedObjectFieldTag = checkedObjectFieldValue.getTag();
104: logWriter
105: .println("=> Returned field value tag for checked object= "
106: + checkedObjectFieldTag
107: + "("
108: + JDWPConstants.Tag
109: .getName(checkedObjectFieldTag) + ")");
110: assertEquals(
111: "Invalid value tag for checked object,",
112: JDWPConstants.Tag.OBJECT_TAG,
113: checkedObjectFieldTag,
114: JDWPConstants.Tag.getName(JDWPConstants.Tag.OBJECT_TAG),
115: JDWPConstants.Tag.getName(checkedObjectFieldTag));
116:
117: long checkedObjectID = checkedObjectFieldValue.getLongValue();
118: logWriter.println("=> Returned checked ObjectID = "
119: + checkedObjectID);
120:
121: logWriter
122: .println("=> CHECK: send "
123: + this CommandName
124: + " for this ObjectID for fields of different referenceTypes with with null values...");
125:
126: CommandPacket checkedCommand = new CommandPacket(
127: JDWPCommands.ObjectReferenceCommandSet.CommandSetID,
128: JDWPCommands.ObjectReferenceCommandSet.GetValuesCommand);
129: checkedCommand.setNextValueAsObjectID(checkedObjectID);
130: checkedCommand.setNextValueAsInt(checkedFieldsNumber - 1);
131: int fieldIndex = 1; // !!!
132: for (; fieldIndex < checkedFieldsNumber; fieldIndex++) {
133: checkedCommand
134: .setNextValueAsFieldID(checkedFieldIDs[fieldIndex]);
135: }
136: ReplyPacket checkedReply = debuggeeWrapper.vmMirror
137: .performCommand(checkedCommand);
138: checkedCommand = null;
139:
140: checkReplyPacket(checkedReply, this CommandName);
141:
142: returnedValuesNumber = checkedReply.getNextValueAsInt();
143: logWriter.println("=> Returned values number = "
144: + returnedValuesNumber);
145: assertEquals("Invalid number of values,",
146: checkedFieldsNumber - 1, returnedValuesNumber);
147:
148: byte expectedFieldTags[] = { JDWPConstants.Tag.ARRAY_TAG,
149: JDWPConstants.Tag.ARRAY_TAG,
150: JDWPConstants.Tag.OBJECT_TAG,
151: JDWPConstants.Tag.STRING_TAG,
152: JDWPConstants.Tag.THREAD_TAG,
153: JDWPConstants.Tag.THREAD_GROUP_TAG,
154: JDWPConstants.Tag.CLASS_OBJECT_TAG,
155: JDWPConstants.Tag.CLASS_LOADER_TAG, };
156: logWriter.println("=> CHECK for returned values...");
157: for (int i = 0; i < returnedValuesNumber; i++) {
158: Value fieldValue = checkedReply.getNextValueAsValue();
159: byte fieldTag = fieldValue.getTag();
160: logWriter
161: .println("\n=> Check for returned value for field: "
162: + checkedFieldNames[i + 1] + " ...");
163: logWriter.println("=> Returned value tag = " + fieldTag
164: + "(" + JDWPConstants.Tag.getName(fieldTag) + ")");
165: if ((fieldTag != expectedFieldTags[i])
166: && (fieldTag != JDWPConstants.Tag.OBJECT_TAG)) {
167: logWriter
168: .println("\n## FAILURE: Unexpected value tag is returned");
169: logWriter.println("## Expected value tag = "
170: + expectedFieldTags[i]
171: + "("
172: + JDWPConstants.Tag
173: .getName(expectedFieldTags[i])
174: + ")"
175: + " or = "
176: + JDWPConstants.Tag.OBJECT_TAG
177: + "("
178: + JDWPConstants.Tag
179: .getName(JDWPConstants.Tag.OBJECT_TAG)
180: + ")");
181: fail("Unexpected value tag is returned");
182: }
183: long objectIDValue = fieldValue.getLongValue();
184: logWriter.println("=> ObjectId value = " + objectIDValue);
185: assertEquals("Invalid objectID value is returned,", 0,
186: objectIDValue);
187: }
188:
189: assertAllDataRead(checkedReply);
190: synchronizer
191: .sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
192: logWriter.println("==> " + this TestName + " for "
193: + this CommandName + ": OK.");
194: }
195:
196: public static void main(String[] args) {
197: junit.textui.TestRunner.run(GetValues003Test.class);
198: }
199: }
|