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.4 $
022: */
023:
024: /**
025: * Created on 24.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.Interfaces command.
036: */
037: public class InterfacesTest extends JDWPSyncTestCase {
038:
039: static final int testStatusPassed = 0;
040: static final int testStatusFailed = -1;
041: static final String this CommandName = "ReferenceType.Interfaces command";
042: static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ReferenceType/InterfacesDebuggee;";
043:
044: protected String getDebuggeeClassName() {
045: return "org.apache.harmony.jpda.tests.jdwp.ReferenceType.InterfacesDebuggee";
046: }
047:
048: /**
049: * This testcase exercises ReferenceType.Interfaces command.
050: * <BR>The test starts InterfacesDebuggee class, requests referenceTypeId
051: * for this class by VirtualMachine.ClassesBySignature command, then
052: * performs ReferenceType.Interfaces command and checks that returned
053: * list of interfaces corresponds to expected list.
054: */
055: public void testInterfaces001() {
056: String this TestName = "testInterfaces001";
057: logWriter.println("==> " + this TestName + " for "
058: + this CommandName + ": START...");
059: synchronizer
060: .receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
061:
062: String checkedClassSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ReferenceType/CheckedClass_Interfaces001;";
063: long refTypeID = getClassIDBySignature(checkedClassSignature);
064:
065: logWriter.println("=> Debuggee class = "
066: + getDebuggeeClassName());
067: logWriter
068: .println("=> Checked class = org.apache.harmony.jpda.tests.jdwp.ReferenceType.CheckedClass_Interfaces001");
069: logWriter.println("=> referenceTypeID for Checked class = "
070: + refTypeID);
071: logWriter.println("=> CHECK: send " + this CommandName
072: + " for Checked class and check reply...");
073:
074: CommandPacket checkedCommand = new CommandPacket(
075: JDWPCommands.ReferenceTypeCommandSet.CommandSetID,
076: JDWPCommands.ReferenceTypeCommandSet.InterfacesCommand);
077: checkedCommand.setNextValueAsReferenceTypeID(refTypeID);
078: ReplyPacket checkedReply = debuggeeWrapper.vmMirror
079: .performCommand(checkedCommand);
080: checkedCommand = null;
081: checkReplyPacket(checkedReply, this CommandName);
082:
083: int returnedInterfacesNumber = checkedReply.getNextValueAsInt();
084: logWriter.println("=> Returned interfaces number = "
085: + returnedInterfacesNumber);
086:
087: String interfacesSignatures[] = {
088: "Lorg/apache/harmony/jpda/tests/jdwp/ReferenceType/Interface_1_Interfaces001;",
089: "Lorg/apache/harmony/jpda/tests/jdwp/ReferenceType/Interface_2_Interfaces001;", };
090:
091: boolean interfacesFound[] = { false, false, };
092:
093: int expectedInterfacesNumber = interfacesSignatures.length;
094:
095: logWriter.println("=> CHECK for all expected interfaces...");
096: for (int i = 0; i < returnedInterfacesNumber; i++) {
097: logWriter.println("\n=> Check for returned interface[" + i
098: + "] ...");
099: long returnedInterfaceID = checkedReply
100: .getNextValueAsReferenceTypeID();
101: logWriter.println("=> RefTypeID of interface = "
102: + returnedInterfaceID);
103: logWriter.println("=> Get signature for interface...");
104:
105: CommandPacket signatureCommand = new CommandPacket(
106: JDWPCommands.ReferenceTypeCommandSet.CommandSetID,
107: JDWPCommands.ReferenceTypeCommandSet.SignatureCommand);
108: signatureCommand
109: .setNextValueAsReferenceTypeID(returnedInterfaceID);
110: ReplyPacket signatureReply = debuggeeWrapper.vmMirror
111: .performCommand(signatureCommand);
112: signatureCommand = null;
113: checkReplyPacket(signatureReply,
114: "ReferenceType::Signature command");
115:
116: String returnedSignature = signatureReply
117: .getNextValueAsString();
118: logWriter.println("=> Signature of interface = "
119: + returnedSignature);
120: signatureReply = null;
121: logWriter.println("=> Signature of interface = "
122: + returnedSignature);
123:
124: int k = 0;
125: for (; k < expectedInterfacesNumber; k++) {
126: if (!interfacesSignatures[k].equals(returnedSignature)) {
127: continue;
128: }
129: if (interfacesFound[k]) {
130: logWriter
131: .println("\n## FAILURE: This interface is found repeatedly in the list");
132: fail("This interface is found repeatedly in the list");
133: break;
134: }
135: interfacesFound[k] = true;
136: break;
137: }
138: if (k == expectedInterfacesNumber) {
139: // returned interface is not found out in the list of expected interfaces
140: logWriter
141: .println("\n## FAILURE: It is unexpected interface");
142: fail("It is unexpected interface");
143: }
144: }
145: for (int k = 0; k < expectedInterfacesNumber; k++) {
146: if (!interfacesFound[k]) {
147: logWriter
148: .println("\n## FAILURE: Expected interface is NOT found in the returned list:");
149: logWriter.println("=> Signature of interface = "
150: + interfacesSignatures[k]);
151: fail("Expected interface is NOT found in the returned list: "
152: + interfacesSignatures[k]);
153: }
154: }
155:
156: assertAllDataRead(checkedReply);
157:
158: logWriter
159: .println("\n=> CHECK PASSED: All expected interfaces are found out");
160:
161: synchronizer
162: .sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
163: logWriter.println("\n==> " + this TestName + " for "
164: + this CommandName + ": OK.");
165: }
166:
167: public static void main(String[] args) {
168: junit.textui.TestRunner.run(InterfacesTest.class);
169: }
170: }
|