ValidatorResultsTest.java
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.commons.validator;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.io.IOException;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.xml.sax.SAXException;
/**
* Test ValidatorResults.
*/
class ValidatorResultsTest extends AbstractCommonTest {
private static final String FORM_KEY = "nameForm";
private static final String FIRST_NAME_FIELD = "firstName";
private static final String MIDDLE_NAME_FIELD = "middleName";
private static final String LAST_NAME_FIELD = "lastName";
private String firstName;
private String middleName;
private String lastName;
/**
* Check a validator has not been run for a field and the result.
*/
private void checkNotRun(final ValidatorResults results, final String field, final String action) {
final ValidatorResult result = results.getValidatorResult(field);
assertNotNull(result, field + " result");
assertFalse(result.containsAction(action), field + "[" + action + "] run");
// System.out.println(field + "[" + action + "] not run");
}
/**
* Check a validator has run for a field and the result.
*/
private void checkValidatorResult(final ValidatorResults results, final String field, final String action, final boolean expected) {
final ValidatorResult result = results.getValidatorResult(field);
// System.out.println(field + "[" + action + "]=" + result.isValid(action));
assertNotNull(result, field + " result");
assertTrue(result.containsAction(action), field + "[" + action + "] not run");
assertEquals(expected, result.isValid(action), field + "[" + action + "] result");
}
/**
* Create a NameBean.
*/
private NameBean createNameBean() {
final NameBean name = new NameBean();
name.setFirstName(firstName);
name.setMiddleName(middleName);
name.setLastName(lastName);
return name;
}
/**
* Load {@code ValidatorResources} from ValidatorResultsTest-config.xml.
*/
@BeforeEach
protected void setUp() throws IOException, SAXException {
// Load resources
loadResources("ValidatorResultsTest-config.xml");
// initialize values
firstName = "foo";
middleName = "123";
lastName = "456";
}
@AfterEach
protected void tearDown() {
}
/**
* Test all validations ran and passed.
*/
@Test
void testAllValid() throws ValidatorException {
// Create bean to run test on.
final NameBean bean = createNameBean();
// Validate.
final ValidatorResults results = validate(bean);
// Check results
checkValidatorResult(results, FIRST_NAME_FIELD, "required", true);
checkValidatorResult(results, MIDDLE_NAME_FIELD, "required", true);
checkValidatorResult(results, MIDDLE_NAME_FIELD, "int", true);
checkValidatorResult(results, MIDDLE_NAME_FIELD, "positive", true);
checkValidatorResult(results, LAST_NAME_FIELD, "required", true);
checkValidatorResult(results, LAST_NAME_FIELD, "int", true);
}
/**
* Test some validations failed and some didn't run.
*/
@Test
void testErrors() throws ValidatorException {
middleName = "XXX";
lastName = null;
// Create bean to run test on.
final NameBean bean = createNameBean();
// Validate.
final ValidatorResults results = validate(bean);
// Check results
checkValidatorResult(results, FIRST_NAME_FIELD, "required", true);
checkValidatorResult(results, MIDDLE_NAME_FIELD, "required", true);
checkValidatorResult(results, MIDDLE_NAME_FIELD, "int", false);
checkNotRun(results, MIDDLE_NAME_FIELD, "positive");
checkValidatorResult(results, LAST_NAME_FIELD, "required", false);
checkNotRun(results, LAST_NAME_FIELD, "int");
}
/**
* Validate results.
*/
private ValidatorResults validate(final Object bean) throws ValidatorException {
// Construct validator based on the loaded resources
// and the form key
final Validator validator = new Validator(resources, FORM_KEY);
// add the name bean to the validator as a resource
// for the validations to be performed on.
validator.setParameter(Validator.BEAN_PARAM, bean);
return validator.validate();
}
}