Author: mbenson
Date: Thu Jun  2 17:52:02 2011
New Revision: 1130692

URL: http://svn.apache.org/viewvc?rev=1130692&view=rev
Log:
add values validators for primitive/wrapper/Number+BigX

Added:
    
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/validator/BooleanValuesValidator.java
   (with props)
    
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/validator/CharacterValuesValidator.java
   (with props)
    
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/validator/NumberValuesValidator.java
   (with props)
Modified:
    
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/Values.java
    
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/appender/AbstractGenericMultivaluedConstraintAppender.java
    
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/appender/ValuesConstraintAppender.java
    
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/validator/EnumValuesValidator.java
    
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/validator/StringValuesValidator.java
    
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/test/java/org/apache/bval/constraints/dynamic/ValuesConstraintValidationTest.java

Modified: 
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/Values.java
URL: 
http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/Values.java?rev=1130692&r1=1130691&r2=1130692&view=diff
==============================================================================
--- 
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/Values.java
 (original)
+++ 
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/Values.java
 Thu Jun  2 17:52:02 2011
@@ -31,23 +31,22 @@ import javax.validation.Payload;
 
 import org.apache.bval.constraints.dynamic.NullValue.Appender;
 import org.apache.bval.constraints.dynamic.appender.ValuesConstraintAppender;
+import org.apache.bval.constraints.dynamic.validator.BooleanValuesValidator;
+import org.apache.bval.constraints.dynamic.validator.CharacterValuesValidator;
 import org.apache.bval.constraints.dynamic.validator.EnumValuesValidator;
+import org.apache.bval.constraints.dynamic.validator.NumberValuesValidator;
 import org.apache.bval.constraints.dynamic.validator.StringValuesValidator;
 import org.apache.bval.jsr303.dynamic.ConstraintAppender;
 
 /**
  * <p>
- * Allows the specification of discrete values either allowed or disallowed for
- * a property. This class functions as an exercise of the
- * {@link ConstraintAppender} portion of the dynamic bean validation
- * implementation.
+ * Allows the specification of discrete values either allowed or disallowed 
for a property. This class functions as an
+ * exercise of the {@link ConstraintAppender} portion of the dynamic bean 
validation implementation.
  * </p>
  * <p>
- * Because of the type limitations on Java annotations, it is not feasible to
- * write an open-ended constraint annotation to allow the specification of
- * strongly-typed values. It <em>is</em> feasible, however, to write validators
- * for various types assuming that a reliable strategy for string conversion of
- * a given type is available.
+ * Because of the type limitations on Java annotations, it is not feasible to 
write an open-ended constraint annotation
+ * to allow the specification of strongly-typed values. It <em>is</em> 
feasible, however, to write validators for
+ * various types assuming that a reliable strategy for string conversion of a 
given type is available.
  * </p>
  * 
  * @version $Rev$ $Date$
@@ -55,7 +54,8 @@ import org.apache.bval.jsr303.dynamic.Co
 @Documented
 @Target({ METHOD, FIELD, ANNOTATION_TYPE, PARAMETER })
 @Retention(RUNTIME)
-@Constraint(validatedBy = { StringValuesValidator.class, 
EnumValuesValidator.class })
+@Constraint(validatedBy = { StringValuesValidator.class, 
EnumValuesValidator.class, NumberValuesValidator.class,
+    BooleanValuesValidator.class, CharacterValuesValidator.class })
 @ConstraintAppender.Use(ValuesConstraintAppender.class)
 public @interface Values {
     /**
@@ -86,8 +86,7 @@ public @interface Values {
     Class<? extends Payload>[] payload() default {};
 
     /**
-     * List of {@link Values} annotation; typically not used directly, but
-     * utilized by {@link Appender}.
+     * List of {@link Values} annotation; typically not used directly, but 
utilized by {@link Appender}.
      */
     @Documented
     @Target({ METHOD, FIELD, ANNOTATION_TYPE, PARAMETER })
@@ -103,17 +102,17 @@ public @interface Values {
     }
 
     /**
-     * Labeled values constraint for those occasions where it is necessary for 
a
-     * human-consumable label to accompany a data value. Arguably more properly
-     * the concern of the view technology of an application, this constraint is
-     * a concession to the concept that there may be times when it is
-     * appropriate to pair a value and its label so low as an application's
-     * business/validation layer.
+     * Labeled values constraint for those occasions where it is necessary for 
a human-consumable label to accompany a
+     * data value. Arguably more properly the concern of the view technology 
of an application, this constraint is a
+     * concession to the concept that there may be times when it is 
appropriate to pair a value and its label so low as
+     * an application's business/validation layer.
      */
     @Documented
     @Target({ METHOD, FIELD, ANNOTATION_TYPE, PARAMETER })
     @Retention(RUNTIME)
