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 10.03.2005
026: */package org.apache.harmony.jpda.tests.jdwp.ReferenceType;
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 ReferenceType.ClassLoader command for NON-static fields.
038: */
039: public class GetValues002Test extends JDWPSyncTestCase {
040:
041: static final int testStatusPassed = 0;
042: static final int testStatusFailed = -1;
043: static final String this CommandName = "ReferenceType.GetValues command";
044: static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues002Debuggee;";
045:
046: protected String getDebuggeeClassName() {
047: return "org.apache.harmony.jpda.tests.jdwp.ReferenceType.GetValues002Debuggee";
048: }
049:
050: /**
051: * This test exercises ReferenceType.GetValues command for NON-static fields.
052: * <BR>The test starts GetValues002Debuggee class, requests referenceTypeId
053: * for this class by VirtualMachine.ClassesBySignature command, then
054: * performs ReferenceType.Fields command and gets fieldIDs for checked fields
055: * which are non static.
056: * Then test performs ReferenceType.GetValues command for checked fields and checks
057: * that command returns INVALID_FIELDID error.
058: */
059: public void testGetValues002() {
060: String this TestName = "testGetValues002";
061: logWriter.println("==> " + this TestName + " for "
062: + this CommandName + ": START...");
063: synchronizer
064: .receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
065:
066: long refTypeID = getClassIDBySignature(debuggeeSignature);
067:
068: logWriter.println("=> Debuggee class = "
069: + getDebuggeeClassName());
070: logWriter.println("=> referenceTypeID for Debuggee class = "
071: + refTypeID);
072:
073: String checkedFieldNames[] = { "nonStaticLongField",
074: "nonStaticIntField", "nonStaticStringField",
075: "nonStaticObjectField", "nonStaticBooleanField",
076: "nonStaticByteField", "nonStaticCharField",
077: "nonStaticShortField", "nonStaticFloatField",
078: "nonStaticDoubleField", "nonStaticArrayField", };
079:
080: long checkedFieldIDs[] = checkFields(refTypeID,
081: checkedFieldNames);
082: int checkedFieldsNumber = checkedFieldNames.length;
083:
084: logWriter.println("=> CHECK: send " + this CommandName
085: + " and check reply...");
086: CommandPacket getValuesCommand = new CommandPacket(
087: JDWPCommands.ReferenceTypeCommandSet.CommandSetID,
088: JDWPCommands.ReferenceTypeCommandSet.GetValuesCommand);
089: getValuesCommand.setNextValueAsReferenceTypeID(refTypeID);
090: getValuesCommand.setNextValueAsInt(checkedFieldsNumber);
091: for (int k = 0; k < checkedFieldsNumber; k++) {
092: getValuesCommand.setNextValueAsFieldID(checkedFieldIDs[k]);
093: }
094:
095: ReplyPacket getValuesReply = debuggeeWrapper.vmMirror
096: .performCommand(getValuesCommand);
097: getValuesCommand = null;
098:
099: short errorCode = getValuesReply.getErrorCode();
100: if (errorCode != JDWPConstants.Error.NONE) {
101: if (errorCode != JDWPConstants.Error.INVALID_FIELDID) {
102: logWriter.println("## Reply packet CHECK: FAILURE: "
103: + this CommandName
104: + " returns unexpected ERROR = " + errorCode
105: + "(" + JDWPConstants.Error.getName(errorCode)
106: + ")");
107: fail(this CommandName + " returned unexpected ERROR = "
108: + errorCode + "("
109: + JDWPConstants.Error.getName(errorCode) + ")");
110: }
111: logWriter
112: .println("=> CHECK PASSED: Expected error (INVALID_FIELDID) is returned");
113: synchronizer
114: .sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
115: logWriter.println("==> " + this TestName + " for "
116: + this CommandName + ": FINISH");
117: return;
118: }
119: logWriter.println("\n## FAILURE: " + this CommandName
120: + " does NOT return expected error - INVALID_FIELDID");
121:
122: // next is only for extra info
123: int returnedValuesNumber = getValuesReply.getNextValueAsInt();
124: logWriter.println("=> Returned values number = "
125: + returnedValuesNumber);
126: logWriter.println("=> CHECK for returned values...");
127: byte expectedFieldTags[] = { JDWPConstants.Tag.LONG_TAG,
128: JDWPConstants.Tag.INT_TAG,
129: JDWPConstants.Tag.OBJECT_TAG,
130: JDWPConstants.Tag.OBJECT_TAG,
131: JDWPConstants.Tag.BOOLEAN_TAG,
132: JDWPConstants.Tag.BYTE_TAG, JDWPConstants.Tag.CHAR_TAG,
133: JDWPConstants.Tag.SHORT_TAG,
134: JDWPConstants.Tag.FLOAT_TAG,
135: JDWPConstants.Tag.DOUBLE_TAG,
136: JDWPConstants.Tag.OBJECT_TAG, };
137:
138: for (int k = 0; k < returnedValuesNumber; k++) {
139: Value fieldValue = getValuesReply.getNextValueAsValue();
140: byte fieldTag = fieldValue.getTag();
141: logWriter
142: .println("\n=> Check for returned value for field: "
143: + checkedFieldNames[k] + " ...");
144: logWriter.println("=> Returned value tag = " + fieldTag
145: + "(" + JDWPConstants.Tag.getName(fieldTag) + ")");
146: if (fieldTag != expectedFieldTags[k]) {
147: break;
148: }
149: switch (fieldTag) {
150: case JDWPConstants.Tag.INT_TAG:
151: int intValue = fieldValue.getIntValue();
152: logWriter.println("=> Int value = " + intValue);
153: break;
154: case JDWPConstants.Tag.LONG_TAG:
155: long longValue = fieldValue.getLongValue();
156: logWriter.println("=> Long value = " + longValue);
157: break;
158: case JDWPConstants.Tag.OBJECT_TAG:
159: long objectIDValue = fieldValue.getLongValue();
160: logWriter.println("=> ObjectID value = "
161: + objectIDValue);
162: break;
163: case JDWPConstants.Tag.BOOLEAN_TAG:
164: boolean booleanValue = fieldValue.getBooleanValue();
165: logWriter.println("=> Boolean value = " + booleanValue);
166: break;
167: case JDWPConstants.Tag.BYTE_TAG:
168: byte byteValue = fieldValue.getByteValue();
169: logWriter.println("=> Byte value = " + byteValue);
170: break;
171: case JDWPConstants.Tag.CHAR_TAG:
172: char charValue = fieldValue.getCharValue();
173: logWriter.println("=> Char value = " + (int) charValue);
174: break;
175: case JDWPConstants.Tag.SHORT_TAG:
176: short shortValue = fieldValue.getShortValue();
177: logWriter.println("=> Short value = " + shortValue);
178: break;
179: case JDWPConstants.Tag.FLOAT_TAG:
180: float floatValue = fieldValue.getFloatValue();
181: logWriter.println("=> Float value = " + floatValue);
182: break;
183: case JDWPConstants.Tag.DOUBLE_TAG:
184: double doubleValue = fieldValue.getDoubleValue();
185: logWriter.println("=> Double value = " + doubleValue);
186: break;
187: }
188: }
189:
190: synchronizer
191: .sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
192: logWriter.println("==> " + this TestName + " for "
193: + this CommandName + ": FINISH");
194:
195: fail(this CommandName
196: + " does NOT return expected error - INVALID_FIELDID");
197: }
198:
199: public static void main(String[] args) {
200: junit.textui.TestRunner.run(GetValues002Test.class);
201: }
202: }
|