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