| // Copyright 2006 The Apache Software Foundation |
| // |
| // Licensed 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 org.apache.tapestry5.ioc.services; |
| |
| import org.apache.tapestry5.ioc.test.IOCTestCase; |
| import org.testng.annotations.Test; |
| |
| import java.io.IOException; |
| import java.io.ObjectInput; |
| import java.io.ObjectInputStream; |
| import java.lang.reflect.Method; |
| import java.sql.SQLException; |
| |
| public class MethodSignatureTest extends IOCTestCase |
| { |
| private MethodSignature find(Class sourceClass, String methodName) |
| { |
| Method[] methods = sourceClass.getMethods(); |
| |
| for (int i = 0; i < methods.length; i++) |
| { |
| Method m = methods[i]; |
| |
| if (m.getName().equals(methodName)) return new MethodSignature(m); |
| } |
| |
| unreachable(); |
| return null; |
| } |
| |
| @Test |
| public void excercize_equals_and_hashcode() |
| { |
| MethodSignature m1 = find(Object.class, "hashCode"); |
| MethodSignature m2 = find(Boolean.class, "hashCode"); |
| |
| assertEquals(m1.hashCode(), m2.hashCode()); |
| assertTrue(m1.equals(m2)); |
| |
| m1 = find(String.class, "charAt"); |
| m2 = find(StringBuilder.class, "charAt"); |
| |
| assertEquals(m1.hashCode(), m2.hashCode()); |
| assertTrue(m1.equals(m2)); |
| |
| m1 = find(ObjectInput.class, "close"); |
| m2 = find(ObjectInputStream.class, "close"); |
| |
| assertEquals(m1.hashCode(), m2.hashCode()); |
| assertTrue(m1.equals(m2)); |
| } |
| |
| @Test |
| public void equals_and_hashcode_with_null_parameters_and_exception_lists() |
| { |
| MethodSignature m1 = new MethodSignature(void.class, "foo", null, null); |
| MethodSignature m2 = new MethodSignature(void.class, "foo", new Class[0], new Class[0]); |
| |
| assertEquals(m1, m2); |
| assertEquals(m2, m1); |
| |
| assertEquals(m1.hashCode(), m2.hashCode()); |
| } |
| |
| @Test |
| public void equals_with_name_mismatch() |
| { |
| MethodSignature m1 = new MethodSignature(void.class, "foo", null, null); |
| MethodSignature m2 = new MethodSignature(void.class, "bar", null, null); |
| |
| assertEquals(false, m1.equals(m2)); |
| } |
| |
| @Test |
| public void equals_with_parameters_mismatch() |
| { |
| MethodSignature m1 = new MethodSignature(void.class, "foo", new Class[] { String.class }, null); |
| MethodSignature m2 = new MethodSignature(void.class, "foo", new Class[] { Boolean.class }, null); |
| |
| assertEquals(false, m1.equals(m2)); |
| } |
| |
| @Test |
| public void equals_with_null() |
| { |
| MethodSignature m1 = new MethodSignature(void.class, "foo", null, null); |
| |
| assertEquals(m1.equals(null), false); |
| } |
| |
| @Test |
| public void equals_with_not_method_signature() |
| { |
| MethodSignature m1 = new MethodSignature(void.class, "foo", null, null); |
| |
| assertEquals(m1.equals("Method Signature"), false); |
| } |
| |
| @Test |
| public void to_string() |
| { |
| MethodSignature m = find(String.class, "getChars"); |
| |
| assertEquals(m.toString(), "void getChars(int, int, char[], int)"); |
| |
| m = find(Class.class, "newInstance"); |
| |
| assertEquals(m.toString(), |
| "java.lang.Object newInstance() throws java.lang.IllegalAccessException, java.lang.InstantiationException"); |
| } |
| |
| @Test |
| public void unique_id() |
| { |
| MethodSignature m = find(String.class, "getChars"); |
| |
| assertEquals(m.getUniqueId(), "getChars(int,int,char[],int)"); |
| |
| m = find(Class.class, "newInstance"); |
| |
| assertEquals(m.getUniqueId(), "newInstance()"); |
| } |
| |
| @Test |
| public void overriding_signature_type_mismatch() |
| { |
| MethodSignature m1 = new MethodSignature(void.class, "foo", null, null); |
| MethodSignature m2 = new MethodSignature(int.class, "foo", null, null); |
| |
| assertEquals(m1.isOverridingSignatureOf(m2), false); |
| } |
| |
| @Test |
| public void overriding_signature_name_mismatch() |
| { |
| MethodSignature m1 = new MethodSignature(void.class, "foo", null, null); |
| MethodSignature m2 = new MethodSignature(void.class, "bar", null, null); |
| |
| assertEquals(m1.isOverridingSignatureOf(m2), false); |
| } |
| |
| @Test |
| public void overriding_signature_parameters_mismatch() |
| { |
| MethodSignature m1 = new MethodSignature(void.class, "foo", null, null); |
| MethodSignature m2 = new MethodSignature(void.class, "foo", new Class[] { String.class }, null); |
| |
| assertEquals(m1.isOverridingSignatureOf(m2), false); |
| } |
| |
| @Test |
| public void overriding_signature() |
| { |
| MethodSignature m1 = new MethodSignature(void.class, "close", null, new Class[] { Exception.class }); |
| MethodSignature m2 = new MethodSignature(void.class, "close", null, new Class[] { RuntimeException.class }); |
| |
| assertEquals(m1.isOverridingSignatureOf(m2), true); |
| assertEquals(m2.isOverridingSignatureOf(m1), false); |
| } |
| |
| /** |
| * Tests a shorcut used when one signature has zero exceptions. |
| */ |
| @Test |
| public void overriding_signature_with_no_exceptions() |
| { |
| MethodSignature m1 = new MethodSignature(void.class, "close", null, null); |
| MethodSignature m2 = new MethodSignature(void.class, "close", null, new Class[] { RuntimeException.class }); |
| |
| assertEquals(m1.isOverridingSignatureOf(m2), false); |
| assertEquals(m2.isOverridingSignatureOf(m1), true); |
| } |
| |
| /** |
| * Fill in code coverage for multiple matched signatures. |
| */ |
| @Test |
| public void overriding_signature_with_multiple_matched_exceptions() |
| { |
| MethodSignature m1 = new MethodSignature(void.class, "close", null, |
| new Class[] { SQLException.class, NumberFormatException.class }); |
| MethodSignature m2 = new MethodSignature(void.class, "close", null, |
| new Class[] { SQLException.class, IOException.class }); |
| |
| assertEquals(m1.isOverridingSignatureOf(m2), false); |
| assertEquals(m2.isOverridingSignatureOf(m1), false); |
| } |
| } |