You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bval.apache.org by rm...@apache.org on 2013/08/26 15:59:20 UTC

svn commit: r1517540 [11/15] - in /bval/branches/bval-11/bval-jsr: ./ src/ src/main/ src/main/appended-resources/ src/main/appended-resources/META-INF/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/bval/ src/main/...

Added: bval/branches/bval-11/bval-jsr/src/main/xsd/validation-mapping-1.0.xsd
URL: http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/xsd/validation-mapping-1.0.xsd?rev=1517540&view=auto
==============================================================================
--- bval/branches/bval-11/bval-jsr/src/main/xsd/validation-mapping-1.0.xsd (added)
+++ bval/branches/bval-11/bval-jsr/src/main/xsd/validation-mapping-1.0.xsd Mon Aug 26 13:59:15 2013
@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you 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.
+-->
+<xs:schema attributeFormDefault="unqualified"
+           elementFormDefault="qualified"
+           targetNamespace="http://jboss.org/xml/ns/javax/validation/mapping"
+           xmlns:xs="http://www.w3.org/2001/XMLSchema"
+           version="1.0">
+    <xs:element name="constraint-mappings"
+                type="map:constraint-mappingsType"
+                xmlns:map="http://jboss.org/xml/ns/javax/validation/mapping"/>
+
+    <xs:complexType name="payloadType">
+        <xs:sequence>
+            <xs:element type="xs:string" name="value" maxOccurs="unbounded" minOccurs="0"/>
+        </xs:sequence>
+    </xs:complexType>
+    <xs:complexType name="groupsType">
+        <xs:sequence>
+            <xs:element type="xs:string" name="value" maxOccurs="unbounded" minOccurs="0"/>
+        </xs:sequence>
+    </xs:complexType>
+    <xs:complexType name="groupSequenceType">
+        <xs:sequence>
+            <xs:element type="xs:string" name="value" maxOccurs="unbounded" minOccurs="0"/>
+        </xs:sequence>
+    </xs:complexType>
+    <xs:complexType name="constraint-mappingsType">
+        <xs:sequence>
+            <xs:element type="xs:string" name="default-package" minOccurs="0"/>
+            <xs:element type="map:beanType"
+                        name="bean"
+                        maxOccurs="unbounded"
+                        minOccurs="0"
+                        xmlns:map="http://jboss.org/xml/ns/javax/validation/mapping"/>
+            <xs:element type="map:constraint-definitionType"
+                        name="constraint-definition"
+                        maxOccurs="unbounded"
+                        minOccurs="0"
+                        xmlns:map="http://jboss.org/xml/ns/javax/validation/mapping"/>
+        </xs:sequence>
+    </xs:complexType>
+    <xs:complexType name="validated-byType">
+        <xs:sequence>
+            <xs:element type="xs:string" name="value" maxOccurs="unbounded" minOccurs="0"/>
+        </xs:sequence>
+        <xs:attribute type="xs:boolean" name="include-existing-validators" use="optional"/>
+    </xs:complexType>
+    <xs:complexType name="constraintType">
+        <xs:sequence>
+            <xs:element type="xs:string" name="message" minOccurs="0"/>
+            <xs:element type="map:groupsType"
+                        name="groups"
+                        minOccurs="0"
+                        xmlns:map="http://jboss.org/xml/ns/javax/validation/mapping"/>
+            <xs:element type="map:payloadType"
+                        name="payload"
+                        minOccurs="0"
+                        xmlns:map="http://jboss.org/xml/ns/javax/validation/mapping"/>            
+            <xs:element type="map:elementType"
+                        name="element"
+                        maxOccurs="unbounded"
+                        minOccurs="0"
+                        xmlns:map="http://jboss.org/xml/ns/javax/validation/mapping"/>
+        </xs:sequence>
+        <xs:attribute type="xs:string" name="annotation" use="required"/>
+    </xs:complexType>
+    <xs:complexType name="elementType" mixed="true">
+        <xs:sequence>
+            <xs:element type="xs:string" name="value" maxOccurs="unbounded" minOccurs="0"/>
+            <xs:element type="map:annotationType"
+                        name="annotation"
+                        maxOccurs="unbounded"
+                        minOccurs="0"
+                        xmlns:map="http://jboss.org/xml/ns/javax/validation/mapping"/>
+        </xs:sequence>
+        <xs:attribute type="xs:string" name="name" use="required"/>
+    </xs:complexType>
+    <xs:complexType name="classType">
+        <xs:sequence>
+            <xs:element type="map:groupSequenceType" 
+                        name="group-sequence" 
+                        minOccurs="0" 
+                        xmlns:map="http://jboss.org/xml/ns/javax/validation/mapping"/>
+            <xs:element type="map:constraintType"
+                        name="constraint"
+                        maxOccurs="unbounded"
+                        minOccurs="0"
+                        xmlns:map="http://jboss.org/xml/ns/javax/validation/mapping"/>
+        </xs:sequence>
+        <xs:attribute type="xs:boolean" name="ignore-annotations" use="optional"/>
+    </xs:complexType>
+    <xs:complexType name="beanType">
+        <xs:sequence>
+            <xs:element type="map:classType"
+                        name="class"
+                        minOccurs="0"
+                        xmlns:map="http://jboss.org/xml/ns/javax/validation/mapping">
+            </xs:element>
+            <xs:element type="map:fieldType"
+                        name="field"
+                        minOccurs="0"
+                        maxOccurs="unbounded"
+                        xmlns:map="http://jboss.org/xml/ns/javax/validation/mapping"/>
+            <xs:element type="map:getterType"
+                        name="getter"
+                        minOccurs="0"
+                        maxOccurs="unbounded"
+                        xmlns:map="http://jboss.org/xml/ns/javax/validation/mapping"/>
+        </xs:sequence>
+        <xs:attribute type="xs:string" name="class" use="required"/>
+        <xs:attribute type="xs:boolean" name="ignore-annotations" use="optional"/>
+    </xs:complexType>
+    <xs:complexType name="annotationType">
+        <xs:sequence>
+            <xs:element type="map:elementType"
+                        name="element"
+                        maxOccurs="unbounded"
+                        minOccurs="0"
+                        xmlns:map="http://jboss.org/xml/ns/javax/validation/mapping"/>
+        </xs:sequence>
+    </xs:complexType>
+    <xs:complexType name="getterType">
+        <xs:sequence>
+            <xs:element type="xs:string" name="valid" minOccurs="0" fixed=""/>
+            <xs:element type="map:constraintType"
+                        name="constraint"
+                        minOccurs="0"
+                        maxOccurs="unbounded"
+                        xmlns:map="http://jboss.org/xml/ns/javax/validation/mapping"/>
+        </xs:sequence>
+        <xs:attribute type="xs:string" name="name" use="required"/>
+        <xs:attribute type="xs:boolean" name="ignore-annotations" use="optional"/>
+    </xs:complexType>
+    <xs:complexType name="constraint-definitionType">
+        <xs:sequence>
+            <xs:element type="map:validated-byType"
+                        name="validated-by"
+                        xmlns:map="http://jboss.org/xml/ns/javax/validation/mapping"/>
+        </xs:sequence>
+        <xs:attribute type="xs:string" name="annotation" use="required"/>
+    </xs:complexType>
+    <xs:complexType name="fieldType">
+        <xs:sequence>
+            <xs:element type="xs:string" name="valid" minOccurs="0" fixed=""/>
+            <xs:element type="map:constraintType"
+                        name="constraint"
+                        minOccurs="0"
+                        maxOccurs="unbounded"
+                        xmlns:map="http://jboss.org/xml/ns/javax/validation/mapping"/>
+        </xs:sequence>
+        <xs:attribute type="xs:string" name="name" use="required"/>
+        <xs:attribute type="xs:boolean" name="ignore-annotations" use="optional"/>
+    </xs:complexType>
+</xs:schema>

