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