/*
* 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.packageprivateconstraint;
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validator;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import org.hibernate.validator.testutil.TestForIssue;
import org.hibernate.validator.testutils.ValidatorUtil;
import static org.testng.Assert.assertEquals;
/**
* Tests the validation of package-private constraints.
*
* @author Gunnar Morling
*/
@TestForIssue(jiraKey = "HV-843")
public class PackagePrivateConstraintValidationTest {
private Validator validator;
@BeforeMethod
public void setupValidator() {
validator = ValidatorUtil.getValidator();
}
@Test
public void shouldValidatePackagePrivateConstraint() {
Set<ConstraintViolation<Giraffe>> violations = validator.validate( new Giraffe() );
assertEquals( violations.size(), 1 );
assertEquals(
violations.iterator().next().getConstraintDescriptor().getAnnotation().annotationType(),
ValidAnimalName.class
);
}
/**
* Currently it's not possible to have an annotation which is declared as inner-type within a package-private
* annotation type and have that inner annotation refer to that outer annotation type.
* <p>
* That means it is not possible to work with the conventional pattern of an inner {@code @List} annotation for
* multi-valued constraints if the actual constraint type is package private. Thus the multi-value annotation is a
* top-level type itself as workaround here.
* <p>
* This is a limitation of how proxies for annotations are generated by the JDK.
*/
@Test
public void shouldValidatePackagePrivateMultiValueConstraint() {
Set<ConstraintViolation<PolarBear>> violations = validator.validate( new PolarBear() );
assertEquals( violations.size(), 1 );
assertEquals(
violations.iterator().next().getConstraintDescriptor().getAnnotation().annotationType(),
ValidAnimalName.class
);
}
}