15f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/*
25f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more
35f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * contributor license agreements.  See the NOTICE file distributed with
45f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * this work for additional information regarding copyright ownership.
55f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0
65f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * (the "License"); you may not use this file except in compliance with
75f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * the License.  You may obtain a copy of the License at
85f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *
95f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *
115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  Unless required by applicable law or agreed to in writing, software
125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  distributed under the License is distributed on an "AS IS" BASIS,
135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *
155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  See the License for the specific language governing permissions and
165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  limitations under the License.
175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespackage org.apache.harmony.jpda.tests.jdwp.Events;
205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.TestErrorException;
225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket;
235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.ParsedEvent;
255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.ReplyPacket;
265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.Value;
27e8c8e4aa631449e03043945cb4bbf1338d6b9894Sebastien Hertzimport org.apache.harmony.jpda.tests.framework.jdwp.ParsedEvent.EventThread;
285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.ParsedEvent.Event_METHOD_EXIT;
295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.ParsedEvent.Event_METHOD_EXIT_WITH_RETURN_VALUE;
305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespublic class MethodExitWithReturnValueTest extends JDWPEventTestCase {
335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    protected String getDebuggeeClassName() {
355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return MethodExitWithReturnValueDebuggee.class.getName();
365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * This testcase is for METHOD_EXIT_WITH_RETURN_VALUE event. <BR>
405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * It runs MethodExitWithReturnValueDebuggee that executed own exceptionMethod.
415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * It then verify that requested METHOD_EXIT_WITH_RETURN_VALUE event occurs
425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void testMethodExitWithReturnValueException() {
445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("==> Start testMethodExitWithReturnValue which method will throw IOException.");
455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        String methodExitClassNameRegexp = "org.apache.harmony.jpda.tests.jdwp.Events.MethodExitWithReturnValueDebuggee";
465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        // Set event request for MethodExitWithReturnValue
495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        ReplyPacket reply = debuggeeWrapper.vmMirror
505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                .setMethodExit(methodExitClassNameRegexp);
515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        checkReplyPacket(reply, "Set METHOD_EXIT_WITH_RETURN_VALUE event");
525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        // Inform debuggee desired return method
545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        synchronizer.sendMessage(MethodExitWithReturnValueDebuggee.EXCEPTION_TYPE);
555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        // Receive MethodExitWithReturnValue event
575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        CommandPacket receiveEvent = null;
585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        try {
595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            receiveEvent = debuggeeWrapper.vmMirror.receiveEvent();
605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        } catch (TestErrorException e) {
615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            printErrorAndFail("There is no event received.");
625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        ParsedEvent[] parsedEvents = ParsedEvent.parseEventPacket(receiveEvent);
645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        Event_METHOD_EXIT event = (Event_METHOD_EXIT)parsedEvents[0];
655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        assertEquals("Invalid number of events,", 1, parsedEvents.length);
675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        assertEquals("Invalid event kind,",
685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                JDWPConstants.EventKind.METHOD_EXIT,
695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                event.getEventKind(),
705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                JDWPConstants.EventKind.getName(JDWPConstants.EventKind.METHOD_EXIT),
715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                JDWPConstants.EventKind.getName(event.getEventKind()));
725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        long refID = event.getLocation().classID;
745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        String expectedSignature = "Lorg/apache/harmony/jpda/tests/jdwp/Events/MethodExitWithReturnValueDebuggee;";
755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        String actualSignature =  debuggeeWrapper.vmMirror.getReferenceTypeSignature(refID);
765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        assertEquals("Invalid class signature of method caller,",expectedSignature,actualSignature);
775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * This testcase is for METHOD_EXIT_WITH_RETURN_VALUE event. <BR>
815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * It runs MethodExitWithReturnValueDebuggee that executed own booleanMethod.
825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * It then verify that requested METHOD_EXIT_WITH_RETURN_VALUE event occurs
835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * and the returned value is as expected boolean value.
845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void testMethodExitWithReturnValueOfBoolean() {
865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        runMethodExitWithReturn(MethodExitWithReturnValueDebuggee.BOOLEAN_TYPE);
875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * This testcase is for METHOD_EXIT_WITH_RETURN_VALUE event. <BR>
915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * It runs MethodExitWithReturnValueDebuggee that executed own shortMethod.
925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * It then verify that requested METHOD_EXIT_WITH_RETURN_VALUE event occurs
935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * and the returned value is as expected short value.
945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void testMethodExitWithReturnValueOfShort() {
965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        runMethodExitWithReturn(MethodExitWithReturnValueDebuggee.SHORT_TYPE);
975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * This testcase is for METHOD_EXIT_WITH_RETURN_VALUE event. <BR>
1015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * It runs MethodExitWithReturnValueDebuggee that executed own charMethod.
1025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * It then verify that requested METHOD_EXIT_WITH_RETURN_VALUE event occurs
1035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * and the returned value is as expected char value.
1045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void testMethodExitWithReturnValueOfChar() {
1065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        runMethodExitWithReturn(MethodExitWithReturnValueDebuggee.CHAR_TYPE);
1075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * This testcase is for METHOD_EXIT_WITH_RETURN_VALUE event. <BR>
1115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * It runs MethodExitWithReturnValueDebuggee that executed own intMethod.
1125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * It then verify that requested METHOD_EXIT_WITH_RETURN_VALUE event occurs
1135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * and the returned value is as expected integer value.
1145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void testMethodExitWithReturnValueOfInt() {
1165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        runMethodExitWithReturn(MethodExitWithReturnValueDebuggee.INT_TYPE);
1175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * This testcase is for METHOD_EXIT_WITH_RETURN_VALUE event. <BR>
1215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * It runs MethodExitWithReturnValueDebuggee that executed own longMethod.
1225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * It then verify that requested METHOD_EXIT_WITH_RETURN_VALUE event occurs
1235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * and the returned value is as expected long value.
1245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void testMethodExitWithReturnValueOfLong() {
1265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        runMethodExitWithReturn(MethodExitWithReturnValueDebuggee.LONG_TYPE);
1275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * This testcase is for METHOD_EXIT_WITH_RETURN_VALUE event. <BR>
1315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * It runs MethodExitWithReturnValueDebuggee that executed own doubleMethod.
1325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * It then verify that requested METHOD_EXIT_WITH_RETURN_VALUE event occurs
1335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * and the returned value is as expected double value.
1345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void testMethodExitWithReturnValueOfDouble() {
1365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        runMethodExitWithReturn(MethodExitWithReturnValueDebuggee.DOUBLE_TYPE);
1375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
139c707eb40c4f99474ffeedab17a5fd562a7808238Sebastien Hertz    /**
140c707eb40c4f99474ffeedab17a5fd562a7808238Sebastien Hertz     * This testcase is for METHOD_EXIT_WITH_RETURN_VALUE event. <BR>
141c707eb40c4f99474ffeedab17a5fd562a7808238Sebastien Hertz     * It runs MethodExitWithReturnValueDebuggee that executed own voidMethod.
142c707eb40c4f99474ffeedab17a5fd562a7808238Sebastien Hertz     * It then verify that requested METHOD_EXIT_WITH_RETURN_VALUE event occurs
143c707eb40c4f99474ffeedab17a5fd562a7808238Sebastien Hertz     * and there is no returned value.
144c707eb40c4f99474ffeedab17a5fd562a7808238Sebastien Hertz     */
145c707eb40c4f99474ffeedab17a5fd562a7808238Sebastien Hertz    public void testMethodExitWithReturnValueOfVoid() {
146c707eb40c4f99474ffeedab17a5fd562a7808238Sebastien Hertz        runMethodExitWithReturn(MethodExitWithReturnValueDebuggee.VOID_TYPE);
147c707eb40c4f99474ffeedab17a5fd562a7808238Sebastien Hertz    }
148c707eb40c4f99474ffeedab17a5fd562a7808238Sebastien Hertz
1495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /*
1515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Internal function used to receive MethodExitWithReturnValue event.
1525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Test the returned value according to the parameter's value
1535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    private void runMethodExitWithReturn(String type){
1555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("==> Start testMethodExitWithReturnValue with return type of " + type);
1565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        String methodExitClassNameRegexp = "org.apache.harmony.jpda.tests.jdwp.Events.MethodExitWithReturnValueDebuggee";
1575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
1585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        // Set event request for MethodExitWithReturnValue
1605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        ReplyPacket reply = debuggeeWrapper.vmMirror
1615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                .setMethodExitWithReturnValue(methodExitClassNameRegexp);
1625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        checkReplyPacket(reply, "Set METHOD_EXIT_WITH_RETURN_VALUE event");
1635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        // Inform debuggee desired return method
1655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        synchronizer.sendMessage(type.toString());
1665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        // Receive MethodExitWithReturnValue event
1685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        CommandPacket receiveEvent = null;
1705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        try {
1715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            receiveEvent = debuggeeWrapper.vmMirror.receiveEvent();
1725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        } catch (TestErrorException e) {
1735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            printErrorAndFail("There is no event received.");
1745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
1755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        ParsedEvent[] parsedEvents = ParsedEvent.parseEventPacket(receiveEvent);
1765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        // Check received event's basic information
1785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        assertEquals("Invalid number of events,", 1, parsedEvents.length);
1795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("==> CHECK: receive 1 event");
1805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        assertEquals(
1825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                "Invalid event kind,",
1835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                JDWPConstants.EventKind.METHOD_EXIT_WITH_RETURN_VALUE,
1845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                parsedEvents[0].getEventKind(),
1855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                JDWPConstants.EventKind
1865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                        .getName(JDWPConstants.EventKind.METHOD_EXIT_WITH_RETURN_VALUE),
1875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                JDWPConstants.EventKind.getName(parsedEvents[0].getEventKind()));
1885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("==> CHECK: received event's type is " + JDWPConstants.EventKind.METHOD_EXIT_WITH_RETURN_VALUE);
1895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
190e8c8e4aa631449e03043945cb4bbf1338d6b9894Sebastien Hertz        long eventThreadID = ((EventThread) parsedEvents[0]).getThreadID();
191e8c8e4aa631449e03043945cb4bbf1338d6b9894Sebastien Hertz        checkThreadState(eventThreadID, JDWPConstants.ThreadStatus.RUNNING,
192e8c8e4aa631449e03043945cb4bbf1338d6b9894Sebastien Hertz                JDWPConstants.SuspendStatus.SUSPEND_STATUS_SUSPENDED);
193e8c8e4aa631449e03043945cb4bbf1338d6b9894Sebastien Hertz
1945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        // Check return value according to it's type
1955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        Value value = ((Event_METHOD_EXIT_WITH_RETURN_VALUE) parsedEvents[0])
1965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                .getReturnValue();
1975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if(type.equals(MethodExitWithReturnValueDebuggee.BOOLEAN_TYPE)){
1995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            boolean b = value.getBooleanValue();
2005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            logWriter.println("==> CHECK: booleanMethod() is invoked, return value:" + b);
2015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            assertEquals("Invalid return value,",
2025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    MethodExitWithReturnValueDebuggee.EXPECTED_BOOLEAN, b);
2035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }else if(type.equals(MethodExitWithReturnValueDebuggee.SHORT_TYPE)){
2045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            short s = value.getShortValue();
2055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            logWriter.println("==> CHECK: shortMethod() is invoked, return value:" + s);
2065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            assertEquals("Invalid return value,",
2075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    MethodExitWithReturnValueDebuggee.EXPECTED_SHORT, s);
2085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }else if(type.equals(MethodExitWithReturnValueDebuggee.CHAR_TYPE)){
2095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            char c = value.getCharValue();
2105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            logWriter.println("==> CHECK: charMethod() is invoked, return value:" + c);
2115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            assertEquals("Invalid return value,",
2125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    MethodExitWithReturnValueDebuggee.EXPECTED_CHAR, c);
2135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }else if(type.equals(MethodExitWithReturnValueDebuggee.INT_TYPE)){
2145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            int i = value.getIntValue();
2155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            logWriter.println("==> CHECK: intMethod() is invoked, return value:" + i);
2165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            assertEquals("Invalid return value,",
2175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    MethodExitWithReturnValueDebuggee.EXPECTED_INT, i);
2185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }else if(type.equals(MethodExitWithReturnValueDebuggee.LONG_TYPE)){
2195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            long l = value.getLongValue();
2205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            logWriter.println("==> CHECK: longMethod() is invoked, return value:" + l);
2215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            assertEquals("Invalid return value,",
2225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    MethodExitWithReturnValueDebuggee.EXPECTED_LONG, l);
2235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }else if(type.equals(MethodExitWithReturnValueDebuggee.DOUBLE_TYPE)){
2245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            double d = value.getDoubleValue();
2255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            logWriter.println("==> CHECK: doubleMethod() is invoked, return value:" + d);
2265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            assertEquals("Invalid return value,",
2275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    MethodExitWithReturnValueDebuggee.EXPECTED_DOUBLE, d);
228c707eb40c4f99474ffeedab17a5fd562a7808238Sebastien Hertz        } else if (type.equals(MethodExitWithReturnValueDebuggee.VOID_TYPE)) {
229c707eb40c4f99474ffeedab17a5fd562a7808238Sebastien Hertz            logWriter.println("==> CHECK: voidMethod() is invoked");
230c707eb40c4f99474ffeedab17a5fd562a7808238Sebastien Hertz            assertEquals("Invalid return value,", null, value);
2315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
2335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes}
234