1/* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 */ 18 19/** 20 * @author Anatoly F. Bondarenko 21 */ 22 23/** 24 * Created on 24.02.2005 25 */ 26package org.apache.harmony.jpda.tests.jdwp.ReferenceType; 27 28import org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket; 29import org.apache.harmony.jpda.tests.framework.jdwp.JDWPCommands; 30import org.apache.harmony.jpda.tests.framework.jdwp.ReplyPacket; 31import org.apache.harmony.jpda.tests.jdwp.share.JDWPSyncTestCase; 32import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer; 33 34 35/** 36 * JDWP Unit test for ReferenceType.Interfaces command. 37 */ 38public class InterfacesTest extends JDWPSyncTestCase { 39 40 static final int testStatusPassed = 0; 41 static final int testStatusFailed = -1; 42 static final String thisCommandName = "ReferenceType.Interfaces command"; 43 static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ReferenceType/InterfacesDebuggee;"; 44 45 @Override 46 protected String getDebuggeeClassName() { 47 return "org.apache.harmony.jpda.tests.jdwp.ReferenceType.InterfacesDebuggee"; 48 } 49 50 /** 51 * This testcase exercises ReferenceType.Interfaces command. 52 * <BR>The test starts InterfacesDebuggee class, requests referenceTypeId 53 * for this class by VirtualMachine.ClassesBySignature command, then 54 * performs ReferenceType.Interfaces command and checks that returned 55 * list of interfaces corresponds to expected list. 56 */ 57 public void testInterfaces001() { 58 String thisTestName = "testInterfaces001"; 59 logWriter.println("==> " + thisTestName + " for " + thisCommandName + ": START..."); 60 synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY); 61 62 String checkedClassSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ReferenceType/CheckedClass_Interfaces001;"; 63 long refTypeID = getClassIDBySignature(checkedClassSignature); 64 65 logWriter.println("=> Debuggee class = " + getDebuggeeClassName()); 66 logWriter.println("=> Checked class = org.apache.harmony.jpda.tests.jdwp.ReferenceType.CheckedClass_Interfaces001"); 67 logWriter.println("=> referenceTypeID for Checked class = " + refTypeID); 68 logWriter.println("=> CHECK: send " + thisCommandName + " for Checked class and check reply..."); 69 70 CommandPacket checkedCommand = new CommandPacket( 71 JDWPCommands.ReferenceTypeCommandSet.CommandSetID, 72 JDWPCommands.ReferenceTypeCommandSet.InterfacesCommand); 73 checkedCommand.setNextValueAsReferenceTypeID(refTypeID); 74 ReplyPacket checkedReply = 75 debuggeeWrapper.vmMirror.performCommand(checkedCommand); 76 checkedCommand = null; 77 checkReplyPacket(checkedReply, thisCommandName); 78 79 int returnedInterfacesNumber = checkedReply.getNextValueAsInt(); 80 logWriter.println("=> Returned interfaces number = " + returnedInterfacesNumber); 81 82 String interfacesSignatures[] = { 83 "Lorg/apache/harmony/jpda/tests/jdwp/ReferenceType/Interface_1_Interfaces001;", 84 "Lorg/apache/harmony/jpda/tests/jdwp/ReferenceType/Interface_2_Interfaces001;", 85 }; 86 87 boolean interfacesFound[] = { 88 false, 89 false, 90 }; 91 92 int expectedInterfacesNumber = interfacesSignatures.length; 93 94 logWriter.println("=> CHECK for all expected interfaces..."); 95 for (int i=0; i < returnedInterfacesNumber; i++) { 96 logWriter.println("\n=> Check for returned interface[" + i + "] ..."); 97 long returnedInterfaceID = checkedReply.getNextValueAsReferenceTypeID(); 98 logWriter.println("=> RefTypeID of interface = " + returnedInterfaceID); 99 logWriter.println("=> Get signature for interface..."); 100 101 CommandPacket signatureCommand = new CommandPacket( 102 JDWPCommands.ReferenceTypeCommandSet.CommandSetID, 103 JDWPCommands.ReferenceTypeCommandSet.SignatureCommand); 104 signatureCommand.setNextValueAsReferenceTypeID(returnedInterfaceID); 105 ReplyPacket signatureReply = 106 debuggeeWrapper.vmMirror.performCommand(signatureCommand); 107 signatureCommand = null; 108 checkReplyPacket(signatureReply, "ReferenceType::Signature command"); 109 110 String returnedSignature = signatureReply.getNextValueAsString(); 111 logWriter.println("=> Signature of interface = " + returnedSignature); 112 signatureReply = null; 113 logWriter.println("=> Signature of interface = " + returnedSignature); 114 115 int k = 0; 116 for (; k < expectedInterfacesNumber; k++) { 117 if ( ! interfacesSignatures[k].equals(returnedSignature)) { 118 continue; 119 } 120 if ( interfacesFound[k] ) { 121 logWriter.println("\n## FAILURE: This interface is found repeatedly in the list"); 122 fail("This interface is found repeatedly in the list"); 123 break; 124 } 125 interfacesFound[k] = true; 126 break; 127 } 128 if ( k == expectedInterfacesNumber ) { 129 // returned interface is not found out in the list of expected interfaces 130 logWriter.println("\n## FAILURE: It is unexpected interface"); 131 fail("It is unexpected interface"); 132 } 133 } 134 for (int k=0; k < expectedInterfacesNumber; k++) { 135 if ( ! interfacesFound[k] ) { 136 logWriter.println 137 ("\n## FAILURE: Expected interface is NOT found in the returned list:"); 138 logWriter.println("=> Signature of interface = " + 139 interfacesSignatures[k]); 140 fail("Expected interface is NOT found in the returned list: " + 141 interfacesSignatures[k]); 142 } 143 } 144 145 assertAllDataRead(checkedReply); 146 147 logWriter.println 148 ("\n=> CHECK PASSED: All expected interfaces are found out"); 149 150 synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE); 151 logWriter.println("\n==> " + thisTestName + " for " + thisCommandName + ": OK."); 152 } 153} 154