package org.springmodules.validation.bean.conf.loader.annotation;
import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.List;
import junit.framework.TestCase;
import org.easymock.MockControl;
import org.springmodules.validation.bean.conf.MutableBeanValidationConfiguration;
import org.springmodules.validation.bean.conf.loader.annotation.handler.ClassValidationAnnotationHandler;
import org.springmodules.validation.bean.conf.loader.annotation.handler.PropertyValidationAnnotationHandler;
/**
* Tests for {@link org.springmodules.validation.bean.conf.loader.annotation.DefaultValidationAnnotationHandlerRegistry}.
*
* @author Uri Boness
*/
@TestAnnotation
public class DefaultValidationAnnotationHandlerRegistryTests extends TestCase {
private DefaultValidationAnnotationHandlerRegistry registry;
private ClassValidationAnnotationHandler classHandler;
private MockControl classHandlerControl;
private PropertyValidationAnnotationHandler propertyHandler;
private MockControl propertyHandlerControl;
protected void setUp() throws Exception {
classHandlerControl = MockControl.createControl(ClassValidationAnnotationHandler.class);
classHandler = (ClassValidationAnnotationHandler) classHandlerControl.getMock();
propertyHandlerControl = MockControl.createControl(PropertyValidationAnnotationHandler.class);
propertyHandler = (PropertyValidationAnnotationHandler) propertyHandlerControl.getMock();
registry = new DefaultValidationAnnotationHandlerRegistry() {
protected void registerDefaultHandlers() {
}
};
}
public void testFindClassHanlder() throws Exception {
Annotation annotation = getAnnotation();
classHandlerControl.expectAndReturn(classHandler.supports(annotation, Object.class), true);
classHandlerControl.replay();
registry.registerClassHandler(classHandler);
Object returnedHandler = registry.findClassHanlder(annotation, Object.class);
assertSame(classHandler, returnedHandler);
classHandlerControl.verify();
}
public void testFindClassHanlder_WhenNotFound() throws Exception {
Annotation annotation = getAnnotation();
classHandlerControl.expectAndReturn(classHandler.supports(annotation, Object.class), false);
classHandlerControl.replay();
registry.registerClassHandler(classHandler);
Object returnedHandler = registry.findClassHanlder(annotation, Object.class);
assertNull(returnedHandler);
classHandlerControl.verify();
}
public void testSetExtraClassHandlers() throws Exception {
List<ClassValidationAnnotationHandler> handlers = new ArrayList<ClassValidationAnnotationHandler>();
handlers.add(createClassHandler(false));
handlers.add(createClassHandler(false));
handlers.add(createClassHandler(false));
ClassValidationAnnotationHandler h1 = createClassHandler(true);
handlers.add(h1);
registry.setExtraClassHandlers(handlers);
Object returnedHandler = registry.findClassHanlder(getAnnotation(), Object.class);
assertSame(h1, returnedHandler);
}
//=============================================== Helper Methods ===================================================
protected Annotation getAnnotation() {
return getClass().getAnnotation(TestAnnotation.class);
}
protected ClassValidationAnnotationHandler createClassHandler(final boolean supports) {
return new ClassValidationAnnotationHandler() {
public boolean supports(Annotation annotation, Class clazz) {
return supports;
}
public void handleAnnotation(Annotation annotation, Class clazz, MutableBeanValidationConfiguration configuration) {
}
};
}
}