• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Licensed to the Apache Software Foundation (ASF) under one or more
3  *  contributor license agreements.  See the NOTICE file distributed with
4  *  this work for additional information regarding copyright ownership.
5  *  The ASF licenses this file to You under the Apache License, Version 2.0
6  *  (the "License"); you may not use this file except in compliance with
7  *  the License.  You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  */
17 
18 package org.apache.harmony.luni.tests.java.lang.reflect;
19 
20 import java.io.ByteArrayOutputStream;
21 import java.io.CharArrayWriter;
22 import java.io.PrintStream;
23 import java.io.PrintWriter;
24 import java.lang.reflect.InvocationTargetException;
25 import java.lang.reflect.Method;
26 
27 public class InvocationTargetExceptionTest extends junit.framework.TestCase {
28 
29 	static class TestMethod {
TestMethod()30 		public TestMethod() {
31 		}
32 
voidMethod()33 		public void voidMethod() throws IllegalArgumentException {
34 		}
35 
parmTest(int x, short y, String s, boolean bool, Object o, long l, byte b, char c, double d, float f)36 		public void parmTest(int x, short y, String s, boolean bool, Object o,
37 				long l, byte b, char c, double d, float f) {
38 		}
39 
intMethod()40 		public int intMethod() {
41 			return 1;
42 		}
43 
printTest(int x, short y, String s, boolean bool, Object o, long l, byte b, char c, double d, float f)44 		public static final void printTest(int x, short y, String s,
45 				boolean bool, Object o, long l, byte b, char c, double d,
46 				float f) {
47 		}
48 
doubleMethod()49 		public double doubleMethod() {
50 			return 1.0;
51 		}
52 
shortMethod()53 		public short shortMethod() {
54 			return (short) 1;
55 		}
56 
byteMethod()57 		public byte byteMethod() {
58 			return (byte) 1;
59 		}
60 
floatMethod()61 		public float floatMethod() {
62 			return 1.0f;
63 		}
64 
longMethod()65 		public long longMethod() {
66 			return 1l;
67 		}
68 
charMethod()69 		public char charMethod() {
70 			return 'T';
71 		}
72 
objectMethod()73 		public Object objectMethod() {
74 			return new Object();
75 		}
76 
prstatic()77 		private static void prstatic() {
78 		}
79 
pustatic()80 		public static void pustatic() {
81 		}
82 
pustatsynch()83 		public static synchronized void pustatsynch() {
84 		}
85 
invokeStaticTest()86 		public static int invokeStaticTest() {
87 			return 1;
88 		}
89 
invokeInstanceTest()90 		public int invokeInstanceTest() {
91 			return 1;
92 		}
93 
privateInvokeTest()94 		private int privateInvokeTest() {
95 			return 1;
96 		}
97 
invokeExceptionTest()98 		public int invokeExceptionTest() throws NullPointerException {
99 			throw new NullPointerException();
100 		}
101 
pustatsynchnat()102 		public static synchronized native void pustatsynchnat();
103 
104 	}
105 
106 	abstract class AbstractTestMethod {
puabs()107 		public abstract void puabs();
108 	}
109 
110 	/**
111 	 * @tests java.lang.reflect.InvocationTargetException#InvocationTargetException(java.lang.Throwable)
112 	 */
test_ConstructorLjava_lang_Throwable()113 	public void test_ConstructorLjava_lang_Throwable() {
114 		// Test for method
115 		// java.lang.reflect.InvocationTargetException(java.lang.Throwable)
116 		try {
117 			Method mth = TestMethod.class.getDeclaredMethod(
118 					"invokeExceptionTest", new Class[0]);
119 			Object[] args = { Object.class };
120 			Object ret = mth.invoke(new TestMethod(), new Object[0]);
121 		} catch (InvocationTargetException e) {
122 			// Correct behaviour
123 			return;
124 		} catch (NoSuchMethodException e) {
125 		} catch (IllegalAccessException e) {
126 		}
127 		fail("Failed to throw exception");
128 	}
129 
130 	/**
131 	 * @tests java.lang.reflect.InvocationTargetException#InvocationTargetException(java.lang.Throwable,
132 	 *        java.lang.String)
133 	 */
test_ConstructorLjava_lang_ThrowableLjava_lang_String()134 	public void test_ConstructorLjava_lang_ThrowableLjava_lang_String() {
135 		// Test for method
136 		// java.lang.reflect.InvocationTargetException(java.lang.Throwable,
137 		// java.lang.String)
138 		try {
139 			Method mth = TestMethod.class.getDeclaredMethod(
140 					"invokeExceptionTest", new Class[0]);
141 			Object[] args = { Object.class };
142 			Object ret = mth.invoke(new TestMethod(), new Object[0]);
143 		} catch (InvocationTargetException e) {
144 			// Correct behaviour
145 			return;
146 		} catch (NoSuchMethodException e) {
147 			;
148 		} catch (IllegalAccessException e) {
149 		}
150 		fail("Failed to throw exception");
151 	}
152 
153 	/**
154 	 * @tests java.lang.reflect.InvocationTargetException#getTargetException()
155 	 */
test_getTargetException()156 	public void test_getTargetException() throws Exception {
157 		// Test for method java.lang.Throwable
158 		// java.lang.reflect.InvocationTargetException.getTargetException()
159 		try {
160 			Method mth = TestMethod.class.getDeclaredMethod(
161 					"invokeExceptionTest", new Class[0]);
162 			Object[] args = { Object.class };
163 			Object ret = mth.invoke(new TestMethod(), new Object[0]);
164 		} catch (InvocationTargetException e) {
165 			// Correct behaviour
166 			assertTrue("Returned incorrect target exception", e
167 					.getTargetException() instanceof NullPointerException);
168 			return;
169 		}
170 
171 		fail("Failed to throw exception");
172 	}
173 
174 	/**
175 	 * @tests java.lang.reflect.InvocationTargetException#printStackTrace()
176 	 */
test_printStackTrace()177 	public void test_printStackTrace() {
178 		// Test for method void
179 		// java.lang.reflect.InvocationTargetException.printStackTrace()
180                 ByteArrayOutputStream bao = new ByteArrayOutputStream();
181                 PrintStream ps = new PrintStream(bao);
182                 PrintStream oldErr = System.err;
183                 System.setErr(ps);
184                 InvocationTargetException ite = new InvocationTargetException(null);
185                 ite.printStackTrace();
186                 System.setErr(oldErr);
187 
188                 String s = new String(bao.toByteArray());
189 
190                 assertTrue("Incorrect Stack trace: " + s, s != null
191                                 && s.length() > 300);
192 	}
193 
194 	/**
195 	 * @tests java.lang.reflect.InvocationTargetException#printStackTrace(java.io.PrintStream)
196 	 */
test_printStackTraceLjava_io_PrintStream()197 	public void test_printStackTraceLjava_io_PrintStream() {
198 		// Test for method void
199 		// java.lang.reflect.InvocationTargetException.printStackTrace(java.io.PrintStream)
200 		assertTrue("Tested via test_printStackTrace().", true);
201 		ByteArrayOutputStream bao = new ByteArrayOutputStream();
202 		PrintStream ps = new PrintStream(bao);
203 		InvocationTargetException ite = new InvocationTargetException(
204 				new InvocationTargetException(null));
205 		ite.printStackTrace(ps);
206 		String s = bao.toString();
207 		assertTrue("printStackTrace failed." + s.length(), s != null
208 				&& s.length() > 400);
209 	}
210 
211 	/**
212 	 * @tests java.lang.reflect.InvocationTargetException#printStackTrace(java.io.PrintWriter)
213 	 */
test_printStackTraceLjava_io_PrintWriter()214 	public void test_printStackTraceLjava_io_PrintWriter() {
215 		// Test for method void
216 		// java.lang.reflect.InvocationTargetException.printStackTrace(java.io.PrintWriter)
217                 PrintWriter pw;
218                 InvocationTargetException ite;
219                 String s;
220                 CharArrayWriter caw = new CharArrayWriter();
221                 pw = new PrintWriter(caw);
222                 ite = new InvocationTargetException(new InvocationTargetException(
223                                 null));
224                 ite.printStackTrace(pw);
225 
226                 s = caw.toString();
227                 assertTrue("printStackTrace failed." + s.length(), s != null
228                                 && s.length() > 400);
229                 pw.close();
230 
231                 ByteArrayOutputStream bao = new ByteArrayOutputStream();
232                 pw = new PrintWriter(bao);
233                 ite = new InvocationTargetException(new InvocationTargetException(
234                                 null));
235                 ite.printStackTrace(pw);
236 
237                 pw.flush(); // Test will fail if this line removed.
238                 s = bao.toString();
239                 assertTrue("printStackTrace failed." + s.length(), s != null
240                                 && s.length() > 400);
241 	}
242 
243     /**
244      * Test method for
245      * {@link java.lang.reflect.InvocationTargetException#InvocationTargetException(java.lang.Throwable, java.lang.String)}
246      *
247      */
testInvocationTargetExceptionThrowableString()248     public void testInvocationTargetExceptionThrowableString() {
249         Exception cause = null;
250         InvocationTargetException e = new InvocationTargetException(cause,
251                 "SomeMessage");
252         assertNull(e.getCause());
253         assertEquals("Wrong Message", "SomeMessage", e.getMessage());
254     }
255 
256     class MyInvocationTargetException extends InvocationTargetException {
257         private static final long serialVersionUID = 1L;
258     }
259 
260     /**
261      * Test method for
262      * {@link java.lang.reflect.InvocationTargetException#InvocationTargetException()}
263      *
264      */
testInvocationTargetException()265     public void testInvocationTargetException() {
266         InvocationTargetException e = new MyInvocationTargetException();
267         assertNull(e.getCause());
268     }
269 
270 
271 	/**
272 	 * Sets up the fixture, for example, open a network connection. This method
273 	 * is called before a test is executed.
274 	 */
setUp()275 	protected void setUp() {
276 	}
277 
278 	/**
279 	 * Tears down the fixture, for example, close a network connection. This
280 	 * method is called after a test is executed.
281 	 */
tearDown()282 	protected void tearDown() {
283 	}
284 }
285