1ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz/*
2ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz * Licensed to the Apache Software Foundation (ASF) under one or more
3ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz * contributor license agreements.  See the NOTICE file distributed with
4ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz * this work for additional information regarding copyright ownership.
5ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz * The ASF licenses this file to You under the Apache License, Version 2.0
6ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz * (the "License"); you may not use this file except in compliance with
7ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz * the License.  You may obtain a copy of the License at
8ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz *
9ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz *     http://www.apache.org/licenses/LICENSE-2.0
10ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz *
11ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz *  Unless required by applicable law or agreed to in writing, software
12ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz *  distributed under the License is distributed on an "AS IS" BASIS,
13ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz *
15ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz *  See the License for the specific language governing permissions and
16ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz *  limitations under the License.
17ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz */
18ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz
19ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertzpackage org.apache.harmony.jpda.tests.jdwp.ClassType;
20ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz
21ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertzimport org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket;
22ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertzimport org.apache.harmony.jpda.tests.framework.jdwp.JDWPCommands;
23ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertzimport org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
24ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertzimport org.apache.harmony.jpda.tests.framework.jdwp.ReplyPacket;
25ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertzimport org.apache.harmony.jpda.tests.framework.jdwp.TaggedObject;
26ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertzimport org.apache.harmony.jpda.tests.jdwp.share.JDWPInvokeMethodSuspendedTwiceTestCase;
27ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz
28ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz/**
29ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz * JDWP unit test for ClassType.NewInstance command with thread suspended more than once before the
30ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz * invoke.
31ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz */
32ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertzpublic class NewInstanceAfterMultipleThreadSuspensionTest
33ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz        extends JDWPInvokeMethodSuspendedTwiceTestCase {
34ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz    public void testInvokeWithMultipleEvents001() {
35ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz        runInvokeMethodTest("<init>");
36ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz    }
37ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz
38ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz    @Override
39ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz    protected CommandPacket buildInvokeCommand(long threadId, long classID,
40ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz            long methodId, int invoke_options) {
41ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz        CommandPacket command = new CommandPacket(
42ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz                JDWPCommands.ClassTypeCommandSet.CommandSetID,
43ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz                JDWPCommands.ClassTypeCommandSet.NewInstanceCommand);
44ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz        command.setNextValueAsClassID(classID);
45ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz        command.setNextValueAsThreadID(threadId);
46ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz        command.setNextValueAsMethodID(methodId);
47ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz        command.setNextValueAsInt(0);
48ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz        command.setNextValueAsInt(invoke_options);
49ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz        return command;
50ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz    }
51ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz
52ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz    @Override
53ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz    protected String getInvokeCommandName() {
54ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz        return "ClassType.NewInstance";
55ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz    }
56ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz
57ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz    @Override
58ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz    protected void checkInvokeReply(ReplyPacket reply) {
59ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz        // Check result is an object.
60ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz        TaggedObject invokeNewObject = reply.getNextValueAsTaggedObject();
61ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz        assertEquals(JDWPConstants.Tag.OBJECT_TAG, invokeNewObject.tag);
62ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz        assertTrue("Invalid exception object id", invokeNewObject.objectID != 0);
63ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz
64ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz        // Check exception is null.
65ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz        TaggedObject invokeException = reply.getNextValueAsTaggedObject();
66ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz        assertEquals(JDWPConstants.Tag.OBJECT_TAG, invokeException.tag);
67ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz        assertEquals("Invalid exception object id", 0, invokeException.objectID);
68ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz
69ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz        assertAllDataRead(reply);
70ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz    }
71ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz
72ec561efd83dc4bb97a5677a28f09a7fc41deea79Sebastien Hertz}
73