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 Hughes/**
205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @author Anatoly F. Bondarenko
215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/**
245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Created on 05.03.2005
255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespackage org.apache.harmony.jpda.tests.jdwp.ObjectReference;
275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket;
295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.JDWPCommands;
305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.ReplyPacket;
325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.Value;
335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.jdwp.share.JDWPSyncTestCase;
34c688942db58f6e3bed189c1e5416a010f20f8bb8Sebastien Hertzimport org.apache.harmony.jpda.tests.jdwp.share.JDWPTestConstants;
355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/**
395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * JDWP Unit test for ObjectReference.IsCollected command.
405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespublic class IsCollectedTest extends JDWPSyncTestCase {
425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    static final String thisCommandName = "ObjectReference.IsCollected command";
445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ObjectReference/IsCollectedDebuggee;";
465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    protected String getDebuggeeClassName() {
485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return "org.apache.harmony.jpda.tests.jdwp.ObjectReference.IsCollectedDebuggee";
495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * This test exercises ObjectReference.IsCollected command.
535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * <BR>The test starts IsCollectedDebuggee class, gets two
545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * objectIDs as value of static fields of this class which (fields)
555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * represent two checked objects. Then for the first objectID test executes
565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * ObjectReference.DisableCollection command. After that Debuggee tries to
575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * unload checked objects. Then the test executes
585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * ObjectReference.IsCollected commands for both checked objects and checks
595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * replies.
605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void testIsCollected001() {
625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        String thisTestName = "testIsCollected001";
635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("==> " + thisTestName + " for " + thisCommandName
645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + ": START...");
655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        String failMessage = "";
665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        finalSyncMessage = "TO_FINISH";
685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        long refTypeID = getClassIDBySignature(debuggeeSignature);
705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> Debuggee class = " + getDebuggeeClassName());
725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> referenceTypeID for Debuggee class = "
735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + refTypeID);
745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        String checkedFieldNames[] = { "checkedObject_01", "checkedObject_02", };
765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        long checkedFieldIDs[] = checkFields(refTypeID, checkedFieldNames);
775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        long checkedField_01ID = checkedFieldIDs[0];
785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        long checkedField_02ID = checkedFieldIDs[1];
795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter
815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                .println("=> Send ReferenceType::GetValues command for received fieldIDs and get ObjectIDs to check...");
825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        CommandPacket getValuesCommand = new CommandPacket(
845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                JDWPCommands.ReferenceTypeCommandSet.CommandSetID,
855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                JDWPCommands.ReferenceTypeCommandSet.GetValuesCommand);
865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        getValuesCommand.setNextValueAsReferenceTypeID(refTypeID);
875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        getValuesCommand.setNextValueAsInt(2);
885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        getValuesCommand.setNextValueAsFieldID(checkedField_01ID);
895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        getValuesCommand.setNextValueAsFieldID(checkedField_02ID);
905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        ReplyPacket getValuesReply = debuggeeWrapper.vmMirror
925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                .performCommand(getValuesCommand);
935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        getValuesCommand = null;
945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        checkReplyPacket(getValuesReply, "ReferenceType::GetValues command");
955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        int returnedValuesNumber = getValuesReply.getNextValueAsInt();
975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter
985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                .println("=> Returned values number = " + returnedValuesNumber);
995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        assertEquals("Invalid number of values,", 2, returnedValuesNumber);
1005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        Value checkedObjectFieldValue = getValuesReply.getNextValueAsValue();
1025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        byte checkedObjectFieldTag = checkedObjectFieldValue.getTag();
1035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> Returned field value tag for checkedObject_01 = "
1045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + checkedObjectFieldTag + "("
1055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + JDWPConstants.Tag.getName(checkedObjectFieldTag) + ")");
1065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        assertEquals("Invalid value tag for checkedObject_01",
1075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                JDWPConstants.Tag.OBJECT_TAG, checkedObjectFieldTag,
1085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                JDWPConstants.Tag.getName(JDWPConstants.Tag.OBJECT_TAG),
1095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                JDWPConstants.Tag.getName(checkedObjectFieldTag));
1105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        long checkedObject_01ID = checkedObjectFieldValue.getLongValue();
1125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> Returned ObjectID for checkedObject_01 = "
1135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + checkedObject_01ID);
1145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        checkedObjectFieldValue = getValuesReply.getNextValueAsValue();
1165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        checkedObjectFieldTag = checkedObjectFieldValue.getTag();
1175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> Returned field value tag for checkedObject_02 = "
1185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + checkedObjectFieldTag + "("
1195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + JDWPConstants.Tag.getName(checkedObjectFieldTag) + ")");
1205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        assertEquals("Invalid value tag for checkedObject_02",
1215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                JDWPConstants.Tag.OBJECT_TAG, checkedObjectFieldTag,
1225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                JDWPConstants.Tag.getName(JDWPConstants.Tag.OBJECT_TAG),
1235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                JDWPConstants.Tag.getName(checkedObjectFieldTag));
1245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        long checkedObject_02ID = checkedObjectFieldValue.getLongValue();
1265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> Returned ObjectID for checkedObject_02 = "
1275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + checkedObject_02ID);
1285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter
1305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                .println("\n=> Send ObjectReference::DisableCollection command for checkedObject_01...");
1315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        CommandPacket disableCollectionCommand = new CommandPacket(
1335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                JDWPCommands.ObjectReferenceCommandSet.CommandSetID,
1345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                JDWPCommands.ObjectReferenceCommandSet.DisableCollectionCommand);
1355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        disableCollectionCommand.setNextValueAsObjectID(checkedObject_01ID);
1365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        ReplyPacket disableCollectionReply = debuggeeWrapper.vmMirror
1385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                .performCommand(disableCollectionCommand);
1395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        disableCollectionCommand = null;
1405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        checkReplyPacket(disableCollectionReply,
1415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                "ObjectReference::DisableCollection command");
1425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter
1445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                .println("=> Send to Debuggee signal to continue and try to unload checked objects...");
1455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        finalSyncMessage = null;
1465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
1475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        String messageFromDebuggee = synchronizer.receiveMessage();
1485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("\n=> Received message from Debuggee = \""
1495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + messageFromDebuggee + "\"");
1505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("\n=> Send " + thisCommandName
1525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + " for checkedObject_01 and check reply...");
1535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        CommandPacket checkedCommand = new CommandPacket(
1555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                JDWPCommands.ObjectReferenceCommandSet.CommandSetID,
1565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                JDWPCommands.ObjectReferenceCommandSet.IsCollectedCommand);
1575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        checkedCommand.setNextValueAsObjectID(checkedObject_01ID);
1585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        ReplyPacket checkedReply = debuggeeWrapper.vmMirror
1605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                .performCommand(checkedCommand);
1615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        checkedCommand = null;
1625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        checkReplyPacket(checkedReply, thisCommandName);
1635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        boolean checkedObject_01_IsCollected = checkedReply
1655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                .getNextValueAsBoolean();
1665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> IsCollected for checkedObject_01 = "
1675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + checkedObject_01_IsCollected);
1685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (messageFromDebuggee.indexOf("checkedObject_01 is UNLOADed;") != -1) {
1705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            if (!checkedObject_01_IsCollected) {
1715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                logWriter
1725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                        .println("## FAILURE: Unexpected result for checkedObject_01 of "
1735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                                + thisCommandName + ":");
1745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                logWriter
1755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                        .println("## checkedObject_01 is UNLOADed so IsCollected must be 'true'");
1765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                failMessage = failMessage +
1775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    "Unexpected result for checkedObject_01 of "
1785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    + thisCommandName + "\n";
1795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            }
1805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        } else {
1815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            if (checkedObject_01_IsCollected) {
1825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                logWriter
1835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                        .println("## FAILURE: Unexpected result for checkedObject_01 of "
1845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                                + thisCommandName + ":");
1855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                logWriter
1865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                        .println("## checkedObject_01 is NOT UNLOADed so IsCollected must be 'false'");
1875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                failMessage = failMessage +
1885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    "Unexpected result for checkedObject_01 of "
1895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    + thisCommandName + "\n";
1905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            }
1915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
1925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> PASSED for checkedObject_01");
1945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("\n=> Send " + thisCommandName
1965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + " for checkedObject_02 and check reply...");
1975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        checkedCommand = new CommandPacket(
1995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                JDWPCommands.ObjectReferenceCommandSet.CommandSetID,
2005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                JDWPCommands.ObjectReferenceCommandSet.IsCollectedCommand);
2015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        checkedCommand.setNextValueAsObjectID(checkedObject_02ID);
2025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        checkedReply = debuggeeWrapper.vmMirror.performCommand(checkedCommand);
2045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        checkedCommand = null;
2055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        checkReplyPacket(checkedReply, thisCommandName);
2065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        boolean checkedObject_02_IsCollected = checkedReply
2085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                .getNextValueAsBoolean();
2095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> IsCollected for checkedObject_02 = "
2105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + checkedObject_02_IsCollected);
2115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (messageFromDebuggee.indexOf("checkedObject_02 is UNLOADed;") != -1) {
2135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            if (!checkedObject_02_IsCollected) {
2145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                logWriter
2155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                        .println("## FAILURE: Unexpected result for checkedObject_02 of "
2165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                                + thisCommandName + ":");
2175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                logWriter
2185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                        .println("## checkedObject_02 is UNLOADed so IsCollected must be 'true'");
2195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                failMessage = failMessage +
2205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    "Unexpected result for checkedObject_02 of "
2215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    + thisCommandName + "\n";
2225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            }
2235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        } else {
2245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            if (checkedObject_02_IsCollected) {
2255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                logWriter
2265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                        .println("## FAILURE: Unexpected result for checkedObject_02 of "
2275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                                + thisCommandName + ":");
2285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                logWriter
2295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                        .println("## checkedObject_02 is NOT UNLOADed so IsCollected must be 'false'");
2305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                failMessage = failMessage +
2315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    "Unexpected result for checkedObject_02 of "
2325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    + thisCommandName + "\n";
2335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            }
2345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> PASSED for checkedObject_02");
2375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> Send to Debuggee signal to funish ...");
2385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
2395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("==> " + thisTestName + " for " + thisCommandName
2405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + ": FINISH");
2415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (failMessage.length() > 0) {
2435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            fail(failMessage);
2445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        assertAllDataRead(checkedReply);
2475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
24837b95e332fe4d776e33e64f0fa1980fb4f7a83e0Sebastien Hertz
24937b95e332fe4d776e33e64f0fa1980fb4f7a83e0Sebastien Hertz    /**
25037b95e332fe4d776e33e64f0fa1980fb4f7a83e0Sebastien Hertz     * This testcase exercises ObjectReference.IsCollected command.
25137b95e332fe4d776e33e64f0fa1980fb4f7a83e0Sebastien Hertz     * <BR>The test starts IsCollectedDebuggee class. Then attempts to know
252c688942db58f6e3bed189c1e5416a010f20f8bb8Sebastien Hertz     * if an invalid objectID is collected and checks no error is returned and
253c688942db58f6e3bed189c1e5416a010f20f8bb8Sebastien Hertz     * result is true.
25437b95e332fe4d776e33e64f0fa1980fb4f7a83e0Sebastien Hertz     */
255c688942db58f6e3bed189c1e5416a010f20f8bb8Sebastien Hertz    public void testIsCollected_invalid() {
25637b95e332fe4d776e33e64f0fa1980fb4f7a83e0Sebastien Hertz        synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
25737b95e332fe4d776e33e64f0fa1980fb4f7a83e0Sebastien Hertz
25837b95e332fe4d776e33e64f0fa1980fb4f7a83e0Sebastien Hertz        CommandPacket command = new CommandPacket(
25937b95e332fe4d776e33e64f0fa1980fb4f7a83e0Sebastien Hertz                JDWPCommands.ObjectReferenceCommandSet.CommandSetID,
26037b95e332fe4d776e33e64f0fa1980fb4f7a83e0Sebastien Hertz                JDWPCommands.ObjectReferenceCommandSet.IsCollectedCommand);
261c688942db58f6e3bed189c1e5416a010f20f8bb8Sebastien Hertz        command.setNextValueAsObjectID(JDWPTestConstants.INVALID_OBJECT_ID);
26237b95e332fe4d776e33e64f0fa1980fb4f7a83e0Sebastien Hertz
26337b95e332fe4d776e33e64f0fa1980fb4f7a83e0Sebastien Hertz        ReplyPacket reply = debuggeeWrapper.vmMirror.performCommand(command);
264c688942db58f6e3bed189c1e5416a010f20f8bb8Sebastien Hertz        checkReplyPacket(reply, thisCommandName);
265c688942db58f6e3bed189c1e5416a010f20f8bb8Sebastien Hertz        boolean is_collected = reply.getNextValueAsBoolean();
266c688942db58f6e3bed189c1e5416a010f20f8bb8Sebastien Hertz        assertAllDataRead(reply);
267c688942db58f6e3bed189c1e5416a010f20f8bb8Sebastien Hertz        assertTrue("Invalid object id is assumed to be collected", is_collected);
26837b95e332fe4d776e33e64f0fa1980fb4f7a83e0Sebastien Hertz
26937b95e332fe4d776e33e64f0fa1980fb4f7a83e0Sebastien Hertz        synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
27037b95e332fe4d776e33e64f0fa1980fb4f7a83e0Sebastien Hertz    }
27137b95e332fe4d776e33e64f0fa1980fb4f7a83e0Sebastien Hertz
27237b95e332fe4d776e33e64f0fa1980fb4f7a83e0Sebastien Hertz    /**
27337b95e332fe4d776e33e64f0fa1980fb4f7a83e0Sebastien Hertz     * This testcase exercises ObjectReference.IsCollected command.
27437b95e332fe4d776e33e64f0fa1980fb4f7a83e0Sebastien Hertz     * <BR>The test starts IsCollectedDebuggee class. Then attempts to know
27537b95e332fe4d776e33e64f0fa1980fb4f7a83e0Sebastien Hertz     * if "null" object (id=0) is collected and checks INVALID_OBJECT is
27637b95e332fe4d776e33e64f0fa1980fb4f7a83e0Sebastien Hertz     * returned.
27737b95e332fe4d776e33e64f0fa1980fb4f7a83e0Sebastien Hertz     */
278c688942db58f6e3bed189c1e5416a010f20f8bb8Sebastien Hertz    public void testIsCollected_null() {
27937b95e332fe4d776e33e64f0fa1980fb4f7a83e0Sebastien Hertz        synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
28037b95e332fe4d776e33e64f0fa1980fb4f7a83e0Sebastien Hertz
28137b95e332fe4d776e33e64f0fa1980fb4f7a83e0Sebastien Hertz        CommandPacket command = new CommandPacket(
28237b95e332fe4d776e33e64f0fa1980fb4f7a83e0Sebastien Hertz                JDWPCommands.ObjectReferenceCommandSet.CommandSetID,
28337b95e332fe4d776e33e64f0fa1980fb4f7a83e0Sebastien Hertz                JDWPCommands.ObjectReferenceCommandSet.IsCollectedCommand);
284c688942db58f6e3bed189c1e5416a010f20f8bb8Sebastien Hertz        command.setNextValueAsObjectID(JDWPTestConstants.NULL_OBJECT_ID);
28537b95e332fe4d776e33e64f0fa1980fb4f7a83e0Sebastien Hertz
28637b95e332fe4d776e33e64f0fa1980fb4f7a83e0Sebastien Hertz        ReplyPacket reply = debuggeeWrapper.vmMirror.performCommand(command);
28737b95e332fe4d776e33e64f0fa1980fb4f7a83e0Sebastien Hertz        checkReplyPacket(reply, thisCommandName, JDWPConstants.Error.INVALID_OBJECT);
28837b95e332fe4d776e33e64f0fa1980fb4f7a83e0Sebastien Hertz
28937b95e332fe4d776e33e64f0fa1980fb4f7a83e0Sebastien Hertz        synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
29037b95e332fe4d776e33e64f0fa1980fb4f7a83e0Sebastien Hertz    }
2915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes}
292