-    @Constraint(validatedBy = { StringValuesValidator.Labeled.class, 
EnumValuesValidator.Labeled.class })
+    @Constraint(validatedBy = { StringValuesValidator.Labeled.class, 
EnumValuesValidator.Labeled.class,
+        NumberValuesValidator.Labeled.class, 
BooleanValuesValidator.Labeled.class,
+        CharacterValuesValidator.Labeled.class })
     @ConstraintAppender.Use(ValuesConstraintAppender.Labeled.class)
     public @interface Labeled {
 
@@ -181,8 +180,7 @@ public @interface Values {
     }
 
     /**
-     * Describes the intended handling of values specified by
-     * {@link Values#value()}.
+     * Describes the intended handling of values specified by {@link 
Values#value()}.
      */
     public enum Rule {
         INCLUDE, EXCLUDE;

Modified: 
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/appender/AbstractGenericMultivaluedConstraintAppender.java
URL: 
http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/appender/AbstractGenericMultivaluedConstraintAppender.java?rev=1130692&r1=1130691&r2=1130692&view=diff
==============================================================================
--- 
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/appender/AbstractGenericMultivaluedConstraintAppender.java
 (original)
+++ 
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/appender/AbstractGenericMultivaluedConstraintAppender.java
 Thu Jun  2 17:52:02 2011
@@ -101,7 +101,9 @@ public abstract class AbstractGenericMul
         boolean foundSingles = false;
         for (Annotation a : collection) {
             if (multipleConstraintType.isInstance(a)) {
-                return ArrayUtils.contains(getValue((M) a), constraint);
+                @SuppressWarnings("unchecked")
+                boolean result = ArrayUtils.contains(getValue((M) a), 
constraint);
+                return result;
             }
             foundSingles |= constraintType.isInstance(a);
         }

Modified: 
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/appender/ValuesConstraintAppender.java
URL: 
http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/appender/ValuesConstraintAppender.java?rev=1130692&r1=1130691&r2=1130692&view=diff
==============================================================================
--- 
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/appender/ValuesConstraintAppender.java
 (original)
+++ 
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/appender/ValuesConstraintAppender.java
 Thu Jun  2 17:52:02 2011
@@ -19,11 +19,8 @@ package org.apache.bval.constraints.dyna
 import javax.validation.Payload;
 
 import org.apache.bval.constraints.dynamic.Values;
-import org.apache.bval.constraints.dynamic.Values.Labeled;
-import org.apache.bval.constraints.dynamic.Values.List;
-import org.apache.bval.constraints.dynamic.Values.Strategy;
 import org.apache.bval.constraints.dynamic.Values.Rule;
-import org.apache.bval.constraints.dynamic.Values.Labeled.Item;
+import org.apache.bval.constraints.dynamic.Values.Strategy;
 import org.apache.bval.jsr303.dynamic.ConstraintAppender;
 import org.apache.commons.proxy2.stub.StubConfigurer;
 

Added: 
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/validator/BooleanValuesValidator.java
URL: 
http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/validator/BooleanValuesValidator.java?rev=1130692&view=auto
==============================================================================
--- 
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/validator/BooleanValuesValidator.java
 (added)
+++ 
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/validator/BooleanValuesValidator.java
 Thu Jun  2 17:52:02 2011
@@ -0,0 +1,48 @@
+/*
+ *  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.dynamic.validator;
+
+/**
+ * Boolean Values validator.
+ * 
+ * @version $Rev$ $Date$
+ */
+public class BooleanValuesValidator extends 
AbstractValuesValidator.Plain<Boolean> {
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected boolean matches(Boolean value, String choice) {
+        return value.toString().equals(choice);
+    }
+
+    /**
+     * Labeled Boolean Values validator.
+     */
+    public static class Labeled extends 
AbstractValuesValidator.Labeled<Boolean> {
+
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        protected boolean matches(Boolean value, String choice) {
+            return value.toString().equals(choice);
+        }
+
+    }
+}

Propchange: 
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/validator/BooleanValuesValidator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/validator/CharacterValuesValidator.java
URL: 
http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/validator/CharacterValuesValidator.java?rev=1130692&view=auto
==============================================================================
--- 
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/validator/CharacterValuesValidator.java
 (added)
+++ 
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/validator/CharacterValuesValidator.java
 Thu Jun  2 17:52:02 2011
@@ -0,0 +1,48 @@
+/*
+ *  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.dynamic.validator;
+
+/**
+ * Character values validator.
+ * 
+ * @version $Rev$ $Date$
+ */
+public class CharacterValuesValidator extends 
AbstractValuesValidator.Plain<Character> {
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected boolean matches(Character value, String choice) {
+        return choice.length() == 1 && value.equals(choice.charAt(0));
+    }
+
+    /**
+     * Labeled Character values validator.
+     */
+    public static class Labeled extends 
AbstractValuesValidator.Labeled<Character> {
+
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        protected boolean matches(Character value, String choice) {
+            return choice.length() == 1 && value.equals(choice.charAt(0));
+        }
+
+    }
+}

Propchange: 
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/validator/CharacterValuesValidator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/validator/EnumValuesValidator.java
URL: 
http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/validator/EnumValuesValidator.java?rev=1130692&r1=1130691&r2=1130692&view=diff
==============================================================================
--- 
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/validator/EnumValuesValidator.java
 (original)
+++ 
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/validator/EnumValuesValidator.java
 Thu Jun  2 17:52:02 2011
@@ -17,7 +17,6 @@
 package org.apache.bval.constraints.dynamic.validator;
 
 import org.apache.bval.constraints.dynamic.Values;
-import org.apache.bval.constraints.dynamic.Values.Labeled;
 
 /**
  * Validates {@link Values} annotations against enum constants.

Added: 
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/validator/NumberValuesValidator.java
URL: 
http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/validator/NumberValuesValidator.java?rev=1130692&view=auto
==============================================================================
--- 
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/validator/NumberValuesValidator.java
 (added)
+++ 
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/validator/NumberValuesValidator.java
 Thu Jun  2 17:52:02 2011
@@ -0,0 +1,85 @@
+/*
+ *  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.dynamic.validator;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
+/**
+ * Number Values validator.
+ * 
+ * @version $Rev$ $Date$
+ */
+public class NumberValuesValidator extends 
AbstractValuesValidator.Plain<Number> {
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected boolean matches(Number value, String choice) {
+        return test(value, choice);
+    }
+
+    /**
+     * Labeled Number Values validator.
+     */
+    public static class Labeled extends 
AbstractValuesValidator.Labeled<Number> {
+
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        protected boolean matches(Number value, String choice) {
+            return test(value, choice);
+        }
+
+    }
+
+    private static boolean test(Number value, String choice) {
+        try {
+            // BigDecimal/BigInteger !final; test class/name
+            if (value.getClass().getName().equals(BigDecimal.class.getName())) 
{
+                return new BigDecimal(choice).equals(value);
+            }
+            if (value.getClass().getName().equals(BigInteger.class.getName())) 
{
+                return new BigInteger(choice).equals(value);
+            }
+            if (value instanceof Double) {
+                return Double.valueOf(choice).equals(value);
+            }
+            if (value instanceof Float) {
+                return Float.valueOf(choice).equals(value);
+            }
+            if (value instanceof Long) {
+                return Long.valueOf(choice).equals(value);
+            }
+            if (value instanceof Integer) {
+                return Integer.valueOf(choice).equals(value);
+            }
+            if (value instanceof Short) {
+                return Short.valueOf(choice).equals(value);
+            }
+            if (value instanceof Byte) {
+                return Byte.valueOf(choice).equals(value);
+            }
+        } catch (NumberFormatException e) {
+            // ignore
+        }
+        // by default, simply compare toString()
+        return value.toString().equals(choice);
+    }
+}

Propchange: 
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/validator/NumberValuesValidator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/validator/StringValuesValidator.java
URL: 
http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/validator/StringValuesValidator.java?rev=1130692&r1=1130691&r2=1130692&view=diff
==============================================================================
--- 
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/validator/StringValuesValidator.java
 (original)
+++ 
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/constraints/dynamic/validator/StringValuesValidator.java
 Thu Jun  2 17:52:02 2011
@@ -20,7 +20,6 @@ import javax.validation.ConstraintValida
 import javax.validation.Payload;
 
 import org.apache.bval.constraints.dynamic.Values;
-import org.apache.bval.constraints.dynamic.Values.Labeled;
 import org.apache.commons.lang3.StringUtils;
 
 /**

Modified: 
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/test/java/org/apache/bval/constraints/dynamic/ValuesConstraintValidationTest.java
URL: 
http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/test/java/org/apache/bval/constraints/dynamic/ValuesConstraintValidationTest.java?rev=1130692&r1=1130691&r2=1130692&view=diff
==============================================================================
--- 
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/test/java/org/apache/bval/constraints/dynamic/ValuesConstraintValidationTest.java
 (original)
+++ 
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/test/java/org/apache/bval/constraints/dynamic/ValuesConstraintValidationTest.java
 Thu Jun  2 17:52:02 2011
@@ -20,6 +20,8 @@ import static org.junit.Assert.assertEqu
 import static org.junit.Assert.assertNull;
 
 import java.lang.annotation.ElementType;
+import java.math.BigDecimal;
+import java.math.BigInteger;
 import java.util.Locale;
 
 import javax.validation.ConstraintValidator;
@@ -125,11 +127,133 @@ public class ValuesConstraintValidationT
         String labeledIgnoreCaseTrimExclude;
     }
 
+    public static class PrimitiveBean {
+        @Values({ "0", "1", "2" })
+        byte b;
+        @Values.Labeled({ @Item(label = "zero", value = "0"), @Item(label = 
"one", value = "1"),
+            @Item(label = "two", value = "2") })
+        short s;
+        @Values({ "0", "1", "2" })
+        int i;
+        @Values.Labeled({//@formatter:off
+            @Item(label = "zero", value = "0"),
+            @Item(label = "one", value = "1"),
+            @Item(label = "two", value = "2")
+            })//@formatter:on
+        long l;
+        @Values(value = { "Infinity", "-Infinity", "NaN" }, rule = 
Rule.EXCLUDE)
+        float f;
+        @Values.Labeled({ @Item(label = "zero", value = "0.0"), @Item(label = 
"one", value = "1.0"),
+            @Item(label = "two", value = "2.0") })
+        double d;
+        @Values({ "true" })
+        boolean bool;
+        @Values.Labeled({ @Item(label = "'a'", value = "a"), @Item(label = 
"'b'", value = "b"),
+            @Item(label = "'c'", value = "c") })
+        char c;
+
+        /**
+         * Create a new ValuesConstraintValidationTest.PrimitiveBean instance.
+         */
+        public PrimitiveBean() {
+            reset();
+        }
+
+        void reset() {
+            b = 0;
+            s = 0;
+            i = 0;
+            l = 0L;
+            f = 0.0f;
+            d = 0.0d;
+            bool = true;
+            c = 'a';
+        }
+    }
+
+    public static class WrapperBean {
+        @Values({ "0", "1", "2" })
+        Byte b;
+        @Values.Labeled({ @Item(label = "zero", value = "0"), @Item(label = 
"one", value = "1"),
+            @Item(label = "two", value = "2") })
+        Short s;
+        @Values({ "0", "1", "2" })
+        Integer i;
+        @Values.Labeled({//@formatter:off
+            @Item(label = "zero", value = "0"),
+            @Item(label = "one", value = "1"),
+            @Item(label = "two", value = "2")
+        })//@formatter:on
+        Long l;
+        @Values(value = { "Infinity", "-Infinity", "NaN" }, rule = 
Rule.EXCLUDE)
+        Float f;
+        @Values.Labeled({ @Item(label = "zero", value = "0.0"), @Item(label = 
"one", value = "1.0"),
+            @Item(label = "two", value = "2.0") })
+        Double d;
+        @Values({ "true" })
+        Boolean bool;
+        @Values.Labeled({ @Item(label = "'a'", value = "a"), @Item(label = 
"'b'", value = "b"),
+            @Item(label = "'c'", value = "c") })
+        Character c;
+
+        /**
+         * Create a new ValuesConstraintValidationTest.WrapperBean instance.
+         */
+        public WrapperBean() {
+            clear();
+        }
+
+        void clear() {
+            b = null;
+            s = null;
+            i = null;
+            l = null;
+            f = null;
+            d = null;
+            bool = null;
+            c = null;
+        }
+
+        void copyFrom(PrimitiveBean prototype) {
+            b = prototype.b;
+            s = prototype.s;
+            i = prototype.i;
+            l = prototype.l;
+            f = prototype.f;
+            d = prototype.d;
+            bool = prototype.bool;
+            c = prototype.c;
+        }
+    }
+
+    public static class BigNumberBean {
+        @Values.Labeled({ @Item(label = "B", value = "1"), @Item(label = "K", 
value = "1024"),
+            @Item(label = "M", value = "1048576"), @Item(label = "G", value = 
"1073741824") })
+        BigInteger bigI;
+        @Values({ "1024e0", "1024e-1", "1024e-2", "1024e-3" })
+        BigDecimal bigD;
+
+        /**
+         * Create a new ValuesConstraintValidationTest.BigNumberBean instance.
+         */
+        public BigNumberBean() {
+            clear();
+        }
+
+        void clear() {
+            bigI = null;
+            bigD = null;
+        }
+    }
+
     private Validator validator;
     private DynamicValidatorContext validatorContext;
     private final AnnotationFactory annotationFactory = new 
AnnotationFactory();
     private TestBean testBean;
     private StringBean stringBean;
+    private PrimitiveBean primitiveBean;
+    private WrapperBean wrapperBean;
+    private BigNumberBean bigNumberBean;
 
     @Before
     public void setup() {
@@ -145,6 +269,9 @@ public class ValuesConstraintValidationT
         validator = validatorContext.getValidator();
         testBean = new TestBean();
         stringBean = new StringBean();
+        primitiveBean = new PrimitiveBean();
+        wrapperBean = new WrapperBean();
+        bigNumberBean = new BigNumberBean();
     }
 
     @Test
@@ -717,6 +844,56 @@ public class ValuesConstraintValidationT
                 .getConstraintDescriptors().size());
     }
 
