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.7 $
022: */
023:
024: /**
025: * Created on 28.02.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.SetValues command.
038: */
039: public class SetValuesTest extends JDWPSyncTestCase {
040:
041: static final int testStatusPassed = 0;
042: static final int testStatusFailed = -1;
043: static final String this CommandName = "ObjectReference.SetValues command";
044: static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValuesDebuggee;";
045:
046: protected String getDebuggeeClassName() {
047: return "org.apache.harmony.jpda.tests.jdwp.ObjectReference.SetValuesDebuggee";
048: }
049:
050: /**
051: * This test exercises ObjectReference.SetValues command.
052: * <BR>The test starts SetValuesDebuggee class, gets objectID
053: * as value of static field of this class which (field) represents checked object.
054: * Then for this objectID test executes ObjectReference.SetValues command for special
055: * set of fieldIDs and checks that command returns reply without any errors.
056: * <BR>Then test waits for Debuggee to check if set fields have expected values.
057: * If so test passes, otherwise - fails.
058: */
059: public void testSetValues001() {
060: String this TestName = "testSetValues001";
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[] = { "setValuesDebuggeeObject",
074: "intField", "longField", "objectField",
075: "staticIntField", "privateIntField", "finalIntField", };
076: long checkedFieldIDs[] = checkFields(refTypeID,
077: checkedFieldNames);
078: int checkedFieldsNumber = checkedFieldNames.length;
079:
080: logWriter
081: .println("=> Send ReferenceType::GetValues command and 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::GetValues 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: logWriter.println("=> CHECK: send " + this CommandName
121: + " for this ObjectID and check reply...");
122:
123: CommandPacket checkedCommand = new CommandPacket(
124: JDWPCommands.ObjectReferenceCommandSet.CommandSetID,
125: JDWPCommands.ObjectReferenceCommandSet.SetValuesCommand);
126: checkedCommand.setNextValueAsObjectID(checkedObjectID);
127: checkedCommand.setNextValueAsInt(checkedFieldsNumber - 1);
128: int fieldIndex = 1; // !!!
129: for (; fieldIndex < checkedFieldsNumber; fieldIndex++) {
130: checkedCommand
131: .setNextValueAsFieldID(checkedFieldIDs[fieldIndex]);
132: switch (fieldIndex) {
133: case 1: // intField
134: checkedCommand.setNextValueAsInt(1111);
135: break;
136: case 2: // longField
137: checkedCommand.setNextValueAsLong(22222222);
138: break;
139: case 3: // objectField
140: checkedCommand.setNextValueAsObjectID(checkedObjectID);
141: break;
142: case 4: // staticIntField
143: checkedCommand.setNextValueAsInt(5555);
144: break;
145: case 5: // privateIntField
146: checkedCommand.setNextValueAsInt(7777);
147: break;
148: case 6: // finalIntField
149: checkedCommand.setNextValueAsInt(6666);
150: break;
151: }
152: }
153: ReplyPacket checkedReply = debuggeeWrapper.vmMirror
154: .performCommand(checkedCommand);
155: checkedCommand = null;
156: checkReplyPacket(checkedReply, this CommandName);
157:
158: logWriter.println("=> Reply was received without any Errors");
159: logWriter
160: .println("=> Wait for Debuggee's status about check for set fields...");
161: synchronizer
162: .sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
163: boolean debuggeeStatus = synchronizer.receiveMessage("PASSED");
164: if (!debuggeeStatus) {
165: logWriter.println("## " + this TestName
166: + ": Debuggee returned status FAILED");
167: fail("Debuggee returned status FAILED");
168: } else {
169: logWriter.println("=> " + this TestName
170: + ": Debuggee returned status PASSED");
171: }
172:
173: assertAllDataRead(checkedReply);
174:
175: logWriter.println("==> " + this TestName + " for "
176: + this CommandName + ": FINISH");
177: }
178:
179: public static void main(String[] args) {
180: junit.textui.TestRunner.run(SetValuesTest.class);
181: }
182: }
|