1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.validator;
18
19 import junit.framework.TestCase;
20
21 /***
22 * Test the CreditCardValidator class.
23 *
24 * @version $Revision: 478334 $ $Date: 2006-11-22 21:31:54 +0000 (Wed, 22 Nov 2006) $
25 */
26 public class CreditCardValidatorTest extends TestCase {
27
28 private static final String VALID_VISA = "4417123456789113";
29 private static final String VALID_SHORT_VISA = "4222222222222";
30 private static final String VALID_AMEX = "378282246310005";
31 private static final String VALID_MASTERCARD = "5105105105105100";
32 private static final String VALID_DISCOVER = "6011000990139424";
33 private static final String VALID_DINERS = "30569309025904";
34
35 /***
36 * Constructor for CreditCardValidatorTest.
37 */
38 public CreditCardValidatorTest(String name) {
39 super(name);
40 }
41
42 public void testIsValid() {
43 CreditCardValidator ccv = new CreditCardValidator();
44
45 assertFalse(ccv.isValid(null));
46 assertFalse(ccv.isValid(""));
47 assertFalse(ccv.isValid("123456789012"));
48 assertFalse(ccv.isValid("12345678901234567890"));
49 assertFalse(ccv.isValid("4417123456789112"));
50 assertFalse(ccv.isValid("4417q23456w89113"));
51 assertTrue(ccv.isValid(VALID_VISA));
52 assertTrue(ccv.isValid(VALID_SHORT_VISA));
53 assertTrue(ccv.isValid(VALID_AMEX));
54 assertTrue(ccv.isValid(VALID_MASTERCARD));
55 assertTrue(ccv.isValid(VALID_DISCOVER));
56
57
58 ccv = new CreditCardValidator(CreditCardValidator.AMEX);
59 assertFalse(ccv.isValid("4417123456789113"));
60 }
61
62 public void testAddAllowedCardType() {
63 CreditCardValidator ccv = new CreditCardValidator(CreditCardValidator.NONE);
64
65 assertFalse(ccv.isValid(VALID_VISA));
66 assertFalse(ccv.isValid(VALID_AMEX));
67 assertFalse(ccv.isValid(VALID_MASTERCARD));
68 assertFalse(ccv.isValid(VALID_DISCOVER));
69
70
71 ccv.addAllowedCardType(new DinersClub());
72 assertTrue(ccv.isValid(VALID_DINERS));
73 }
74
75 /***
76 * Test a custom implementation of CreditCardType.
77 */
78 private class DinersClub implements CreditCardValidator.CreditCardType {
79 private static final String PREFIX = "300,301,302,303,304,305,";
80 public boolean matches(String card) {
81 String prefix = card.substring(0, 3) + ",";
82 return ((PREFIX.indexOf(prefix) != -1) && (card.length() == 14));
83 }
84 }
85
86 }