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 java.util.regex.Pattern;
20 import junit.framework.TestCase;
21
22
23
24
25
26
27 public class ISBNValidatorTest extends TestCase {
28
29 private final String[] validISBN10Format = new String[] {
30 "1234567890",
31 "123456789X",
32 "12345-1234567-123456-X",
33 "12345 1234567 123456 X",
34 "1-2-3-4",
35 "1 2 3 4",
36 };
37
38 private final String[] invalidISBN10Format = new String[] {
39 "",
40 " ",
41 "1",
42 "123456789",
43 "12345678901",
44 "12345678X0",
45 "123456-1234567-123456-X",
46 "12345-12345678-123456-X",
47 "12345-1234567-1234567-X",
48 "12345-1234567-123456-X2",
49 "--1 930110 99 5",
50 "1 930110 99 5--",
51 "1 930110-99 5-",
52 "1.2.3.4",
53 "1=2=3=4",
54 "1_2_3_4",
55 "123456789Y",
56 "dsasdsadsa",
57 "I love sparrows!",
58 "068-556-98-45"
59 };
60
61 private final String[] validISBN13Format = new String[] {
62 "9781234567890",
63 "9791234567890",
64 "978-12345-1234567-123456-1",
65 "979-12345-1234567-123456-1",
66 "978 12345 1234567 123456 1",
67 "979 12345 1234567 123456 1",
68 "978-1-2-3-4",
69 "979-1-2-3-4",
70 "978 1 2 3 4",
71 "979 1 2 3 4",
72 };
73
74 private final String[] invalidISBN13Format = new String[] {
75 "",
76 " ",
77 "1",
78 "978123456789",
79 "97812345678901",
80 "978-123456-1234567-123456-1",
81 "978-12345-12345678-123456-1",
82 "978-12345-1234567-1234567-1",
83 "978-12345-1234567-123456-12",
84 "--978 1 930110 99 1",
85 "978 1 930110 99 1--",
86 "978 1 930110-99 1-",
87 "123-4-567890-12-8",
88 "978.1.2.3.4",
89 "978=1=2=3=4",
90 "978_1_2_3_4",
91 "978123456789X",
92 "978-0-201-63385-X",
93 "dsasdsadsadsa",
94 "I love sparrows!",
95 "979-1-234-567-89-6"
96 };
97
98
99
100
101
102 public ISBNValidatorTest(String name) {
103 super(name);
104 }
105
106
107
108
109 public void testValidISBN10Format() {
110 Pattern pattern = Pattern.compile(ISBNValidator.ISBN10_REGEX);
111 for (int i = 0; i < validISBN10Format.length; i++) {
112 assertTrue("Pattern[" + i + "]=" + validISBN10Format[i], pattern.matcher(validISBN10Format[i]).matches());
113 }
114 }
115
116
117
118
119 public void testInvalidISBN10Format() {
120 ISBNValidator validator = ISBNValidator.getInstance();
121 Pattern pattern = Pattern.compile(ISBNValidator.ISBN10_REGEX);
122 for (int i = 0; i < invalidISBN10Format.length; i++) {
123 assertFalse("Pattern[" + i + "]=" + invalidISBN10Format[i], pattern.matcher(invalidISBN10Format[i]).matches());
124 assertFalse("isValidISBN10[" + i + "]=" + invalidISBN10Format[i], validator.isValidISBN10(invalidISBN10Format[i]));
125 assertNull("validateISBN10[" + i + "]=" + invalidISBN10Format[i], validator.validateISBN10(invalidISBN10Format[i]));
126 }
127 }
128
129
130
131
132 public void testValidISBN13Format() {
133 Pattern pattern = Pattern.compile(ISBNValidator.ISBN13_REGEX);
134 for (int i = 0; i < validISBN13Format.length; i++) {
135 assertTrue("Pattern[" + i + "]=" + validISBN13Format[i], pattern.matcher(validISBN13Format[i]).matches());
136 }
137 }
138
139
140
141
142 public void testInvalidISBN13Format() {
143 Pattern pattern = Pattern.compile(ISBNValidator.ISBN13_REGEX);
144 ISBNValidator validator = ISBNValidator.getInstance();
145 for (int i = 0; i < invalidISBN13Format.length; i++) {
146 assertFalse("Pattern[" + i + "]=" + invalidISBN13Format[i], pattern.matcher(invalidISBN13Format[i]).matches());
147 assertFalse("isValidISBN13[" + i + "]=" + invalidISBN13Format[i], validator.isValidISBN13(invalidISBN13Format[i]));
148 assertNull("validateISBN13[" + i + "]=" + invalidISBN13Format[i], validator.validateISBN13(invalidISBN13Format[i]));
149 }
150 }
151
152
153
154
155 public void testIsValidISBN10() {
156 ISBNValidator validator = ISBNValidator.getInstance();
157 assertTrue("isValidISBN10-1", validator.isValidISBN10("1930110995"));
158 assertTrue("isValidISBN10-2", validator.isValidISBN10("1-930110-99-5"));
159 assertTrue("isValidISBN10-3", validator.isValidISBN10("1 930110 99 5"));
160 assertTrue("isValidISBN10-4", validator.isValidISBN10("020163385X"));
161 assertTrue("isValidISBN10-5", validator.isValidISBN10("0-201-63385-X"));
162 assertTrue("isValidISBN10-6", validator.isValidISBN10("0 201 63385 X"));
163
164 assertTrue("isValid-1", validator.isValid("1930110995"));
165 assertTrue("isValid-2", validator.isValid("1-930110-99-5"));
166 assertTrue("isValid-3", validator.isValid("1 930110 99 5"));
167 assertTrue("isValid-4", validator.isValid("020163385X"));
168 assertTrue("isValid-5", validator.isValid("0-201-63385-X"));
169 assertTrue("isValid-6", validator.isValid("0 201 63385 X"));
170 }
171
172
173
174
175 public void testIsValidISBN13() {
176 ISBNValidator validator = ISBNValidator.getInstance();
177 assertTrue("isValidISBN13-1", validator.isValidISBN13("9781930110991"));
178 assertTrue("isValidISBN13-2", validator.isValidISBN13("978-1-930110-99-1"));
179 assertTrue("isValidISBN13-3", validator.isValidISBN13("978 1 930110 99 1"));
180 assertTrue("isValidISBN13-4", validator.isValidISBN13("9780201633856"));
181 assertTrue("isValidISBN13-5", validator.isValidISBN13("978-0-201-63385-6"));
182 assertTrue("isValidISBN13-6", validator.isValidISBN13("978 0 201 63385 6"));
183
184 assertTrue("isValid-1", validator.isValid("9781930110991"));
185 assertTrue("isValid-2", validator.isValid("978-1-930110-99-1"));
186 assertTrue("isValid-3", validator.isValid("978 1 930110 99 1"));
187 assertTrue("isValid-4", validator.isValid("9780201633856"));
188 assertTrue("isValid-5", validator.isValid("978-0-201-63385-6"));
189 assertTrue("isValid-6", validator.isValid("978 0 201 63385 6"));
190 }
191
192
193
194
195 public void testValidateISBN10() {
196 ISBNValidator validator = ISBNValidator.getInstance(false);
197 assertEquals("validateISBN10-1", "1930110995", validator.validateISBN10("1930110995"));
198 assertEquals("validateISBN10-2", "1930110995", validator.validateISBN10("1-930110-99-5"));
199 assertEquals("validateISBN10-3", "1930110995", validator.validateISBN10("1 930110 99 5"));
200 assertEquals("validateISBN10-4", "020163385X", validator.validateISBN10("020163385X"));
201 assertEquals("validateISBN10-5", "020163385X", validator.validateISBN10("0-201-63385-X"));
202 assertEquals("validateISBN10-6", "020163385X", validator.validateISBN10("0 201 63385 X"));
203
204 assertEquals("validate-1", "1930110995", validator.validate("1930110995"));
205 assertEquals("validate-2", "1930110995", validator.validate("1-930110-99-5"));
206 assertEquals("validate-3", "1930110995", validator.validate("1 930110 99 5"));
207 assertEquals("validate-4", "020163385X", validator.validate("020163385X"));
208 assertEquals("validate-5", "020163385X", validator.validate("0-201-63385-X"));
209 assertEquals("validate-6", "020163385X", validator.validate("0 201 63385 X"));
210 }
211
212
213
214
215 public void testValidateISBN10Convert() {
216 ISBNValidator validator = ISBNValidator.getInstance();
217 assertEquals("validate-1", "9781930110991", validator.validate("1930110995"));
218 assertEquals("validate-2", "9781930110991", validator.validate("1-930110-99-5"));
219 assertEquals("validate-3", "9781930110991", validator.validate("1 930110 99 5"));
220 assertEquals("validate-4", "9780201633856", validator.validate("020163385X"));
221 assertEquals("validate-5", "9780201633856", validator.validate("0-201-63385-X"));
222 assertEquals("validate-6", "9780201633856", validator.validate("0 201 63385 X"));
223 }
224
225
226
227
228 public void testValidateISBN13() {
229 ISBNValidator validator = ISBNValidator.getInstance();
230 assertEquals("validateISBN13-1", "9781930110991", validator.validateISBN13("9781930110991"));
231 assertEquals("validateISBN13-2", "9781930110991", validator.validateISBN13("978-1-930110-99-1"));
232 assertEquals("validateISBN13-3", "9781930110991", validator.validateISBN13("978 1 930110 99 1"));
233 assertEquals("validateISBN13-4", "9780201633856", validator.validateISBN13("9780201633856"));
234 assertEquals("validateISBN13-5", "9780201633856", validator.validateISBN13("978-0-201-63385-6"));
235 assertEquals("validateISBN13-6", "9780201633856", validator.validateISBN13("978 0 201 63385 6"));
236
237 assertEquals("validate-1", "9781930110991", validator.validate("9781930110991"));
238 assertEquals("validate-2", "9781930110991", validator.validate("978-1-930110-99-1"));
239 assertEquals("validate-3", "9781930110991", validator.validate("978 1 930110 99 1"));
240 assertEquals("validate-4", "9780201633856", validator.validate("9780201633856"));
241 assertEquals("validate-5", "9780201633856", validator.validate("978-0-201-63385-6"));
242 assertEquals("validate-6", "9780201633856", validator.validate("978 0 201 63385 6"));
243 }
244
245
246
247
248 public void testNull() {
249 ISBNValidator validator = ISBNValidator.getInstance();
250 assertFalse("isValid", validator.isValid(null));
251 assertFalse("isValidISBN10", validator.isValidISBN10(null));
252 assertFalse("isValidISBN13", validator.isValidISBN13(null));
253 assertNull("validate", validator.validate(null));
254 assertNull("validateISBN10", validator.validateISBN10(null));
255 assertNull("validateISBN13", validator.validateISBN13(null));
256 assertNull("convertToISBN13", validator.convertToISBN13(null));
257 }
258
259
260
261
262 public void testInvalid() {
263 ISBNValidator validator = ISBNValidator.getInstance();
264 String baseCode = "193011099";
265 assertFalse("ISBN10-0", validator.isValid(baseCode + "0"));
266 assertFalse("ISBN10-1", validator.isValid(baseCode + "1"));
267 assertFalse("ISBN10-2", validator.isValid(baseCode + "2"));
268 assertFalse("ISBN10-3", validator.isValid(baseCode + "3"));
269 assertFalse("ISBN10-4", validator.isValid(baseCode + "4"));
270 assertTrue("ISBN10-5", validator.isValid(baseCode + "5"));
271 assertFalse("ISBN10-6", validator.isValid(baseCode + "6"));
272 assertFalse("ISBN10-7", validator.isValid(baseCode + "7"));
273 assertFalse("ISBN10-8", validator.isValid(baseCode + "8"));
274 assertFalse("ISBN10-9", validator.isValid(baseCode + "9"));
275 assertFalse("ISBN10-X", validator.isValid(baseCode + "X"));
276
277 baseCode = "978193011099";
278 assertFalse("ISBN13-0", validator.isValid(baseCode + "0"));
279 assertTrue("ISBN13-1", validator.isValid(baseCode + "1"));
280 assertFalse("ISBN13-2", validator.isValid(baseCode + "2"));
281 assertFalse("ISBN13-3", validator.isValid(baseCode + "3"));
282 assertFalse("ISBN13-4", validator.isValid(baseCode + "4"));
283 assertFalse("ISBN13-5", validator.isValid(baseCode + "5"));
284 assertFalse("ISBN13-6", validator.isValid(baseCode + "6"));
285 assertFalse("ISBN13-7", validator.isValid(baseCode + "7"));
286 assertFalse("ISBN13-8", validator.isValid(baseCode + "8"));
287 assertFalse("ISBN13-9", validator.isValid(baseCode + "9"));
288 }
289
290
291
292
293 public void testConversionErrors() {
294 ISBNValidator validator = ISBNValidator.getInstance();
295 String input = null;
296 try {
297 input = "123456789 ";
298 validator.convertToISBN13(input);
299 fail("Expected IllegalArgumentException for '" + input + "'");
300 } catch (IllegalArgumentException e) {
301
302 }
303 try {
304 input = "12345678901";
305 validator.convertToISBN13(input);
306 fail("Expected IllegalArgumentException for '" + input + "'");
307 } catch (IllegalArgumentException e) {
308
309 }
310 try {
311 input = "";
312 validator.convertToISBN13(input);
313 fail("Expected IllegalArgumentException for '" + input + "'");
314 } catch (IllegalArgumentException e) {
315
316 }
317 try {
318 input = "X234567890";
319 validator.convertToISBN13(input);
320 fail("Expected IllegalArgumentException for '" + input + "'");
321 } catch (IllegalArgumentException e) {
322
323 }
324 }
325
326 }