Added: bval/branches/bval-11/bval-jsr/src/main/xsd/validation-mapping-1.1.xsd
URL: http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/xsd/validation-mapping-1.1.xsd?rev=1517540&view=auto
==============================================================================
--- bval/branches/bval-11/bval-jsr/src/main/xsd/validation-mapping-1.1.xsd (added)
+++ bval/branches/bval-11/bval-jsr/src/main/xsd/validation-mapping-1.1.xsd Mon Aug 26 13:59:15 2013
@@ -0,0 +1,254 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you 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.
+-->
+<xs:schema attributeFormDefault="unqualified"
+           elementFormDefault="qualified"
+           targetNamespace="http://jboss.org/xml/ns/javax/validation/mapping"
+           xmlns:xs="http://www.w3.org/2001/XMLSchema"
+           xmlns:map="http://jboss.org/xml/ns/javax/validation/mapping"
+           version="1.1">
+  <xs:element name="constraint-mappings" type="map:constraint-mappingsType"/>
+
+  <xs:complexType name="payloadType">
+    <xs:sequence>
+      <xs:element type="xs:string" name="value" maxOccurs="unbounded" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="groupsType">
+    <xs:sequence>
+      <xs:element type="xs:string" name="value" maxOccurs="unbounded" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="groupSequenceType">
+    <xs:sequence>
+      <xs:element type="xs:string" name="value" maxOccurs="unbounded" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="groupConversionType">
+    <xs:attribute type="xs:string" name="from" use="required"/>
+    <xs:attribute type="xs:string" name="to" use="required"/>
+  </xs:complexType>
+  <xs:complexType name="constraint-mappingsType">
+    <xs:sequence>
+      <xs:element type="xs:string" name="default-package" minOccurs="0"/>
+      <xs:element type="map:beanType"
+                  name="bean"
+                  maxOccurs="unbounded"
+                  minOccurs="0"/>
+      <xs:element type="map:constraint-definitionType"
+                  name="constraint-definition"
+                  maxOccurs="unbounded"
+                  minOccurs="0"/>
+    </xs:sequence>
+    <xs:attribute name="version" type="map:versionType" fixed="1.1" /> <!-- use="required" -->
+  </xs:complexType>
+  <xs:simpleType name="versionType">
+    <xs:restriction base="xs:token">
+      <xs:pattern value="[0-9]+(\.[0-9]+)*"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="validated-byType">
+    <xs:sequence>
+      <xs:element type="xs:string" name="value" maxOccurs="unbounded" minOccurs="0"/>
+    </xs:sequence>
+    <xs:attribute type="xs:boolean" name="include-existing-validators" use="optional"/>
+  </xs:complexType>
+  <xs:complexType name="constraintType">
+    <xs:sequence>
+      <xs:element type="xs:string" name="message" minOccurs="0"/>
+      <xs:element type="map:groupsType"
+                  name="groups"
+                  minOccurs="0"/>
+      <xs:element type="map:payloadType"
+                  name="payload"
+                  minOccurs="0"/>
+      <xs:element type="map:elementType"
+                  name="element"
+                  maxOccurs="unbounded"
+                  minOccurs="0"/>
+    </xs:sequence>
+    <xs:attribute type="xs:string" name="annotation" use="required"/>
+  </xs:complexType>
+  <xs:complexType name="elementType" mixed="true">
+    <xs:sequence>
+      <xs:element type="xs:string" name="value" maxOccurs="unbounded" minOccurs="0"/>
+      <xs:element type="map:annotationType"
+                  name="annotation"
+                  maxOccurs="unbounded"
+                  minOccurs="0"/>
+    </xs:sequence>
+    <xs:attribute type="xs:string" name="name" use="required"/>
+  </xs:complexType>
+  <xs:complexType name="classType">
+    <xs:sequence>
+      <xs:element type="map:groupSequenceType"
+                  name="group-sequence"
+                  minOccurs="0"/>
+      <xs:element type="map:constraintType"
+                  name="constraint"
+                  maxOccurs="unbounded"
+                  minOccurs="0"/>
+    </xs:sequence>
+    <xs:attribute type="xs:boolean" name="ignore-annotations" use="optional"/>
+  </xs:complexType>
+  <xs:complexType name="beanType">
+    <xs:sequence>
+      <xs:element type="map:classType"
+                  name="class"
+                  minOccurs="0">
+      </xs:element>
+      <xs:element type="map:fieldType"
+                  name="field"
+                  minOccurs="0"
+                  maxOccurs="unbounded"/>
+      <xs:element type="map:getterType"
+                  name="getter"
+                  minOccurs="0"
+                  maxOccurs="unbounded"/>
+      <xs:element type="map:constructorType"
+                  name="constructor"
+                  minOccurs="0"
+                  maxOccurs="unbounded"/>
+      <xs:element type="map:methodType"
+                  name="method"
+                  minOccurs="0"
+                  maxOccurs="unbounded"/>
+    </xs:sequence>
+    <xs:attribute type="xs:string" name="class" use="required"/>
+    <xs:attribute type="xs:boolean" name="ignore-annotations" use="optional"/>
+  </xs:complexType>
+  <xs:complexType name="annotationType">
+    <xs:sequence>
+      <xs:element type="map:elementType"
+                  name="element"
+                  maxOccurs="unbounded"
+                  minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="getterType">
+    <xs:sequence>
+      <xs:element type="xs:string" name="valid" minOccurs="0" fixed=""/>
+      <xs:element type="map:groupConversionType"
+                  name="convert-group"
+                  minOccurs="0"
+                  maxOccurs="unbounded"/>
+      <xs:element type="map:constraintType"
+                  name="constraint"
+                  minOccurs="0"
+                  maxOccurs="unbounded"/>
+    </xs:sequence>
+    <xs:attribute type="xs:string" name="name" use="required"/>
+    <xs:attribute type="xs:boolean" name="ignore-annotations" use="optional"/>
+  </xs:complexType>
+  <xs:complexType name="methodType">
+    <xs:sequence>
+      <xs:element type="map:parameterType"
+                  name="parameter"
+                  minOccurs="0"
+                  maxOccurs="unbounded"/>
+      <xs:element type="map:crossParameterType"
+                  name="cross-parameter"
+                  minOccurs="0"
+                  maxOccurs="1"/>
+      <xs:element type="map:returnValueType"
+                  name="return-value"
+                  minOccurs="0"
+                  maxOccurs="1"/>
+    </xs:sequence>
+    <xs:attribute type="xs:string" name="name" use="required"/>
+    <xs:attribute type="xs:boolean" name="ignore-annotations" use="optional"/>
+  </xs:complexType>
+  <xs:complexType name="constructorType">
+    <xs:sequence>
+      <xs:element type="map:parameterType"
+                  name="parameter"
+                  minOccurs="0"
+                  maxOccurs="unbounded"/>
+      <xs:element type="map:crossParameterType"
+                  name="cross-parameter"
+                  minOccurs="0"
+                  maxOccurs="1"/>
+      <xs:element type="map:returnValueType"
+                  name="return-value"
+                  minOccurs="0"
+                  maxOccurs="1"/>
+    </xs:sequence>
+    <xs:attribute type="xs:boolean" name="ignore-annotations" use="optional"/>
+  </xs:complexType>
+  <xs:complexType name="parameterType">
+    <xs:sequence>
+      <xs:element type="xs:string" name="valid" minOccurs="0" fixed=""/>
+      <xs:element type="map:groupConversionType"
+                  name="convert-group"
+                  minOccurs="0"
+                  maxOccurs="unbounded"/>
+      <xs:element type="map:constraintType"
+                  name="constraint"
+                  minOccurs="0"
+                  maxOccurs="unbounded"/>
+    </xs:sequence>
+    <xs:attribute type="xs:string" name="type" use="required"/>
+    <xs:attribute type="xs:boolean" name="ignore-annotations" use="optional"/>
+  </xs:complexType>
+  <xs:complexType name="returnValueType">
+    <xs:sequence>
+      <xs:element type="xs:string" name="valid" minOccurs="0" fixed=""/>
+      <xs:element type="map:groupConversionType"
+                  name="convert-group"
+                  minOccurs="0"
+                  maxOccurs="unbounded"/>
+      <xs:element type="map:constraintType"
+                  name="constraint"
+                  minOccurs="0"
+                  maxOccurs="unbounded"/>
+    </xs:sequence>
+    <xs:attribute type="xs:boolean" name="ignore-annotations" use="optional"/>
+  </xs:complexType>
+  <xs:complexType name="crossParameterType">
+    <xs:sequence>
+      <xs:element type="map:constraintType"
+                  name="constraint"
+                  minOccurs="0"
+                  maxOccurs="unbounded"/>
+    </xs:sequence>
+    <xs:attribute type="xs:boolean" name="ignore-annotations" use="optional"/>
+  </xs:complexType>
+  <xs:complexType name="constraint-definitionType">
+    <xs:sequence>
+      <xs:element type="map:validated-byType"
+                  name="validated-by"/>
+    </xs:sequence>
+    <xs:attribute type="xs:string" name="annotation" use="required"/>
+  </xs:complexType>
+  <xs:complexType name="fieldType">
+    <xs:sequence>
+      <xs:element type="xs:string" name="valid" minOccurs="0" fixed=""/>
+      <xs:element type="map:groupConversionType"
+                  name="convert-group"
+                  minOccurs="0"
+                  maxOccurs="unbounded"/>
+      <xs:element type="map:constraintType"
+                  name="constraint"
+                  minOccurs="0"
+                  maxOccurs="unbounded"/>
+    </xs:sequence>
+    <xs:attribute type="xs:string" name="name" use="required"/>
+    <xs:attribute type="xs:boolean" name="ignore-annotations" use="optional"/>
+  </xs:complexType>
+</xs:schema>

