/*
* Hibernate Validator, declare and validate application constraints
*
* License: Apache License, Version 2.0
* See the license.txt file in the root directory or <http://www.apache.org/licenses/LICENSE-2.0>.
*/
package org.hibernate.validator.test.internal.engine.methodvalidation;
import static org.hibernate.validator.testutil.ConstraintViolationAssert.assertNumberOfViolations;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.List;
import javax.validation.ParameterNameProvider;
import javax.validation.Validation;
import javax.validation.Validator;
import org.hibernate.validator.HibernateValidator;
import org.hibernate.validator.HibernateValidatorConfiguration;
import org.hibernate.validator.testutil.TestForIssue;
import org.testng.annotations.Test;
/**
* @author Marko Bekhta
*/
@Test
public class ParameterlessMethodValidationTest {
@Test
@TestForIssue(jiraKey = "HV-966")
public void testEmptyParameters() throws NoSuchMethodException {
HibernateValidatorConfiguration config = Validation.byProvider( HibernateValidator.class ).configure();
ParameterNameProvider providerMock = new ParameterNameProvider() {
@Override
public List<String> getParameterNames(Constructor<?> constructor) {
throw new IllegalStateException( "this method shouldn't be invoked" );
}
@Override
public List<String> getParameterNames(Method method) {
if ( method.getParameters().length == 0 ) {
throw new IllegalStateException( "getParameterNames() shouldn't be invoked for parameterless method" + method.getName() );
}
return Arrays.asList( new String[method.getParameterCount()] );
}
};
Validator validator = config
.parameterNameProvider( providerMock )
.buildValidatorFactory()
.getValidator();
Bar bar = new Bar();
assertNumberOfViolations( validator.forExecutables().validateParameters( bar, bar.getClass().getMethod( "getString" ), new Object[]{} ), 0 );
}
private static class Bar {
private String string;
@SuppressWarnings("unused")
public String getString() {
return string;
}
}
}