+    @Test
+    public void testValidatePrimitiveValues() throws Exception {
+        assertEquals(0, validator.validate(primitiveBean).size());
+        primitiveBean.bool = false;
+        assertEquals(1, validator.validate(primitiveBean).size());
+        primitiveBean.reset();
+        primitiveBean.f = Float.POSITIVE_INFINITY;
+        assertEquals(1, validator.validate(primitiveBean).size());
+        primitiveBean.f = Float.NEGATIVE_INFINITY;
+        assertEquals(1, validator.validate(primitiveBean).size());
+        primitiveBean.f = Float.NaN;
+        assertEquals(1, validator.validate(primitiveBean).size());
+    }
+
+    @Test
+    public void testValidateWrapperValues() throws Exception {
+        assertEquals(0, validator.validate(wrapperBean).size());
+        wrapperBean.copyFrom(primitiveBean);
+        assertEquals(0, validator.validate(wrapperBean).size());
+        wrapperBean.c = 'x';
+        assertEquals(1, validator.validate(wrapperBean).size());
+        wrapperBean.copyFrom(primitiveBean);
+        wrapperBean.f = Float.POSITIVE_INFINITY;
+        assertEquals(1, validator.validate(wrapperBean).size());
+        wrapperBean.f = Float.NEGATIVE_INFINITY;
+        assertEquals(1, validator.validate(wrapperBean).size());
+        wrapperBean.f = Float.NaN;
+        assertEquals(1, validator.validate(wrapperBean).size());
+    }
+
+    @Test
+    public void testValidateBigNumberValues() throws Exception {
+        assertEquals(0, validator.validate(bigNumberBean).size());
+        BigInteger ki = BigInteger.valueOf(2).pow(10);
+        for (int n = 0; n < 4; n++) {
+            bigNumberBean.bigI = ki.pow(n);
+            assertEquals(0, validator.validate(bigNumberBean).size());
+            bigNumberBean.bigI = bigNumberBean.bigI.add(BigInteger.ONE);
+            assertEquals(1, validator.validate(bigNumberBean).size());
+        }
+        bigNumberBean.clear();
+        BigDecimal kd = new BigDecimal(2).pow(10);
+        for (int n = 0; n < 4; n++) {
+            bigNumberBean.bigD = kd.divide(BigDecimal.TEN.pow(n));
+            assertEquals(0, validator.validate(bigNumberBean).size());
+            bigNumberBean.bigD = bigNumberBean.bigD.add(BigDecimal.ONE);
+            assertEquals(1, validator.validate(bigNumberBean).size());
+        }
+    }
+
     public interface X {
     }
 


Reply via email to