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.assertNotNull;
22 import static org.junit.jupiter.api.Assertions.assertNull;
23 import static org.junit.jupiter.api.Assertions.assertTrue;
24
25 import org.apache.commons.validator.routines.checkdigit.CheckDigit;
26 import org.apache.commons.validator.routines.checkdigit.EAN13CheckDigit;
27 import org.junit.jupiter.api.Test;
28
29
30
31
32 public class CodeValidatorTest {
33
34
35
36
37 @Test
38 public void testCheckDigit() {
39 CodeValidator validator = new CodeValidator((String) null, -1, -1, (CheckDigit) null);
40 final String invalidEAN = "9781930110992";
41 final String validEAN = "9781930110991";
42
43
44 assertNull(validator.getCheckDigit(), "No CheckDigit");
45 assertEquals(invalidEAN, validator.validate(invalidEAN), "No CheckDigit invalid");
46 assertEquals(validEAN, validator.validate(validEAN), "No CheckDigit valid");
47 assertTrue(validator.isValid(invalidEAN), "No CheckDigit (is) invalid");
48 assertTrue(validator.isValid(validEAN), "No CheckDigit (is) valid");
49
50
51 validator = new CodeValidator((String) null, -1, EAN13CheckDigit.EAN13_CHECK_DIGIT);
52
53 assertNotNull(validator.getCheckDigit(), "EAN CheckDigit");
54 assertNull(validator.validate(invalidEAN), "EAN CheckDigit invalid");
55 assertEquals(validEAN, validator.validate(validEAN), "EAN CheckDigit valid");
56 assertFalse(validator.isValid(invalidEAN), "EAN CheckDigit (is) invalid");
57 assertTrue(validator.isValid(validEAN), "EAN CheckDigit (is) valid");
58 assertNull(validator.validate("978193011099X"), "EAN CheckDigit ex");
59 }
60
61
62
63
64 @Test
65 public void testConstructors() {
66 CodeValidator validator;
67 final RegexValidator regex = new RegexValidator("^[0-9]*$");
68
69
70 validator = new CodeValidator(regex, EAN13CheckDigit.EAN13_CHECK_DIGIT);
71 assertEquals(regex, validator.getRegexValidator(), "Constructor 1 - regex");
72 assertEquals(-1, validator.getMinLength(), "Constructor 1 - min length");
73 assertEquals(-1, validator.getMaxLength(), "Constructor 1 - max length");
74 assertEquals(EAN13CheckDigit.EAN13_CHECK_DIGIT, validator.getCheckDigit(), "Constructor 1 - check digit");
75
76
77 validator = new CodeValidator(regex, 13, EAN13CheckDigit.EAN13_CHECK_DIGIT);
78 assertEquals(regex, validator.getRegexValidator(), "Constructor 2 - regex");
79 assertEquals(13, validator.getMinLength(), "Constructor 2 - min length");
80 assertEquals(13, validator.getMaxLength(), "Constructor 2 - max length");
81 assertEquals(EAN13CheckDigit.EAN13_CHECK_DIGIT, validator.getCheckDigit(), "Constructor 2 - check digit");
82
83
84 validator = new CodeValidator(regex, 10, 20, EAN13CheckDigit.EAN13_CHECK_DIGIT);
85 assertEquals(regex, validator.getRegexValidator(), "Constructor 3 - regex");
86 assertEquals(10, validator.getMinLength(), "Constructor 3 - min length");
87 assertEquals(20, validator.getMaxLength(), "Constructor 3 - max length");
88 assertEquals(EAN13CheckDigit.EAN13_CHECK_DIGIT, validator.getCheckDigit(), "Constructor 3 - check digit");
89
90
91 validator = new CodeValidator("^[0-9]*$", EAN13CheckDigit.EAN13_CHECK_DIGIT);
92 assertEquals(validator.getRegexValidator().toString(), "RegexValidator{^[0-9]*$}", "Constructor 4 - regex");
93 assertEquals(-1, validator.getMinLength(), "Constructor 4 - min length");
94 assertEquals(-1, validator.getMaxLength(), "Constructor 4 - max length");
95 assertEquals(EAN13CheckDigit.EAN13_CHECK_DIGIT, validator.getCheckDigit(), "Constructor 4 - check digit");
96
97
98 validator = new CodeValidator("^[0-9]*$", 13, EAN13CheckDigit.EAN13_CHECK_DIGIT);
99 assertEquals(validator.getRegexValidator().toString(), "RegexValidator{^[0-9]*$}", "Constructor 5 - regex");
100 assertEquals(13, validator.getMinLength(), "Constructor 5 - min length");
101 assertEquals(13, validator.getMaxLength(), "Constructor 5 - max length");
102 assertEquals(EAN13CheckDigit.EAN13_CHECK_DIGIT, validator.getCheckDigit(), "Constructor 5 - check digit");
103
104
105 validator = new CodeValidator("^[0-9]*$", 10, 20, EAN13CheckDigit.EAN13_CHECK_DIGIT);
106 assertEquals(validator.getRegexValidator().toString(), "RegexValidator{^[0-9]*$}", "Constructor 6 - regex");
107 assertEquals(10, validator.getMinLength(), "Constructor 6 - min length");
108 assertEquals(20, validator.getMaxLength(), "Constructor 6 - max length");
109 assertEquals(EAN13CheckDigit.EAN13_CHECK_DIGIT, validator.getCheckDigit(), "Constructor 6 - check digit");
110 }
111
112
113
114
115 @Test
116 public void testLength() {
117 CodeValidator validator = new CodeValidator((String) null, -1, -1, (CheckDigit) null);
118 final String length10 = "1234567890";
119 final String length11 = "12345678901";
120 final String length12 = "123456789012";
121 final String length20 = "12345678901234567890";
122 final String length21 = "123456789012345678901";
123 final String length22 = "1234567890123456789012";
124
125 assertEquals(-1, validator.getMinLength(), "No min");
126 assertEquals(-1, validator.getMaxLength(), "No max");
127
128 assertEquals(length10, validator.validate(length10), "No Length 10");
129 assertEquals(length11, validator.validate(length11), "No Length 11");
130 assertEquals(length12, validator.validate(length12), "No Length 12");
131 assertEquals(length20, validator.validate(length20), "No Length 20");
132 assertEquals(length21, validator.validate(length21), "No Length 21");
133 assertEquals(length22, validator.validate(length22), "No Length 22");
134
135 validator = new CodeValidator((String) null, 11, -1, (CheckDigit) null);
136 assertEquals(11, validator.getMinLength(), "Min 11 - min");
137 assertEquals(-1, validator.getMaxLength(), "Min 11 - max");
138 assertNull(validator.validate(length10), "Min 11 - 10");
139 assertEquals(length11, validator.validate(length11), "Min 11 - 11");
140 assertEquals(length12, validator.validate(length12), "Min 11 - 12");
141 assertEquals(length20, validator.validate(length20), "Min 11 - 20");
142 assertEquals(length21, validator.validate(length21), "Min 11 - 21");
143 assertEquals(length22, validator.validate(length22), "Min 11 - 22");
144
145 validator = new CodeValidator((String) null, -1, 21, (CheckDigit) null);
146 assertEquals(-1, validator.getMinLength(), "Max 21 - min");
147 assertEquals(21, validator.getMaxLength(), "Max 21 - max");
148 assertEquals(length10, validator.validate(length10), "Max 21 - 10");
149 assertEquals(length11, validator.validate(length11), "Max 21 - 11");
150 assertEquals(length12, validator.validate(length12), "Max 21 - 12");
151 assertEquals(length20, validator.validate(length20), "Max 21 - 20");
152 assertEquals(length21, validator.validate(length21), "Max 21 - 21");
153 assertNull(validator.validate(length22), "Max 21 - 22");
154
155 validator = new CodeValidator((String) null, 11, 21, (CheckDigit) null);
156 assertEquals(11, validator.getMinLength(), "Min 11 / Max 21 - min");
157 assertEquals(21, validator.getMaxLength(), "Min 11 / Max 21 - max");
158 assertNull(validator.validate(length10), "Min 11 / Max 21 - 10");
159 assertEquals(length11, validator.validate(length11), "Min 11 / Max 21 - 11");
160 assertEquals(length12, validator.validate(length12), "Min 11 / Max 21 - 12");
161 assertEquals(length20, validator.validate(length20), "Min 11 / Max 21 - 20");
162 assertEquals(length21, validator.validate(length21), "Min 11 / Max 21 - 21");
163 assertNull(validator.validate(length22), "Min 11 / Max 21 - 22");
164
165 validator = new CodeValidator((String) null, 11, 11, (CheckDigit) null);
166 assertEquals(11, validator.getMinLength(), "Exact 11 - min");
167 assertEquals(11, validator.getMaxLength(), "Exact 11 - max");
168 assertNull(validator.validate(length10), "Exact 11 - 10");
169 assertEquals(length11, validator.validate(length11), "Exact 11 - 11");
170 assertNull(validator.validate(length12), "Exact 11 - 12");
171 }
172
173
174
175
176 @Test
177 public void testNoInput() {
178 final CodeValidator validator = new CodeValidator((String) null, -1, -1, (CheckDigit) null);
179 assertNull(validator.validate(null), "Null");
180 assertNull(validator.validate(""), "Zero Length");
181 assertNull(validator.validate(" "), "Spaces");
182 assertEquals(validator.validate(" A "), "A", "Trimmed");
183 }
184
185
186
187
188 @Test
189 public void testRegex() {
190 CodeValidator validator = new CodeValidator((String) null, -1, -1, (CheckDigit) null);
191
192 final String value2 = "12";
193 final String value3 = "123";
194 final String value4 = "1234";
195 final String value5 = "12345";
196 final String invalid = "12a4";
197
198
199 assertNull(validator.getRegexValidator(), "No Regex");
200 assertEquals(value2, validator.validate(value2), "No Regex 2");
201 assertEquals(value3, validator.validate(value3), "No Regex 3");
202 assertEquals(value4, validator.validate(value4), "No Regex 4");
203 assertEquals(value5, validator.validate(value5), "No Regex 5");
204 assertEquals(invalid, validator.validate(invalid), "No Regex invalid");
205
206
207 String regex = "^([0-9]{3,4})$";
208 validator = new CodeValidator(regex, -1, -1, (CheckDigit) null);
209 assertNotNull(validator.getRegexValidator(), "No Regex");
210 assertNull(validator.validate(value2), "Regex 2");
211 assertEquals(value3, validator.validate(value3), "Regex 3");
212 assertEquals(value4, validator.validate(value4), "Regex 4");
213 assertNull(validator.validate(value5), "Regex 5");
214 assertNull(validator.validate(invalid), "Regex invalid");
215
216
217 regex = "^([0-9]{3})(?:[-\\s])([0-9]{3})$";
218 validator = new CodeValidator(new RegexValidator(regex), 6, (CheckDigit) null);
219 assertEquals(validator.validate("123-456"), "123456", "Reformat 123-456");
220 assertEquals(validator.validate("123 456"), "123456", "Reformat 123 456");
221 assertNull(validator.validate("123456"), "Reformat 123456");
222 assertNull(validator.validate("123.456"), "Reformat 123.456");
223
224 regex = "^(?:([0-9]{3})(?:[-\\s])([0-9]{3}))|([0-9]{6})$";
225 validator = new CodeValidator(new RegexValidator(regex), 6, (CheckDigit) null);
226 assertEquals(validator.getRegexValidator().toString(), "RegexValidator{" + regex + "}", "Reformat 2 Regex");
227 assertEquals(validator.validate("123-456"), "123456", "Reformat 2 123-456");
228 assertEquals(validator.validate("123 456"), "123456", "Reformat 2 123 456");
229 assertEquals(validator.validate("123456"), "123456", "Reformat 2 123456");
230
231 }
232
233 @Test
234 public void testValidator294Part1() {
235 CodeValidator validator = new CodeValidator((String) null, 0, -1, (CheckDigit) null);
236 assertNull(validator.validate(null), "Null");
237 validator = new CodeValidator((String) null, -1, 0, (CheckDigit) null);
238 assertNull(validator.validate(null), "Null");
239 }
240
241 @Test
242 public void testValidator294Part2() {
243 final CodeValidator validator = new CodeValidator((String) null, -1, 0, (CheckDigit) null);
244 assertNull(validator.validate(null), "Null");
245 }
246
247 }