Added: bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/AssertFalseValidatorTest.java
URL: http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/AssertFalseValidatorTest.java?rev=1517540&view=auto
==============================================================================
--- bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/AssertFalseValidatorTest.java (added)
+++ bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/AssertFalseValidatorTest.java Mon Aug 26 13:59:15 2013
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.bval.constraints;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+
+/**
+ * Checks correct behaviour of {@link AssertFalseValidator}.
+ * <p>
+ * Per the spec:
+ * <ul>
+ * <li>The annotated element must be false.</li>
+ * <li><code>null</code> elements are considered valid.</li>
+ * </ul>
+ * 
+ * TODO: Mock context and verify that it's not used during validation.
+ * 
+ * @see "bean_validation-1_0_CR1-pfd-spec#Chapter6#Example6.4"
+ * 
+ * @author Carlos Vara
+ */
+public class AssertFalseValidatorTest extends TestCase {
+	
+    public static Test suite() {
+        return new TestSuite(AssertFalseValidatorTest.class);
+    }
+    
+    public AssertFalseValidatorTest(String name) {
+    	super(name);
+    }
+    
+    /**
+     * Test {@link AssertFalseValidator} with <code>null</code> context.
+     */
+    public void testAssertFalseValidator() {
+    	AssertFalseValidator afv = new AssertFalseValidator();
+    	assertFalse("True value validation must fail", afv.isValid(true, null));
+    	assertTrue("False value validation must succeed", afv.isValid(false, null));
+    	assertTrue("Null value validation must succeed", afv.isValid(null, null));
+    }
+
+}

Added: bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/AssertTrueValidatorTest.java
URL: http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/AssertTrueValidatorTest.java?rev=1517540&view=auto
==============================================================================
--- bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/AssertTrueValidatorTest.java (added)
+++ bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/AssertTrueValidatorTest.java Mon Aug 26 13:59:15 2013
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.bval.constraints;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+
+/**
+ * Checks correct behaviour of {@link AssertTrueValidator}.
+ * <p>
+ * Per the spec:
+ * <ul>
+ * <li>The annotated element must be true.</li>
+ * <li><code>null</code> elements are considered valid.</li>
+ * </ul>
+ * 
+ * TODO: Mock context and verify that it's not used during validation.
+ * 
+ * @see "bean_validation-1_0_CR1-pfd-spec#Chapter6#Example6.3"
+ * 
+ * @author Carlos Vara
+ */
+public class AssertTrueValidatorTest extends TestCase {
+	
+    public static Test suite() {
+        return new TestSuite(AssertTrueValidatorTest.class);
+    }
+    
+    public AssertTrueValidatorTest(String name) {
+    	super(name);
+    }
+    
+    /**
+     * Test {@link AssertTrueValidator} with null context.
+     */
+    public void testAssertTrueValidator() {
+    	AssertTrueValidator atv = new AssertTrueValidator();
+    	assertTrue("True value validation must succeed", atv.isValid(true, null));
+    	assertFalse("False value validation must fail", atv.isValid(false, null));
+    	assertTrue("Null value validation must succeed", atv.isValid(null, null));
+    }
+
+}

Added: bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/AuthorAddressKnown.java
URL: http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/AuthorAddressKnown.java?rev=1517540&view=auto
==============================================================================
--- bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/AuthorAddressKnown.java (added)
+++ bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/AuthorAddressKnown.java Mon Aug 26 13:59:15 2013
@@ -0,0 +1,74 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You 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.apache.bval.constraints;
+
+import org.apache.bval.jsr.example.Address;
+import org.apache.bval.jsr.example.Author;
+
+import javax.validation.Constraint;
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+import javax.validation.Payload;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+/**
+ * 
+ * 
+ * @version $Rev: 999729 $ $Date: 2010-09-21 21:37:54 -0500 (Tue, 21 Sep 2010) $
+ */
+@Target( { ANNOTATION_TYPE, METHOD, FIELD })
+@Constraint(validatedBy = AuthorAddressKnown.Validator.class)
+@Retention(RUNTIME)
+public @interface AuthorAddressKnown {
+
+    String message() default "{org.apache.bval.constraints.AuthorAddressKnown.message}";
+
+    Class<?>[] groups() default {};
+
+    Class<? extends Payload>[] payload() default { };
+
+    public static class Validator implements ConstraintValidator<AuthorAddressKnown, Author> {
+
+        /**
+         * {@inheritDoc}
+         */
+        public void initialize(AuthorAddressKnown constraintAnnotation) {
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        public boolean isValid(Author value, ConstraintValidatorContext context) {
+            if (value.getAddresses() == null) {
+                return false;
+            }
+            for (Address address : value.getAddresses()) {
+                if (address != null) {
+                    return true;
+                }
+            }
+            return false;
+        }
+
+    }
+}

Added: bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/CompanyEmail.java
URL: http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/CompanyEmail.java?rev=1517540&view=auto
==============================================================================
--- bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/CompanyEmail.java (added)
+++ bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/CompanyEmail.java Mon Aug 26 13:59:15 2013
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.bval.constraints;
+
+import javax.validation.Constraint;
+import javax.validation.OverridesAttribute;
+import javax.validation.Payload;
+import javax.validation.constraints.Pattern;
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.ElementType.CONSTRUCTOR;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+@Pattern.List({
+    // email
+    @Pattern(regexp = "[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}"),
+    // agimatec
+    @Pattern(regexp = ".*?COMPANY.*?")
+})
+/**
+ * test a constraint WITHOUT an own ConstraintValidator implementation.
+ * the validations, that must be processed are in the combined constraints only!!
+ * the @Constraint annotation is nevertheless required so that the framework searches
+ * for combined constraints.  
+ */
+@Constraint(validatedBy = {})
+@Documented
+@Target({ANNOTATION_TYPE, METHOD, FIELD, CONSTRUCTOR, PARAMETER})
+@Retention(RUNTIME)
+public @interface CompanyEmail {
+    String message() default "Not an email of COMPANY";
+
+    @OverridesAttribute(constraint = Pattern.class, name = "message",
+          constraintIndex = 0) String emailMessage() default "Not an email";
+
+    @OverridesAttribute(constraint = Pattern.class, name = "message",
+          constraintIndex = 1) String agimatecMessage() default "Not COMPANY";
+
+    Class<?>[] groups() default {};
+
+    Class<? extends Payload>[] payload() default {};
+
+    @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER})
+    @Retention(RUNTIME)
+    @Documented
+          @interface List {
+        CompanyEmail[] value();
+    }
+}
\ No newline at end of file

