Improving error checking logic and adding test cases to verify.

git-svn-id: https://svn.apache.org/repos/asf/commons/proper/lang/trunk@966807 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
James W. Carman 2010-07-22 19:09:18 +00:00
parent a43c5746fc
commit c3b4a3d362
2 changed files with 35 additions and 0 deletions

View File

@ -17,6 +17,8 @@
package org.apache.commons.lang3.event;
import org.apache.commons.lang3.Validate;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
@ -41,6 +43,8 @@ import java.util.List;
* </pre>
*
* @param <L> The event listener type
*
* @since 3.0
*/
public class EventListenerSupport<L>
{
@ -77,6 +81,9 @@ public class EventListenerSupport<L>
*/
public EventListenerSupport(Class<L> listenerInterface, ClassLoader classLoader)
{
Validate.notNull(listenerInterface, "Listener interface cannot be null.");
Validate.notNull(classLoader, "ClassLoader cannot be null.");
Validate.isTrue(listenerInterface.isInterface(), "Class {0} is not an interface", listenerInterface.getName());
proxy = listenerInterface.cast(Proxy.newProxyInstance(classLoader, new Class[]{listenerInterface},
new ProxyInvocationHandler()));
}
@ -102,6 +109,7 @@ public class EventListenerSupport<L>
*/
public void addListener(L listener)
{
Validate.notNull(listener, "Listener object cannot be null.");
listeners.add(0, listener);
}
@ -122,6 +130,7 @@ public class EventListenerSupport<L>
*/
public void removeListener(L listener)
{
Validate.notNull(listener, "Listener object cannot be null.");
listeners.remove(listener);
}

View File

@ -41,6 +41,32 @@ public class EventListenerSupportTest extends TestCase
assertSame(calledListeners.get(1), listener2);
}
public void testCreateWithNonInterfaceParameter()
{
try
{
EventListenerSupport.create(String.class);
fail("Should not be able to create using non-interface class.");
}
catch(IllegalArgumentException e)
{
}
}
public void testCreateWithNullParameter()
{
try
{
EventListenerSupport.create(null);
fail("Should not be able to create using null class.");
}
catch(NullPointerException e)
{
}
}
public void testRemoveListenerDuringEvent()
{
final EventListenerSupport<ActionListener> listenerSupport = EventListenerSupport.create(ActionListener.class);