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 tests.api.java.lang.reflect; 19 20 import java.lang.annotation.Annotation; 21 import java.lang.annotation.ElementType; 22 import java.lang.annotation.Retention; 23 import java.lang.annotation.RetentionPolicy; 24 import java.lang.annotation.Target; 25 import java.lang.reflect.InvocationTargetException; 26 import java.lang.reflect.Method; 27 import java.lang.reflect.Modifier; 28 import java.lang.reflect.Type; 29 import java.lang.reflect.TypeVariable; 30 import java.util.HashSet; 31 import java.util.Set; 32 33 public class MethodTest extends junit.framework.TestCase { 34 35 static class TestMethod { 36 public TestMethod() { 37 } 38 39 public void voidMethod() throws IllegalArgumentException { 40 } 41 42 public void parmTest(int x, short y, String s, boolean bool, Object o, 43 long l, byte b, char c, double d, float f) { 44 } 45 46 public int intMethod() { 47 return 1; 48 } 49 50 public static final void printTest(int x, short y, String s, 51 boolean bool, Object o, long l, byte b, char c, double d, 52 float f) { 53 } 54 55 public double doubleMethod() { 56 return 1.0; 57 } 58 59 public short shortMethod() { 60 return (short) 1; 61 } 62 63 public byte byteMethod() { 64 return (byte) 1; 65 } 66 67 public float floatMethod() { 68 return 1.0f; 69 } 70 71 public long longMethod() { 72 return 1l; 73 } 74 75 public char charMethod() { 76 return 'T'; 77 } 78 79 public Object objectMethod() { 80 return new Object(); 81 } 82 83 private static void prstatic() { 84 } 85 86 public static void pustatic() { 87 } 88 89 public static synchronized void pustatsynch() { 90 } 91 92 public static int invokeStaticTest() { 93 return 1; 94 } 95 96 public int invokeInstanceTest() { 97 return 1; 98 } 99 100 private int privateInvokeTest() { 101 return 1; 102 } 103 104 public int invokeExceptionTest() throws NullPointerException { 105 throw new NullPointerException(); 106 } 107 108 public static synchronized native void pustatsynchnat(); 109 110 public void publicVoidVarargs(Object... param){} 111 public void publicVoidArray(Object[] param){} 112 113 public void annotatedParameter(@TestAnno @Deprecated int a, 114 @Deprecated int b, int c) { 115 } 116 117 @Deprecated 118 @TestAnno 119 public void annotatedMethod(){} 120 121 public void hashCodeTest(int i){} 122 public void hashCodeTest(String s){} 123 124 public void invokeCastTest1(byte param) { 125 } 126 127 public void invokeCastTest1(short param) { 128 } 129 130 public void invokeCastTest1(int param) { 131 } 132 133 public void invokeCastTest1(long param) { 134 } 135 136 public void invokeCastTest1(float param) { 137 } 138 139 public void invokeCastTest1(double param) { 140 } 141 142 public void invokeCastTest1(char param) { 143 } 144 145 public void invokeCastTest1(boolean param) { 146 } 147 } 148 149 @Retention(RetentionPolicy.RUNTIME) 150 @Target({ElementType.PARAMETER, ElementType.METHOD}) 151 public static @interface TestAnno{ 152 public static final String DEFAULT_VALUE = "DEFAULT_VALUE"; 153 154 String value() default DEFAULT_VALUE; 155 } 156 157 abstract class AbstractTestMethod { 158 public abstract void puabs(); 159 } 160 161 class TestMethodSub extends TestMethod { 162 public int invokeInstanceTest() { 163 return 0; 164 } 165 } 166 167 static interface IBrigeTest<T>{ 168 T m(); 169 } 170 171 static class BrigeTest implements IBrigeTest<String> { 172 public String m(){ return null; } 173 } 174 175 static class ExceptionTest<T extends Exception>{ 176 @SuppressWarnings("unused") 177 void exceptionTest() throws T{} 178 } 179 180 static class GenericReturnType<T> { 181 T returnGeneric(){return null;} 182 } 183 184 static class GenericString<T> { 185 public static final String GENERIC = 186 "T tests.api.java.lang.reflect.MethodTest$GenericString.genericString(T)"; 187 T genericString(T t) { 188 return null; 189 } 190 } 191 192 /** 193 * java.lang.reflect.Method#equals(java.lang.Object) 194 */ 195 public void test_equalsLjava_lang_Object() { 196 // Test for method boolean 197 // java.lang.reflect.Method.equals(java.lang.Object) 198 199 Method m1 = null, m2 = null; 200 try { 201 m1 = TestMethod.class.getMethod("invokeInstanceTest", new Class[0]); 202 m2 = TestMethodSub.class.getMethod("invokeInstanceTest", 203 new Class[0]); 204 } catch (Exception e) { 205 fail("Exception during equals test : " + e.getMessage()); 206 } 207 assertTrue("Overriden method returned equal", !m1.equals(m2)); 208 assertTrue("Same method returned not-equal", m1.equals(m1)); 209 try { 210 m1 = TestMethod.class.getMethod("invokeStaticTest", new Class[0]); 211 m2 = TestMethodSub.class 212 .getMethod("invokeStaticTest", new Class[0]); 213 } catch (Exception e) { 214 fail("Exception during equals test : " + e.getMessage()); 215 } 216 assertTrue("Inherited method returned not-equal", m1.equals(m2)); 217 } 218 219 /** 220 * java.lang.Class#getMethod(java.lang.String, java.lang.Class[]) 221 */ 222 public void test_getMethod() throws NoSuchMethodException, SecurityException { 223 // Check that getMethod treats null parameterTypes the same as an empty array. 224 Method m1 = TestMethod.class.getMethod("invokeInstanceTest", new Class[0]); 225 Method m2 = TestMethod.class.getMethod("invokeInstanceTest", (Class[]) null); 226 assertEquals(m1, m2); 227 } 228 229 /** 230 * java.lang.Class#getDeclaredMethod(java.lang.String, java.lang.Class[]) 231 */ 232 public void test_getDeclaredMethod() throws NoSuchMethodException, SecurityException { 233 // Check that getDeclaredMethod treats null parameterTypes the same as an empty array. 234 Method m1 = TestMethod.class.getDeclaredMethod("invokeInstanceTest", new Class[0]); 235 Method m2 = TestMethod.class.getDeclaredMethod("invokeInstanceTest", (Class[]) null); 236 assertEquals(m1, m2); 237 } 238 239 /** 240 * java.lang.reflect.Method#getDeclaringClass() 241 */ 242 public void test_getDeclaringClass() { 243 // Test for method java.lang.Class 244 // java.lang.reflect.Method.getDeclaringClass() 245 246 Method[] mths; 247 248 try { 249 mths = TestMethod.class.getDeclaredMethods(); 250 assertTrue("Returned incorrect declaring class: " 251 + mths[0].getDeclaringClass().toString(), mths[0] 252 .getDeclaringClass().equals(TestMethod.class)); 253 } catch (Exception e) { 254 fail("Exception during getDeclaringClass test: " 255 + e.toString()); 256 } 257 } 258 259 /** 260 * java.lang.reflect.Method#getExceptionTypes() 261 */ 262 public void test_getExceptionTypes() { 263 // Test for method java.lang.Class [] 264 // java.lang.reflect.Method.getExceptionTypes() 265 266 try { 267 Method mth = TestMethod.class.getMethod("voidMethod", new Class[0]); 268 Class[] ex = mth.getExceptionTypes(); 269 assertEquals("Returned incorrect number of exceptions", 270 1, ex.length); 271 assertTrue("Returned incorrect exception type", ex[0] 272 .equals(IllegalArgumentException.class)); 273 mth = TestMethod.class.getMethod("intMethod", new Class[0]); 274 ex = mth.getExceptionTypes(); 275 assertEquals("Returned incorrect number of exceptions", 276 0, ex.length); 277 } catch (Exception e) { 278 fail("Exception during getExceptionTypes: " + e.toString()); 279 } 280 281 } 282 283 /** 284 * java.lang.reflect.Method#getModifiers() 285 */ 286 public void test_getModifiers() { 287 // Test for method int java.lang.reflect.Method.getModifiers() 288 289 Class cl = TestMethod.class; 290 int mods = 0; 291 Method mth = null; 292 int mask = 0; 293 try { 294 mth = cl.getMethod("pustatic", new Class[0]); 295 mods = mth.getModifiers(); 296 } catch (Exception e) { 297 fail("Exception during getModfiers test: " + e.toString()); 298 } 299 mask = Modifier.PUBLIC | Modifier.STATIC; 300 assertTrue("Incorrect modifiers returned", (mods | mask) == mask); 301 try { 302 mth = cl.getDeclaredMethod("prstatic", new Class[0]); 303 mods = mth.getModifiers(); 304 } catch (Exception e) { 305 fail("Exception during getModfiers test: " + e.toString()); 306 } 307 mask = Modifier.PRIVATE | Modifier.STATIC; 308 assertTrue("Incorrect modifiers returned", (mods | mask) == mask); 309 try { 310 mth = cl.getDeclaredMethod("pustatsynch", new Class[0]); 311 mods = mth.getModifiers(); 312 } catch (Exception e) { 313 fail("Exception during getModfiers test: " + e.toString()); 314 } 315 mask = (Modifier.PUBLIC | Modifier.STATIC) | Modifier.SYNCHRONIZED; 316 assertTrue("Incorrect modifiers returned", (mods | mask) == mask); 317 try { 318 mth = cl.getDeclaredMethod("pustatsynchnat", new Class[0]); 319 mods = mth.getModifiers(); 320 } catch (Exception e) { 321 fail("Exception during getModfiers test: " + e.toString()); 322 } 323 mask = ((Modifier.PUBLIC | Modifier.STATIC) | Modifier.SYNCHRONIZED) 324 | Modifier.NATIVE; 325 assertTrue("Incorrect modifiers returned", (mods | mask) == mask); 326 cl = AbstractTestMethod.class; 327 try { 328 mth = cl.getDeclaredMethod("puabs", new Class[0]); 329 mods = mth.getModifiers(); 330 } catch (Exception e) { 331 fail("Exception during getModfiers test: " + e.toString()); 332 } 333 mask = Modifier.PUBLIC | Modifier.ABSTRACT; 334 assertTrue("Incorrect modifiers returned", (mods | mask) == mask); 335 } 336 337 /** 338 * java.lang.reflect.Method#getName() 339 */ 340 public void test_getName() { 341 // Test for method java.lang.String java.lang.reflect.Method.getName() 342 Method mth = null; 343 try { 344 mth = TestMethod.class.getMethod("voidMethod", new Class[0]); 345 } catch (Exception e) { 346 fail("Exception during getMethodName(): " + e.toString()); 347 } 348 assertEquals("Returned incorrect method name", 349 "voidMethod", mth.getName()); 350 } 351 352 /** 353 * java.lang.reflect.Method#isVarArgs() 354 */ 355 public void test_isVarArgs() throws Exception { 356 Method mth = TestMethod.class.getMethod("publicVoidVarargs", 357 Object[].class); 358 assertTrue("Varargs method stated as non vararg.", mth.isVarArgs()); 359 360 mth = TestMethod.class.getDeclaredMethod("publicVoidArray", 361 Object[].class); 362 assertFalse("Non varargs method stated as vararg.", mth.isVarArgs()); 363 } 364 365 /** 366 * java.lang.reflect.Method#isBridge() 367 */ 368 public void test_isBridge() throws Exception { 369 Method[] declaredMethods = BrigeTest.class.getDeclaredMethods(); 370 assertEquals("Bridge method not generated.", 2, declaredMethods.length); 371 boolean foundBridgeMethod = false; 372 for (Method method : declaredMethods) { 373 if (method.getReturnType().equals(Object.class)) { 374 assertTrue("Bridge method not stated as bridge.", method 375 .isBridge()); 376 foundBridgeMethod = true; 377 } 378 } 379 assertTrue("Bridge method not found.", foundBridgeMethod); 380 } 381 382 /** 383 * java.lang.reflect.Method#isSynthetic() 384 */ 385 public void test_isSynthetic() throws Exception { 386 Method[] declaredMethods = BrigeTest.class.getDeclaredMethods(); 387 assertEquals("Synthetic method not generated.", 2, 388 declaredMethods.length); 389 boolean foundSyntheticMethod = false; 390 for (Method method : declaredMethods) { 391 if (method.getReturnType().equals(Object.class)) { 392 assertTrue("Synthetic method not stated as synthetic.", method 393 .isSynthetic()); 394 foundSyntheticMethod = true; 395 } 396 } 397 assertTrue("Synthetic method not found.", foundSyntheticMethod); 398 } 399 /** 400 * java.lang.reflect.Method#getParameterAnnotations() 401 */ 402 public void test_getParameterAnnotations() throws Exception { 403 Method method = TestMethod.class.getDeclaredMethod( 404 "annotatedParameter", new Class[] { 405 int.class, int.class, int.class}); 406 Annotation[][] annotations = method.getParameterAnnotations(); 407 assertEquals(3, annotations.length); 408 assertEquals( 409 "Wrong number of annotations returned for first parameter", 2, 410 annotations[0].length); 411 Set<Class<?>> annotationSet = new HashSet<Class<?>>(); 412 annotationSet.add(annotations[0][0].annotationType()); 413 annotationSet.add(annotations[0][1].annotationType()); 414 assertTrue("Missing TestAnno annotation", annotationSet 415 .contains(TestAnno.class)); 416 assertTrue("Missing Deprecated annotation", annotationSet 417 .contains(Deprecated.class)); 418 419 assertEquals( 420 "Wrong number of annotations returned for second parameter", 421 1, annotations[1].length); 422 annotationSet = new HashSet<Class<?>>(); 423 annotationSet.add(annotations[1][0].annotationType()); 424 assertTrue("Missing Deprecated annotation", annotationSet 425 .contains(Deprecated.class)); 426 assertEquals( 427 "Wrong number of annotations returned for third parameter", 0, 428 annotations[2].length); 429 } 430 431 /** 432 * java.lang.reflect.Method#getDeclaredAnnotations() 433 */ 434 public void test_getDeclaredAnnotations() throws Exception { 435 Method method = TestMethod.class.getDeclaredMethod("annotatedMethod"); 436 Annotation[] declaredAnnotations = method.getDeclaredAnnotations(); 437 assertEquals(2, declaredAnnotations.length); 438 439 Set<Class<?>> annotationSet = new HashSet<Class<?>>(); 440 annotationSet.add(declaredAnnotations[0].annotationType()); 441 annotationSet.add(declaredAnnotations[1].annotationType()); 442 assertTrue("Missing TestAnno annotation", annotationSet 443 .contains(TestAnno.class)); 444 assertTrue("Missing Deprecated annotation", annotationSet 445 .contains(Deprecated.class)); 446 } 447 448 /** 449 * java.lang.reflect.Method#getDefaultValue() 450 */ 451 public void test_getDefaultValue() throws Exception { 452 Method method = TestAnno.class.getDeclaredMethod("value"); 453 assertEquals("Wrong default value returned", TestAnno.DEFAULT_VALUE, 454 method.getDefaultValue()); 455 } 456 457 /** 458 * java.lang.reflect.Method#getDefaultValue() 459 */ 460 public void test_getGenericExceptionTypes() throws Exception { 461 Method method = ExceptionTest.class.getDeclaredMethod("exceptionTest"); 462 Type[] genericExceptionTypes = method.getGenericExceptionTypes(); 463 assertEquals(1, genericExceptionTypes.length); 464 assertTrue(genericExceptionTypes[0] instanceof TypeVariable<?>); 465 @SuppressWarnings("unchecked") 466 TypeVariable<Class<ExceptionTest<?>>> tv = 467 (TypeVariable<Class<ExceptionTest<?>>>) genericExceptionTypes[0]; 468 assertEquals("T", tv.getName()); 469 } 470 471 /** 472 * java.lang.reflect.Method#getGenericReturnType() 473 */ 474 public void test_getGenericReturnType() throws Exception { 475 Method method = GenericReturnType.class 476 .getDeclaredMethod("returnGeneric"); 477 Type returnType = method.getGenericReturnType(); 478 assertNotNull("getGenericReturnType returned null", returnType); 479 assertTrue(returnType instanceof TypeVariable<?>); 480 @SuppressWarnings("unchecked") 481 TypeVariable<Class<ExceptionTest<?>>> tv = 482 (TypeVariable<Class<ExceptionTest<?>>>) returnType; 483 assertEquals("T", tv.getName()); 484 } 485 486 487 /** 488 * java.lang.reflect.Method#toGenericString() 489 */ 490 public void test_toGenericString() throws Exception { 491 Method method = GenericString.class.getDeclaredMethod("genericString", 492 Object.class); 493 assertEquals("Wrong generic String returned", GenericString.GENERIC, 494 method.toGenericString()); 495 } 496 497 498 499 500 501 502 /** 503 * java.lang.reflect.Method#hashCode() 504 */ 505 public void test_hashCode() throws Exception { 506 Method mth0 = TestMethod.class.getMethod("hashCodeTest", String.class); 507 Method mth1 = TestMethod.class.getDeclaredMethod("hashCodeTest", 508 int.class); 509 assertEquals("Methods with same name did not return same hashCode.", 510 mth0.hashCode(), mth1.hashCode()); 511 } 512 513 /** 514 * java.lang.reflect.Method#getParameterTypes() 515 */ 516 public void test_getParameterTypes() { 517 // Test for method java.lang.Class [] 518 // java.lang.reflect.Method.getParameterTypes() 519 Class cl = TestMethod.class; 520 Method mth = null; 521 Class[] parms = null; 522 Method[] methods = null; 523 Class[] plist = { int.class, short.class, String.class, boolean.class, 524 Object.class, long.class, byte.class, char.class, double.class, 525 float.class }; 526 try { 527 mth = cl.getMethod("voidMethod", new Class[0]); 528 parms = mth.getParameterTypes(); 529 } catch (Exception e) { 530 fail("Exception during getParameterTypes test: " 531 + e.toString()); 532 } 533 assertEquals("Returned incorrect parameterTypes", 0, parms.length); 534 try { 535 mth = cl.getMethod("parmTest", plist); 536 parms = mth.getParameterTypes(); 537 } catch (Exception e) { 538 fail("Exception during getParameterTypes test: " 539 + e.toString()); 540 } 541 assertTrue("Invalid number of parameters returned", 542 plist.length == parms.length); 543 for (int i = 0; i < plist.length; i++) 544 assertTrue("Incorrect parameter returned", plist[i] 545 .equals(parms[i])); 546 547 // Test same method. but this time pull it from the list of methods 548 // rather than asking for it explicitly 549 methods = cl.getDeclaredMethods(); 550 551 int i; 552 for (i = 0; i < methods.length; i++) 553 if (methods[i].getName().equals("parmTest")) { 554 mth = methods[i]; 555 i = methods.length + 1; 556 } 557 if (i < methods.length) { 558 parms = mth.getParameterTypes(); 559 assertTrue("Incorrect number of parameters returned", 560 parms.length == plist.length); 561 for (i = 0; i < plist.length; i++) 562 assertTrue("Incorrect parameter returned", plist[i] 563 .equals(parms[i])); 564 } 565 } 566 567 /** 568 * java.lang.reflect.Method#getReturnType() 569 */ 570 public void test_getReturnType() { 571 // Test for method java.lang.Class 572 // java.lang.reflect.Method.getReturnType() 573 Class cl = TestMethod.class; 574 Method mth = null; 575 try { 576 mth = cl.getMethod("charMethod", new Class[0]); 577 } catch (Exception e) { 578 fail("Exception during getReturnType test : " + e.getMessage()); 579 } 580 assertTrue("Gave incorrect returne type, wanted char", mth 581 .getReturnType().equals(char.class)); 582 try { 583 mth = cl.getMethod("longMethod", new Class[0]); 584 } catch (Exception e) { 585 fail("Exception during getReturnType test : " + e.getMessage()); 586 } 587 assertTrue("Gave incorrect returne type, wanted long", mth 588 .getReturnType().equals(long.class)); 589 try { 590 mth = cl.getMethod("shortMethod", new Class[0]); 591 } catch (Exception e) { 592 fail("Exception during getReturnType test : " + e.getMessage()); 593 } 594 assertTrue("Gave incorrect returne type, wanted short", mth 595 .getReturnType().equals(short.class)); 596 try { 597 mth = cl.getMethod("intMethod", new Class[0]); 598 } catch (Exception e) { 599 fail("Exception during getReturnType test : " + e.getMessage()); 600 } 601 assertTrue("Gave incorrect returne type, wanted int: " 602 + mth.getReturnType(), mth.getReturnType().equals(int.class)); 603 try { 604 mth = cl.getMethod("doubleMethod", new Class[0]); 605 } catch (Exception e) { 606 fail("Exception during getReturnType test : " + e.getMessage()); 607 } 608 assertTrue("Gave incorrect returne type, wanted double", mth 609 .getReturnType().equals(double.class)); 610 try { 611 mth = cl.getMethod("byteMethod", new Class[0]); 612 } catch (Exception e) { 613 fail("Exception during getReturnType test : " + e.getMessage()); 614 } 615 assertTrue("Gave incorrect returne type, wanted byte", mth 616 .getReturnType().equals(byte.class)); 617 try { 618 mth = cl.getMethod("byteMethod", new Class[0]); 619 } catch (Exception e) { 620 fail("Exception during getReturnType test:" + e.toString()); 621 } 622 assertTrue("Gave incorrect returne type, wanted byte", mth 623 .getReturnType().equals(byte.class)); 624 try { 625 mth = cl.getMethod("objectMethod", new Class[0]); 626 } catch (Exception e) { 627 fail("Exception during getReturnType test : " + e.getMessage()); 628 } 629 assertTrue("Gave incorrect returne type, wanted Object", mth 630 .getReturnType().equals(Object.class)); 631 632 try { 633 mth = cl.getMethod("voidMethod", new Class[0]); 634 } catch (Exception e) { 635 fail("Exception during getReturnType test : " + e.getMessage()); 636 } 637 assertTrue("Gave incorrect returne type, wanted void", mth 638 .getReturnType().equals(void.class)); 639 } 640 641 /** 642 * java.lang.reflect.Method#invoke(java.lang.Object, 643 * java.lang.Object[]) 644 */ 645 public void test_invokeLjava_lang_Object$Ljava_lang_Object() throws Exception{ 646 // Test for method java.lang.Object 647 // java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object 648 // []) 649 Class cl = TestMethod.class; 650 Class[] dcl = new Class[0]; 651 652 // Get and invoke a static method 653 Method mth = cl.getDeclaredMethod("invokeStaticTest", dcl); 654 Object ret = mth.invoke(null, new Object[0]); 655 assertEquals("Invoke returned incorrect value", 1, ((Integer) ret) 656 .intValue()); 657 658 // Get and invoke an instance method 659 mth = cl.getDeclaredMethod("invokeInstanceTest", dcl); 660 ret = mth.invoke(new TestMethod(), new Object[0]); 661 assertEquals("Invoke returned incorrect value", 1, ((Integer) ret) 662 .intValue()); 663 664 // Get and attempt to invoke a private method 665 mth = cl.getDeclaredMethod("privateInvokeTest", dcl); 666 try { 667 ret = mth.invoke(new TestMethod(), new Object[0]); 668 } catch (IllegalAccessException e) { 669 // Correct behaviour 670 } catch (Exception e) { 671 fail("Exception during invoke test : " + e.getMessage()); 672 } 673 // Generate an IllegalArgumentException 674 mth = cl.getDeclaredMethod("invokeInstanceTest", dcl); 675 676 try { 677 Object[] args = { Object.class }; 678 ret = mth.invoke(new TestMethod(), args); 679 } catch (IllegalArgumentException e) { 680 // Correct behaviour 681 } catch (Exception e) { 682 fail("Exception during invoke test : " + e.getMessage()); 683 } 684 685 // Generate a NullPointerException 686 mth = cl.getDeclaredMethod("invokeInstanceTest", dcl); 687 688 try { 689 ret = mth.invoke(null, new Object[0]); 690 } catch (NullPointerException e) { 691 // Correct behaviour 692 } catch (Exception e) { 693 fail("Exception during invoke test : " + e.getMessage()); 694 } 695 696 // Generate an InvocationTargetException 697 mth = cl.getDeclaredMethod("invokeExceptionTest", dcl); 698 try { 699 ret = mth.invoke(new TestMethod(), new Object[0]); 700 } catch (InvocationTargetException e) { 701 // Correct behaviour 702 } catch (Exception e) { 703 fail("Exception during invoke test : " + e.getMessage()); 704 } 705 706 TestMethod testMethod = new TestMethod(); 707 Method methods[] = cl.getMethods(); 708 for (int i = 0; i < methods.length; i++) { 709 if (methods[i].getName().startsWith("invokeCastTest1")) { 710 Class param = methods[i].getParameterTypes()[0]; 711 712 try { 713 methods[i].invoke(testMethod, new Object[] { new Byte( 714 (byte) 1) }); 715 assertTrue("invalid invoke with Byte: " + methods[i], 716 param == Byte.TYPE || param == Short.TYPE 717 || param == Integer.TYPE 718 || param == Long.TYPE 719 || param == Float.TYPE 720 || param == Double.TYPE); 721 } catch (Exception e) { 722 assertTrue("Byte invalid exception: " + e, 723 e instanceof IllegalArgumentException); 724 assertTrue("Byte invalid failure: " + methods[i], 725 param == Boolean.TYPE || param == Character.TYPE); 726 } 727 728 try { 729 methods[i].invoke(testMethod, new Object[] { new Short( 730 (short) 1) }); 731 assertTrue("invalid invoke with Short: " + methods[i], 732 param == Short.TYPE || param == Integer.TYPE 733 || param == Long.TYPE 734 || param == Float.TYPE 735 || param == Double.TYPE); 736 } catch (Exception e) { 737 assertTrue("Short invalid exception: " + e, 738 e instanceof IllegalArgumentException); 739 assertTrue("Short invalid failure: " + methods[i], 740 param == Byte.TYPE || param == Boolean.TYPE 741 || param == Character.TYPE); 742 } 743 744 try { 745 methods[i].invoke(testMethod, 746 new Object[] { new Integer(1) }); 747 assertTrue("invalid invoke with Integer: " + methods[i], 748 param == Integer.TYPE || param == Long.TYPE 749 || param == Float.TYPE 750 || param == Double.TYPE); 751 } catch (Exception e) { 752 assertTrue("Integer invalid exception: " + e, 753 e instanceof IllegalArgumentException); 754 assertTrue("Integer invalid failure: " + methods[i], 755 param == Byte.TYPE || param == Short.TYPE 756 || param == Boolean.TYPE 757 || param == Character.TYPE); 758 } 759 760 try { 761 methods[i].invoke(testMethod, new Object[] { new Long(1) }); 762 assertTrue("invalid invoke with Long: " + methods[i], 763 param == Long.TYPE || param == Float.TYPE 764 || param == Double.TYPE); 765 } catch (Exception e) { 766 assertTrue("Long invalid exception: " + e, 767 e instanceof IllegalArgumentException); 768 assertTrue("Long invalid failure: " + methods[i], 769 param == Byte.TYPE || param == Short.TYPE 770 || param == Integer.TYPE 771 || param == Boolean.TYPE 772 || param == Character.TYPE); 773 } 774 775 try { 776 methods[i].invoke(testMethod, new Object[] { new Character( 777 'a') }); 778 assertTrue("invalid invoke with Character: " + methods[i], 779 param == Character.TYPE || param == Integer.TYPE 780 || param == Long.TYPE 781 || param == Float.TYPE 782 || param == Double.TYPE); 783 } catch (Exception e) { 784 assertTrue("Character invalid exception: " + e, 785 e instanceof IllegalArgumentException); 786 assertTrue("Character invalid failure: " + methods[i], 787 param == Byte.TYPE || param == Short.TYPE 788 || param == Boolean.TYPE); 789 } 790 791 try { 792 methods[i] 793 .invoke(testMethod, new Object[] { new Float(1) }); 794 assertTrue("invalid invoke with Float: " + methods[i], 795 param == Float.TYPE || param == Double.TYPE); 796 } catch (Exception e) { 797 assertTrue("Float invalid exception: " + e, 798 e instanceof IllegalArgumentException); 799 assertTrue("Float invalid failure: " + methods[i], 800 param == Byte.TYPE || param == Short.TYPE 801 || param == Integer.TYPE 802 || param == Long.TYPE 803 || param == Boolean.TYPE 804 || param == Character.TYPE); 805 } 806 807 try { 808 methods[i].invoke(testMethod, 809 new Object[] { new Double(1) }); 810 assertTrue("invalid invoke with Double: " + methods[i], 811 param == Double.TYPE); 812 } catch (Exception e) { 813 assertTrue("Double invalid exception: " + e, 814 e instanceof IllegalArgumentException); 815 assertTrue("Double invalid failure: " + methods[i], 816 param == Byte.TYPE || param == Short.TYPE 817 || param == Integer.TYPE 818 || param == Long.TYPE 819 || param == Boolean.TYPE 820 || param == Character.TYPE 821 || param == Float.TYPE); 822 } 823 824 try { 825 methods[i].invoke(testMethod, new Object[] { new Boolean( 826 true) }); 827 assertTrue("invalid invoke with Boolean: " + methods[i], 828 param == Boolean.TYPE); 829 } catch (Exception e) { 830 assertTrue("Boolean invalid exception: " + e, 831 e instanceof IllegalArgumentException); 832 assertTrue("Boolean invalid failure: " + methods[i], 833 param == Byte.TYPE || param == Short.TYPE 834 || param == Integer.TYPE 835 || param == Long.TYPE 836 || param == Character.TYPE 837 || param == Float.TYPE 838 || param == Double.TYPE); 839 } 840 } 841 } 842 } 843 844 /** 845 * java.lang.reflect.Method#toString() 846 */ 847 public void test_toString() { 848 // Test for method java.lang.String java.lang.reflect.Method.toString() 849 Method mth = null; 850 Class[] parms = { int.class, short.class, String.class, boolean.class, 851 Object.class, long.class, byte.class, char.class, double.class, 852 float.class }; 853 try { 854 855 mth = TestMethod.class.getDeclaredMethod("printTest", parms); 856 } catch (Exception e) { 857 fail("Exception during toString test : " + e.getMessage()); 858 } 859 860 assertTrue( 861 "Returned incorrect string for method: " + mth.toString(), 862 mth 863 .toString() 864 .equals( 865 "public static final void tests.api.java.lang.reflect.MethodTest$TestMethod.printTest(int,short,java.lang.String,boolean,java.lang.Object,long,byte,char,double,float)")); 866 } 867 868 /** 869 * Sets up the fixture, for example, open a network connection. This method 870 * is called before a test is executed. 871 */ 872 protected void setUp() { 873 } 874 875 /** 876 * Tears down the fixture, for example, close a network connection. This 877 * method is called after a test is executed. 878 */ 879 protected void tearDown() { 880 } 881 } 882