| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package tests.api.java.lang.reflect; |
| |
| import java.lang.annotation.Annotation; |
| import java.lang.annotation.ElementType; |
| import java.lang.annotation.Retention; |
| import java.lang.annotation.RetentionPolicy; |
| import java.lang.annotation.Target; |
| import java.lang.reflect.InvocationTargetException; |
| import java.lang.reflect.Method; |
| import java.lang.reflect.Modifier; |
| import java.lang.reflect.Type; |
| import java.lang.reflect.TypeVariable; |
| import java.util.HashSet; |
| import java.util.Set; |
| |
| public class MethodTest extends junit.framework.TestCase { |
| |
| static class TestMethod { |
| public TestMethod() { |
| } |
| |
| public void voidMethod() throws IllegalArgumentException { |
| } |
| |
| public void parmTest(int x, short y, String s, boolean bool, Object o, |
| long l, byte b, char c, double d, float f) { |
| } |
| |
| public int intMethod() { |
| return 1; |
| } |
| |
| public static final void printTest(int x, short y, String s, |
| boolean bool, Object o, long l, byte b, char c, double d, |
| float f) { |
| } |
| |
| public double doubleMethod() { |
| return 1.0; |
| } |
| |
| public short shortMethod() { |
| return (short) 1; |
| } |
| |
| public byte byteMethod() { |
| return (byte) 1; |
| } |
| |
| public float floatMethod() { |
| return 1.0f; |
| } |
| |
| public long longMethod() { |
| return 1l; |
| } |
| |
| public char charMethod() { |
| return 'T'; |
| } |
| |
| public Object objectMethod() { |
| return new Object(); |
| } |
| |
| private static void prstatic() { |
| } |
| |
| public static void pustatic() { |
| } |
| |
| public static synchronized void pustatsynch() { |
| } |
| |
| public static int invokeStaticTest() { |
| return 1; |
| } |
| |
| public int invokeInstanceTest() { |
| return 1; |
| } |
| |
| private int privateInvokeTest() { |
| return 1; |
| } |
| |
| public int invokeExceptionTest() throws NullPointerException { |
| throw new NullPointerException(); |
| } |
| |
| public static synchronized native void pustatsynchnat(); |
| |
| public void publicVoidVarargs(Object... param){} |
| public void publicVoidArray(Object[] param){} |
| |
| public void annotatedParameter(@TestAnno @Deprecated int a, |
| @Deprecated int b, int c) { |
| } |
| |
| @Deprecated |
| @TestAnno |
| public void annotatedMethod(){} |
| |
| public void hashCodeTest(int i){} |
| public void hashCodeTest(String s){} |
| |
| public void invokeCastTest1(byte param) { |
| } |
| |
| public void invokeCastTest1(short param) { |
| } |
| |
| public void invokeCastTest1(int param) { |
| } |
| |
| public void invokeCastTest1(long param) { |
| } |
| |
| public void invokeCastTest1(float param) { |
| } |
| |
| public void invokeCastTest1(double param) { |
| } |
| |
| public void invokeCastTest1(char param) { |
| } |
| |
| public void invokeCastTest1(boolean param) { |
| } |
| } |
| |
| @Retention(RetentionPolicy.RUNTIME) |
| @Target({ElementType.PARAMETER, ElementType.METHOD}) |
| public static @interface TestAnno{ |
| public static final String DEFAULT_VALUE = "DEFAULT_VALUE"; |
| |
| String value() default DEFAULT_VALUE; |
| } |
| |
| abstract class AbstractTestMethod { |
| public abstract void puabs(); |
| } |
| |
| class TestMethodSub extends TestMethod { |
| public int invokeInstanceTest() { |
| return 0; |
| } |
| } |
| |
| static interface IBrigeTest<T>{ |
| T m(); |
| } |
| |
| static class BrigeTest implements IBrigeTest<String> { |
| public String m(){ return null; } |
| } |
| |
| static class ExceptionTest<T extends Exception>{ |
| @SuppressWarnings("unused") |
| void exceptionTest() throws T{} |
| } |
| |
| static class GenericReturnType<T> { |
| T returnGeneric(){return null;} |
| } |
| |
| static class GenericString<T> { |
| public static final String GENERIC = |
| "T tests.api.java.lang.reflect.MethodTest$GenericString.genericString(T)"; |
| T genericString(T t) { |
| return null; |
| } |
| } |
| |
| /** |
| * java.lang.reflect.Method#equals(java.lang.Object) |
| */ |
| public void test_equalsLjava_lang_Object() { |
| // Test for method boolean |
| // java.lang.reflect.Method.equals(java.lang.Object) |
| |
| Method m1 = null, m2 = null; |
| try { |
| m1 = TestMethod.class.getMethod("invokeInstanceTest", new Class[0]); |
| m2 = TestMethodSub.class.getMethod("invokeInstanceTest", |
| new Class[0]); |
| } catch (Exception e) { |
| fail("Exception during equals test : " + e.getMessage()); |
| } |
| assertTrue("Overriden method returned equal", !m1.equals(m2)); |
| assertTrue("Same method returned not-equal", m1.equals(m1)); |
| try { |
| m1 = TestMethod.class.getMethod("invokeStaticTest", new Class[0]); |
| m2 = TestMethodSub.class |
| .getMethod("invokeStaticTest", new Class[0]); |
| } catch (Exception e) { |
| fail("Exception during equals test : " + e.getMessage()); |
| } |
| assertTrue("Inherited method returned not-equal", m1.equals(m2)); |
| } |
| |
| /** |
| * java.lang.Class#getMethod(java.lang.String, java.lang.Class[]) |
| */ |
| public void test_getMethod() throws NoSuchMethodException, SecurityException { |
| // Check that getMethod treats null parameterTypes the same as an empty array. |
| Method m1 = TestMethod.class.getMethod("invokeInstanceTest", new Class[0]); |
| Method m2 = TestMethod.class.getMethod("invokeInstanceTest", (Class[]) null); |
| assertEquals(m1, m2); |
| } |
| |
| /** |
| * java.lang.Class#getDeclaredMethod(java.lang.String, java.lang.Class[]) |
| */ |
| public void test_getDeclaredMethod() throws NoSuchMethodException, SecurityException { |
| // Check that getDeclaredMethod treats null parameterTypes the same as an empty array. |
| Method m1 = TestMethod.class.getDeclaredMethod("invokeInstanceTest", new Class[0]); |
| Method m2 = TestMethod.class.getDeclaredMethod("invokeInstanceTest", (Class[]) null); |
| assertEquals(m1, m2); |
| } |
| |
| /** |
| * java.lang.reflect.Method#getDeclaringClass() |
| */ |
| public void test_getDeclaringClass() { |
| // Test for method java.lang.Class |
| // java.lang.reflect.Method.getDeclaringClass() |
| |
| Method[] mths; |
| |
| try { |
| mths = TestMethod.class.getDeclaredMethods(); |
| assertTrue("Returned incorrect declaring class: " |
| + mths[0].getDeclaringClass().toString(), mths[0] |
| .getDeclaringClass().equals(TestMethod.class)); |
| } catch (Exception e) { |
| fail("Exception during getDeclaringClass test: " |
| + e.toString()); |
| } |
| } |
| |
| /** |
| * java.lang.reflect.Method#getExceptionTypes() |
| */ |
| public void test_getExceptionTypes() { |
| // Test for method java.lang.Class [] |
| // java.lang.reflect.Method.getExceptionTypes() |
| |
| try { |
| Method mth = TestMethod.class.getMethod("voidMethod", new Class[0]); |
| Class[] ex = mth.getExceptionTypes(); |
| assertEquals("Returned incorrect number of exceptions", |
| 1, ex.length); |
| assertTrue("Returned incorrect exception type", ex[0] |
| .equals(IllegalArgumentException.class)); |
| mth = TestMethod.class.getMethod("intMethod", new Class[0]); |
| ex = mth.getExceptionTypes(); |
| assertEquals("Returned incorrect number of exceptions", |
| 0, ex.length); |
| } catch (Exception e) { |
| fail("Exception during getExceptionTypes: " + e.toString()); |
| } |
| |
| } |
| |
| /** |
| * java.lang.reflect.Method#getModifiers() |
| */ |
| public void test_getModifiers() { |
| // Test for method int java.lang.reflect.Method.getModifiers() |
| |
| Class cl = TestMethod.class; |
| int mods = 0; |
| Method mth = null; |
| int mask = 0; |
| try { |
| mth = cl.getMethod("pustatic", new Class[0]); |
| mods = mth.getModifiers(); |
| } catch (Exception e) { |
| fail("Exception during getModfiers test: " + e.toString()); |
| } |
| mask = Modifier.PUBLIC | Modifier.STATIC; |
| assertTrue("Incorrect modifiers returned", (mods | mask) == mask); |
| try { |
| mth = cl.getDeclaredMethod("prstatic", new Class[0]); |
| mods = mth.getModifiers(); |
| } catch (Exception e) { |
| fail("Exception during getModfiers test: " + e.toString()); |
| } |
| mask = Modifier.PRIVATE | Modifier.STATIC; |
| assertTrue("Incorrect modifiers returned", (mods | mask) == mask); |
| try { |
| mth = cl.getDeclaredMethod("pustatsynch", new Class[0]); |
| mods = mth.getModifiers(); |
| } catch (Exception e) { |
| fail("Exception during getModfiers test: " + e.toString()); |
| } |
| mask = (Modifier.PUBLIC | Modifier.STATIC) | Modifier.SYNCHRONIZED; |
| assertTrue("Incorrect modifiers returned", (mods | mask) == mask); |
| try { |
| mth = cl.getDeclaredMethod("pustatsynchnat", new Class[0]); |
| mods = mth.getModifiers(); |
| } catch (Exception e) { |
| fail("Exception during getModfiers test: " + e.toString()); |
| } |
| mask = ((Modifier.PUBLIC | Modifier.STATIC) | Modifier.SYNCHRONIZED) |
| | Modifier.NATIVE; |
| assertTrue("Incorrect modifiers returned", (mods | mask) == mask); |
| cl = AbstractTestMethod.class; |
| try { |
| mth = cl.getDeclaredMethod("puabs", new Class[0]); |
| mods = mth.getModifiers(); |
| } catch (Exception e) { |
| fail("Exception during getModfiers test: " + e.toString()); |
| } |
| mask = Modifier.PUBLIC | Modifier.ABSTRACT; |
| assertTrue("Incorrect modifiers returned", (mods | mask) == mask); |
| } |
| |
| /** |
| * java.lang.reflect.Method#getName() |
| */ |
| public void test_getName() { |
| // Test for method java.lang.String java.lang.reflect.Method.getName() |
| Method mth = null; |
| try { |
| mth = TestMethod.class.getMethod("voidMethod", new Class[0]); |
| } catch (Exception e) { |
| fail("Exception during getMethodName(): " + e.toString()); |
| } |
| assertEquals("Returned incorrect method name", |
| "voidMethod", mth.getName()); |
| } |
| |
| /** |
| * java.lang.reflect.Method#isVarArgs() |
| */ |
| public void test_isVarArgs() throws Exception { |
| Method mth = TestMethod.class.getMethod("publicVoidVarargs", |
| Object[].class); |
| assertTrue("Varargs method stated as non vararg.", mth.isVarArgs()); |
| |
| mth = TestMethod.class.getDeclaredMethod("publicVoidArray", |
| Object[].class); |
| assertFalse("Non varargs method stated as vararg.", mth.isVarArgs()); |
| } |
| |
| /** |
| * java.lang.reflect.Method#isBridge() |
| */ |
| public void test_isBridge() throws Exception { |
| Method[] declaredMethods = BrigeTest.class.getDeclaredMethods(); |
| assertEquals("Bridge method not generated.", 2, declaredMethods.length); |
| boolean foundBridgeMethod = false; |
| for (Method method : declaredMethods) { |
| if (method.getReturnType().equals(Object.class)) { |
| assertTrue("Bridge method not stated as bridge.", method |
| .isBridge()); |
| foundBridgeMethod = true; |
| } |
| } |
| assertTrue("Bridge method not found.", foundBridgeMethod); |
| } |
| |
| /** |
| * java.lang.reflect.Method#isSynthetic() |
| */ |
| public void test_isSynthetic() throws Exception { |
| Method[] declaredMethods = BrigeTest.class.getDeclaredMethods(); |
| assertEquals("Synthetic method not generated.", 2, |
| declaredMethods.length); |
| boolean foundSyntheticMethod = false; |
| for (Method method : declaredMethods) { |
| if (method.getReturnType().equals(Object.class)) { |
| assertTrue("Synthetic method not stated as synthetic.", method |
| .isSynthetic()); |
| foundSyntheticMethod = true; |
| } |
| } |
| assertTrue("Synthetic method not found.", foundSyntheticMethod); |
| } |
| /** |
| * java.lang.reflect.Method#getParameterAnnotations() |
| */ |
| public void test_getParameterAnnotations() throws Exception { |
| Method method = TestMethod.class.getDeclaredMethod( |
| "annotatedParameter", new Class[] { |
| int.class, int.class, int.class}); |
| Annotation[][] annotations = method.getParameterAnnotations(); |
| assertEquals(3, annotations.length); |
| assertEquals( |
| "Wrong number of annotations returned for first parameter", 2, |
| annotations[0].length); |
| Set<Class<?>> annotationSet = new HashSet<Class<?>>(); |
| annotationSet.add(annotations[0][0].annotationType()); |
| annotationSet.add(annotations[0][1].annotationType()); |
| assertTrue("Missing TestAnno annotation", annotationSet |
| .contains(TestAnno.class)); |
| assertTrue("Missing Deprecated annotation", annotationSet |
| .contains(Deprecated.class)); |
| |
| assertEquals( |
| "Wrong number of annotations returned for second parameter", |
| 1, annotations[1].length); |
| annotationSet = new HashSet<Class<?>>(); |
| annotationSet.add(annotations[1][0].annotationType()); |
| assertTrue("Missing Deprecated annotation", annotationSet |
| .contains(Deprecated.class)); |
| assertEquals( |
| "Wrong number of annotations returned for third parameter", 0, |
| annotations[2].length); |
| } |
| |
| /** |
| * java.lang.reflect.Method#getDeclaredAnnotations() |
| */ |
| public void test_getDeclaredAnnotations() throws Exception { |
| Method method = TestMethod.class.getDeclaredMethod("annotatedMethod"); |
| Annotation[] declaredAnnotations = method.getDeclaredAnnotations(); |
| assertEquals(2, declaredAnnotations.length); |
| |
| Set<Class<?>> annotationSet = new HashSet<Class<?>>(); |
| annotationSet.add(declaredAnnotations[0].annotationType()); |
| annotationSet.add(declaredAnnotations[1].annotationType()); |
| assertTrue("Missing TestAnno annotation", annotationSet |
| .contains(TestAnno.class)); |
| assertTrue("Missing Deprecated annotation", annotationSet |
| .contains(Deprecated.class)); |
| } |
| |
| /** |
| * java.lang.reflect.Method#getDefaultValue() |
| */ |
| public void test_getDefaultValue() throws Exception { |
| Method method = TestAnno.class.getDeclaredMethod("value"); |
| assertEquals("Wrong default value returned", TestAnno.DEFAULT_VALUE, |
| method.getDefaultValue()); |
| } |
| |
| /** |
| * java.lang.reflect.Method#getDefaultValue() |
| */ |
| public void test_getGenericExceptionTypes() throws Exception { |
| Method method = ExceptionTest.class.getDeclaredMethod("exceptionTest"); |
| Type[] genericExceptionTypes = method.getGenericExceptionTypes(); |
| assertEquals(1, genericExceptionTypes.length); |
| assertTrue(genericExceptionTypes[0] instanceof TypeVariable<?>); |
| @SuppressWarnings("unchecked") |
| TypeVariable<Class<ExceptionTest<?>>> tv = |
| (TypeVariable<Class<ExceptionTest<?>>>) genericExceptionTypes[0]; |
| assertEquals("T", tv.getName()); |
| } |
| |
| /** |
| * java.lang.reflect.Method#getGenericReturnType() |
| */ |
| public void test_getGenericReturnType() throws Exception { |
| Method method = GenericReturnType.class |
| .getDeclaredMethod("returnGeneric"); |
| Type returnType = method.getGenericReturnType(); |
| assertNotNull("getGenericReturnType returned null", returnType); |
| assertTrue(returnType instanceof TypeVariable<?>); |
| @SuppressWarnings("unchecked") |
| TypeVariable<Class<ExceptionTest<?>>> tv = |
| (TypeVariable<Class<ExceptionTest<?>>>) returnType; |
| assertEquals("T", tv.getName()); |
| } |
| |
| |
| /** |
| * java.lang.reflect.Method#toGenericString() |
| */ |
| public void test_toGenericString() throws Exception { |
| Method method = GenericString.class.getDeclaredMethod("genericString", |
| Object.class); |
| assertEquals("Wrong generic String returned", GenericString.GENERIC, |
| method.toGenericString()); |
| } |
| |
| |
| |
| |
| |
| |
| /** |
| * java.lang.reflect.Method#hashCode() |
| */ |
| public void test_hashCode() throws Exception { |
| Method mth0 = TestMethod.class.getMethod("hashCodeTest", String.class); |
| Method mth1 = TestMethod.class.getDeclaredMethod("hashCodeTest", |
| int.class); |
| assertEquals("Methods with same name did not return same hashCode.", |
| mth0.hashCode(), mth1.hashCode()); |
| } |
| |
| /** |
| * java.lang.reflect.Method#getParameterTypes() |
| */ |
| public void test_getParameterTypes() { |
| // Test for method java.lang.Class [] |
| // java.lang.reflect.Method.getParameterTypes() |
| Class cl = TestMethod.class; |
| Method mth = null; |
| Class[] parms = null; |
| Method[] methods = null; |
| Class[] plist = { int.class, short.class, String.class, boolean.class, |
| Object.class, long.class, byte.class, char.class, double.class, |
| float.class }; |
| try { |
| mth = cl.getMethod("voidMethod", new Class[0]); |
| parms = mth.getParameterTypes(); |
| } catch (Exception e) { |
| fail("Exception during getParameterTypes test: " |
| + e.toString()); |
| } |
| assertEquals("Returned incorrect parameterTypes", 0, parms.length); |
| try { |
| mth = cl.getMethod("parmTest", plist); |
| parms = mth.getParameterTypes(); |
| } catch (Exception e) { |
| fail("Exception during getParameterTypes test: " |
| + e.toString()); |
| } |
| assertTrue("Invalid number of parameters returned", |
| plist.length == parms.length); |
| for (int i = 0; i < plist.length; i++) |
| assertTrue("Incorrect parameter returned", plist[i] |
| .equals(parms[i])); |
| |
| // Test same method. but this time pull it from the list of methods |
| // rather than asking for it explicitly |
| methods = cl.getDeclaredMethods(); |
| |
| int i; |
| for (i = 0; i < methods.length; i++) |
| if (methods[i].getName().equals("parmTest")) { |
| mth = methods[i]; |
| i = methods.length + 1; |
| } |
| if (i < methods.length) { |
| parms = mth.getParameterTypes(); |
| assertTrue("Incorrect number of parameters returned", |
| parms.length == plist.length); |
| for (i = 0; i < plist.length; i++) |
| assertTrue("Incorrect parameter returned", plist[i] |
| .equals(parms[i])); |
| } |
| } |
| |
| /** |
| * java.lang.reflect.Method#getReturnType() |
| */ |
| public void test_getReturnType() { |
| // Test for method java.lang.Class |
| // java.lang.reflect.Method.getReturnType() |
| Class cl = TestMethod.class; |
| Method mth = null; |
| try { |
| mth = cl.getMethod("charMethod", new Class[0]); |
| } catch (Exception e) { |
| fail("Exception during getReturnType test : " + e.getMessage()); |
| } |
| assertTrue("Gave incorrect returne type, wanted char", mth |
| .getReturnType().equals(char.class)); |
| try { |
| mth = cl.getMethod("longMethod", new Class[0]); |
| } catch (Exception e) { |
| fail("Exception during getReturnType test : " + e.getMessage()); |
| } |
| assertTrue("Gave incorrect returne type, wanted long", mth |
| .getReturnType().equals(long.class)); |
| try { |
| mth = cl.getMethod("shortMethod", new Class[0]); |
| } catch (Exception e) { |
| fail("Exception during getReturnType test : " + e.getMessage()); |
| } |
| assertTrue("Gave incorrect returne type, wanted short", mth |
| .getReturnType().equals(short.class)); |
| try { |
| mth = cl.getMethod("intMethod", new Class[0]); |
| } catch (Exception e) { |
| fail("Exception during getReturnType test : " + e.getMessage()); |
| } |
| assertTrue("Gave incorrect returne type, wanted int: " |
| + mth.getReturnType(), mth.getReturnType().equals(int.class)); |
| try { |
| mth = cl.getMethod("doubleMethod", new Class[0]); |
| } catch (Exception e) { |
| fail("Exception during getReturnType test : " + e.getMessage()); |
| } |
| assertTrue("Gave incorrect returne type, wanted double", mth |
| .getReturnType().equals(double.class)); |
| try { |
| mth = cl.getMethod("byteMethod", new Class[0]); |
| } catch (Exception e) { |
| fail("Exception during getReturnType test : " + e.getMessage()); |
| } |
| assertTrue("Gave incorrect returne type, wanted byte", mth |
| .getReturnType().equals(byte.class)); |
| try { |
| mth = cl.getMethod("byteMethod", new Class[0]); |
| } catch (Exception e) { |
| fail("Exception during getReturnType test:" + e.toString()); |
| } |
| assertTrue("Gave incorrect returne type, wanted byte", mth |
| .getReturnType().equals(byte.class)); |
| try { |
| mth = cl.getMethod("objectMethod", new Class[0]); |
| } catch (Exception e) { |
| fail("Exception during getReturnType test : " + e.getMessage()); |
| } |
| assertTrue("Gave incorrect returne type, wanted Object", mth |
| .getReturnType().equals(Object.class)); |
| |
| try { |
| mth = cl.getMethod("voidMethod", new Class[0]); |
| } catch (Exception e) { |
| fail("Exception during getReturnType test : " + e.getMessage()); |
| } |
| assertTrue("Gave incorrect returne type, wanted void", mth |
| .getReturnType().equals(void.class)); |
| } |
| |
| /** |
| * java.lang.reflect.Method#invoke(java.lang.Object, |
| * java.lang.Object[]) |
| */ |
| public void test_invokeLjava_lang_Object$Ljava_lang_Object() throws Exception{ |
| // Test for method java.lang.Object |
| // java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object |
| // []) |
| Class cl = TestMethod.class; |
| Class[] dcl = new Class[0]; |
| |
| // Get and invoke a static method |
| Method mth = cl.getDeclaredMethod("invokeStaticTest", dcl); |
| Object ret = mth.invoke(null, new Object[0]); |
| assertEquals("Invoke returned incorrect value", 1, ((Integer) ret) |
| .intValue()); |
| |
| // Get and invoke an instance method |
| mth = cl.getDeclaredMethod("invokeInstanceTest", dcl); |
| ret = mth.invoke(new TestMethod(), new Object[0]); |
| assertEquals("Invoke returned incorrect value", 1, ((Integer) ret) |
| .intValue()); |
| |
| // Get and attempt to invoke a private method |
| mth = cl.getDeclaredMethod("privateInvokeTest", dcl); |
| try { |
| ret = mth.invoke(new TestMethod(), new Object[0]); |
| } catch (IllegalAccessException e) { |
| // Correct behaviour |
| } catch (Exception e) { |
| fail("Exception during invoke test : " + e.getMessage()); |
| } |
| // Generate an IllegalArgumentException |
| mth = cl.getDeclaredMethod("invokeInstanceTest", dcl); |
| |
| try { |
| Object[] args = { Object.class }; |
| ret = mth.invoke(new TestMethod(), args); |
| } catch (IllegalArgumentException e) { |
| // Correct behaviour |
| } catch (Exception e) { |
| fail("Exception during invoke test : " + e.getMessage()); |
| } |
| |
| // Generate a NullPointerException |
| mth = cl.getDeclaredMethod("invokeInstanceTest", dcl); |
| |
| try { |
| ret = mth.invoke(null, new Object[0]); |
| } catch (NullPointerException e) { |
| // Correct behaviour |
| } catch (Exception e) { |
| fail("Exception during invoke test : " + e.getMessage()); |
| } |
| |
| // Generate an InvocationTargetException |
| mth = cl.getDeclaredMethod("invokeExceptionTest", dcl); |
| try { |
| ret = mth.invoke(new TestMethod(), new Object[0]); |
| } catch (InvocationTargetException e) { |
| // Correct behaviour |
| } catch (Exception e) { |
| fail("Exception during invoke test : " + e.getMessage()); |
| } |
| |
| TestMethod testMethod = new TestMethod(); |
| Method methods[] = cl.getMethods(); |
| for (int i = 0; i < methods.length; i++) { |
| if (methods[i].getName().startsWith("invokeCastTest1")) { |
| Class param = methods[i].getParameterTypes()[0]; |
| |
| try { |
| methods[i].invoke(testMethod, new Object[] { new Byte( |
| (byte) 1) }); |
| assertTrue("invalid invoke with Byte: " + methods[i], |
| param == Byte.TYPE || param == Short.TYPE |
| || param == Integer.TYPE |
| || param == Long.TYPE |
| || param == Float.TYPE |
| || param == Double.TYPE); |
| } catch (Exception e) { |
| assertTrue("Byte invalid exception: " + e, |
| e instanceof IllegalArgumentException); |
| assertTrue("Byte invalid failure: " + methods[i], |
| param == Boolean.TYPE || param == Character.TYPE); |
| } |
| |
| try { |
| methods[i].invoke(testMethod, new Object[] { new Short( |
| (short) 1) }); |
| assertTrue("invalid invoke with Short: " + methods[i], |
| param == Short.TYPE || param == Integer.TYPE |
| || param == Long.TYPE |
| || param == Float.TYPE |
| || param == Double.TYPE); |
| } catch (Exception e) { |
| assertTrue("Short invalid exception: " + e, |
| e instanceof IllegalArgumentException); |
| assertTrue("Short invalid failure: " + methods[i], |
| param == Byte.TYPE || param == Boolean.TYPE |
| || param == Character.TYPE); |
| } |
| |
| try { |
| methods[i].invoke(testMethod, |
| new Object[] { new Integer(1) }); |
| assertTrue("invalid invoke with Integer: " + methods[i], |
| param == Integer.TYPE || param == Long.TYPE |
| || param == Float.TYPE |
| || param == Double.TYPE); |
| } catch (Exception e) { |
| assertTrue("Integer invalid exception: " + e, |
| e instanceof IllegalArgumentException); |
| assertTrue("Integer invalid failure: " + methods[i], |
| param == Byte.TYPE || param == Short.TYPE |
| || param == Boolean.TYPE |
| || param == Character.TYPE); |
| } |
| |
| try { |
| methods[i].invoke(testMethod, new Object[] { new Long(1) }); |
| assertTrue("invalid invoke with Long: " + methods[i], |
| param == Long.TYPE || param == Float.TYPE |
| || param == Double.TYPE); |
| } catch (Exception e) { |
| assertTrue("Long invalid exception: " + e, |
| e instanceof IllegalArgumentException); |
| assertTrue("Long invalid failure: " + methods[i], |
| param == Byte.TYPE || param == Short.TYPE |
| || param == Integer.TYPE |
| || param == Boolean.TYPE |
| || param == Character.TYPE); |
| } |
| |
| try { |
| methods[i].invoke(testMethod, new Object[] { new Character( |
| 'a') }); |
| assertTrue("invalid invoke with Character: " + methods[i], |
| param == Character.TYPE || param == Integer.TYPE |
| || param == Long.TYPE |
| || param == Float.TYPE |
| || param == Double.TYPE); |
| } catch (Exception e) { |
| assertTrue("Character invalid exception: " + e, |
| e instanceof IllegalArgumentException); |
| assertTrue("Character invalid failure: " + methods[i], |
| param == Byte.TYPE || param == Short.TYPE |
| || param == Boolean.TYPE); |
| } |
| |
| try { |
| methods[i] |
| .invoke(testMethod, new Object[] { new Float(1) }); |
| assertTrue("invalid invoke with Float: " + methods[i], |
| param == Float.TYPE || param == Double.TYPE); |
| } catch (Exception e) { |
| assertTrue("Float invalid exception: " + e, |
| e instanceof IllegalArgumentException); |
| assertTrue("Float invalid failure: " + methods[i], |
| param == Byte.TYPE || param == Short.TYPE |
| || param == Integer.TYPE |
| || param == Long.TYPE |
| || param == Boolean.TYPE |
| || param == Character.TYPE); |
| } |
| |
| try { |
| methods[i].invoke(testMethod, |
| new Object[] { new Double(1) }); |
| assertTrue("invalid invoke with Double: " + methods[i], |
| param == Double.TYPE); |
| } catch (Exception e) { |
| assertTrue("Double invalid exception: " + e, |
| e instanceof IllegalArgumentException); |
| assertTrue("Double invalid failure: " + methods[i], |
| param == Byte.TYPE || param == Short.TYPE |
| || param == Integer.TYPE |
| || param == Long.TYPE |
| || param == Boolean.TYPE |
| || param == Character.TYPE |
| || param == Float.TYPE); |
| } |
| |
| try { |
| methods[i].invoke(testMethod, new Object[] { new Boolean( |
| true) }); |
| assertTrue("invalid invoke with Boolean: " + methods[i], |
| param == Boolean.TYPE); |
| } catch (Exception e) { |
| assertTrue("Boolean invalid exception: " + e, |
| e instanceof IllegalArgumentException); |
| assertTrue("Boolean invalid failure: " + methods[i], |
| param == Byte.TYPE || param == Short.TYPE |
| || param == Integer.TYPE |
| || param == Long.TYPE |
| || param == Character.TYPE |
| || param == Float.TYPE |
| || param == Double.TYPE); |
| } |
| } |
| } |
| } |
| |
| /** |
| * java.lang.reflect.Method#toString() |
| */ |
| public void test_toString() { |
| // Test for method java.lang.String java.lang.reflect.Method.toString() |
| Method mth = null; |
| Class[] parms = { int.class, short.class, String.class, boolean.class, |
| Object.class, long.class, byte.class, char.class, double.class, |
| float.class }; |
| try { |
| |
| mth = TestMethod.class.getDeclaredMethod("printTest", parms); |
| } catch (Exception e) { |
| fail("Exception during toString test : " + e.getMessage()); |
| } |
| |
| assertTrue( |
| "Returned incorrect string for method: " + mth.toString(), |
| mth |
| .toString() |
| .equals( |
| "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)")); |
| } |
| |
| /** |
| * Sets up the fixture, for example, open a network connection. This method |
| * is called before a test is executed. |
| */ |
| protected void setUp() { |
| } |
| |
| /** |
| * Tears down the fixture, for example, close a network connection. This |
| * method is called after a test is executed. |
| */ |
| protected void tearDown() { |
| } |
| } |