Added: bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/DecimalMinMaxValidatorsTest.java
URL: http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/DecimalMinMaxValidatorsTest.java?rev=1517540&view=auto
==============================================================================
--- bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/DecimalMinMaxValidatorsTest.java (added)
+++ bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/DecimalMinMaxValidatorsTest.java Mon Aug 26 13:59:15 2013
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.bval.constraints;
+
+import junit.framework.TestCase;
+
+import javax.validation.ConstraintViolation;
+import javax.validation.Validation;
+import javax.validation.Validator;
+import javax.validation.constraints.DecimalMax;
+import javax.validation.constraints.DecimalMin;
+import java.util.Set;
+
+/**
+ * Description: <br>
+ * User: roman.stumm<br>
+ * Date: 06.04.2010<br>
+ * Time: 13:45:09<br>
+ */
+public class DecimalMinMaxValidatorsTest extends TestCase {
+
+    @DecimalMin("922392239223.06")
+    public double dmin;
+    @DecimalMax("922392239223.09")
+    public double dmax;
+
+    public void testDecimalMinValue() {
+        Validator v = Validation.buildDefaultValidatorFactory().getValidator();
+
+        this.dmin = 922392239223.05;
+        this.dmax = 922392239223.08;
+
+        Set<ConstraintViolation<DecimalMinMaxValidatorsTest>> res = v.validate(this);
+        assertFalse("Min validation failed", res.isEmpty());
+    }
+
+    public void testDecimalMaxValue() {
+        Validator v = Validation.buildDefaultValidatorFactory().getValidator();
+
+        this.dmin = Double.MAX_VALUE;
+        this.dmax = 922392239223.1;
+
+        Set<ConstraintViolation<DecimalMinMaxValidatorsTest>> res = v.validate(this);
+        assertFalse("Max validation failed", res.isEmpty());
+    }
+
+}

Added: bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/DigitsValidatorTest.java
URL: http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/DigitsValidatorTest.java?rev=1517540&view=auto
==============================================================================
--- bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/DigitsValidatorTest.java (added)
+++ bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/DigitsValidatorTest.java Mon Aug 26 13:59:15 2013
@@ -0,0 +1,87 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.bval.constraints;
+
+import junit.framework.Assert;
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.math.BigDecimal;
+
+/**
+ * DigitsConstraintValidator Tester.
+ *
+ * @author <Authors name>
+ * @since <pre>02/03/2009</pre>
+ * @version 1.0
+ */
+public class DigitsValidatorTest extends TestCase {
+    public DigitsValidatorTest(String name) {
+        super(name);
+    }
+
+    public void testValidateNumber() {
+        DigitsValidatorForNumber validator = new DigitsValidatorForNumber();
+        validator.setFractional(4);
+        validator.setIntegral(2);
+        Assert.assertFalse(validator.isValid(new BigDecimal("100.1234"), null));
+        Assert.assertFalse(validator.isValid(new BigDecimal("99.12345"), null));
+        Assert.assertTrue(validator.isValid(new BigDecimal("99.1234"), null));
+        Assert.assertFalse(validator.isValid(Double.valueOf(100.1234), null));
+        Assert.assertFalse(validator.isValid(Double.valueOf(99.12345), null));
+        Assert.assertTrue(validator.isValid(Double.valueOf(99.1234), null));
+        Assert.assertTrue(validator.isValid(Double.valueOf(99.123400), null));
+        Assert.assertTrue(validator.isValid(new BigDecimal("99.123400"), null));
+    }
+
+    public void testValidateString() {
+        DigitsValidatorForString validator = new DigitsValidatorForString();
+        validator.setFractional(4);
+        validator.setIntegral(2);
+        String val = "100.12345";
+        Assert.assertFalse(validator.isValid(val, null));
+        val = "99.1234";
+        Assert.assertTrue(validator.isValid(val, null));
+    }
+
+    public void testValidateNumber2() {
+        DigitsValidatorForNumber validator = new DigitsValidatorForNumber();
+        validator.setFractional(4);
+        validator.setIntegral(2);
+        Long val = new Long("100");
+        Assert.assertFalse(validator.isValid(val, null));
+        val = new Long("99");
+        Assert.assertTrue(validator.isValid(val, null));
+    }
+
+    public void testValidateString2() {
+        DigitsValidatorForString validator = new DigitsValidatorForString();
+        validator.setFractional(0);
+        validator.setIntegral(2);
+        String val = "99.5";
+        Assert.assertFalse(validator.isValid(val, null));
+        val = "99";
+        Assert.assertTrue(validator.isValid(val, null));
+    }
+
+    public static Test suite() {
+        return new TestSuite(DigitsValidatorTest.class);
+    }
+}

Added: bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/EmailValidatorTest.java
URL: http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/EmailValidatorTest.java?rev=1517540&view=auto
==============================================================================
--- bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/EmailValidatorTest.java (added)
+++ bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/EmailValidatorTest.java Mon Aug 26 13:59:15 2013
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.bval.constraints;
+
+import junit.framework.Assert;
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+import org.apache.bval.jsr.ApacheValidatorFactory;
+import org.apache.bval.jsr.example.Customer;
+
+import javax.validation.Validator;
+
+/**
+ * EmailValidator Tester.
+ *
+ * @author Roman Stumm
+ * @version 1.0
+ * @since <pre>10/14/2008</pre>
+ */
+public class EmailValidatorTest extends TestCase {
+    public static class EmailAddressBuilder {
+        @Email
+        private StringBuilder buffer = new StringBuilder();
+
+        /**
+         * Get the buffer.
+         * @return StringBuilder
+         */
+        public StringBuilder getBuffer() {
+            return buffer;
+        }
+
+    }
+
+    private Validator validator;
+
+    public EmailValidatorTest(String name) {
+        super(name);
+    }
+
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+        validator = ApacheValidatorFactory.getDefault().getValidator();
+    }
+
+    public void testEmail() {
+        Customer customer = new Customer();
+        customer.setCustomerId("id-1");
+        customer.setFirstName("Mary");
+        customer.setLastName("Do");
+        customer.setPassword("12345");
+
+        Assert.assertEquals(0, validator.validate(customer).size());
+
+        customer.setEmailAddress("some@invalid@address");
+        Assert.assertEquals(1, validator.validate(customer).size());
+
+        customer.setEmailAddress("some.valid-012345@address_at-test.org");
+        Assert.assertEquals(0, validator.validate(customer).size());
+    }
+
+    public void testEmailCharSequence() {
+        EmailAddressBuilder emailAddressBuilder = new EmailAddressBuilder();
+        Assert.assertEquals(0, validator.validate(emailAddressBuilder).size());
+        emailAddressBuilder.getBuffer().append("foo");
+        Assert.assertEquals(1, validator.validate(emailAddressBuilder).size());
+        emailAddressBuilder.getBuffer().append('@');
+        Assert.assertEquals(1, validator.validate(emailAddressBuilder).size());
+        emailAddressBuilder.getBuffer().append("bar");
+        Assert.assertEquals(0, validator.validate(emailAddressBuilder).size());
+        emailAddressBuilder.getBuffer().append('.');
+        Assert.assertEquals(1, validator.validate(emailAddressBuilder).size());
+        emailAddressBuilder.getBuffer().append("baz");
+        Assert.assertEquals(0, validator.validate(emailAddressBuilder).size());
+    }
+
+    public static Test suite() {
+        return new TestSuite(EmailValidatorTest.class);
+    }
+}

