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.6 $
022: */
023:
024: /**
025: * Created on 17.03.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 with value with incorrect Type.
038: */
039: public class SetValues003Test 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/SetValues003Debuggee;";
045:
046: protected String getDebuggeeClassName() {
047: return "org.apache.harmony.jpda.tests.jdwp.ObjectReference.SetValues003Debuggee";
048: }
049:
050: /**
051: * This test exercises ObjectReference.SetValues command with value with incorrect Type.
052: * <BR>The test starts SetValues003Debuggee 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
055: * fieldID of referenceType but with value of other referenceType.
056: * <BR>The test expects the field should not be set.
057: */
058: public void testSetValues003() {
059:
060: String this TestName = "testSetValues003";
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[] = { "setValues003DebuggeeObject",
074: "objectField", };
075: long checkedFieldIDs[] = checkFields(refTypeID,
076: checkedFieldNames);
077: int checkedFieldsNumber = checkedFieldNames.length;
078:
079: logWriter
080: .println("=> Send ReferenceType::GetValues command and get ObjectID to check...");
081:
082: CommandPacket getValuesCommand = new CommandPacket(
083: JDWPCommands.ReferenceTypeCommandSet.CommandSetID,
084: JDWPCommands.ReferenceTypeCommandSet.GetValuesCommand);
085: getValuesCommand.setNextValueAsReferenceTypeID(refTypeID);
086: getValuesCommand.setNextValueAsInt(1);
087: getValuesCommand.setNextValueAsFieldID(checkedFieldIDs[0]);
088: ReplyPacket getValuesReply = debuggeeWrapper.vmMirror
089: .performCommand(getValuesCommand);
090: getValuesCommand = null;
091: checkReplyPacket(getValuesReply,
092: "ReferenceType::GetValues command");
093:
094: int returnedValuesNumber = getValuesReply.getNextValueAsInt();
095: logWriter.println("=> Returned values number = "
096: + returnedValuesNumber);
097: assertEquals("Invalid number of values,", 1,
098: returnedValuesNumber);
099:
100: Value checkedObjectFieldValue = getValuesReply
101: .getNextValueAsValue();
102: byte checkedObjectFieldTag = checkedObjectFieldValue.getTag();
103: logWriter
104: .println("=> Returned field value tag for checked object= "
105: + checkedObjectFieldTag
106: + "("
107: + JDWPConstants.Tag
108: .getName(checkedObjectFieldTag) + ")");
109: assertEquals(
110: "Invalid value tag for checked object,",
111: JDWPConstants.Tag.OBJECT_TAG,
112: checkedObjectFieldTag,
113: JDWPConstants.Tag.getName(JDWPConstants.Tag.OBJECT_TAG),
114: JDWPConstants.Tag.getName(checkedObjectFieldTag));
115:
116: long checkedObjectID = checkedObjectFieldValue.getLongValue();
117: logWriter.println("=> Returned checked ObjectID = "
118: + checkedObjectID);
119: logWriter
120: .println("=> CHECK: send "
121: + this CommandName
122: + " for this ObjectID with value which has other referenceType than field to set...");
123:
124: CommandPacket checkedCommand = new CommandPacket(
125: JDWPCommands.ObjectReferenceCommandSet.CommandSetID,
126: JDWPCommands.ObjectReferenceCommandSet.SetValuesCommand);
127: checkedCommand.setNextValueAsObjectID(checkedObjectID);
128: checkedCommand.setNextValueAsInt(checkedFieldsNumber - 1);
129: int fieldIndex = 1;
130: for (; fieldIndex < checkedFieldsNumber; fieldIndex++) {
131: checkedCommand
132: .setNextValueAsFieldID(checkedFieldIDs[fieldIndex]);
133: switch (fieldIndex) {
134: case 1: // objectField
135: checkedCommand.setNextValueAsObjectID(checkedObjectID);
136: break;
137: }
138: }
139: ReplyPacket checkedReply = debuggeeWrapper.vmMirror
140: .performCommand(checkedCommand);
141: checkedCommand = null;
142:
143: short errorCode = checkedReply.getErrorCode();
144: if (errorCode == JDWPConstants.Error.NONE) {
145: logWriter.println("=> " + this CommandName
146: + " run without any ERROR!");
147: } else {
148: logWriter.println("=> " + this CommandName
149: + " returns ERROR = " + errorCode + "("
150: + JDWPConstants.Error.getName(errorCode) + ")");
151: }
152:
153: logWriter
154: .println("=> Wait for Debuggee's status about check for set field...");
155: synchronizer
156: .sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
157: boolean debuggeeStatus = synchronizer.receiveMessage("PASSED");
158: if (!debuggeeStatus) {
159: logWriter.println("## " + this TestName
160: + ": Debuggee returned status FAILED");
161: fail("Debuggee returned status FAILED");
162: } else {
163: logWriter.println("=> " + this TestName
164: + ": Debuggee returned status PASSED");
165: }
166:
167: logWriter.println("==> " + this TestName + " for "
168: + this CommandName + ": OK.");
169: }
170:
171: public static void main(String[] args) {
172: junit.textui.TestRunner.run(SetValues003Test.class);
173: }
174: }
|