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 16.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.Signature command.
37 */
38public class SignatureTest extends JDWPSyncTestCase {
39
40    static final int testStatusPassed = 0;
41    static final int testStatusFailed = -1;
42    static final String thisCommandName = "ReferenceType.Signature command";
43    static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/share/debuggee/HelloWorld;";
44
45    protected String getDebuggeeClassName() {
46        return "org.apache.harmony.jpda.tests.jdwp.share.debuggee.HelloWorld";
47    }
48
49    /**
50     * This testcase exercises ReferenceType.Signature command.
51     * <BR>The test starts HelloWorld debuggee, requests referenceTypeId
52     * for it by VirtualMachine.ClassesBySignature command, then
53     * performs ReferenceType.Signature command and checks that returned
54     * signature is equal to expected signature:
55     * <BR>'Lorg/apache/harmony/jpda/tests/jdwp/share/debuggee/HelloWorld;'
56     */
57    public void testSignature001() {
58        String thisTestName = "testSignature001";
59        logWriter.println("==> " + thisTestName + " for " + thisCommandName + ": START...");
60        synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
61
62        long refTypeID = getClassIDBySignature(debuggeeSignature);
63
64        logWriter.println("=> Debuggee class = " + getDebuggeeClassName());
65        logWriter.println("=> referenceTypeID for Debuggee class = " + refTypeID);
66        logWriter.println("=> CHECK1: send " + thisCommandName + " and check reply...");
67
68        CommandPacket signatureCommand = new CommandPacket(
69                JDWPCommands.ReferenceTypeCommandSet.CommandSetID,
70                JDWPCommands.ReferenceTypeCommandSet.SignatureCommand);
71        signatureCommand.setNextValueAsReferenceTypeID(refTypeID);
72
73        ReplyPacket signatureReply = debuggeeWrapper.vmMirror.performCommand(signatureCommand);
74        signatureCommand = null;
75        checkReplyPacket(signatureReply, thisCommandName);
76
77        String returnedSignature = signatureReply.getNextValueAsString();
78
79        if ( ! debuggeeSignature.equals(returnedSignature) ) {
80            printErrorAndFail(thisCommandName + " returned invalid signature" +
81                    ", Expected = " + debuggeeSignature +
82                    ", Returned = " + returnedSignature);
83        } else {
84            logWriter.println("=> CHECK1: PASSED: expected signature is returned = "
85                    + returnedSignature);
86        }
87        assertAllDataRead(signatureReply);
88        synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
89        logWriter.println("==> " + thisTestName + " for " + thisCommandName + ": FINISH");
90    }
91}
92