Added: bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/FrenchZipCode.java
URL: http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/FrenchZipCode.java?rev=1517540&view=auto
==============================================================================
--- bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/FrenchZipCode.java (added)
+++ bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/FrenchZipCode.java Mon Aug 26 13:59:15 2013
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.bval.constraints;
+
+import javax.validation.Constraint;
+import javax.validation.OverridesAttribute;
+import javax.validation.Payload;
+import javax.validation.ReportAsSingleViolation;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+/**
+ * Description: example for composed constraint.
+ * not implemented! simple dummy implemenation for tests only! <br/>
+ */
+@NotEmpty
+@NotNull
+@Size(min = 4, max = 5, message = "Zipcode should be of size {value}")
+@Constraint(validatedBy = FrenchZipcodeValidator.class)
+@ReportAsSingleViolation
+@Documented
+@Target({ANNOTATION_TYPE, METHOD, FIELD})
+@Retention(RUNTIME)
+public @interface FrenchZipCode {
+    @OverridesAttribute.List({
+            @OverridesAttribute(constraint = Size.class, name= "min"),
+        @OverridesAttribute(constraint = Size.class, name = "max")})
+    int size() default 6;
+
+    @OverridesAttribute(constraint=Size.class, name="message")
+    String sizeMessage() default "{error.zipcode.size}";
+
+    String message() default "Wrong zipcode";
+
+    Class<?>[] groups() default {};
+
+    Class<? extends Payload>[] payload() default { };
+}

Added: bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/FrenchZipcodeValidator.java
URL: http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/FrenchZipcodeValidator.java?rev=1517540&view=auto
==============================================================================
--- bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/FrenchZipcodeValidator.java (added)
+++ bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/FrenchZipcodeValidator.java Mon Aug 26 13:59:15 2013
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.bval.constraints;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+
+/**
+ * Description: not implemented (test only)<br/>
+ */
+public class FrenchZipcodeValidator implements ConstraintValidator<FrenchZipCode, Object> {
+    public void initialize(FrenchZipCode constraintAnnotation) {
+        // do nothing
+    }
+
+    public boolean isValid(Object object, ConstraintValidatorContext validationContext) {
+        return null != object;
+    }
+}

Added: bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/HasStringValidator.java
URL: http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/HasStringValidator.java?rev=1517540&view=auto
==============================================================================
--- bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/HasStringValidator.java (added)
+++ bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/HasStringValidator.java Mon Aug 26 13:59:15 2013
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.bval.constraints;
+
+import org.apache.commons.lang3.ArrayUtils;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+
+/**
+ * Description: <br/>
+ */
+public class HasStringValidator implements ConstraintValidator<HasValue, String> {
+    private String[] values;
+
+    public void initialize(HasValue stringValues) {
+        values = stringValues.value();
+    }
+
+    public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
+        return s == null || ArrayUtils.contains(values, s);
+    }
+}

Added: bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/HasValue.java
URL: http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/HasValue.java?rev=1517540&view=auto
==============================================================================
--- bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/HasValue.java (added)
+++ bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/HasValue.java Mon Aug 26 13:59:15 2013
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.bval.constraints;
+
+import javax.validation.Constraint;
+import javax.validation.Payload;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+/**
+ * Description: allow distinct string values for element (like enums) <br/>
+ */
+@Target({ANNOTATION_TYPE, METHOD, FIELD})
+@Constraint(validatedBy = {HasStringValidator.class})
+@Retention(RUNTIME)
+public @interface HasValue {
+    String[] value();
+
+    String message() default "Wrong value, must be one of {value}";
+
+    Class<?>[] groups() default {};
+
+    Class<? extends Payload>[] payload() default { };
+}

Added: bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/MinMaxValidatorsForNumberTest.java
URL: http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/MinMaxValidatorsForNumberTest.java?rev=1517540&view=auto
==============================================================================
--- bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/MinMaxValidatorsForNumberTest.java (added)
+++ bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/MinMaxValidatorsForNumberTest.java Mon Aug 26 13:59:15 2013
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.bval.constraints;
+
+import junit.framework.TestCase;
+
+import javax.validation.ConstraintViolation;
+import javax.validation.Validation;
+import javax.validation.Validator;
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import java.util.Set;
+
+/**
+ * Check correct behaviour of {@link MinValidatorForNumber} and
+ * {@link MaxValidatorForNumber} on boundary values.
+ * <p/>
+ * The chosen numbers: 9223372036854775806l and 9223372036854775807l cast to the
+ * same double value.
+ * 
+ * @author Carlos Vara
+ */
+public class MinMaxValidatorsForNumberTest extends TestCase {
+
+    @Min(value = 9223372036854775807l)
+    public long min;
+
+    @Max(value = 9223372036854775806l)
+    public long max;
+
+    public void testMinBoundaryValue() {
+        Validator v = Validation.buildDefaultValidatorFactory().getValidator();
+
+        this.min = 9223372036854775806l;
+        this.max = 0l;
+
+        // Current min value is smaller, should fail, but it doesn't
+        Set<ConstraintViolation<MinMaxValidatorsForNumberTest>> res = v.validate(this);
+        assertFalse("Min validation failed", res.isEmpty());
+    }
+
+    public void testMaxBoundaryValue() {
+        Validator v = Validation.buildDefaultValidatorFactory().getValidator();
+
+        this.min = Long.MAX_VALUE;
+        this.max = 9223372036854775807l;
+
+        // Current max value is bigger, should fail, but it doesn't
+        Set<ConstraintViolation<MinMaxValidatorsForNumberTest>> res = v.validate(this);
+        assertFalse("Max validation failed", res.isEmpty());
+    }
+
+}

Added: bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/NotNullValidatorTest.java
URL: http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/NotNullValidatorTest.java?rev=1517540&view=auto
==============================================================================
--- bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/NotNullValidatorTest.java (added)
+++ bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/NotNullValidatorTest.java Mon Aug 26 13:59:15 2013
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.bval.constraints;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+
+/**
+ * Checks correct behaviour of {@link NotNullValidator}.
+ * <p>
+ * Per the spec:
+ * <ul>
+ * <li>The annotated element must not be null.</li>
+ * </ul>
+ * 
+ * TODO: Mock context and verify that it's not used during validation.
+ * 
+ * @see "bean_validation-1_0_CR1-pfd-spec#Chapter6#Example6.2"
+ * 
+ * @author Carlos Vara
+ */
+public class NotNullValidatorTest extends TestCase {
+
+    public static Test suite() {
+        return new TestSuite(NotNullValidatorTest.class);
+    }
+    
+    public NotNullValidatorTest(String name) {
+    	super(name);
+    }
+    
+    /**
+     * Test {@link NotNullValidator} with null context.
+     */
+    public void testNotNullValidator() {
+    	NotNullValidator nnv = new NotNullValidator();
+    	assertTrue("Non null value validation must succeed", nnv.isValid("hello", null));
+    	assertFalse("Null value validation must fail", nnv.isValid(null, null));    	
+    }
+	
+}

