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.io.ByteArrayOutputStream;
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.CharArrayWriter;
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.PrintStream;
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.PrintWriter;
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.reflect.Constructor;
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.reflect.InvocationTargetException;
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.reflect.Method;
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.reflect.Modifier;
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class InvocationTargetExceptionTest extends junit.framework.TestCase {
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    static class TestMethod {
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestMethod() {
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void voidMethod() throws IllegalArgumentException {
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void parmTest(int x, short y, String s, boolean bool, Object o,
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                long l, byte b, char c, double d, float f) {
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public int intMethod() {
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return 1;
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public static final void printTest(int x, short y, String s,
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                boolean bool, Object o, long l, byte b, char c, double d,
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                float f) {
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public double doubleMethod() {
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return 1.0;
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public short shortMethod() {
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return (short) 1;
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public byte byteMethod() {
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return (byte) 1;
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public float floatMethod() {
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return 1.0f;
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public long longMethod() {
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return 1l;
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public char charMethod() {
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return 'T';
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Object objectMethod() {
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return new Object();
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        private static void prstatic() {
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public static void pustatic() {
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public static synchronized void pustatsynch() {
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public static int invokeStaticTest() {
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return 1;
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public int invokeInstanceTest() {
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return 1;
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        private int privateInvokeTest() {
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return 1;
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public int invokeExceptionTest() throws NullPointerException {
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new NullPointerException();
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public static synchronized native void pustatsynchnat();
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    abstract class AbstractTestMethod {
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public abstract void puabs();
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
111f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    class SubInvocationTargetException extends InvocationTargetException {}
113f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
115229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.lang.reflect.InvocationTargetException#InvocationTargetException()
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_Constructor() throws Exception {
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Constructor<InvocationTargetException> ctor = InvocationTargetException.class
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getDeclaredConstructor();
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull("Parameterless constructor does not exist.", ctor);
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Constructor is not protected", Modifier.isProtected(ctor
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getModifiers()));
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //create an instance of a subtype using this constructor
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SubInvocationTargetException subException = new SubInvocationTargetException();
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
128229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.lang.reflect.InvocationTargetException#InvocationTargetException(java.lang.Throwable)
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_ConstructorLjava_lang_Throwable() {
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // java.lang.reflect.InvocationTargetException(java.lang.Throwable)
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Method mth = TestMethod.class.getDeclaredMethod(
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    "invokeExceptionTest", new Class[0]);
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Object[] args = { Object.class };
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Object ret = mth.invoke(new TestMethod(), new Object[0]);
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InvocationTargetException e) {
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Correct behaviour
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchMethodException e) {
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IllegalAccessException e) {
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        fail("Failed to throw exception");
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
148229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.lang.reflect.InvocationTargetException#InvocationTargetException(java.lang.Throwable,
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *        java.lang.String)
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_ConstructorLjava_lang_ThrowableLjava_lang_String() {
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // java.lang.reflect.InvocationTargetException(java.lang.Throwable,
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // java.lang.String)
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Method mth = TestMethod.class.getDeclaredMethod(
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    "invokeExceptionTest", new Class[0]);
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Object[] args = { Object.class };
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Object ret = mth.invoke(new TestMethod(), new Object[0]);
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InvocationTargetException e) {
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Correct behaviour
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchMethodException e) {
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ;
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IllegalAccessException e) {
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        fail("Failed to throw exception");
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
171229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.lang.reflect.InvocationTargetException#getTargetException()
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getTargetException() {
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.lang.Throwable
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // java.lang.reflect.InvocationTargetException.getTargetException()
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Method mth = TestMethod.class.getDeclaredMethod(
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    "invokeExceptionTest", new Class[0]);
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Object[] args = { Object.class };
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Object ret = mth.invoke(new TestMethod(), new Object[0]);
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InvocationTargetException e) {
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Correct behaviour
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Returned incorrect target exception", e
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getTargetException() instanceof NullPointerException);
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Exception during constructor test : " + e.getMessage());
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        fail("Failed to throw exception");
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
191f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
193229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.lang.reflect.InvocationTargetException#getCause()
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getCause() {
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // java.lang.reflect.InvocationTargetException.getCause()
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Method mth = TestMethod.class.getDeclaredMethod(
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    "invokeExceptionTest", new Class[0]);
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Object[] args = {Object.class};
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Object ret = mth.invoke(new TestMethod(), new Object[0]);
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InvocationTargetException e) {
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Correct behaviour
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Returned incorrect cause",
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    e.getCause() instanceof NullPointerException);
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Exception during InvocationTargetException test : "
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    + e.getMessage());
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        fail("Failed to throw exception");
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
215229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.lang.reflect.InvocationTargetException#printStackTrace()
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_printStackTrace() {
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method void
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // java.lang.reflect.InvocationTargetException.printStackTrace()
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ByteArrayOutputStream bao = new ByteArrayOutputStream();
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            PrintStream ps = new PrintStream(bao);
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            PrintStream oldErr = System.err;
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            System.setErr(ps);
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            InvocationTargetException ite = new InvocationTargetException(null);
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ite.printStackTrace();
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            System.setErr(oldErr);
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            String s = new String(bao.toByteArray());
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Incorrect Stack trace: " + s, s != null
232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    && s.length() > 300);
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("printStackTrace() caused exception : " + e.getMessage());
235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
239229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.lang.reflect.InvocationTargetException#printStackTrace(java.io.PrintStream)
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_printStackTraceLjava_io_PrintStream() {
242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method void
243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // java.lang.reflect.InvocationTargetException.printStackTrace(java.io.PrintStream)
244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Tested via test_printStackTrace().", true);
245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ByteArrayOutputStream bao = new ByteArrayOutputStream();
246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        PrintStream ps = new PrintStream(bao);
247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        InvocationTargetException ite = new InvocationTargetException(
248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new InvocationTargetException(null));
249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ite.printStackTrace(ps);
250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String s = bao.toString();
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("printStackTrace failed." + s.length(), s != null
252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && s.length() > 400);
253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
256229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.lang.reflect.InvocationTargetException#printStackTrace(java.io.PrintWriter)
257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_printStackTraceLjava_io_PrintWriter() {
259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method void
260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // java.lang.reflect.InvocationTargetException.printStackTrace(java.io.PrintWriter)
261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            PrintWriter pw;
263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            InvocationTargetException ite;
264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            String s;
265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            CharArrayWriter caw = new CharArrayWriter();
266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            pw = new PrintWriter(caw);
267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ite = new InvocationTargetException(new InvocationTargetException(
268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    null));
269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ite.printStackTrace(pw);
270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            s = caw.toString();
272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("printStackTrace failed." + s.length(), s != null
273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    && s.length() > 400);
274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            pw.close();
275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ByteArrayOutputStream bao = new ByteArrayOutputStream();
277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            pw = new PrintWriter(bao);
278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ite = new InvocationTargetException(new InvocationTargetException(
279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    null));
280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ite.printStackTrace(pw);
281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            pw.flush(); // Test will fail if this line removed.
283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            s = bao.toString();
284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("printStackTrace failed." + s.length(), s != null
285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    && s.length() > 400);
286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Exception during test : " + e.getMessage());
289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Sets up the fixture, for example, open a network connection. This method
294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * is called before a test is executed.
295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected void setUp() {
297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Tears down the fixture, for example, close a network connection. This
301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * method is called after a test is executed.
302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected void tearDown() {
304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
306