public void testBeanValidator_WithManualConfiguration() throws Exception {

    // creating the validation configuration for the bean.
    DefaultBeanValidationConfiguration personValidationConfiguration =
        new DefaultBeanValidationConfiguration();
    personValidationConfiguration.addGlobalRule(
        new DefaultValidationRule(Conditions.minLength("name", 4), "minLength"));
    personValidationConfiguration.addPropertyRule(
        "name", new DefaultValidationRule(Conditions.minLength("name", 5), "minLength"));
    SimpleBeanValidationConfigurationLoader loader = new SimpleBeanValidationConfigurationLoader();
    loader.setClassValidation(Person.class, personValidationConfiguration);

    BeanValidator validator = new BeanValidator();
    validator.setErrorCodeConverter(new ModelAwareErrorCodeConverter());
    validator.setConfigurationLoader(loader);

    Person person = new Person("Uri");
    BindException errors = new BindException(person, "person");

    validator.validate(person, errors);

    assertTrue(errors.hasFieldErrors("name"));
    assertTrue(errors.hasGlobalErrors());
    assertEquals(1, errors.getFieldErrorCount("name"));
    assertEquals(1, errors.getGlobalErrorCount());
    assertEquals("Person[minLength]", errors.getGlobalError().getCode());
    assertEquals("Person.name[minLength]", errors.getFieldError("name").getCode());
  }
  public void testBeanValidator_WithCustomValangFunctions() throws Exception {

    Map functionsByName = new HashMap();
    functionsByName.put("tupper", UpperCaseFunction.class.getName());
    ValangCondition goodCondition =
        new ValangCondition("tupper(name) == 'URI'", functionsByName, null);
    ValangCondition badCondition =
        new ValangCondition("tupper(name) == 'Uri'", functionsByName, null);

    // creating the validation configuration for the bean.
    DefaultBeanValidationConfiguration personValidationConfiguration =
        new DefaultBeanValidationConfiguration();
    personValidationConfiguration.addGlobalRule(new DefaultValidationRule(goodCondition, "good"));
    personValidationConfiguration.addGlobalRule(new DefaultValidationRule(badCondition, "bad"));
    SimpleBeanValidationConfigurationLoader loader = new SimpleBeanValidationConfigurationLoader();
    loader.setClassValidation(Person.class, personValidationConfiguration);

    BeanValidator validator = new BeanValidator(loader);

    validator.setErrorCodeConverter(new ModelAwareErrorCodeConverter());
    validator.setConfigurationLoader(loader);

    Person person = new Person("Uri");
    BindException errors = new BindException(person, "person");

    validator.validate(person, errors);

    assertTrue(errors.hasGlobalErrors());
    assertEquals(1, errors.getGlobalErrorCount());
    assertEquals("Person[bad]", errors.getGlobalError().getCode());
  }
  public void testBeanValidator_WithCustomValangFunctions2() throws Exception {

    Map functionsByName = new HashMap();
    functionsByName.put("tupper", UpperCaseFunction.class.getName());

    ValangConditionExpressionParser conditionExpressionParser =
        new ValangConditionExpressionParser();
    conditionExpressionParser.setCustomFunctions(functionsByName);

    DefaultValidationRuleElementHandlerRegistry registry =
        new DefaultValidationRuleElementHandlerRegistry();
    registry.setConditionExpressionParser(conditionExpressionParser);
    registry.afterPropertiesSet();

    DefaultXmlBeanValidationConfigurationLoader loader =
        new DefaultXmlBeanValidationConfigurationLoader();
    loader.setResource(new ClassPathResource("validation.xml", getClass()));
    loader.setElementHandlerRegistry(registry);
    loader.afterPropertiesSet();

    BeanValidator validator = new BeanValidator(loader);
    validator.setErrorCodeConverter(new ModelAwareErrorCodeConverter());

    Person person = new Person("Uri");
    person.setHomeless(false);
    person.setAddress(new Address(null, "Amsterdam"));
    BindException errors = new BindException(person, "person");

    validator.validate(person, errors);

    assertTrue(errors.hasGlobalErrors());
    assertEquals(1, errors.getGlobalErrorCount());
    assertEquals(1, errors.getFieldErrorCount());
    assertEquals("Person[bad]", errors.getGlobalError().getCode());
    assertEquals("Address.street[not.null]", errors.getFieldError("address.street").getCode());
  }