View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.validator.routines;
18  
19  import junit.framework.TestCase;
20  
21  import java.util.Locale;
22  import java.math.BigDecimal;
23  /**
24   * Test Case for PercentValidator.
25   * 
26   * @version $Revision$
27   */
28  public class PercentValidatorTest extends TestCase {
29  
30      protected PercentValidator validator;
31  
32      /**
33       * Constructor
34       * @param name test name
35       */
36      public PercentValidatorTest(String name) {
37          super(name);
38      }
39  
40      @Override
41      protected void setUp() throws Exception {
42          super.setUp();
43          validator = new PercentValidator();
44      }
45  
46      /**
47       * Tear down
48       * @throws Exception
49       */
50      @Override
51      protected void tearDown() throws Exception {
52          super.tearDown();
53          validator = null;
54      }
55  
56      /**
57       * Test Format Type
58       */
59      public void testFormatType() {
60          assertEquals("Format Type A", 2, PercentValidator.getInstance().getFormatType());
61          assertEquals("Format Type B", AbstractNumberValidator.PERCENT_FORMAT, PercentValidator.getInstance().getFormatType());
62      }
63  
64      /**
65       * Test Valid percentage values
66       */
67      public void testValid() {
68          // Set the default Locale
69          Locale origDefault = Locale.getDefault();
70          Locale.setDefault(Locale.UK);
71  
72          BigDecimalValidator validator = PercentValidator.getInstance();
73          BigDecimal expected = new BigDecimal("0.12");
74          BigDecimal negative = new BigDecimal("-0.12");
75          BigDecimal hundred  = new BigDecimal("1.00");
76  
77          assertEquals("Default locale", expected, validator.validate("12%"));
78          assertEquals("Default negtve", negative, validator.validate("-12%"));
79  
80          // Invalid UK
81          assertEquals("UK locale",      expected, validator.validate("12%",   Locale.UK));
82          assertEquals("UK negative",    negative, validator.validate("-12%",  Locale.UK));
83          assertEquals("UK No symbol",   expected, validator.validate("12",    Locale.UK));
84  
85          // Invalid US - can't find a Locale with different symbols!
86          assertEquals("US locale",      expected, validator.validate("12%",   Locale.US));
87          assertEquals("US negative",    negative, validator.validate("-12%",  Locale.US));
88          assertEquals("US No symbol",   expected, validator.validate("12",    Locale.US));
89  
90          assertEquals("100%",           hundred, validator.validate("100%"));
91  
92          // Restore the original default
93          Locale.setDefault(origDefault);
94      }
95  
96      /**
97       * Test Invalid percentage values
98       */
99      public void testInvalid() {
100         BigDecimalValidator validator = PercentValidator.getInstance();
101 
102         // Invalid Missing
103         assertFalse("isValid() Null Value",    validator.isValid(null));
104         assertFalse("isValid() Empty Value",   validator.isValid(""));
105         assertNull("validate() Null Value",    validator.validate(null));
106         assertNull("validate() Empty Value",   validator.validate(""));
107 
108         // Invalid UK
109         assertFalse("UK wrong symbol",    validator.isValid("12@",   Locale.UK)); // ???
110         assertFalse("UK wrong negative",  validator.isValid("(12%)", Locale.UK));
111 
112         // Invalid US - can't find a Locale with different symbols!
113         assertFalse("US wrong symbol",    validator.isValid("12@",   Locale.US)); // ???
114         assertFalse("US wrong negative",  validator.isValid("(12%)", Locale.US));
115     }
116 
117 }