Added: bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/NullValidatorTest.java
URL: http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/NullValidatorTest.java?rev=1517540&view=auto
==============================================================================
--- bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/NullValidatorTest.java (added)
+++ bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/NullValidatorTest.java Mon Aug 26 13:59:15 2013
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.bval.constraints;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+
+/**
+ * Checks correct behaviour of {@link NullValidator}.
+ * <p>
+ * Per the spec:
+ * <ul>
+ * <li>The annotated element must be null.</li>
+ * </ul>
+ * 
+ * TODO: Mock context and verify that it's not used during validation.
+ * 
+ * @see "bean_validation-1_0_CR1-pfd-spec#Chapter6#Example6.1"
+ * 
+ * @author Carlos Vara
+ */
+public class NullValidatorTest extends TestCase {
+
+    public static Test suite() {
+        return new TestSuite(NullValidatorTest.class);
+    }
+    
+    public NullValidatorTest(String name) {
+    	super(name);
+    }
+	
+    /**
+     * Test {@link AssertFalseValidator} with null context.
+     */
+    public void testNullValidator() {
+    	NullValidator nv = new NullValidator();
+    	assertTrue("Null value validation must succeed", nv.isValid(null, null));
+    	assertFalse("Non null value validation must fail", nv.isValid("hello", null));    	
+    }
+    
+}

Added: bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/Password.java
URL: http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/Password.java?rev=1517540&view=auto
==============================================================================
--- bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/Password.java (added)
+++ bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/Password.java Mon Aug 26 13:59:15 2013
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.bval.constraints;
+
+import javax.validation.Constraint;
+import javax.validation.Payload;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import java.lang.annotation.Retention;
+
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+/**
+ * Description: <br/>
+ * User: roman.stumm <br/>
+ * Date: 01.04.2008 <br/>
+ * Time: 12:02:06 <br/>
+ */
+@NotEmpty
+@NotNull
+@Size(min = 4, max = 5)
+@Retention(RUNTIME)
+@Constraint(validatedBy = {})
+// test that Password is validated although only combined constraints exists, no own implementation 
+public @interface Password {
+    Class<?>[] groups() default {};
+
+    String message() default "Wrong password";
+
+    int robustness() default 8;
+
+    Class<? extends Payload>[] payload() default { };
+}

Added: bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/ZipCodeCityCoherence.java
URL: http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/ZipCodeCityCoherence.java?rev=1517540&view=auto
==============================================================================
--- bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/ZipCodeCityCoherence.java (added)
+++ bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/ZipCodeCityCoherence.java Mon Aug 26 13:59:15 2013
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.bval.constraints;
+
+import javax.validation.Constraint;
+import javax.validation.Payload;
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+/**
+ * not implemented! simple dummy implemenation for tests only!
+ */
+@Documented
+@Constraint(validatedBy = ZipCodeCityCoherenceValidator.class)
+@Target({TYPE})
+@Retention(RUNTIME)
+public @interface ZipCodeCityCoherence {
+    String message() default "{validator.zipCodeCityCoherence}";    
+    Class<?>[] groups() default {};
+    Class<? extends Payload>[] payload() default { };
+}

Added: bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/ZipCodeCityCoherenceValidator.java
URL: http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/ZipCodeCityCoherenceValidator.java?rev=1517540&view=auto
==============================================================================
--- bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/ZipCodeCityCoherenceValidator.java (added)
+++ bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/constraints/ZipCodeCityCoherenceValidator.java Mon Aug 26 13:59:15 2013
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.bval.constraints;
+
+
+import org.apache.bval.jsr.example.ZipCodeCityCarrier;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+
+/**
+ * Description: Class not implemented! simple dummy implemenation for tests only! <br/>
+ * User: roman.stumm <br/>
+ * Date: 01.04.2008 <br/>
+ * Time: 11:45:22 <br/>
+ */
+public class ZipCodeCityCoherenceValidator
+      implements ConstraintValidator<ZipCodeCityCoherence, ZipCodeCityCarrier> {
+    public void initialize(ZipCodeCityCoherence constraintAnnotation) {
+    }
+
+    public boolean isValid(ZipCodeCityCarrier adr, ConstraintValidatorContext context) {
+        boolean r = true;
+        if ("error".equals(adr.getZipCode())) {
+            context.disableDefaultConstraintViolation();
+            context.buildConstraintViolationWithTemplate("zipcode not OK").addConstraintViolation();
+            r = false;
+        }
+        if ("error".equals(adr.getCity())) {
+            context.disableDefaultConstraintViolation();
+            context.buildConstraintViolationWithTemplate("city not OK").addNode("city").addConstraintViolation();
+            r = false;
+        }
+        return r;
+    }
+}

