[hibernate-commits] Hibernate SVN: r16711 - beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/constraints/constraintcomposition.
hibernate-commits at lists.jboss.org
hibernate-commits at lists.jboss.org
Fri Jun 5 11:27:11 EDT 2009
Author: hardy.ferentschik
Date: 2009-06-05 11:27:11 -0400 (Fri, 05 Jun 2009)
New Revision: 16711
Added:
beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/constraints/constraintcomposition/FrenchZipcodeWithInvalidOverride.java
Removed:
beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/constraints/constraintcomposition/GermanZipcodeConstraintValidator.java
Modified:
beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/constraints/constraintcomposition/ConstraintCompositionTest.java
beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/constraints/constraintcomposition/FrenchZipcode.java
beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/constraints/constraintcomposition/GermanZipcode.java
Log:
Constraint composition
Modified: beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/constraints/constraintcomposition/ConstraintCompositionTest.java
===================================================================
--- beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/constraints/constraintcomposition/ConstraintCompositionTest.java 2009-06-05 14:18:41 UTC (rev 16710)
+++ beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/constraints/constraintcomposition/ConstraintCompositionTest.java 2009-06-05 15:27:11 UTC (rev 16711)
@@ -17,9 +17,13 @@
*/
package org.hibernate.jsr303.tck.tests.constraints.constraintcomposition;
+import java.lang.annotation.Annotation;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
+import javax.validation.BeanDescriptor;
+import javax.validation.ConstraintDefinitionException;
+import javax.validation.ConstraintDescriptor;
import javax.validation.ConstraintViolation;
import javax.validation.Validator;
import javax.validation.constraints.NotNull;
@@ -35,6 +39,7 @@
import org.jboss.testharness.impl.packaging.Classes;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.fail;
import org.testng.annotations.Test;
import org.hibernate.jsr303.tck.util.TestUtil;
@@ -53,10 +58,13 @@
public class ConstraintCompositionTest extends AbstractTest {
@Test
- @SpecAssertion(section = "2.3", id = "a")
- public void testComposedConstraintsAreRecursive() {
+ @SpecAssertions({
+ @SpecAssertion(section = "2.3", id = "a"),
+ @SpecAssertion(section = "2.3", id = "k")
+ })
+ public void testComposedConstraints() {
+
Validator validator = TestUtil.getDefaultValidator();
-
FrenchAddress address = getFrenchAddressWithoutZipCode();
Set<ConstraintViolation<FrenchAddress>> constraintViolations = validator.validate( address );
assertCorrectNumberOfViolations( constraintViolations, 1 );
@@ -72,6 +80,28 @@
}
@Test
+ @SpecAssertions({
+ @SpecAssertion(section = "2.3", id = "a"),
+ @SpecAssertion(section = "2.3", id = "k")
+ })
+ public void testComposedConstraintsAreRecursive() {
+ Validator validator = TestUtil.getDefaultValidator();
+
+ GermanAddress address = new GermanAddress();
+ address.setAddressline1( "Rathausstrasse 5" );
+ address.setAddressline2( "3ter Stock" );
+ address.setCity( "Karlsruhe" );
+ Set<ConstraintViolation<GermanAddress>> constraintViolations = validator.validate( address );
+ assertCorrectNumberOfViolations( constraintViolations, 1 );
+ assertConstraintViolation(
+ constraintViolations.iterator().next(),
+ GermanAddress.class,
+ null,
+ "zipCode"
+ );
+ }
+
+ @Test
@SpecAssertion(section = "2.3", id = "b")
public void testValidationOfMainAnnotationIsAlsoApplied() {
@@ -88,13 +118,17 @@
}
@Test
- @SpecAssertion(section = "2.3", id = "c")
+ @SpecAssertions({
+ @SpecAssertion(section = "2.3", id = "c"),
+ @SpecAssertion(section = "2.3", id = "i"),
+ @SpecAssertion(section = "2.3", id = "l"),
+ @SpecAssertion(section = "2.3", id = "m"),
+ @SpecAssertion(section = "2.3", id = "n")
+ })
public void testEachFailingConstraintCreatesConstraintViolation() {
Validator validator = TestUtil.getDefaultValidator();
-
FrenchAddress address = getFrenchAddressWithoutZipCode();
-
address.setZipCode( "abc" );
Set<ConstraintViolation<FrenchAddress>> constraintViolations = validator.validate( address );
assertCorrectNumberOfViolations( constraintViolations, 3 );
@@ -155,41 +189,59 @@
}
@Test
- public void testNestedComposition() {
+ @SpecAssertion(section = "2.3", id = "g")
+ public void testOnlySingleConstraintViolation() {
Validator validator = TestUtil.getDefaultValidator();
GermanAddress address = new GermanAddress();
address.setAddressline1( "Rathausstrasse 5" );
address.setAddressline2( "3ter Stock" );
address.setCity( "Karlsruhe" );
+ address.setZipCode( "abc" );
+ // actually three composing constraints fail, but due to @ReportAsSingleViolation only one will be reported.
Set<ConstraintViolation<GermanAddress>> constraintViolations = validator.validate( address );
assertCorrectNumberOfViolations( constraintViolations, 1 );
assertConstraintViolation(
constraintViolations.iterator().next(),
GermanAddress.class,
- null,
+ "abc",
"zipCode"
);
}
@Test
- public void testOnlySingleConstraintViolation() {
+ @SpecAssertion(section = "2.3", id = "h")
+ public void testAttributesDefinedOnComposingConstraints() {
+
Validator validator = TestUtil.getDefaultValidator();
+ BeanDescriptor descriptor = validator.getConstraintsForClass( FrenchAddress.class );
+ Set<ConstraintDescriptor<?>> constraintDescriptors = descriptor.getConstraintsForProperty( "zipCode" )
+ .getConstraintDescriptors();
+ for ( ConstraintDescriptor<?> constraintDescriptor : constraintDescriptors ) {
+ Annotation ann = constraintDescriptor.getAnnotation();
+ if ( Pattern.class.getName().equals( ann.annotationType().getName() ) ) {
+ String regexp = ( ( Pattern ) ann ).regexp();
+ if ( regexp.equals( "\\d*" ) || regexp.equals( "....." ) ) {
+ fail( "The regular expression should attributes are defined in the composing constraint." );
+ }
+ }
+ }
+ }
- GermanAddress address = new GermanAddress();
- address.setAddressline1( "Rathausstrasse 5" );
- address.setAddressline2( "3ter Stock" );
- address.setCity( "Karlsruhe" );
- address.setZipCode( "abc" );
- // actually three composing constraints fail, but due to @ReportAsSingleViolation only one will be reported.
- Set<ConstraintViolation<GermanAddress>> constraintViolations = validator.validate( address );
- assertCorrectNumberOfViolations( constraintViolations, 1 );
- assertConstraintViolation(
- constraintViolations.iterator().next(),
- GermanAddress.class,
- "abc",
- "zipCode"
- );
+ @Test
+ @SpecAssertions({
+ @SpecAssertion(section = "2.3", id = "j"),
+ @SpecAssertion(section = "2.3", id = "o")
+ })
+ public void testOverridenAttributesMustMatchInType() {
+ Validator validator = TestUtil.getDefaultValidator();
+ try {
+ validator.validate( new DummyEntityWithZipCode( "foobar" ) );
+ fail( "Wrong atttibute override in composite constraint. An Exception should have been thrown." );
+ }
+ catch ( ConstraintDefinitionException e ) {
+ // success
+ }
}
private FrenchAddress getFrenchAddressWithoutZipCode() {
@@ -199,4 +251,13 @@
address.setCity( "Bordeaux" );
return address;
}
+
+ class DummyEntityWithZipCode {
+ @FrenchZipcodeWithInvalidOverride
+ String zip;
+
+ DummyEntityWithZipCode(String zip) {
+ this.zip = zip;
+ }
+ }
}
\ No newline at end of file
Modified: beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/constraints/constraintcomposition/FrenchZipcode.java
===================================================================
--- beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/constraints/constraintcomposition/FrenchZipcode.java 2009-06-05 14:18:41 UTC (rev 16710)
+++ beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/constraints/constraintcomposition/FrenchZipcode.java 2009-06-05 15:27:11 UTC (rev 16711)
@@ -26,7 +26,6 @@
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.OverridesAttribute;
-import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
@@ -50,11 +49,12 @@
@OverridesAttribute.List({
@OverridesAttribute(constraint = Size.class, name = "min"),
@OverridesAttribute(constraint = Size.class, name = "max")
- }) int size() default 5;
+ })
+ int size() default 5;
- @OverridesAttribute(constraint = Size.class,
- name = "message") String sizeMessage() default "A french zip code has a length of 5";
+ @OverridesAttribute(constraint = Size.class, name = "message")
+ String sizeMessage() default "A french zip code has a length of 5";
-
- @OverridesAttribute(constraint = Pattern.class, name = "regexp", constraintIndex = 2) String regex() default "\\d*";
+ @OverridesAttribute(constraint = Pattern.class, name = "regexp", constraintIndex = 2)
+ String regex() default "\\d*";
}
Added: beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/constraints/constraintcomposition/FrenchZipcodeWithInvalidOverride.java
===================================================================
--- beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/constraints/constraintcomposition/FrenchZipcodeWithInvalidOverride.java (rev 0)
+++ beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/constraints/constraintcomposition/FrenchZipcodeWithInvalidOverride.java 2009-06-05 15:27:11 UTC (rev 16711)
@@ -0,0 +1,57 @@
+// $Id$
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, Red Hat Middleware LLC, and individual contributors
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+* http://www.apache.org/licenses/LICENSE-2.0
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.hibernate.jsr303.tck.tests.constraints.constraintcomposition;
+
+import java.lang.annotation.Documented;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+import javax.validation.Constraint;
+import javax.validation.OverridesAttribute;
+import javax.validation.constraints.Pattern;
+import javax.validation.constraints.Size;
+
+
+/**
+ * @author Hardy Ferentschik
+ */
+ at NotEmpty
+ at Size
+// first pattern just duplicates the length of 5 characters, the second pattern is just to proof that parameters can be overridden.
+ at Pattern.List({ @Pattern(regexp = "....."), @Pattern(regexp = "bar") })
+ at Constraint(validatedBy = FrenchZipcodeConstraintValidator.class)
+ at Documented
+ at Target({ METHOD, FIELD, TYPE })
+ at Retention(RUNTIME)
+public @interface FrenchZipcodeWithInvalidOverride {
+ public abstract String message() default "Wrong zipcode";
+
+ public abstract Class<?>[] groups() default { };
+
+ @OverridesAttribute.List({
+ @OverridesAttribute(constraint = Size.class, name = "min"),
+ @OverridesAttribute(constraint = Size.class, name = "max")
+ }) public abstract String size() default "5";
+
+ @OverridesAttribute(constraint = Size.class, name = "message") public abstract String sizeMessage() default "A french zip code has a length of 5";
+
+ @OverridesAttribute(constraint = Pattern.class, name = "regexp", constraintIndex = 2) public abstract String regex() default "\\d*";
+}
\ No newline at end of file
Property changes on: beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/constraints/constraintcomposition/FrenchZipcodeWithInvalidOverride.java
___________________________________________________________________
Name: svn:keywords
+ Id
Name: svn:eol-style
+ native
Modified: beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/constraints/constraintcomposition/GermanZipcode.java
===================================================================
--- beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/constraints/constraintcomposition/GermanZipcode.java 2009-06-05 14:18:41 UTC (rev 16710)
+++ beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/constraints/constraintcomposition/GermanZipcode.java 2009-06-05 15:27:11 UTC (rev 16711)
@@ -26,6 +26,8 @@
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.ReportAsSingleViolation;
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
/**
* Constraint used to test nested composing constraints.
@@ -33,7 +35,7 @@
* @author Hardy Ferentschik
*/
@FrenchZipcode
- at Constraint(validatedBy = GermanZipcodeConstraintValidator.class)
+ at Constraint(validatedBy = GermanZipcode.GermanZipcodeConstraintValidator.class)
@Documented
@Target({ METHOD, FIELD, TYPE })
@Retention(RUNTIME)
@@ -42,4 +44,14 @@
public abstract String message() default "Falsche Postnummer.";
public abstract Class<?>[] groups() default { };
+
+ public class GermanZipcodeConstraintValidator implements ConstraintValidator<GermanZipcode, String> {
+
+ public void initialize(GermanZipcode parameters) {
+ }
+
+ public boolean isValid(String object, ConstraintValidatorContext constraintValidatorContext) {
+ return true;
+ }
+}
}
\ No newline at end of file
Deleted: beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/constraints/constraintcomposition/GermanZipcodeConstraintValidator.java
===================================================================
--- beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/constraints/constraintcomposition/GermanZipcodeConstraintValidator.java 2009-06-05 14:18:41 UTC (rev 16710)
+++ beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/constraints/constraintcomposition/GermanZipcodeConstraintValidator.java 2009-06-05 15:27:11 UTC (rev 16711)
@@ -1,34 +0,0 @@
-// $Id: GermanZipcodeConstraintValidator.java 15829 2009-01-29 05:20:27Z epbernard $
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2008, Red Hat Middleware LLC, and individual contributors
-* by the @authors tag. See the copyright.txt in the distribution for a
-* full listing of individual contributors.
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-* http://www.apache.org/licenses/LICENSE-2.0
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-package org.hibernate.jsr303.tck.tests.constraints.constraintcomposition;
-
-import javax.validation.ConstraintValidator;
-import javax.validation.ConstraintValidatorContext;
-
-/**
- * @author Hardy Ferentschik
- */
-public class GermanZipcodeConstraintValidator implements ConstraintValidator<GermanZipcode, String> {
-
- public void initialize(GermanZipcode parameters) {
- }
-
- public boolean isValid(String object, ConstraintValidatorContext constraintValidatorContext) {
- return true;
- }
-}
\ No newline at end of file
More information about the hibernate-commits
mailing list