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