Added: bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/jsr/BeanDescriptorTest.java
URL: http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/jsr/BeanDescriptorTest.java?rev=1517540&view=auto
==============================================================================
--- bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/jsr/BeanDescriptorTest.java (added)
+++ bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/jsr/BeanDescriptorTest.java Mon Aug 26 13:59:15 2013
@@ -0,0 +1,238 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.bval.jsr;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+import org.apache.bval.jsr.util.TestUtils;
+
+import javax.validation.Constraint;
+import javax.validation.Payload;
+import javax.validation.Validation;
+import javax.validation.Validator;
+import javax.validation.ValidatorFactory;
+import javax.validation.constraints.NotNull;
+import javax.validation.groups.Default;
+import javax.validation.metadata.BeanDescriptor;
+import javax.validation.metadata.ConstraintDescriptor;
+import javax.validation.metadata.ElementDescriptor;
+import javax.validation.metadata.ElementDescriptor.ConstraintFinder;
+import javax.validation.metadata.PropertyDescriptor;
+import javax.validation.metadata.Scope;
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+import java.util.Locale;
+import java.util.Set;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+/**
+ * Tests the implementation of {@link BeanDescriptor} and its dependent
+ * interfaces.
+ * 
+ * @author Carlos Vara
+ */
+public class BeanDescriptorTest extends TestCase {
+    static ValidatorFactory factory;
+
+    static {
+        factory = Validation.buildDefaultValidatorFactory();
+        ((DefaultMessageInterpolator) factory.getMessageInterpolator()).setLocale(Locale.ENGLISH);
+    }
+
+    /**
+     * Validator instance to test
+     */
+    protected Validator validator;
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+        validator = createValidator();
+    }
+
+    /**
+     * Create the validator instance.
+     * 
+     * @return Validator
+     */
+    protected Validator createValidator() {
+        return factory.getValidator();
+    }
+
+    /**
+     * Check that groups(), message() and payload() are always in the
+     * attributes.
+     */
+    public void testMandatoryAttributesPresentInConstraintDescriptor() {
+        Set<ConstraintDescriptor<?>> nameDescriptors =
+            validator.getConstraintsForClass(Form.class).getConstraintsForProperty("name").getConstraintDescriptors();
+        Assert.assertEquals("Incorrect number of descriptors", 1, nameDescriptors.size());
+        ConstraintDescriptor<?> nameDescriptor = nameDescriptors.iterator().next();
+        Assert.assertTrue("groups attribute not present", nameDescriptor.getAttributes().containsKey("groups"));
+        Assert.assertTrue("payload attribute not present", nameDescriptor.getAttributes().containsKey("payload"));
+        Assert.assertTrue("message attribute not present", nameDescriptor.getAttributes().containsKey("message"));
+    }
+
+    /**
+     * Check that the groups() attribute value has the correct value when
+     * inheriting groups.
+     */
+    public void testCorrectValueForInheritedGroupsAttribute() {
+        Set<ConstraintDescriptor<?>> passwordDescriptors =
+            validator.getConstraintsForClass(Account.class).getConstraintsForProperty("password")
+                .getConstraintDescriptors();
+        Assert.assertEquals("Incorrect number of descriptors", 1, passwordDescriptors.size());
+        ConstraintDescriptor<?> passwordDescriptor = passwordDescriptors.iterator().next();
+        Assert.assertEquals("Incorrect number of composing constraints", 1, passwordDescriptor
+            .getComposingConstraints().size());
+        ConstraintDescriptor<?> notNullDescriptor = passwordDescriptor.getComposingConstraints().iterator().next();
+
+        // Check that the groups value containts Group1.class
+        Class<?>[] notNullGroups = (Class<?>[]) notNullDescriptor.getAttributes().get("groups");
+        boolean found = false;
+        for (Class<?> group : notNullGroups) {
+            if (group == Group1.class) {
+                found = true;
+                break;
+            }
+        }
+        Assert.assertTrue("Group1 not present in groups attribute", found);
+    }
+
+    /**
+     * Check that the groups() attribute value contains the correct interface as
+     * implicit group when the constraint is defined in that interface instead
+     * of the queried class.
+     */
+    public void testImplicitGroupIsPresent() {
+        Set<ConstraintDescriptor<?>> nameDescriptors =
+            validator.getConstraintsForClass(Woman.class).getConstraintsForProperty("name").getConstraintDescriptors();
+        Assert.assertEquals("Incorrect number of descriptors", 1, nameDescriptors.size());
+        ConstraintDescriptor<?> notNullDescriptor = nameDescriptors.iterator().next();
+
+        // Check that the groups attribute value contains the implicit group
+        // Person and the Default group
+        Class<?>[] notNullGroups = (Class<?>[]) notNullDescriptor.getAttributes().get("groups");
+        Assert.assertEquals("Incorrect number of groups", 2, notNullGroups.length);
+        Assert.assertTrue("Default group not present", notNullGroups[0].equals(Default.class)
+            || notNullGroups[1].equals(Default.class));
+        Assert.assertTrue("Implicit group not present", notNullGroups[0].equals(Person.class)
+            || notNullGroups[1].equals(Person.class));
+    }
+
+    /**
+     * Check that the groups() attribute value does not contain the implicit
+     * interface group when querying the interface directly.
+     */
+    public void testNoImplicitGroupWhenQueryingInterfaceDirectly() {
+        Set<ConstraintDescriptor<?>> nameDescriptors =
+            validator.getConstraintsForClass(Person.class).getConstraintsForProperty("name").getConstraintDescriptors();
+        Assert.assertEquals("Incorrect number of descriptors", 1, nameDescriptors.size());
+        ConstraintDescriptor<?> notNullDescriptor = nameDescriptors.iterator().next();
+
+        // Check that only the default group is present
+        Class<?>[] notNullGroups = (Class<?>[]) notNullDescriptor.getAttributes().get("groups");
+        Assert.assertEquals("Incorrect number of groups", 1, notNullGroups.length);
+        Assert.assertTrue("Default group not present", notNullGroups[0].equals(Default.class));
+    }
+
+    /**
+     * Check that the implementations of
+     * {@link ElementDescriptor#getElementClass()} work as defined in the spec.
+     */
+    public void testElementDescriptorGetElementClass() {
+        BeanDescriptor beanDescriptor = validator.getConstraintsForClass(Person.class);
+        Assert.assertEquals("Incorrect class returned", Person.class, beanDescriptor.getElementClass());
+
+        PropertyDescriptor nameDescriptor = beanDescriptor.getConstraintsForProperty("name");
+        Assert.assertEquals("Incorrect class returned", String.class, nameDescriptor.getElementClass());
+    }
+
+    /**
+     * Check the correct behavior of
+     * {@link ConstraintFinder#lookingAt(javax.validation.metadata.Scope)}.
+     */
+    public void testConstraintFinderLookingAt() {
+        PropertyDescriptor nameDescriptor =
+            validator.getConstraintsForClass(Woman.class).getConstraintsForProperty("name");
+        Set<ConstraintDescriptor<?>> constraints =
+            nameDescriptor.findConstraints().lookingAt(Scope.HIERARCHY).getConstraintDescriptors();
+        Assert.assertEquals("Incorrect number of descriptors", 1, constraints.size());
+
+        constraints = nameDescriptor.findConstraints().lookingAt(Scope.LOCAL_ELEMENT).getConstraintDescriptors();
+        Assert.assertEquals("Incorrect number of descriptors", 0, constraints.size());
+        TestUtils.failOnModifiable(constraints, "constraintFinder constraintDescriptors");
+        //verify that changes to one ConstraintFinder don't affect the base:
+        constraints = nameDescriptor.getConstraintDescriptors();
+        Assert.assertEquals("Incorrect number of descriptors", 1, constraints.size());
+    }
+
+    public static class Form {
+        @NotNull
+        public String name;
+    }
+
+    public static class Account {
+        @Password(groups = { Group1.class })
+        public String password;
+    }
+
+    @NotNull(groups = {})
+    @Constraint(validatedBy = {})
+    @Documented
+    @Target( { METHOD, FIELD, TYPE })
+    @Retention(RUNTIME)
+    public static @interface Password {
+        String message() default "Invalid password";
+
+        Class<?>[] groups() default {};
+
+        Class<? extends Payload>[] payload() default {};
+    }
+
+    public static interface Group1 {
+    }
+
+    public static class Woman implements Person {
+
+        private String name;
+
+        public String getName() {
+            return this.name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+    }
+
+    public static interface Person {
+        @NotNull
+        String getName();
+    }
+
+}

