17155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz/* 27155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * Licensed to the Apache Software Foundation (ASF) under one or more 37155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * contributor license agreements. See the NOTICE file distributed with 47155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * this work for additional information regarding copyright ownership. 57155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * The ASF licenses this file to You under the Apache License, Version 2.0 67155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * (the "License"); you may not use this file except in compliance with 77155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * the License. You may obtain a copy of the License at 87155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * 97155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * http://www.apache.org/licenses/LICENSE-2.0 107155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * 117155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * Unless required by applicable law or agreed to in writing, software 127155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * distributed under the License is distributed on an "AS IS" BASIS, 137155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 147155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * 157155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * See the License for the specific language governing permissions and 167155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * limitations under the License. 177155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz */ 187155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz 197155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertzpackage org.apache.harmony.jpda.tests.jdwp.ClassType; 207155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz 217155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertzimport org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants; 227155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertzimport org.apache.harmony.jpda.tests.framework.jdwp.Value; 237155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz 247155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertzimport java.util.List; 257155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz 267155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz/** 277155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * JDWP unit test for ClassType.NewInstance command for particular reference 287155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * types. 297155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * 307155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * <p>Note: 317155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * <ul> 327155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * <li>we do not test JT_CLASS because we cannot create java.lang.Class objects.</li> 337155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * <li>We do not test JT_ARRAY because arrays are created with ArrayType.NewInstance.</li> 347155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * </ul></p> 357155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz */ 367155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertzpublic class NewInstanceTagTest extends AbstractNewInstanceTestCase { 377155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz 387155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz @Override 397155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz protected String getDebuggeeClassName() { 407155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz return NewInstanceTagDebuggee.class.getName(); 417155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz } 427155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz 437155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz /** 447155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * Test ClassType.NewInstance of java.lang.Object returns JT_OBJECT tag. 457155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz */ 467155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz public void testNewInstance_Object() { 477155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz checkNewInstanceTag("Ljava/lang/Object;", "()V", new NoConstructorArgumentProvider(), 485617ae1cb798e58748946c0fa4299f5d982c7b8bSebastien Hertz new Checker(JDWPConstants.Tag.OBJECT_TAG)); 497155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz } 507155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz 517155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz /** 527155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * Test ClassType.NewInstance of a subclass of java.lang.Object returns JT_OBJECT tag. 537155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz */ 547155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz public void testNewInstance_MyObject() { 557155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz String subclassSig = getClassSignature(NewInstanceTagDebuggee.MyObject.class); 567155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz checkNewInstanceTag(subclassSig, "()V", new NoConstructorArgumentProvider(), 575617ae1cb798e58748946c0fa4299f5d982c7b8bSebastien Hertz new Checker(JDWPConstants.Tag.OBJECT_TAG)); 587155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz } 597155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz 607155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz /** 617155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * Test ClassType.NewInstance of java.lang.String returns JT_STRING tag. 627155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz */ 637155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz public void testNewInstance_String() { 647155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz checkNewInstanceTag("Ljava/lang/String;", "()V", new NoConstructorArgumentProvider(), 655617ae1cb798e58748946c0fa4299f5d982c7b8bSebastien Hertz new Checker(JDWPConstants.Tag.STRING_TAG)); 667155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz } 677155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz 687155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz /** 697155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * Test ClassType.NewInstance of a subclass of java.lang.ClassLoader returns 707155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * JT_CLASS_LOADER tag. 717155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * 727155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * Note: we use a subclass only because java.lang.ClassLoader is an abstract 737155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * class. 747155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz */ 757155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz public void testNewInstance_ClassLoader() { 767155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz String subclassSig = getClassSignature(NewInstanceTagDebuggee.MyClassLoader.class); 777155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz checkNewInstanceTag(subclassSig, "()V", new NoConstructorArgumentProvider(), 785617ae1cb798e58748946c0fa4299f5d982c7b8bSebastien Hertz new Checker(JDWPConstants.Tag.CLASS_LOADER_TAG)); 797155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz } 807155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz 817155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz /** 827155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * Test ClassType.NewInstance of java.lang.Thread returns JT_THREAD tag. 837155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz */ 847155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz public void testNewInstance_Thread() { 857155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz checkNewInstanceTag("Ljava/lang/Thread;", "()V", new NoConstructorArgumentProvider(), 865617ae1cb798e58748946c0fa4299f5d982c7b8bSebastien Hertz new Checker(JDWPConstants.Tag.THREAD_TAG)); 877155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz } 887155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz 897155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz /** 907155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * Test ClassType.NewInstance of a subclass of java.lang.Thread returns 917155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * JT_THREAD tag. 927155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz */ 937155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz public void testNewInstance_MyThread() { 947155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz String subclassSig = getClassSignature(NewInstanceTagDebuggee.MyThread.class); 957155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz checkNewInstanceTag(subclassSig, "()V", new NoConstructorArgumentProvider(), 965617ae1cb798e58748946c0fa4299f5d982c7b8bSebastien Hertz new Checker(JDWPConstants.Tag.THREAD_TAG)); 977155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz } 987155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz 997155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz /** 1007155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * Test ClassType.NewInstance of java.lang.ThreadGroup returns 1017155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * JT_THREAD_GROUP tag. 1027155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz */ 1037155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz public void testNewInstance_ThreadGroup() { 1047155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz checkNewInstanceTag("Ljava/lang/ThreadGroup;", "(Ljava/lang/String;)V", 1057155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz new ConstructorArgumentsProvider() { 1067155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz @Override 1077155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz public void provideConstructorArguments(List<Value> constructorArguments) { 1087155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz // Create string "foo". 1097155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz long stringId = debuggeeWrapper.vmMirror.createString("foo"); 1107155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz assertTrue("Invalid string id", stringId != -1); 1117155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz assertTrue("Null string id", stringId != 0); 1127155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz // Pass created string to constructor. 113e9e1750a916cf602df722515736d21af63de1defSebastien Hertz constructorArguments.add(Value.createObjectValue(JDWPConstants.Tag.STRING_TAG, stringId)); 1147155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz } 1155617ae1cb798e58748946c0fa4299f5d982c7b8bSebastien Hertz }, new Checker(JDWPConstants.Tag.THREAD_GROUP_TAG)); 1167155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz } 1177155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz 1187155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz /** 1197155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * Test ClassType.NewInstance of a subclass of java.lang.ThreadGroup returns 1207155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz * JT_THREAD_GROUP tag. 1217155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz */ 1227155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz public void testNewInstance_MyThreadGroup() { 1237155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz String subclassSig = getClassSignature(NewInstanceTagDebuggee.MyThreadGroup.class); 1247155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz checkNewInstanceTag(subclassSig, "()V", new NoConstructorArgumentProvider(), 1255617ae1cb798e58748946c0fa4299f5d982c7b8bSebastien Hertz new Checker(JDWPConstants.Tag.THREAD_GROUP_TAG)); 1267155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz } 1277155f480730369fd86657146a4343551f1a0e0d0Sebastien Hertz} 128