1ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz/*
2ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz * Licensed to the Apache Software Foundation (ASF) under one or more
3ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz * contributor license agreements.  See the NOTICE file distributed with
4ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz * this work for additional information regarding copyright ownership.
5ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz * The ASF licenses this file to You under the Apache License, Version 2.0
6ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz * (the "License"); you may not use this file except in compliance with
7ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz * the License.  You may obtain a copy of the License at
8ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz *
9ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz *     http://www.apache.org/licenses/LICENSE-2.0
10ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz *
11ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz *  Unless required by applicable law or agreed to in writing, software
12ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz *  distributed under the License is distributed on an "AS IS" BASIS,
13ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz *
15ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz *  See the License for the specific language governing permissions and
16ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz *  limitations under the License.
17ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz */
18ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz
19ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertzpackage org.apache.harmony.jpda.tests.jdwp.ClassType;
20ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz
21ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertzimport org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
223b5288f5c800d4d56b68a8b8dec54f032908bf93Jeff Haoimport org.apache.harmony.jpda.tests.framework.jdwp.TaggedObject;
23ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertzimport org.apache.harmony.jpda.tests.framework.jdwp.Value;
24ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz
25ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertzimport java.util.List;
26ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz
27ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz/**
28ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz * JDWP unit test for ClassType.NewInstance command with java.lang.String class.
29ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz */
307155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertzpublic class NewInstanceStringTest extends AbstractNewInstanceTestCase {
31ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz
32ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    @Override
33ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    protected String getDebuggeeClassName() {
34ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz        return NewInstanceStringDebuggee.class.getName();
35ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    }
36ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz
37ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    /**
387155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz     * Test ClassType.NewInstance using the constructor
397155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz     * <code>java.lang.String()</code>.
40ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     */
41ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    public void testNewInstanceString_NoArgConstructor() {
423b5288f5c800d4d56b68a8b8dec54f032908bf93Jeff Hao        runTestNewInstanceString("()V", "", new NoConstructorArgumentProvider());
43ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    }
44ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz
45ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    /**
46ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     * Test ClassType.NewInstance using the constructor
47ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     * <code>java.lang.String(byte[])</code>.
48ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     */
49ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    public void testNewInstanceString_ByteArrayArgConstructor() {
503b5288f5c800d4d56b68a8b8dec54f032908bf93Jeff Hao        runTestNewInstanceString("([B)V", "my test string", new ConstructorArgumentsProvider() {
51ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz
52ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz            @Override
53ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz            public void provideConstructorArguments(List<Value> constructorArguments) {
54ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                // Pass a reference to BYTE_ARRAY static field.
55ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                long debuggeeClassId = getClassIDBySignature(getDebuggeeClassSignature());
56ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                Value byteArrayValue = getStaticFieldValue(debuggeeClassId, "BYTE_ARRAY");
57ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                constructorArguments.add(byteArrayValue);
58ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz            }
59ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz        });
60ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    }
61ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz
62ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    /**
63ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     * Test ClassType.NewInstance using the constructor
64ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     * <code>java.lang.String(byte[], int, int)</code>.
65ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     */
66ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    public void testNewInstanceString_ByteArrayIntIntConstructor() {
673b5288f5c800d4d56b68a8b8dec54f032908bf93Jeff Hao        runTestNewInstanceString("([BII)V", "m", new ConstructorArgumentsProvider() {
68ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz            @Override
69ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz            public void provideConstructorArguments(List<Value> constructorArguments) {
70ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                // Pass a reference to BYTE_ARRAY static field.
71ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                long debuggeeClassId = getClassIDBySignature(getDebuggeeClassSignature());
72ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                Value byteArrayValue = getStaticFieldValue(debuggeeClassId, "BYTE_ARRAY");
73ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                constructorArguments.add(byteArrayValue);
74e9e1750a916cf602df722515736d21af63de1defSebastien Hertz                constructorArguments.add(Value.createInt(0));
75e9e1750a916cf602df722515736d21af63de1defSebastien Hertz                constructorArguments.add(Value.createInt(1));
76ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz            }
77ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz        });
78ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    }
79ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz
80ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    /**
81ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     * Test ClassType.NewInstance using the constructor
82ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     * <code>java.lang.String(byte[], int, int, java.lang.String)</code>.
83ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     */
84ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    public void testNewInstanceString_ByteArrayIntIntStringConstructor() {
853b5288f5c800d4d56b68a8b8dec54f032908bf93Jeff Hao        runTestNewInstanceString("([BIILjava/lang/String;)V", "m",
863b5288f5c800d4d56b68a8b8dec54f032908bf93Jeff Hao                new ConstructorArgumentsProvider() {
87ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz            @Override
88ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz            public void provideConstructorArguments(List<Value> constructorArguments) {
89ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                // Pass a reference to BYTE_ARRAY and STRING_CHARSET static
90ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                // fields.
91ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                long debuggeeClassId = getClassIDBySignature(getDebuggeeClassSignature());
92ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                Value byteArrayValue = getStaticFieldValue(debuggeeClassId, "BYTE_ARRAY");
93ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                Value stringCharsetValue = getStaticFieldValue(debuggeeClassId, "STRING_CHARSET");
94ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                constructorArguments.add(byteArrayValue);
95e9e1750a916cf602df722515736d21af63de1defSebastien Hertz                constructorArguments.add(Value.createInt(0));
96e9e1750a916cf602df722515736d21af63de1defSebastien Hertz                constructorArguments.add(Value.createInt(1));
97ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                constructorArguments.add(stringCharsetValue);
98ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz            }
99ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz        });
100ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    }
101ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz
102ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    /**
103ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     * Test ClassType.NewInstance using the constructor
104ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     * <code>java.lang.String(byte[], java.lang.String)</code>.
105ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     */
106ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    public void testNewInstanceString_ByteArrayStringConstructor() {
1073b5288f5c800d4d56b68a8b8dec54f032908bf93Jeff Hao        runTestNewInstanceString("([BLjava/lang/String;)V", "my test string",
1083b5288f5c800d4d56b68a8b8dec54f032908bf93Jeff Hao                new ConstructorArgumentsProvider() {
109ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz            @Override
110ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz            public void provideConstructorArguments(List<Value> constructorArguments) {
111ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                // Pass a reference to BYTE_ARRAY and STRING_CHARSET static
112ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                // fields.
113ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                long debuggeeClassId = getClassIDBySignature(getDebuggeeClassSignature());
114ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                Value byteArrayValue = getStaticFieldValue(debuggeeClassId, "BYTE_ARRAY");
115ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                Value stringCharsetValue = getStaticFieldValue(debuggeeClassId, "STRING_CHARSET");
116ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                constructorArguments.add(byteArrayValue);
117ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                constructorArguments.add(stringCharsetValue);
118ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz            }
119ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz        });
120ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    }
121ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz
122ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    /**
123ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     * Test ClassType.NewInstance using the constructor
1247155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz     * <code>java.lang.String(byte[], int, int, java.nio.charset.Charset)</code>
1257155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz     * .
126ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     */
127ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    public void testNewInstanceString_ByteArrayIntIntCharsetConstructor() {
1283b5288f5c800d4d56b68a8b8dec54f032908bf93Jeff Hao        runTestNewInstanceString("([BIILjava/nio/charset/Charset;)V", "m",
129ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                new ConstructorArgumentsProvider() {
130ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                    @Override
131ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                    public void provideConstructorArguments(List<Value> constructorArguments) {
132ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                        // Pass a reference to BYTE_ARRAY and CHARSET static
133ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                        // fields.
134ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                        long debuggeeClassId = getClassIDBySignature(getDebuggeeClassSignature());
135ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                        Value byteArrayValue = getStaticFieldValue(debuggeeClassId, "BYTE_ARRAY");
136ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                        Value charsetValue = getStaticFieldValue(debuggeeClassId, "CHARSET");
137ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                        constructorArguments.add(byteArrayValue);
138e9e1750a916cf602df722515736d21af63de1defSebastien Hertz                        constructorArguments.add(Value.createInt(0));
139e9e1750a916cf602df722515736d21af63de1defSebastien Hertz                        constructorArguments.add(Value.createInt(1));
140ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                        constructorArguments.add(charsetValue);
141ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                    }
142ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                });
143ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    }
144ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz
145ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    /**
146ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     * Test ClassType.NewInstance using the constructor
147ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     * <code>java.lang.String(byte[], java.nio.charset.Charset)</code>.
148ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     */
149ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    public void testNewInstanceString_ByteArrayCharsetConstructor() {
1503b5288f5c800d4d56b68a8b8dec54f032908bf93Jeff Hao        runTestNewInstanceString("([BLjava/nio/charset/Charset;)V", "my test string",
151ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                new ConstructorArgumentsProvider() {
152ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                    @Override
153ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                    public void provideConstructorArguments(List<Value> constructorArguments) {
154ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                        // Pass a reference to BYTE_ARRAY and CHARSET static
155ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                        // fields.
156ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                        long debuggeeClassId = getClassIDBySignature(getDebuggeeClassSignature());
157ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                        Value byteArrayValue = getStaticFieldValue(debuggeeClassId, "BYTE_ARRAY");
158ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                        Value charsetValue = getStaticFieldValue(debuggeeClassId, "CHARSET");
159ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                        constructorArguments.add(byteArrayValue);
160ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                        constructorArguments.add(charsetValue);
161ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                    }
162ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                });
163ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    }
164ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz
165ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    /**
166ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     * Test ClassType.NewInstance using the constructor
167ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     * <code>java.lang.String(char[])</code>.
168ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     */
169ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    public void testNewInstanceString_CharArrayConstructor() {
1703b5288f5c800d4d56b68a8b8dec54f032908bf93Jeff Hao        runTestNewInstanceString("([C)V", "my test string", new ConstructorArgumentsProvider() {
171ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz            @Override
172ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz            public void provideConstructorArguments(List<Value> constructorArguments) {
173ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                // Pass a reference to CHAR_ARRAY static field.
174ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                long debuggeeClassId = getClassIDBySignature(getDebuggeeClassSignature());
175ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                Value charArrayValue = getStaticFieldValue(debuggeeClassId, "CHAR_ARRAY");
176ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                constructorArguments.add(charArrayValue);
177ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz            }
178ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz        });
179ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    }
180ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz
181ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    /**
182ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     * Test ClassType.NewInstance using the constructor
183ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     * <code>java.lang.String(char[], int, int)</code>.
184ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     */
185ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    public void testNewInstanceString_CharArrayIntIntConstructor() {
1863b5288f5c800d4d56b68a8b8dec54f032908bf93Jeff Hao        runTestNewInstanceString("([CII)V", "m", new ConstructorArgumentsProvider() {
187ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz            @Override
188ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz            public void provideConstructorArguments(List<Value> constructorArguments) {
189ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                // Pass a reference to CHAR_ARRAY static field.
190ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                long debuggeeClassId = getClassIDBySignature(getDebuggeeClassSignature());
191ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                Value charArrayValue = getStaticFieldValue(debuggeeClassId, "CHAR_ARRAY");
192ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                constructorArguments.add(charArrayValue);
193e9e1750a916cf602df722515736d21af63de1defSebastien Hertz                constructorArguments.add(Value.createInt(0));
194e9e1750a916cf602df722515736d21af63de1defSebastien Hertz                constructorArguments.add(Value.createInt(1));
195ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz            }
196ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz        });
197ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    }
198ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz
199ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    /**
200ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     * Test ClassType.NewInstance using the constructor
201ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     * <code>java.lang.String(java.lang.String)</code>.
202ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     */
203ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    public void testNewInstanceString_StringConstructor() {
2043b5288f5c800d4d56b68a8b8dec54f032908bf93Jeff Hao        runTestNewInstanceString("(Ljava/lang/String;)V", "my test string",
2053b5288f5c800d4d56b68a8b8dec54f032908bf93Jeff Hao                new ConstructorArgumentsProvider() {
206ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz            @Override
207ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz            public void provideConstructorArguments(List<Value> constructorArguments) {
208ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                // Pass a reference to TEST_STRING static field.
209ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                long debuggeeClassId = getClassIDBySignature(getDebuggeeClassSignature());
210ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                Value testStringValue = getStaticFieldValue(debuggeeClassId, "TEST_STRING");
211ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                constructorArguments.add(testStringValue);
212ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz            }
213ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz        });
214ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    }
215ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz
216ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    /**
217ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     * Test ClassType.NewInstance using the constructor
218ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     * <code>java.lang.String(java.lang.StringBuffer)</code>.
219ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     */
220ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    public void testNewInstanceString_StringBufferConstructor() {
2213b5288f5c800d4d56b68a8b8dec54f032908bf93Jeff Hao        runTestNewInstanceString("(Ljava/lang/StringBuffer;)V", "my test string",
2223b5288f5c800d4d56b68a8b8dec54f032908bf93Jeff Hao                new ConstructorArgumentsProvider() {
223ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz            @Override
224ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz            public void provideConstructorArguments(List<Value> constructorArguments) {
225ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                // Pass a reference to STRING_BUFFER static field.
226ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                long debuggeeClassId = getClassIDBySignature(getDebuggeeClassSignature());
227ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                Value stringBufferValue = getStaticFieldValue(debuggeeClassId, "STRING_BUFFER");
228ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                constructorArguments.add(stringBufferValue);
229ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz            }
230ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz        });
231ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    }
232ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz
233ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    /**
234ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     * Test ClassType.NewInstance using the constructor
235ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     * <code>java.lang.String(int[], * int, int)</code>.
236ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     */
237ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    public void testNewInstanceString_IntArrayIntIntConstructor() {
2383b5288f5c800d4d56b68a8b8dec54f032908bf93Jeff Hao        runTestNewInstanceString("([III)V", "m", new ConstructorArgumentsProvider() {
239ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz            @Override
240ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz            public void provideConstructorArguments(List<Value> constructorArguments) {
241ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                // Pass a reference to INT_ARRAY static field.
242ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                long debuggeeClassId = getClassIDBySignature(getDebuggeeClassSignature());
243ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                Value intArrayValue = getStaticFieldValue(debuggeeClassId, "INT_ARRAY");
244ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                constructorArguments.add(intArrayValue);
245e9e1750a916cf602df722515736d21af63de1defSebastien Hertz                constructorArguments.add(Value.createInt(0));
246e9e1750a916cf602df722515736d21af63de1defSebastien Hertz                constructorArguments.add(Value.createInt(1));
247ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz            }
248ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz        });
249ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    }
250ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz
251ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    /**
252ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     * Test ClassType.NewInstance using the constructor
253ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     * <code>java.lang.String(java.lang.StringBuilder)</code>.
254ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     */
255ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    public void testNewInstanceString_StringBuilderConstructor() {
2563b5288f5c800d4d56b68a8b8dec54f032908bf93Jeff Hao        runTestNewInstanceString("(Ljava/lang/StringBuilder;)V", "my test string",
257ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                new ConstructorArgumentsProvider() {
258ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                    @Override
259ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                    public void provideConstructorArguments(List<Value> constructorArguments) {
260ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                        // Pass a reference to STRING_BUILDER static field.
261ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                        long debuggeeClassId = getClassIDBySignature(getDebuggeeClassSignature());
262ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                        Value stringBuilderValue = getStaticFieldValue(debuggeeClassId,
263ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                                "STRING_BUILDER");
264ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                        constructorArguments.add(stringBuilderValue);
265ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                    }
266ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz                });
267ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    }
268ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz
269ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    /**
2707155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz     * Exercises ClassType.NewInstance command for java.lang.String.
271ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz     */
2723b5288f5c800d4d56b68a8b8dec54f032908bf93Jeff Hao    private void runTestNewInstanceString(String constructorSignature, String expectedString,
273ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz            ConstructorArgumentsProvider provider) {
2745617ae1cb798e58748946c0fa4299f5d982c7b8bSebastien Hertz        checkNewInstanceTag("Ljava/lang/String;", constructorSignature, provider,
2755617ae1cb798e58748946c0fa4299f5d982c7b8bSebastien Hertz                new StringChecker(expectedString));
2765617ae1cb798e58748946c0fa4299f5d982c7b8bSebastien Hertz    }
2775617ae1cb798e58748946c0fa4299f5d982c7b8bSebastien Hertz
2785617ae1cb798e58748946c0fa4299f5d982c7b8bSebastien Hertz    /**
2795617ae1cb798e58748946c0fa4299f5d982c7b8bSebastien Hertz     * A specialization for String that also checks the string's value.
2805617ae1cb798e58748946c0fa4299f5d982c7b8bSebastien Hertz     */
2815617ae1cb798e58748946c0fa4299f5d982c7b8bSebastien Hertz    private final class StringChecker extends Checker {
2825617ae1cb798e58748946c0fa4299f5d982c7b8bSebastien Hertz        private final String expectedString;
2835617ae1cb798e58748946c0fa4299f5d982c7b8bSebastien Hertz
2845617ae1cb798e58748946c0fa4299f5d982c7b8bSebastien Hertz        private StringChecker(String expectedString) {
2855617ae1cb798e58748946c0fa4299f5d982c7b8bSebastien Hertz            super(JDWPConstants.Tag.STRING_TAG);
2865617ae1cb798e58748946c0fa4299f5d982c7b8bSebastien Hertz            this.expectedString = expectedString;
2875617ae1cb798e58748946c0fa4299f5d982c7b8bSebastien Hertz        }
2885617ae1cb798e58748946c0fa4299f5d982c7b8bSebastien Hertz
2895617ae1cb798e58748946c0fa4299f5d982c7b8bSebastien Hertz        @Override
2905617ae1cb798e58748946c0fa4299f5d982c7b8bSebastien Hertz        public void check(TaggedObject objectResult, TaggedObject exceptionResult) {
2915617ae1cb798e58748946c0fa4299f5d982c7b8bSebastien Hertz            // Check tag first.
2925617ae1cb798e58748946c0fa4299f5d982c7b8bSebastien Hertz            super.check(objectResult, exceptionResult);
2933b5288f5c800d4d56b68a8b8dec54f032908bf93Jeff Hao
2945617ae1cb798e58748946c0fa4299f5d982c7b8bSebastien Hertz            // Get the character data out of the new String and check that it's expected.
2955617ae1cb798e58748946c0fa4299f5d982c7b8bSebastien Hertz            String resultString = getStringValue(objectResult.objectID);
2965617ae1cb798e58748946c0fa4299f5d982c7b8bSebastien Hertz            assertString("ClassType::NewInstance command returned invalid string,",
2975617ae1cb798e58748946c0fa4299f5d982c7b8bSebastien Hertz                    expectedString, resultString);
2985617ae1cb798e58748946c0fa4299f5d982c7b8bSebastien Hertz        }
299ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    }
300ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz
301ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    private Value getStaticFieldValue(long classId, String fieldName) {
302ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz        long fieldId = checkField(classId, fieldName);
303ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz        return debuggeeWrapper.vmMirror.getReferenceTypeValue(classId, fieldId);
304ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz    }
305ad8a1ac1d45d7626686bfb431f1039e12d5f5794Sebastien Hertz}
306