/* * 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.constraints; import java.util.ArrayList; import java.util.List; import java.util.Set; import javax.validation.ConstraintViolation; import javax.validation.Validator; import org.testng.annotations.Test; import org.hibernate.validator.testutil.TestForIssue; import org.hibernate.validator.testutils.ValidatorUtil; import static org.hibernate.validator.testutil.ConstraintViolationAssert.assertConstraintViolation; import static org.hibernate.validator.testutil.ConstraintViolationAssert.assertNumberOfViolations; /** * @author Hardy Ferentschik */ public class ValidatorResolutionTest { @Test public void testResolutionOfMultipleSizeValidators() { Validator validator = ValidatorUtil.getValidator(); Suburb suburb = new Suburb(); List<Integer> postcodes = new ArrayList<Integer>(); postcodes.add( 12345 ); suburb.setIncludedPostCodes( postcodes ); // all values are null and should pass Set<ConstraintViolation<Suburb>> constraintViolations = validator.validate( suburb ); assertNumberOfViolations( constraintViolations, 0 ); suburb.setName( "" ); constraintViolations = validator.validate( suburb ); assertNumberOfViolations( constraintViolations, 1 ); assertConstraintViolation( constraintViolations.iterator().next(), "size must be between 5 and 10", Suburb.class, "", "name" ); suburb.setName( "Hoegsbo" ); constraintViolations = validator.validate( suburb ); assertNumberOfViolations( constraintViolations, 0 ); suburb.addFacility( Suburb.Facility.SHOPPING_MALL, false ); constraintViolations = validator.validate( suburb ); assertNumberOfViolations( constraintViolations, 1 ); assertConstraintViolation( constraintViolations.iterator().next(), "size must be between 2 and 2", Suburb.class, suburb.getFacilities(), "facilities" ); suburb.addFacility( Suburb.Facility.BUS_TERMINAL, true ); constraintViolations = validator.validate( suburb ); assertNumberOfViolations( constraintViolations, 0 ); suburb.addStreetName( "Sikelsgatan" ); constraintViolations = validator.validate( suburb ); assertNumberOfViolations( constraintViolations, 1 ); assertConstraintViolation( constraintViolations.iterator().next(), "size must be between 2 and 2147483647", Suburb.class, suburb.getStreetNames(), "streetNames" ); suburb.addStreetName( "Marklandsgatan" ); constraintViolations = validator.validate( suburb ); assertNumberOfViolations( constraintViolations, 0 ); Coordinate[] boundingBox = new Coordinate[3]; boundingBox[0] = new Coordinate( 0L, 0L ); boundingBox[1] = new Coordinate( 0L, 1L ); boundingBox[2] = new Coordinate( 1L, 0L ); suburb.setBoundingBox( boundingBox ); constraintViolations = validator.validate( suburb ); assertNumberOfViolations( constraintViolations, 1 ); assertConstraintViolation( constraintViolations.iterator().next(), "size must be between 4 and 1000", Suburb.class, suburb.getBoundingBox(), "boundingBox" ); boundingBox = new Coordinate[4]; boundingBox[0] = new Coordinate( 0L, 0L ); boundingBox[1] = new Coordinate( 0L, 1L ); boundingBox[2] = new Coordinate( 1L, 0L ); boundingBox[3] = new Coordinate( 1L, 1L ); suburb.setBoundingBox( boundingBox ); constraintViolations = validator.validate( suburb ); assertNumberOfViolations( constraintViolations, 0 ); } @Test @TestForIssue(jiraKey = "HV-233") public void testObjectArraysAndPrimitiveArraysAreSubtypesOfObject() { Validator validator = ValidatorUtil.getValidator(); Foo testEntity = new Foo( new org.hibernate.validator.test.constraints.Object[] { }, new int[] { } ); Set<ConstraintViolation<Foo>> constraintViolations = validator.validate( testEntity ); assertNumberOfViolations( constraintViolations, 0 ); } @Test @TestForIssue(jiraKey = "HV-233") public void testObjectArraysAndPrimitiveArraysAreSubtypesOfClonable() { Validator validator = ValidatorUtil.getValidator(); Bar testEntity = new Bar( new org.hibernate.validator.test.constraints.Object[] { }, new int[] { } ); Set<ConstraintViolation<Bar>> constraintViolations = validator.validate( testEntity ); assertNumberOfViolations( constraintViolations, 0 ); } @Test @TestForIssue(jiraKey = "HV-233") public void testObjectArraysAndPrimitiveArraysAreSubtypesOfSerializable() { Validator validator = ValidatorUtil.getValidator(); Fubar testEntity = new Fubar( new org.hibernate.validator.test.constraints.Object[] { }, new int[] { } ); Set<ConstraintViolation<Fubar>> constraintViolations = validator.validate( testEntity ); assertNumberOfViolations( constraintViolations, 0 ); } @Test @TestForIssue(jiraKey = "HV-233") public void testSubTypeArrayIsSubtypeOfSuperTypeArray() { Validator validator = ValidatorUtil.getValidator(); SubTypeEntity testEntity = new SubTypeEntity( new SubType[] { } ); Set<ConstraintViolation<SubTypeEntity>> constraintViolations = validator.validate( testEntity ); assertNumberOfViolations( constraintViolations, 0 ); } @SuppressWarnings("unused") public class Foo { @org.hibernate.validator.test.constraints.Object private final org.hibernate.validator.test.constraints.Object[] objectArray; @org.hibernate.validator.test.constraints.Object private final int[] intArray; public Foo(org.hibernate.validator.test.constraints.Object[] objectArray, int[] intArray) { this.objectArray = objectArray; this.intArray = intArray; } } @SuppressWarnings("unused") public class Bar { @org.hibernate.validator.test.constraints.Cloneable private final org.hibernate.validator.test.constraints.Object[] objectArray; @org.hibernate.validator.test.constraints.Cloneable private final int[] intArray; public Bar(org.hibernate.validator.test.constraints.Object[] objectArray, int[] intArray) { this.objectArray = objectArray; this.intArray = intArray; } } @SuppressWarnings("unused") public class Fubar { @Serializable private final org.hibernate.validator.test.constraints.Object[] objectArray; @Serializable private final int[] intArray; public Fubar(org.hibernate.validator.test.constraints.Object[] objectArray, int[] intArray) { this.objectArray = objectArray; this.intArray = intArray; } } @SuppressWarnings("unused") public class SubTypeEntity { @SuperTypeArray private final SubType[] subTypeArray; public SubTypeEntity(SubType[] subTypeArray) { this.subTypeArray = subTypeArray; } } }