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