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 18.02.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.ReplyPacket;
031: import org.apache.harmony.jpda.tests.jdwp.share.JDWPSyncTestCase;
032: import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
033:
034: /**
035: * JDWP Unit test for ReferenceType.Fields command.
036: */
037: public class FieldsTest extends JDWPSyncTestCase {
038:
039: static final int testStatusPassed = 0;
040: static final int testStatusFailed = -1;
041: static final String this CommandName = "ReferenceType.Fields command";
042: static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ReferenceType/FieldsDebuggee;";
043:
044: protected String getDebuggeeClassName() {
045: return "org.apache.harmony.jpda.tests.jdwp.ReferenceType.FieldsDebuggee";
046: }
047:
048: /**
049: * This testcase exercises ReferenceType.Fields command.
050: * <BR>The test starts FieldsDebuggee class, requests referenceTypeId
051: * for this class by VirtualMachine.ClassesBySignature command, then
052: * performs ReferenceType.Fields command and checks that returned
053: * list of fields corresponds to expected list with expected attributes.
054: */
055: public void testFields001() {
056: String this TestName = "testFields001";
057: logWriter.println("==> " + this TestName + " for "
058: + this CommandName + ": START...");
059: int testStatus = testStatusPassed;
060: synchronizer
061: .receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
062:
063: long refTypeID = getClassIDBySignature(debuggeeSignature);
064:
065: logWriter.println("=> Debuggee class = "
066: + getDebuggeeClassName());
067: logWriter.println("=> referenceTypeID for Debuggee class = "
068: + refTypeID);
069: logWriter.println("=> CHECK: send " + this CommandName
070: + " and check reply...");
071:
072: CommandPacket fieldsCommand = new CommandPacket(
073: JDWPCommands.ReferenceTypeCommandSet.CommandSetID,
074: JDWPCommands.ReferenceTypeCommandSet.FieldsCommand);
075: fieldsCommand.setNextValueAsReferenceTypeID(refTypeID);
076:
077: ReplyPacket fieldsReply = debuggeeWrapper.vmMirror
078: .performCommand(fieldsCommand);
079: fieldsCommand = null;
080: checkReplyPacket(fieldsReply, this CommandName);
081:
082: int returnedFieldsNumber = fieldsReply.getNextValueAsInt();
083: logWriter.println("=> Returned fields number = "
084: + returnedFieldsNumber);
085:
086: String fieldNames[] = { "staticIntField", "stringField",
087: "objectField" };
088:
089: String fieldSignatures[] = { "I", "Ljava/lang/String;",
090: "Ljava/lang/Object;" };
091:
092: int fieldModifiers[] = { 0x8, 0x0, 0x0 };
093:
094: boolean fieldFound[] = { false, false, false };
095: int expectedFieldsNumber = fieldNames.length;
096: int fieldSyntheticFlag = 0xf0000000;
097: String failMessage = null;
098:
099: logWriter.println("=> CHECK for all expected fields...");
100: for (int i = 0; i < returnedFieldsNumber; i++) {
101: long returnedFieldID = fieldsReply.getNextValueAsFieldID();
102: String returnedFieldName = fieldsReply
103: .getNextValueAsString();
104: String returnedFieldSignature = fieldsReply
105: .getNextValueAsString();
106: int returnedFieldModifiers = fieldsReply
107: .getNextValueAsInt();
108: logWriter.println("\n=> Field ID = " + returnedFieldID);
109: logWriter.println("=> Field name = " + returnedFieldName);
110: logWriter.println("=> Field signature = "
111: + returnedFieldSignature);
112: logWriter.println("=> Field modifiers = 0x"
113: + Integer.toHexString(returnedFieldModifiers));
114: if ((returnedFieldModifiers & fieldSyntheticFlag) == fieldSyntheticFlag) {
115: continue; // do not check synthetic fields
116: }
117: int k = 0;
118: for (; k < expectedFieldsNumber; k++) {
119: if (!fieldNames[k].equals(returnedFieldName)) {
120: continue;
121: }
122: if (fieldFound[k]) {
123: logWriter
124: .println("\n## FAILURE: The field is found repeatedly in the list");
125: logWriter.println("## Field name = "
126: + returnedFieldName);
127: testStatus = testStatusFailed;
128: failMessage = "The field is found repeatedly in the list: "
129: + returnedFieldName;
130: break;
131: }
132: fieldFound[k] = true;
133: if (!fieldSignatures[k].equals(returnedFieldSignature)) {
134: logWriter
135: .println("\n## FAILURE: Unexpected field signature is returned:");
136: logWriter.println("## Field name = "
137: + returnedFieldName);
138: logWriter.println("## Expected signature = "
139: + fieldSignatures[k]);
140: logWriter.println("## Returned signature = "
141: + returnedFieldSignature);
142: testStatus = testStatusFailed;
143: failMessage = "Unexpected signature is returned for field: "
144: + returnedFieldName
145: + ", expected: "
146: + fieldSignatures[k]
147: + ", returned: "
148: + returnedFieldSignature;
149: }
150: if (fieldModifiers[k] != returnedFieldModifiers) {
151: logWriter
152: .println("\n## FAILURE: Unexpected field modifiers are returned:");
153: logWriter.println("## Field name = "
154: + returnedFieldName);
155: logWriter.println("## Expected modifiers = 0x"
156: + Integer.toHexString(fieldModifiers[k]));
157: logWriter
158: .println("## Returned modifiers = 0x"
159: + Integer
160: .toHexString(returnedFieldModifiers));
161: testStatus = testStatusFailed;
162: failMessage = "Unexpected modifiers are returned for field: "
163: + returnedFieldName
164: + ", expected: 0x"
165: + Integer.toHexString(fieldModifiers[k])
166: + ", returned: 0x"
167: + Integer
168: .toHexString(returnedFieldModifiers);
169: }
170: break;
171: }
172: if (k == expectedFieldsNumber) {
173: // returned field is not found out in the list of expected fields
174: logWriter
175: .println("\n## FAILURE: It is found out unexpected returned field:");
176: logWriter.println("## Field name = "
177: + returnedFieldName);
178: logWriter.println("## Field signature = "
179: + returnedFieldSignature);
180: logWriter.println("## Field modifiers = 0x"
181: + Integer.toHexString(returnedFieldModifiers));
182: testStatus = testStatusFailed;
183: failMessage = "Unexpected returned field: "
184: + returnedFieldName + ", signature = "
185: + returnedFieldSignature + ", modifiers = 0x"
186: + Integer.toHexString(returnedFieldModifiers);
187: }
188: }
189:
190: for (int k = 0; k < expectedFieldsNumber; k++) {
191: if (!fieldFound[k]) {
192: logWriter
193: .println("\n## FAILURE: Expected field is NOT found out in the list of retuned fields:");
194: logWriter.println("## Field name = " + fieldNames[k]);
195: testStatus = testStatusFailed;
196: failMessage = "Expected field is NOT found in the list of retuned fields: "
197: + fieldNames[k];
198: }
199: }
200:
201: if (testStatus == testStatusPassed) {
202: logWriter
203: .println("=> CHECK PASSED: All expected fields are found out and have expected attributes");
204: }
205:
206: synchronizer
207: .sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
208: logWriter.println("==> " + this TestName + " for "
209: + this CommandName + ": FINISH");
210: if (testStatus == testStatusFailed) {
211: fail(failMessage);
212: }
213:
214: assertAllDataRead(fieldsReply);
215: }
216:
217: public static void main(String[] args) {
218: junit.textui.TestRunner.run(FieldsTest.class);
219: }
220: }
|