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_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());
  }