KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > eireneh > eliza > util > OverloadUtilTest


1 package com.eireneh.eliza.util;
2
3 import java.lang.reflect.Method JavaDoc;
4
5 import junit.framework.TestCase;
6
7 /**
8  * @author Rob Sanheim
9  *
10  * Test OverloadUtil
11  * Unless otherwise noted, we cannot assume that isOverloaded(x, y) == isOverloaded(y, x)
12  */

13 public class OverloadUtilTest extends TestCase
14 {
15     private static final String JavaDoc METHOD = "method";
16
17     private static final String JavaDoc ANOTHER_METHOD = "anotherMethod";
18
19     private static final Class JavaDoc[] NO_PARAMETERS = null;
20
21     // fixtures
22
private Method JavaDoc returnsStringNoParameters = getMethod(ConcreteClass.class, METHOD, NO_PARAMETERS);
23
24     private Method JavaDoc returnsStringOneParameter = getMethod(ConcreteClass.class, METHOD, String JavaDoc.class);
25
26     private Method JavaDoc returnsObjectNoParametersDifferentName = getMethod(ConcreteClass.class, ANOTHER_METHOD, NO_PARAMETERS);
27
28     private Method JavaDoc returnsStringNoParametersOnSubClass = getMethod(SubClass.class, METHOD, NO_PARAMETERS);
29
30     private Method JavaDoc returnsObjectThreeParametersOnSubClass = getMethod(SubClass.class, METHOD, String JavaDoc.class, String JavaDoc.class, String JavaDoc.class);
31
32     private Method JavaDoc returnsObjectNoParametersOnInterfaceType = getMethod(Interface.class, METHOD, NO_PARAMETERS);
33
34     /**
35      * This type of test should be reversible
36      *
37      * @throws Exception
38      */

39     public void testTwoSimpleOverloadedMethodsOnSameClass() throws Exception JavaDoc
40     {
41         assertTrue(OverloadUtil.isOverloaded(returnsStringNoParameters, returnsStringOneParameter));
42         assertTrue(OverloadUtil.isOverloaded(returnsStringOneParameter, returnsStringNoParameters));
43     }
44
45     public void testMoreSpecificMethodOnConcreteClassOverloadsInterfaceMethods() throws Exception JavaDoc
46     {
47         assertTrue(OverloadUtil.isOverloaded(returnsObjectNoParametersOnInterfaceType, returnsStringOneParameter));
48     }
49
50     public void testInterfaceImplementationIsNotOverloading() throws Exception JavaDoc
51     {
52         assertFalse(OverloadUtil.isOverloaded(returnsObjectNoParametersOnInterfaceType, returnsStringNoParameters));
53     }
54
55     /**
56      * This type of test should be reversible
57      *
58      * @throws Exception
59      */

60     public void testIsNotOverloadingForDifferentNamesOnSameClass() throws Exception JavaDoc
61     {
62         assertFalse(OverloadUtil.isOverloaded(returnsStringNoParameters, returnsObjectNoParametersDifferentName));
63         assertFalse(OverloadUtil.isOverloaded(returnsStringOneParameter, returnsObjectNoParametersDifferentName));
64     }
65
66     public void testIsNotOverloadingForDifferentNamesInterfaceAgainstConcrete() throws Exception JavaDoc
67     {
68         assertFalse(OverloadUtil.isOverloaded(returnsObjectNoParametersOnInterfaceType, returnsObjectNoParametersDifferentName));
69     }
70
71     public void testOverridingIsNotOverloading() throws Exception JavaDoc
72     {
73         assertFalse(OverloadUtil.isOverloaded(returnsStringNoParameters, returnsStringNoParametersOnSubClass));
74     }
75
76     public void testMethodOnSubclassOverloadsInterfaceMethod() throws Exception JavaDoc
77     {
78         assertTrue(OverloadUtil.isOverloaded(returnsObjectNoParametersOnInterfaceType, returnsObjectThreeParametersOnSubClass));
79     }
80
81     /**
82      * This type of test should be reversible
83      *
84      * @throws Exception
85      */

86     public void testMethodOnSubclassOverloadsMethodOnSameClass() throws Exception JavaDoc
87     {
88         assertTrue(OverloadUtil.isOverloaded(returnsStringNoParametersOnSubClass, returnsObjectThreeParametersOnSubClass));
89         assertTrue(OverloadUtil.isOverloaded(returnsObjectThreeParametersOnSubClass, returnsStringNoParametersOnSubClass));
90     }
91
92     public void testMethodOnSubclassOverloadsMethodOnSuperClass() throws Exception JavaDoc
93     {
94         assertTrue(OverloadUtil.isOverloaded(returnsStringOneParameter, returnsObjectThreeParametersOnSubClass));
95     }
96
97     public void testMethodOnSubclassDoesNotOverloadMethodOfDifferentNameOnSuperClass() throws Exception JavaDoc
98     {
99         assertFalse(OverloadUtil.isOverloaded(returnsObjectNoParametersDifferentName, returnsObjectThreeParametersOnSubClass));
100     }
101
102     /**
103      * Util method to get a method, ignoring checked exceptions
104      *
105      * @param clazz
106      * @param name
107      * @param parameterTypes
108      * @return method
109      */

110     private static Method JavaDoc getMethod(Class JavaDoc clazz, String JavaDoc name, Class JavaDoc... parameterTypes)
111     {
112         Method JavaDoc method = null;
113         try
114         {
115             method = clazz.getMethod(name, parameterTypes);
116         }
117         catch (Exception JavaDoc e)
118         {
119             e.printStackTrace();
120         }
121         return method;
122     }
123
124 }
125
126 interface Interface
127 {
128     public Object JavaDoc method();
129 }
130
131 class ConcreteClass implements Interface
132 {
133
134     /** (non-Javadoc)
135      * implements the method in the interface type with a covariant return type
136      * @see com.robsanheim.sandbox.reflection.overloading.Interface#method()
137      */

138     public String JavaDoc method()
139     {
140         return null;
141     }
142
143     /**
144      * Overloads method in this concrete class, does not overload method from interface
145      * @param one
146      * @return
147      */

148     public String JavaDoc method(String JavaDoc one)
149     {
150         return null;
151     }
152
153     public Object JavaDoc anotherMethod()
154     {
155         return null;
156     }
157 }
158
159 class SubClass extends ConcreteClass
160 {
161     /**
162      * Override method from concrete class
163      */

164     public String JavaDoc method()
165     {
166         return null;
167     }
168
169     public Object JavaDoc method(String JavaDoc one, String JavaDoc two, String JavaDoc three)
170     {
171         return null;
172     }
173 }
174
Popular Tags