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 17.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.Modifiers command.
036: */
037: public class ModifiersTest extends JDWPSyncTestCase {
038:
039: static final int testStatusPassed = 0;
040: static final int testStatusFailed = -1;
041: static final String this CommandName = "ReferenceType.Modifiers command";
042: static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/share/debuggee/HelloWorld;";
043:
044: protected String getDebuggeeClassName() {
045: return "org.apache.harmony.jpda.tests.jdwp.share.debuggee.HelloWorld";
046: }
047:
048: /**
049: * This testcase exercises ReferenceType.Modifiers command.
050: * <BR>The test starts HelloWorld debuggee, requests referenceTypeId
051: * for it by VirtualMachine.ClassesBySignature command, then
052: * performs ReferenceType.Modifiers command and checks that returned
053: * Modifiers contain expected flags: ACC_PUBLIC, ACC_SUPER;
054: * but do NOT contain flags: ACC_FINAL, ACC_INTERFACE, ACC_ABSTRACT
055: */
056: public void testModifiers001() {
057: String this TestName = "testModifiers001";
058: logWriter.println("==> " + this TestName + " for "
059: + this CommandName + ": START...");
060: String failMessage = "";
061: synchronizer
062: .receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
063:
064: long refTypeID = getClassIDBySignature(debuggeeSignature);
065:
066: logWriter.println("=> Debuggee class = "
067: + getDebuggeeClassName());
068: logWriter.println("=> referenceTypeID for Debuggee class = "
069: + refTypeID);
070: logWriter.println("=> CHECK1: send " + this CommandName
071: + " and check reply...");
072:
073: CommandPacket modifiersCommand = new CommandPacket(
074: JDWPCommands.ReferenceTypeCommandSet.CommandSetID,
075: JDWPCommands.ReferenceTypeCommandSet.ModifiersCommand);
076: modifiersCommand.setNextValueAsReferenceTypeID(refTypeID);
077:
078: ReplyPacket modifiersReply = debuggeeWrapper.vmMirror
079: .performCommand(modifiersCommand);
080: modifiersCommand = null;
081: checkReplyPacket(modifiersReply, this CommandName);
082:
083: int returnedModifiers = modifiersReply.getNextValueAsInt();
084: /*
085: * The value of the access_flags item is a mask of modifiers used with class and
086: * interface declarations. The access_flags modifiers are:
087: * Flag Name Value Meaning Used By
088: * ACC_PUBLIC 0x0001 Is public; may be accessed from outside its package. Class, interface
089: * ACC_FINAL 0x0010 Is final; no subclasses allowed. Class
090: * ACC_SUPER 0x0020 Treat superclass methods specially in invokespecial. Class, interface
091: * ACC_INTERFACE 0x0200 Is an interface. Interface
092: * ACC_ABSTRACT 0x0400 Is abstract; may not be instantiated. Class, interface
093: */
094: logWriter.println("=> Returned modifiers = 0x"
095: + Integer.toHexString(returnedModifiers));
096:
097: int publicFlag = 0x0001; // expected
098: int finalFlag = 0x0010; // unexpected
099: int super Flag = 0x0020; // expected
100: int interfaceFlag = 0x0200; // unexpected
101: int abstractFlag = 0x0400; // unexpected
102:
103: if ((returnedModifiers & publicFlag) == 0) {
104: logWriter
105: .println("## CHECK1: FAILURE: Returned modifiers do NOT contain expected ACC_PUBLIC flag(0x0001)");
106: failMessage = failMessage
107: + "Returned modifiers do NOT contain expected ACC_PUBLIC flag(0x0001);\n";
108: }
109: if ((returnedModifiers & super Flag) == 0) {
110: logWriter
111: .println("## CHECK1: FAILURE: Returned modifiers do NOT contain expected ACC_SUPER flag(0x0020)");
112: failMessage = failMessage
113: + "Returned modifiers do NOT contain expected ACC_SUPER flag(0x0020);\n";
114: }
115: if ((returnedModifiers & finalFlag) != 0) {
116: logWriter
117: .println("## CHECK1: FAILURE: Returned modifiers contain unexpected ACC_FINAL flag(0x0010)");
118: failMessage = failMessage
119: + "Returned modifiers contain unexpected ACC_FINAL flag(0x0010);\n";
120: }
121: if ((returnedModifiers & interfaceFlag) != 0) {
122: logWriter
123: .println("## CHECK1: FAILURE: Returned modifiers contain unexpected ACC_INTERFACE flag(0x0200)");
124: failMessage = failMessage
125: + "Returned modifiers contain unexpected ACC_INTERFACE flag(0x0200);\n";
126: }
127: if ((returnedModifiers & abstractFlag) != 0) {
128: logWriter
129: .println("## CHECK1: FAILURE: Returned modifiers contain unexpected ACC_ABSTRACT flag(0x0400)");
130: failMessage = failMessage
131: + "Returned modifiers contain unexpected ACC_ABSTRACT flag(0x0400);\n";
132: }
133:
134: logWriter
135: .println("=> CHECK1: PASSED: expected modifiers are returned: ACC_PUBLIC flag(0x0001), ACC_SUPER flag(0x0020)");
136: synchronizer
137: .sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
138: logWriter.println("==> " + this TestName + " for "
139: + this CommandName + ": FINISH");
140:
141: if (failMessage.length() > 0) {
142: fail(failMessage);
143: }
144:
145: assertAllDataRead(modifiersReply);
146: }
147:
148: public static void main(String[] args) {
149: junit.textui.TestRunner.run(ModifiersTest.class);
150: }
151: }
|