1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.validator.routines;
18
19 import static org.junit.jupiter.api.Assertions.assertEquals;
20 import static org.junit.jupiter.api.Assertions.assertFalse;
21 import static org.junit.jupiter.api.Assertions.assertNull;
22
23 import java.math.BigDecimal;
24 import java.text.DecimalFormatSymbols;
25 import java.util.Locale;
26
27 import org.junit.jupiter.api.BeforeEach;
28 import org.junit.jupiter.api.Test;
29
30
31
32
33 public class CurrencyValidatorTest {
34
35 private static final char CURRENCY_SYMBOL = '\u00A4';
36
37 private String usDollar;
38 private String ukPound;
39
40 @BeforeEach
41 protected void setUp() {
42 usDollar = new DecimalFormatSymbols(Locale.US).getCurrencySymbol();
43 ukPound = new DecimalFormatSymbols(Locale.UK).getCurrencySymbol();
44 }
45
46
47
48
49 @Test
50 public void testFormatType() {
51 assertEquals(1, CurrencyValidator.getInstance().getFormatType(), "Format Type A");
52 assertEquals(AbstractNumberValidator.CURRENCY_FORMAT, CurrencyValidator.getInstance().getFormatType(), "Format Type B");
53 }
54
55
56
57
58 @Test
59 public void testIntegerInvalid() {
60 final CurrencyValidator validator = new CurrencyValidator(true, false);
61
62
63 assertFalse(validator.isValid(ukPound + "1,234.56", Locale.UK), "UK positive");
64 assertFalse(validator.isValid("-" + ukPound + "1,234.56", Locale.UK), "UK negative");
65
66
67 assertFalse(validator.isValid(usDollar + "1,234.56", Locale.US), "US positive");
68 assertFalse(validator.isValid("(" + usDollar + "1,234.56)", Locale.US), "US negative");
69 }
70
71
72
73
74 @Test
75 public void testIntegerValid() {
76
77 final Locale origDefault = Locale.getDefault();
78 Locale.setDefault(Locale.UK);
79
80 final CurrencyValidator validator = new CurrencyValidator();
81 final BigDecimal expected = new BigDecimal("1234.00");
82 final BigDecimal negative = new BigDecimal("-1234.00");
83
84 assertEquals(expected, validator.validate(ukPound + "1,234"), "Default locale");
85
86 assertEquals(expected, validator.validate(ukPound + "1,234", Locale.UK), "UK locale");
87 assertEquals(negative, validator.validate("-" + ukPound + "1,234", Locale.UK), "UK negative");
88
89 assertEquals(expected, validator.validate(usDollar + "1,234", Locale.US), "US locale");
90 assertEquals(negative, validator.validate("(" + usDollar + "1,234)", Locale.US), "US negative");
91
92
93 Locale.setDefault(origDefault);
94 }
95
96
97
98
99 @Test
100 public void testInvalid() {
101 final BigDecimalValidator validator = CurrencyValidator.getInstance();
102
103
104 assertFalse(validator.isValid(null), "isValid() Null Value");
105 assertFalse(validator.isValid(""), "isValid() Empty Value");
106 assertNull(validator.validate(null), "validate() Null Value");
107 assertNull(validator.validate(""), "validate() Empty Value");
108
109
110 assertFalse(validator.isValid(usDollar + "1,234.56", Locale.UK), "UK wrong symbol");
111 assertFalse(validator.isValid("(" + ukPound + "1,234.56)", Locale.UK), "UK wrong negative");
112
113
114 assertFalse(validator.isValid(ukPound + "1,234.56", Locale.US), "US wrong symbol");
115 assertFalse(validator.isValid("-" + usDollar + "1,234.56", Locale.US), "US wrong negative");
116 }
117
118
119
120
121 @Test
122 public void testPattern() {
123
124 final Locale origDefault = Locale.getDefault();
125 Locale.setDefault(Locale.UK);
126
127 final BigDecimalValidator validator = CurrencyValidator.getInstance();
128 final String basicPattern = CURRENCY_SYMBOL + "#,##0.000";
129 final String pattern = basicPattern + ";[" + basicPattern + "]";
130 final BigDecimal expected = new BigDecimal("1234.567");
131 final BigDecimal negative = new BigDecimal("-1234.567");
132
133
134 assertEquals(expected, validator.validate(ukPound + "1,234.567", pattern), "default");
135 assertEquals(negative, validator.validate("[" + ukPound + "1,234.567]", pattern), "negative");
136 assertEquals(expected, validator.validate("1,234.567", pattern), "no symbol +ve");
137 assertEquals(negative, validator.validate("[1,234.567]", pattern), "no symbol -ve");
138
139
140 assertEquals(expected, validator.validate(usDollar + "1,234.567", pattern, Locale.US), "default");
141 assertEquals(negative, validator.validate("[" + usDollar + "1,234.567]", pattern, Locale.US), "negative");
142 assertEquals(expected, validator.validate("1,234.567", pattern, Locale.US), "no symbol +ve");
143 assertEquals(negative, validator.validate("[1,234.567]", pattern, Locale.US), "no symbol -ve");
144
145
146 assertFalse(validator.isValid(usDollar + "1,234.567", pattern), "invalid symbol");
147 assertFalse(validator.isValid(ukPound + "1,234.567", pattern, Locale.US), "invalid symbol");
148
149
150 Locale.setDefault(origDefault);
151 }
152
153
154
155
156 @Test
157 public void testValid() {
158
159 final Locale origDefault = Locale.getDefault();
160 Locale.setDefault(Locale.UK);
161
162 final BigDecimalValidator validator = CurrencyValidator.getInstance();
163 final BigDecimal expected = new BigDecimal("1234.56");
164 final BigDecimal negative = new BigDecimal("-1234.56");
165 final BigDecimal noDecimal = new BigDecimal("1234.00");
166 final BigDecimal oneDecimal = new BigDecimal("1234.50");
167
168 assertEquals(expected, validator.validate(ukPound + "1,234.56"), "Default locale");
169
170 assertEquals(expected, validator.validate(ukPound + "1,234.56", Locale.UK), "UK locale");
171 assertEquals(negative, validator.validate("-" + ukPound + "1,234.56", Locale.UK), "UK negative");
172 assertEquals(noDecimal, validator.validate(ukPound + "1,234", Locale.UK), "UK no decimal");
173 assertEquals(oneDecimal, validator.validate(ukPound + "1,234.5", Locale.UK), "UK 1 decimal");
174 assertEquals(expected, validator.validate(ukPound + "1,234.567", Locale.UK), "UK 3 decimal");
175 assertEquals(expected, validator.validate("1,234.56", Locale.UK), "UK no symbol");
176
177 assertEquals(expected, validator.validate(usDollar + "1,234.56", Locale.US), "US locale");
178 assertEquals(negative, validator.validate("(" + usDollar + "1,234.56)", Locale.US), "US negative");
179 assertEquals(noDecimal, validator.validate(usDollar + "1,234", Locale.US), "US no decimal");
180 assertEquals(oneDecimal, validator.validate(usDollar + "1,234.5", Locale.US), "US 1 decimal");
181 assertEquals(expected, validator.validate(usDollar + "1,234.567", Locale.US), "US 3 decimal");
182 assertEquals(expected, validator.validate("1,234.56", Locale.US), "US no symbol");
183
184
185 Locale.setDefault(origDefault);
186 }
187 }