1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  this work for additional information regarding copyright ownership.
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  the License.  You may obtain a copy of the License at
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  See the License for the specific language governing permissions and
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  limitations under the License.
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
18ab762bb740405d0fefcccf4a0899a234f995be13Narayan Kamathpackage org.apache.harmony.tests.java.lang.reflect;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.annotation.Annotation;
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.annotation.ElementType;
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.annotation.Retention;
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.annotation.RetentionPolicy;
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.annotation.Target;
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.reflect.Constructor;
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.reflect.Modifier;
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.reflect.Type;
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.reflect.TypeVariable;
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.HashSet;
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Set;
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class ConstructorTest extends junit.framework.TestCase {
33f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Retention(RetentionPolicy.RUNTIME)
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Target( {ElementType.CONSTRUCTOR, ElementType.PARAMETER})
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    static @interface ConstructorTestAnnotationRuntime0 {
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Retention(RetentionPolicy.RUNTIME)
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Target( {ElementType.CONSTRUCTOR, ElementType.PARAMETER})
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    static @interface ConstructorTestAnnotationRuntime1 {
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Retention(RetentionPolicy.CLASS)
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Target( {ElementType.CONSTRUCTOR, ElementType.PARAMETER})
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    static @interface ConstructorTestAnnotationClass0 {
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Retention(RetentionPolicy.SOURCE)
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Target( {ElementType.CONSTRUCTOR, ElementType.PARAMETER})
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    static @interface ConstructorTestAnnotationSource0 {
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    static class ConstructorTestHelper extends Object {
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int cval;
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        @ConstructorTestAnnotationRuntime0
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        @ConstructorTestAnnotationRuntime1
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        @ConstructorTestAnnotationClass0
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        @ConstructorTestAnnotationSource0
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public ConstructorTestHelper() throws IndexOutOfBoundsException {
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            cval = 99;
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public ConstructorTestHelper(
67f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes                @ConstructorTestAnnotationRuntime0
68f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes                @ConstructorTestAnnotationRuntime1
69f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes                @ConstructorTestAnnotationClass0
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                @ConstructorTestAnnotationSource0 Object x) {
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public ConstructorTestHelper(String... x) {
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        private ConstructorTestHelper(int a) {
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected ConstructorTestHelper(long a) {
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public int check() {
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return cval;
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
86f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    static class GenericConstructorTestHelper<T, S extends T, E extends Exception> {
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public GenericConstructorTestHelper(T t, S s) {}
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public GenericConstructorTestHelper() throws E{}
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
91f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
926a00ab92038e717b828161a1222fea0c54592705Elliott Hughes    static class NoPublicConstructorTestHelper {
936a00ab92038e717b828161a1222fea0c54592705Elliott Hughes        // This class has no public constructor.
946a00ab92038e717b828161a1222fea0c54592705Elliott Hughes    }
95f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//    Used to test synthetic constructor.
97f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes//
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//    static class Outer {
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        private Outer(){}
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        class Inner {
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//            {new Outer();}
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        }
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//    }
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getParameterAnnotations() throws Exception {
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Constructor<ConstructorTestHelper> ctor1 = ConstructorTestHelper.class
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getConstructor(Object.class);
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Annotation[][] paramAnnotations = ctor1.getParameterAnnotations();
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Annotations for wrong number of parameters returned", 1,
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                paramAnnotations.length);
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Wrong number of annotations returned", 2,
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                paramAnnotations[0].length);
113f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Set<Class<?>> ignoreOrder = new HashSet<Class<?>>();
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ignoreOrder.add(paramAnnotations[0][0].annotationType());
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ignoreOrder.add(paramAnnotations[0][1].annotationType());
117f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Missing ConstructorTestAnnotationRuntime0", ignoreOrder
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .contains(ConstructorTestAnnotationRuntime0.class));
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Missing ConstructorTestAnnotationRuntime1", ignoreOrder
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .contains(ConstructorTestAnnotationRuntime1.class));
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getDeclaredAnnotations() throws Exception {
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Constructor<ConstructorTestHelper> ctor1 = null;
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ctor1 = ConstructorTestHelper.class.getConstructor(new Class[0]);
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Annotation[] annotations = ctor1.getDeclaredAnnotations();
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Wrong number of annotations returned", 2,
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                annotations.length);
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Set<Class<?>> ignoreOrder = new HashSet<Class<?>>();
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ignoreOrder.add(annotations[0].annotationType());
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ignoreOrder.add(annotations[1].annotationType());
134f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Missing ConstructorTestAnnotationRuntime0", ignoreOrder
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .contains(ConstructorTestAnnotationRuntime0.class));
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Missing ConstructorTestAnnotationRuntime1", ignoreOrder
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .contains(ConstructorTestAnnotationRuntime1.class));
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_isVarArgs() throws Exception {
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Constructor<ConstructorTestHelper> varArgCtor = ConstructorTestHelper.class
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getConstructor(String[].class);
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Vararg constructor not recognized", varArgCtor.isVarArgs());
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Constructor<ConstructorTestHelper> nonVarArgCtor = ConstructorTestHelper.class
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getConstructor(Object.class);
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("Non vararg constructor recognized as vararg constructor",
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                nonVarArgCtor.isVarArgs());
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
151f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_hashCode() throws Exception {
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Constructor<ConstructorTestHelper> constructor = ConstructorTestHelper.class
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getConstructor();
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "The constructor's hashCode is not equal to the hashCode of the name of the declaring class",
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ConstructorTestHelper.class.getName().hashCode(), constructor
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        .hashCode());
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @SuppressWarnings("unchecked")
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_toGenericString() throws Exception {
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Constructor<GenericConstructorTestHelper> genericCtor = GenericConstructorTestHelper.class
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getConstructor(Object.class, Object.class);
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "Wrong generic string returned",
167ab762bb740405d0fefcccf4a0899a234f995be13Narayan Kamath                "public org.apache.harmony.tests.java.lang.reflect.ConstructorTest$GenericConstructorTestHelper(T,S)",
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                genericCtor.toGenericString());
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Constructor<GenericConstructorTestHelper> ctor = GenericConstructorTestHelper.class
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getConstructor();
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "Wrong generic string returned",
173ab762bb740405d0fefcccf4a0899a234f995be13Narayan Kamath                "public org.apache.harmony.tests.java.lang.reflect.ConstructorTest$GenericConstructorTestHelper() throws E",
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ctor.toGenericString());
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_equalsLjava_lang_Object() {
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Constructor<ConstructorTestHelper> ctor1 = null, ctor2 = null;
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ctor1 = ConstructorTestHelper.class.getConstructor(
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new Class[0]);
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ctor2 = ConstructorTestHelper.class.getConstructor(Object.class);
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Exception during equals test : " + e.getMessage());
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Different Contructors returned equal", !ctor1.equals(ctor2));
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getDeclaringClass() {
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        boolean val = false;
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Class<? extends ConstructorTestHelper> pclass = new ConstructorTestHelper().getClass();
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Constructor<? extends ConstructorTestHelper> ctor = pclass.getConstructor(new Class[0]);
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            val = ctor.getDeclaringClass().equals(pclass);
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Exception during test : " + e.getMessage());
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Returned incorrect declaring class", val);
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getExceptionTypes() {
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.lang.Class []
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // java.lang.reflect.Constructor.getExceptionTypes()
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Class[] exceptions = null;
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Class<? extends IndexOutOfBoundsException> ex = null;
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Constructor<? extends ConstructorTestHelper> ctor = new ConstructorTestHelper().getClass()
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getConstructor(new Class[0]);
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            exceptions = ctor.getExceptionTypes();
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ex = new IndexOutOfBoundsException().getClass();
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Exception during test : " + e.getMessage());
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Returned exception list of incorrect length",
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                1, exceptions.length);
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Returned incorrect exception", exceptions[0].equals(ex));
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getModifiers() {
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method int java.lang.reflect.Constructor.getModifiers()
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int mod = 0;
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Constructor<? extends ConstructorTestHelper> ctor = new ConstructorTestHelper().getClass()
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getConstructor(new Class[0]);
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            mod = ctor.getModifiers();
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Returned incorrect modifers for public ctor",
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    ((mod & Modifier.PUBLIC) == Modifier.PUBLIC)
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                            && ((mod & Modifier.PRIVATE) == 0));
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchMethodException e) {
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Exception during test : " + e.getMessage());
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Class[] cl = { int.class };
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Constructor<? extends ConstructorTestHelper> ctor = new ConstructorTestHelper().getClass()
235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getDeclaredConstructor(cl);
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            mod = ctor.getModifiers();
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Returned incorrect modifers for private ctor",
238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    ((mod & Modifier.PRIVATE) == Modifier.PRIVATE)
239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                            && ((mod & Modifier.PUBLIC) == 0));
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchMethodException e) {
241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Exception during test : " + e.getMessage());
242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Class[] cl = { long.class };
245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Constructor<? extends ConstructorTestHelper> ctor = new ConstructorTestHelper().getClass()
246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getDeclaredConstructor(cl);
247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            mod = ctor.getModifiers();
248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Returned incorrect modifers for private ctor",
249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    ((mod & Modifier.PROTECTED) == Modifier.PROTECTED)
250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                            && ((mod & Modifier.PUBLIC) == 0));
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchMethodException e) {
252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NoSuchMethodException during test : " + e.getMessage());
253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getName() {
257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.lang.String
258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // java.lang.reflect.Constructor.getName()
259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Constructor<? extends ConstructorTestHelper> ctor = new ConstructorTestHelper().getClass()
261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getConstructor(new Class[0]);
262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue(
263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    "Returned incorrect name: " + ctor.getName(),
264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    ctor
265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                            .getName()
266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                            .equals(
267ab762bb740405d0fefcccf4a0899a234f995be13Narayan Kamath                                    "org.apache.harmony.tests.java.lang.reflect.ConstructorTest$ConstructorTestHelper"));
268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Exception obtaining contructor : " + e.getMessage());
270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getParameterTypes() {
274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.lang.Class []
275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // java.lang.reflect.Constructor.getParameterTypes()
276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Class[] types = null;
277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Constructor<? extends ConstructorTestHelper> ctor = new ConstructorTestHelper().getClass()
279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getConstructor(new Class[0]);
280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            types = ctor.getParameterTypes();
281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Exception during getParameterTypes test:"
283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    + e.toString());
284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Incorrect parameter returned", 0, types.length);
286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Class[] parms = null;
288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            parms = new Class[1];
290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            parms[0] = new Object().getClass();
291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Constructor<? extends ConstructorTestHelper> ctor = new ConstructorTestHelper().getClass()
292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getConstructor(parms);
293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            types = ctor.getParameterTypes();
294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Exception during getParameterTypes test:"
296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    + e.toString());
297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Incorrect parameter returned", types[0].equals(parms[0]));
299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
300f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @SuppressWarnings("unchecked")
302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getGenericParameterTypes() {
303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Type[] types = null;
304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Constructor<? extends ConstructorTestHelper> ctor = new ConstructorTestHelper()
306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getClass().getConstructor(new Class[0]);
307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            types = ctor.getGenericParameterTypes();
308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Exception during getParameterTypes test:" + e.toString());
310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Incorrect parameter returned", 0, types.length);
312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Class<?>[] parms = null;
314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            parms = new Class[] {Object.class};
316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Constructor<? extends ConstructorTestHelper> ctor = new ConstructorTestHelper()
317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getClass().getConstructor(parms);
318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            types = ctor.getGenericParameterTypes();
319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Exception during getParameterTypes test:" + e.toString());
321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Incorrect parameter returned", types[0].equals(parms[0]));
323f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
324f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Constructor<GenericConstructorTestHelper> constructor = GenericConstructorTestHelper.class
327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getConstructor(Object.class, Object.class);
328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            types = constructor.getGenericParameterTypes();
329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Exception during getParameterTypes test:" + e.toString());
331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
332f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Wrong number of parameter types returned", 2,
334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                types.length);
335f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Wrong number of parameter types returned", "T",
337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ((TypeVariable)types[0]).getName());
338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Wrong number of parameter types returned", "S",
339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ((TypeVariable)types[1]).getName());
340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
341f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @SuppressWarnings("unchecked")
343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getGenericExceptionTypes() {
344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Type[] types = null;
345f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Constructor<? extends ConstructorTestHelper> ctor = new ConstructorTestHelper()
348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getClass().getConstructor(new Class[0]);
349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            types = ctor.getGenericExceptionTypes();
350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Exception during getGenericExceptionTypes test:" + e.toString());
352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Wrong number of exception types returned", 1, types.length);
354f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
355f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Constructor<GenericConstructorTestHelper> constructor = GenericConstructorTestHelper.class
358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getConstructor();
359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            types = constructor.getGenericExceptionTypes();
360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Exception during getGenericExceptionTypes test:"
362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    + e.toString());
363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
364f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Wrong number of exception types returned", 1,
366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                types.length);
367f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Wrong exception name returned.", "E",
369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ((TypeVariable)types[0]).getName());
370f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
372f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
373f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_newInstance$Ljava_lang_Object() {
375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.lang.Object
376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // java.lang.reflect.Constructor.newInstance(java.lang.Object [])
377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ConstructorTestHelper test = null;
379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Constructor<? extends ConstructorTestHelper> ctor = new ConstructorTestHelper().getClass()
381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getConstructor(new Class[0]);
382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            test = ctor.newInstance((Object[])null);
383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Failed to create instance : " + e.getMessage());
385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("improper instance created", 99, test.check());
387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_toString() {
390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.lang.String
391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // java.lang.reflect.Constructor.toString()
392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Class[] parms = null;
393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Constructor<? extends ConstructorTestHelper> ctor = null;
394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            parms = new Class[1];
396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            parms[0] = new Object().getClass();
397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ctor = new ConstructorTestHelper().getClass().getConstructor(parms);
398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Exception during getParameterTypes test:"
400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    + e.toString());
401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(
403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "Returned incorrect string representation: " + ctor.toString(),
404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ctor
405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        .toString()
406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        .equals(
407ab762bb740405d0fefcccf4a0899a234f995be13Narayan Kamath                                "public org.apache.harmony.tests.java.lang.reflect.ConstructorTest$ConstructorTestHelper(java.lang.Object)"));
408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
409f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
4106a00ab92038e717b828161a1222fea0c54592705Elliott Hughes    public void test_getConstructor() throws Exception {
4116a00ab92038e717b828161a1222fea0c54592705Elliott Hughes        // Passing new Class[0] should be equivalent to (Class[]) null.
4126a00ab92038e717b828161a1222fea0c54592705Elliott Hughes        Class<ConstructorTestHelper> c2 = ConstructorTestHelper.class;
4136a00ab92038e717b828161a1222fea0c54592705Elliott Hughes        assertEquals(c2.getConstructor(new Class[0]), c2.getConstructor((Class[]) null));
4146a00ab92038e717b828161a1222fea0c54592705Elliott Hughes        assertEquals(c2.getDeclaredConstructor(new Class[0]),
4156a00ab92038e717b828161a1222fea0c54592705Elliott Hughes                     c2.getDeclaredConstructor((Class[]) null));
416f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
4176a00ab92038e717b828161a1222fea0c54592705Elliott Hughes        // We can get a non-public constructor via getDeclaredConstructor...
4186a00ab92038e717b828161a1222fea0c54592705Elliott Hughes        Class<NoPublicConstructorTestHelper> c1 = NoPublicConstructorTestHelper.class;
4196a00ab92038e717b828161a1222fea0c54592705Elliott Hughes        c1.getDeclaredConstructor((Class[]) null);
4206a00ab92038e717b828161a1222fea0c54592705Elliott Hughes        // ...but not with getConstructor (which only returns public constructors).
4216a00ab92038e717b828161a1222fea0c54592705Elliott Hughes        try {
4226a00ab92038e717b828161a1222fea0c54592705Elliott Hughes            c1.getConstructor((Class[]) null);
4236a00ab92038e717b828161a1222fea0c54592705Elliott Hughes            fail("Should throw NoSuchMethodException");
4246a00ab92038e717b828161a1222fea0c54592705Elliott Hughes        } catch (NoSuchMethodException ex) {
4256a00ab92038e717b828161a1222fea0c54592705Elliott Hughes            // Expected.
4266a00ab92038e717b828161a1222fea0c54592705Elliott Hughes        }
4276a00ab92038e717b828161a1222fea0c54592705Elliott Hughes    }
428f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Sets up the fixture, for example, open a network connection. This method
431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * is called before a test is executed.
432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected void setUp() {
434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Tears down the fixture, for example, close a network connection. This
438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * method is called after a test is executed.
439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected void tearDown() {
441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
443