@SuppressWarnings("unchecked")
@Test
public void multiple_validators_via_specification() throws Exception
{
ValidationMessagesSource messagesSource = newValidationMessagesSource();
Validator required = newValidator();
Validator minLength = newValidator();
TypeCoercer coercer = newTypeCoercer();
FieldComponent field = newFieldComponent();
Messages messages = newMessages();
MessageFormatter requiredFormatter = newMessageFormatter();
MessageFormatter minLengthFormatter = newMessageFormatter();
Object inputValue = "input value";
ComponentResources resources = newComponentResources();
Messages containerMessages = newMessages();
Integer fifteen = 15;
Map<String, Validator> map = newMap();
map.put("required", required);
map.put("minLength", minLength);
train_getConstraintType(required, null);
train_getConstraintType(minLength, Integer.class);
train_getComponentResources(field, resources);
train_getId(resources, "fred");
train_getContainerMessages(resources, containerMessages);
train_contains(containerMessages, "fred-required", false);
train_getLocale(resources, Locale.FRENCH);
train_getValidationMessages(messagesSource, Locale.FRENCH, messages);
train_getMessageKey(required, "required");
train_getMessageFormatter(messages, "required", requiredFormatter);
train_contains(containerMessages, "fred-minLength", false);
train_getMessageKey(minLength, "min-length");
train_getMessageFormatter(messages, "min-length", minLengthFormatter);
train_coerce(coercer, "15", Integer.class, fifteen);
train_invokeIfBlank(required, true);
train_getValueType(required, Object.class);
required.validate(field, null, requiredFormatter, inputValue);
train_invokeIfBlank(minLength, false);
train_getValueType(minLength, String.class);
minLength.validate(field, fifteen, minLengthFormatter, inputValue);
replay();
FieldValidatorSource source = new FieldValidatorSourceImpl(messagesSource, coercer, map);