package org.springmodules.validation.valang; import java.util.HashMap; import java.util.Map; import junit.framework.TestCase; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.validation.BindException; import org.springframework.validation.Errors; import org.springframework.validation.Validator; public class ValangValidatorTests extends TestCase { public ValangValidatorTests() { super(); } public ValangValidatorTests(String arg0) { super(arg0); } private static ApplicationContext appCtx = new ClassPathXmlApplicationContext("org/springmodules/validation/valang/ValangValidator-tests.xml"); public void testCustomFunctions() { LifeCycleBean lifeCycleBean = new LifeCycleBean(); Person person = new Person(); person.setLifeCycleBean(lifeCycleBean); person.setFirstName("FN"); Validator validator = (Validator) appCtx.getBean("testCustomFunctions"); BindException errors = new BindException(person, "person"); validator.validate(person, errors); assertTrue(lifeCycleBean.isApplicationContextSet()); assertTrue(lifeCycleBean.isApplicationEventPublisher()); assertTrue(lifeCycleBean.isBeanFactorySet()); assertTrue(lifeCycleBean.isMessageSourceSet()); assertTrue(lifeCycleBean.isResourceLoaderSet()); assertTrue(errors.hasFieldErrors("firstName")); } public void testCustomFunctionsFromApplicationContext() { LifeCycleBean lifeCycleBean = new LifeCycleBean(); Person person = new Person(); person.setLifeCycleBean(lifeCycleBean); person.setFirstName("FN"); Validator validator = (Validator) appCtx.getBean("testCustomFunctionsFromApplicationContext"); BindException errors = new BindException(person, "person"); validator.validate(person, errors); assertTrue(lifeCycleBean.isApplicationContextSet()); assertTrue(lifeCycleBean.isApplicationEventPublisher()); assertTrue(lifeCycleBean.isBeanFactorySet()); assertTrue(lifeCycleBean.isMessageSourceSet()); assertTrue(lifeCycleBean.isResourceLoaderSet()); assertTrue(errors.hasFieldErrors("firstName")); } public void testFunctionsFromApplicationContext() { Person person = new Person(); person.setFirstName("FN"); person.setFirstName("LN"); Validator validator = (Validator) appCtx.getBean("testFunctionFromApplicationContext"); BindException errors = new BindException(person, "person"); validator.validate(person, errors); assertTrue(errors.hasFieldErrors("firstName")); } public void testPersonValidator() { Validator validator = (Validator) appCtx.getBean("personValidator", Validator.class); Person person = new Person(); Map map = new HashMap(); map.put("name", "Steven"); map.put("passwd", "pas"); person.setForm(map); Errors errors = new BindException(person, "person"); validator.validate(person, errors); assertFalse(errors.hasFieldErrors("form[name]")); assertTrue(errors.hasFieldErrors("form[passwd]")); } public void testCustomFunction() throws Exception { ValangValidator validator = new ValangValidator(); validator.addCustomFunction("tupper", "org.springmodules.validation.valang.functions.UpperCaseFunction"); validator.setValang("{ firstName : tupper(?) == 'FN' : 'First name is empty' }"); validator.afterPropertiesSet(); Person person = new Person(); person.setFirstName("fn"); BindException errors = new BindException(person, "person"); validator.validate(person, errors); assertFalse(errors.hasErrors()); } //================================================ Inner Classes =================================================== private class Person { private LifeCycleBean lifeCycleBean; private String firstName; private String lastName; private Map form; public Map getForm() { return form; } public void setForm(Map form) { this.form = form; } public LifeCycleBean getLifeCycleBean() { return lifeCycleBean; } public void setLifeCycleBean(LifeCycleBean lifeCycleBean) { this.lifeCycleBean = lifeCycleBean; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } } }