@SuppressWarnings("unchecked")
@Test
public void multiple_validators_via_specification() throws Exception
{
ValidationMessagesSource messagesSource = mockValidationMessagesSource();
Validator required = mockValidator();
Validator minLength = mockValidator();
TypeCoercer coercer = mockTypeCoercer();
FieldComponent field = newFieldComponent();
Messages messages = mockMessages();
MessageFormatter requiredFormatter = mockMessageFormatter();
MessageFormatter minLengthFormatter = mockMessageFormatter();
Object inputValue = "input value";
ComponentResources resources = mockComponentResources();
Messages containerMessages = mockMessages();
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-message", 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-message", false);
train_getMessageKey(minLength, "min-length");
train_getMessageFormatter(messages, "min-length", minLengthFormatter);
train_coerce(coercer, "15", Integer.class, fifteen);
train_isRequired(required, true);
train_getValueType(required, Object.class);
required.validate(field, null, requiredFormatter, inputValue);
train_isRequired(minLength, false);
train_getValueType(minLength, String.class);
minLength.validate(field, fifteen, minLengthFormatter, inputValue);
replay();
FieldValidatorSource source = new FieldValidatorSourceImpl(messagesSource, coercer, null, map);