Added: bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/jsr/BootstrapTest.java
URL: http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/jsr/BootstrapTest.java?rev=1517540&view=auto
==============================================================================
--- bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/jsr/BootstrapTest.java (added)
+++ bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/jsr/BootstrapTest.java Mon Aug 26 13:59:15 2013
@@ -0,0 +1,186 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.bval.jsr;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+import org.apache.bval.constraints.NotNullValidator;
+import org.apache.bval.jsr.example.Customer;
+
+import javax.validation.Configuration;
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+import javax.validation.ConstraintValidatorFactory;
+import javax.validation.ConstraintViolation;
+import javax.validation.Validation;
+import javax.validation.ValidationException;
+import javax.validation.ValidationProviderResolver;
+import javax.validation.Validator;
+import javax.validation.ValidatorFactory;
+import javax.validation.bootstrap.ProviderSpecificBootstrap;
+import javax.validation.spi.ValidationProvider;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Locale;
+import java.util.Set;
+
+/**
+ * Description: <br/>
+ */
+public class BootstrapTest extends TestCase {
+    public void testDirectBootstrap() {
+        Validator validator = ApacheValidatorFactory.getDefault().getValidator();
+        Assert.assertNotNull(validator);
+        Assert.assertTrue(ApacheValidatorFactory.getDefault() == ApacheValidatorFactory.getDefault());
+    }
+
+    public void testEverydayBootstrap() {
+        ApacheValidatorFactory factory = (ApacheValidatorFactory) Validation.buildDefaultValidatorFactory();
+        Validator validator = factory.getValidator();
+        Assert.assertNotNull(validator);
+
+        // each call to Validation.getValidationBuilder() returns a new builder
+        // with new state
+        ApacheValidatorFactory factory2 = (ApacheValidatorFactory) Validation.buildDefaultValidatorFactory();
+        Assert.assertTrue(factory2 != factory);
+        Assert.assertTrue(factory2.getMessageInterpolator() != factory.getMessageInterpolator());
+
+    }
+
+    public void testLocalizedMessageInterpolatorFactory() {
+        Configuration<?> builder = Validation.byDefaultProvider().configure();
+        // changing the builder allows to create different factories
+        DefaultMessageInterpolator interpolator = new DefaultMessageInterpolator();
+        builder.messageInterpolator(interpolator);
+        ApacheValidatorFactory factory = (ApacheValidatorFactory) builder.buildValidatorFactory();
+
+        // ALTERNATIVE:
+        // you could do it without modifying the builder or reusing it,
+        // but then you need to use bval-core proprietary APIs:
+        ((DefaultMessageInterpolator) factory.getMessageInterpolator()).setLocale(Locale.ENGLISH);
+        // now factory's message resolver is using the english locale
+    }
+
+    /**
+     * some tests based on RI tested behaviors to ensure our implementation
+     * works as the reference implementation
+     */
+
+    public void testCustomConstraintFactory() {
+
+        Configuration<?> builder = Validation.byDefaultProvider().configure();
+        assertDefaultBuilderAndFactory(builder);
+
+        ValidatorFactory factory = builder.buildValidatorFactory();
+        Validator validator = factory.getValidator();
+
+        Customer customer = new Customer();
+        customer.setFirstName("John");
+
+        Set<ConstraintViolation<Customer>> ConstraintViolations = validator.validate(customer);
+        Assert.assertFalse(ConstraintViolations.isEmpty());
+
+        builder = Validation.byDefaultProvider().configure();
+        builder.constraintValidatorFactory(new ConstraintValidatorFactory() {
+            public <T extends ConstraintValidator<?, ?>> T getInstance(Class<T> key) {
+                if (key == NotNullValidator.class) {
+                    @SuppressWarnings("unchecked")
+                    final T result = (T) new BadlyBehavedNotNullValidator();
+                    return result;
+                }
+                return new DefaultConstraintValidatorFactory().getInstance(key);
+            }
+
+            public void releaseInstance(ConstraintValidator<?, ?> instance) {
+                // no-op
+            }
+        });
+        factory = builder.buildValidatorFactory();
+        validator = factory.getValidator();
+        Set<ConstraintViolation<Customer>> ConstraintViolations2 = validator.validate(customer);
+        Assert.assertTrue("Wrong number of constraints", ConstraintViolations.size() > ConstraintViolations2.size());
+    }
+
+    public void testCustomResolverAndType() {
+        ValidationProviderResolver resolver = new ValidationProviderResolver() {
+
+            public List<ValidationProvider<?>> getValidationProviders() {
+                List<ValidationProvider<?>> list = new ArrayList<ValidationProvider<?>>(1);
+                list.add(new ApacheValidationProvider());
+                return list;
+            }
+        };
+
+        ApacheValidatorConfiguration builder =
+            Validation.byProvider(ApacheValidationProvider.class).providerResolver(resolver).configure();
+        assertDefaultBuilderAndFactory(builder);
+    }
+
+    public void testCustomResolver() {
+        ValidationProviderResolver resolver = new ValidationProviderResolver() {
+
+            public List<ValidationProvider<?>> getValidationProviders() {
+                return Collections.<ValidationProvider<?>> singletonList(new ApacheValidationProvider());
+            }
+        };
+
+        Configuration<?> builder = Validation.byDefaultProvider().providerResolver(resolver).configure();
+        assertDefaultBuilderAndFactory(builder);
+    }
+
+    private void assertDefaultBuilderAndFactory(Configuration<?> builder) {
+        Assert.assertNotNull(builder);
+        Assert.assertTrue(builder instanceof ConfigurationImpl);
+
+        ValidatorFactory factory = builder.buildValidatorFactory();
+        Assert.assertNotNull(factory);
+        Assert.assertTrue(factory instanceof ApacheValidatorFactory);
+    }
+
+    public void testFailingCustomResolver() {
+        ValidationProviderResolver resolver = new ValidationProviderResolver() {
+
+            public List<ValidationProvider<?>> getValidationProviders() {
+                return Collections.emptyList();
+            }
+        };
+
+        ProviderSpecificBootstrap<ApacheValidatorConfiguration> type =
+            Validation.byProvider(ApacheValidationProvider.class);
+
+        final ProviderSpecificBootstrap<ApacheValidatorConfiguration> specializedBuilderFactory =
+            type.providerResolver(resolver);
+
+        try {
+            specializedBuilderFactory.configure();
+            Assert.fail();
+        } catch (ValidationException e) {
+            Assert.assertTrue("Wrong error message", e.getMessage().contains("provider")
+                && e.getMessage().contains("org.apache.bval.jsr.ApacheValidationProvider"));
+        }
+    }
+
+    class BadlyBehavedNotNullValidator extends NotNullValidator {
+        @Override
+        public boolean isValid(Object object, ConstraintValidatorContext context) {
+            return true;
+        }
+    }
+}

Added: bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/jsr/CircularReferencesTest.java
URL: http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/jsr/CircularReferencesTest.java?rev=1517540&view=auto
==============================================================================
--- bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/jsr/CircularReferencesTest.java (added)
+++ bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/jsr/CircularReferencesTest.java Mon Aug 26 13:59:15 2013
@@ -0,0 +1,120 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.apache.bval.jsr;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import javax.validation.ConstraintViolation;
+import javax.validation.Valid;
+import javax.validation.Validation;
+import javax.validation.Validator;
+import javax.validation.ValidatorFactory;
+import javax.validation.constraints.Size;
+import java.util.Locale;
+import java.util.Set;
+
+/**
+ * Checks that circular references in the bean graph are correctly detected when
+ * validating.
+ * 
+ * @author Carlos Vara
+ */
+public class CircularReferencesTest extends TestCase {
+    static ValidatorFactory factory;
+
+    static {
+        factory = Validation.buildDefaultValidatorFactory();
+        ((DefaultMessageInterpolator) factory.getMessageInterpolator()).setLocale(Locale.ENGLISH);
+    }
+
+    /**
+     * Validator instance to test
+     */
+    protected Validator validator;
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+        validator = createValidator();
+    }
+
+    /**
+     * Create the validator instance.
+     * 
+     * @return Validator
+     */
+    protected Validator createValidator() {
+        return factory.getValidator();
+    }
+
+    /**
+     * Checks that validation correctly stops when finding a circular
+     * dependency.
+     */
+    public void testAutoreferringBean() {
+        Person p1 = new Person();
+        p1.name = "too-long-name";
+        p1.sibling = p1;
+
+        Set<ConstraintViolation<Person>> violations = validator.validate(p1);
+
+        Assert.assertEquals("Only 1 violation should be reported", 1, violations.size());
+        ConstraintViolation<Person> violation = violations.iterator().next();
+        Assert.assertEquals("Incorrect violation path", "name", violation.getPropertyPath().toString());
+    }
+
+    /**
+     * Checks that a bean is always validated when appearing in non-circular
+     * paths inside the bean graph.
+     */
+    public void testNonCircularArrayOfSameBean() {
+        Boss boss = new Boss();
+        Person p1 = new Person();
+        p1.name = "too-long-name";
+
+        boss.employees = new Person[] { p1, p1, p1, p1 };
+
+        Set<ConstraintViolation<Boss>> violations = validator.validate(boss);
+
+        Assert.assertEquals("A total of 4 violations should be reported", 4, violations.size());
+    }
+
+    public static class Person {
+
+        @Valid
+        public Person sibling;
+
+        @Size(max = 10)
+        public String name;
+
+    }
+
+    public static class Boss {
+
+        @Valid
+        public Person[] employees;
+
+    }
+
+}