@@ -105,27 +105,62 @@ public void testGetValidCreditCard() {
105105 Validator instance = ESAPI .validator ();
106106 ValidationErrorList errors = new ValidationErrorList ();
107107
108+ // Validator.CreditCard=^(\\d{4}[- ]?){3}\\d{4}$
109+ // These have correct check digit
108110 assertTrue (instance .isValidCreditCard ("cctest1" , "1234 9876 0000 0008" , false ));
109- assertTrue (instance .isValidCreditCard ("cctest2" , "1234987600000008" , false ));
110- assertFalse (instance .isValidCreditCard ("cctest3" , "12349876000000081" , false ));
111- assertFalse (instance .isValidCreditCard ("cctest4" , "4417 1234 5678 9112" , false ));
111+ assertTrue (instance .isValidCreditCard ("cctest2" , "1234-9876-0000-0008" , false ));
112+ assertTrue (instance .isValidCreditCard ("cctest3" , "1234987600000008" , false ));
113+ assertTrue (instance .isValidCreditCard ("cctest4" , "12349876 00000008" , false ));
114+ assertTrue (instance .isValidCreditCard ("cctest5" , "12349876-00000008" , false ));
115+ assertTrue (instance .isValidCreditCard ("cctest6" , "1234 98760000 0008" , false ));
116+ assertTrue (instance .isValidCreditCard ("cctest7" , "1234-98760000-0008" , false ));
117+
118+ // A curve ball... use a tab and non-breaking space
119+ assertFalse (instance .isValidCreditCard ("cctest8" , "1234\t 9876\t 0000\t 0008" , false ));
120+ assertFalse (instance .isValidCreditCard ("cctest9" , "1234\u00A0 9876\u00A0 0000\u00A0 0008" , false ));
121+
122+ // 1234987600000008 dec is 0x46336F5333408 hex
123+ assertFalse (instance .isValidCreditCard ("cctest10" , "46336F5333408" , false ));
124+ assertFalse (instance .isValidCreditCard ("cctest11" , "0x46336F5333408" , false ));
125+
126+ // And other negative tests, like extra digits, wrong separators and bad checksum
127+ assertFalse (instance .isValidCreditCard ("cctest12" , "1234*9876*0000*0008" , false ));
128+ assertFalse (instance .isValidCreditCard ("cctest13" , "1234/9876/0000/0008" , false ));
129+ assertFalse (instance .isValidCreditCard ("cctest14" , "12349876000000081" , false ));
130+ assertFalse (instance .isValidCreditCard ("cctest15" , "4417 1234 5678 9112" , false ));
112131
113- instance .getValidCreditCard ("cctest5" , "1234 9876 0000 0008" , false , errors );
132+ try {
133+ // Verify canonicalization
134+ assertEquals ("1234987600000008" , instance .getValidCreditCard ("cctest16" , "1234987600000008" , false ));
135+ assertEquals ("1234987600000008" , instance .getValidCreditCard ("cctest17" , "1234 9876 0000 0008" , false ));
136+ assertEquals ("1234987600000008" , instance .getValidCreditCard ("cctest18" , "1234-9876-0000-0008" , false ));
137+ assertEquals ("1234987600000008" , instance .getValidCreditCard ("cctest19" , "12349876 00000008" , false ));
138+ assertEquals ("1234987600000008" , instance .getValidCreditCard ("cctest20" , "12349876-00000008" , false ));
139+ assertEquals ("1234987600000008" , instance .getValidCreditCard ("cctest21" , "1234 98760000 0008" , false ));
140+ assertEquals ("1234987600000008" , instance .getValidCreditCard ("cctest22" , "1234-98760000-0008" , false ));
141+ }
142+ catch (ValidationException e ) {
143+ fail ("Verify canonicalization" );
144+ }
145+
146+ // Check error lists
147+ instance .getValidCreditCard ("cctest23" , "1234 9876 0000 0008" , false , errors );
114148 assertEquals (0 , errors .size ());
115- instance .getValidCreditCard ("cctest6 " , "1234987600000008" , false , errors );
149+ instance .getValidCreditCard ("cctest24 " , "1234987600000008" , false , errors );
116150 assertEquals (0 , errors .size ());
117- instance .getValidCreditCard ("cctest7 " , "12349876000000081" , false , errors );
151+ instance .getValidCreditCard ("cctest25 " , "12349876000000081" , false , errors );
118152 assertEquals (1 , errors .size ());
119- instance .getValidCreditCard ("cctest8 " , "4417 1234 5678 9112" , false , errors );
153+ instance .getValidCreditCard ("cctest26 " , "4417 1234 5678 9112" , false , errors );
120154 assertEquals (2 , errors .size ());
121155
122- assertTrue (instance .isValidCreditCard ("cctest1" , "1234 9876 0000 0008" , false , errors ));
156+ // Check error lists
157+ assertTrue (instance .isValidCreditCard ("cctest27" , "1234 9876 0000 0008" , false , errors ));
123158 assertEquals (2 , errors .size ());
124- assertTrue (instance .isValidCreditCard ("cctest2 " , "1234987600000008" , false , errors ));
159+ assertTrue (instance .isValidCreditCard ("cctest28 " , "1234987600000008" , false , errors ));
125160 assertEquals (2 , errors .size ());
126- assertFalse (instance .isValidCreditCard ("cctest3 " , "12349876000000081" , false , errors ));
161+ assertFalse (instance .isValidCreditCard ("cctest29 " , "12349876000000081" , false , errors ));
127162 assertEquals (3 , errors .size ());
128- assertFalse (instance .isValidCreditCard ("cctest4 " , "4417 1234 5678 9112" , false , errors ));
163+ assertFalse (instance .isValidCreditCard ("cctest30 " , "4417 1234 5678 9112" , false , errors ));
129164 assertEquals (4 , errors .size ());
130165 }
131166
0 commit comments