| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/autofill/core/browser/validation.h" |
| 6 |
| 5 #include <stddef.h> | 7 #include <stddef.h> |
| 6 | 8 |
| 7 #include "base/macros.h" | 9 #include "base/macros.h" |
| 10 #include "base/strings/string16.h" |
| 8 #include "base/strings/utf_string_conversions.h" | 11 #include "base/strings/utf_string_conversions.h" |
| 9 #include "base/time/time.h" | 12 #include "base/time/time.h" |
| 10 #include "components/autofill/core/browser/credit_card.h" | 13 #include "components/autofill/core/browser/credit_card.h" |
| 11 #include "components/autofill/core/browser/validation.h" | 14 #include "components/autofill/core/browser/field_types.h" |
| 15 #include "grit/components_strings.h" |
| 12 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
| 17 #include "ui/base/l10n/l10n_util.h" |
| 13 | 18 |
| 14 using base::ASCIIToUTF16; | 19 using base::ASCIIToUTF16; |
| 15 | 20 |
| 16 namespace autofill { | 21 namespace autofill { |
| 17 namespace { | 22 namespace { |
| 18 | 23 |
| 19 struct ExpirationDate { | 24 struct ExpirationDate { |
| 20 const char* year; | 25 const char* year; |
| 21 const char* month; | 26 const char* month; |
| 22 }; | 27 }; |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 141 for (const char* valid_email : kValidEmailAddress) { | 146 for (const char* valid_email : kValidEmailAddress) { |
| 142 SCOPED_TRACE(valid_email); | 147 SCOPED_TRACE(valid_email); |
| 143 EXPECT_TRUE(IsValidEmailAddress(ASCIIToUTF16(valid_email))); | 148 EXPECT_TRUE(IsValidEmailAddress(ASCIIToUTF16(valid_email))); |
| 144 } | 149 } |
| 145 for (const char* invalid_email : kInvalidEmailAddress) { | 150 for (const char* invalid_email : kInvalidEmailAddress) { |
| 146 SCOPED_TRACE(invalid_email); | 151 SCOPED_TRACE(invalid_email); |
| 147 EXPECT_FALSE(IsValidEmailAddress(ASCIIToUTF16(invalid_email))); | 152 EXPECT_FALSE(IsValidEmailAddress(ASCIIToUTF16(invalid_email))); |
| 148 } | 153 } |
| 149 } | 154 } |
| 150 | 155 |
| 156 struct ValidationCase { |
| 157 ValidationCase(const char* value, |
| 158 ServerFieldType field_type, |
| 159 bool expected_valid, |
| 160 int expected_error_id) |
| 161 : value(value), |
| 162 field_type(field_type), |
| 163 expected_valid(expected_valid), |
| 164 expected_error_id(expected_error_id) {} |
| 165 ~ValidationCase() {} |
| 166 |
| 167 const char* const value; |
| 168 const ServerFieldType field_type; |
| 169 const bool expected_valid; |
| 170 const int expected_error_id; |
| 171 }; |
| 172 |
| 173 class AutofillTypeValidationTest |
| 174 : public testing::TestWithParam<ValidationCase> {}; |
| 175 |
| 176 TEST_P(AutofillTypeValidationTest, IsValidForType) { |
| 177 base::string16 error_message; |
| 178 EXPECT_EQ(GetParam().expected_valid, |
| 179 IsValidForType(ASCIIToUTF16(GetParam().value), |
| 180 GetParam().field_type, &error_message)) |
| 181 << "Failed to validate " << GetParam().value << " (type " |
| 182 << GetParam().field_type << ")"; |
| 183 if (!GetParam().expected_valid) { |
| 184 EXPECT_EQ(l10n_util::GetStringUTF16(GetParam().expected_error_id), |
| 185 error_message); |
| 186 } |
| 187 } |
| 188 |
| 189 INSTANTIATE_TEST_CASE_P( |
| 190 CreditCardExpDate, |
| 191 AutofillTypeValidationTest, |
| 192 testing::Values( |
| 193 ValidationCase("05/2087", CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, true, 0), |
| 194 ValidationCase("05-2087", CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, true, 0), |
| 195 ValidationCase("052087", CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, true, 0), |
| 196 ValidationCase("05|2087", CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, true, 0), |
| 197 |
| 198 ValidationCase("05/2012", |
| 199 CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, |
| 200 false, |
| 201 IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRED), |
| 202 ValidationCase("MM/2012", |
| 203 CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, |
| 204 false, |
| 205 IDS_PAYMENTS_CARD_EXPIRATION_INVALID_VALIDATION_MESSAGE), |
| 206 ValidationCase("05/12", |
| 207 CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, |
| 208 false, |
| 209 IDS_PAYMENTS_CARD_EXPIRATION_INVALID_VALIDATION_MESSAGE), |
| 210 ValidationCase("05/45", |
| 211 CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, |
| 212 false, |
| 213 IDS_PAYMENTS_CARD_EXPIRATION_INVALID_VALIDATION_MESSAGE), |
| 214 ValidationCase("05/1987", |
| 215 CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, |
| 216 false, |
| 217 IDS_PAYMENTS_CARD_EXPIRATION_INVALID_VALIDATION_MESSAGE), |
| 218 |
| 219 ValidationCase("05/87", CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, true, 0), |
| 220 ValidationCase("05-87", CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, true, 0), |
| 221 ValidationCase("0587", CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, true, 0), |
| 222 ValidationCase("05|87", CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, true, 0), |
| 223 ValidationCase("05/1987", |
| 224 CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, |
| 225 false, |
| 226 IDS_PAYMENTS_CARD_EXPIRATION_INVALID_VALIDATION_MESSAGE), |
| 227 ValidationCase("05/12", |
| 228 CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, |
| 229 false, |
| 230 IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRED))); |
| 231 |
| 232 INSTANTIATE_TEST_CASE_P( |
| 233 CreditCardNumber, |
| 234 AutofillTypeValidationTest, |
| 235 testing::Values( |
| 236 ValidationCase(kValidNumbers[0], CREDIT_CARD_NUMBER, true, 0), |
| 237 ValidationCase(kValidNumbers[1], CREDIT_CARD_NUMBER, true, 0), |
| 238 ValidationCase(kValidNumbers[2], CREDIT_CARD_NUMBER, true, 0), |
| 239 ValidationCase(kValidNumbers[3], CREDIT_CARD_NUMBER, true, 0), |
| 240 ValidationCase(kValidNumbers[4], CREDIT_CARD_NUMBER, true, 0), |
| 241 ValidationCase(kValidNumbers[5], CREDIT_CARD_NUMBER, true, 0), |
| 242 ValidationCase(kValidNumbers[6], CREDIT_CARD_NUMBER, true, 0), |
| 243 ValidationCase(kValidNumbers[7], CREDIT_CARD_NUMBER, true, 0), |
| 244 ValidationCase(kValidNumbers[8], CREDIT_CARD_NUMBER, true, 0), |
| 245 ValidationCase(kValidNumbers[9], CREDIT_CARD_NUMBER, true, 0), |
| 246 ValidationCase(kValidNumbers[10], CREDIT_CARD_NUMBER, true, 0), |
| 247 ValidationCase(kValidNumbers[11], CREDIT_CARD_NUMBER, true, 0), |
| 248 ValidationCase(kValidNumbers[12], CREDIT_CARD_NUMBER, true, 0), |
| 249 ValidationCase(kValidNumbers[13], CREDIT_CARD_NUMBER, true, 0), |
| 250 ValidationCase(kValidNumbers[14], CREDIT_CARD_NUMBER, true, 0), |
| 251 ValidationCase(kValidNumbers[15], CREDIT_CARD_NUMBER, true, 0), |
| 252 ValidationCase(kValidNumbers[16], CREDIT_CARD_NUMBER, true, 0), |
| 253 ValidationCase(kValidNumbers[17], CREDIT_CARD_NUMBER, true, 0), |
| 254 |
| 255 ValidationCase(kInvalidNumbers[0], |
| 256 CREDIT_CARD_NUMBER, |
| 257 false, |
| 258 IDS_PAYMENTS_CARD_NUMBER_INVALID), |
| 259 ValidationCase(kInvalidNumbers[1], |
| 260 CREDIT_CARD_NUMBER, |
| 261 false, |
| 262 IDS_PAYMENTS_CARD_NUMBER_INVALID), |
| 263 ValidationCase(kInvalidNumbers[2], |
| 264 CREDIT_CARD_NUMBER, |
| 265 false, |
| 266 IDS_PAYMENTS_CARD_NUMBER_INVALID), |
| 267 ValidationCase(kInvalidNumbers[3], |
| 268 CREDIT_CARD_NUMBER, |
| 269 false, |
| 270 IDS_PAYMENTS_CARD_NUMBER_INVALID))); |
| 271 |
| 272 INSTANTIATE_TEST_CASE_P( |
| 273 CreditCardMonth, |
| 274 AutofillTypeValidationTest, |
| 275 testing::Values( |
| 276 ValidationCase("01", CREDIT_CARD_EXP_MONTH, true, 0), |
| 277 ValidationCase("1", CREDIT_CARD_EXP_MONTH, true, 0), |
| 278 ValidationCase("12", CREDIT_CARD_EXP_MONTH, true, 0), |
| 279 ValidationCase( |
| 280 "0", |
| 281 CREDIT_CARD_EXP_MONTH, |
| 282 false, |
| 283 IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_MONTH), |
| 284 ValidationCase( |
| 285 "-1", |
| 286 CREDIT_CARD_EXP_MONTH, |
| 287 false, |
| 288 IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_MONTH), |
| 289 ValidationCase( |
| 290 "13", |
| 291 CREDIT_CARD_EXP_MONTH, |
| 292 false, |
| 293 IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_MONTH))); |
| 294 |
| 295 INSTANTIATE_TEST_CASE_P( |
| 296 CreditCardYear, |
| 297 AutofillTypeValidationTest, |
| 298 testing::Values( |
| 299 /* 2-digit year */ |
| 300 ValidationCase("87", CREDIT_CARD_EXP_2_DIGIT_YEAR, true, 0), |
| 301 // These are considered expired in the context of this millenium. |
| 302 ValidationCase("02", |
| 303 CREDIT_CARD_EXP_2_DIGIT_YEAR, |
| 304 false, |
| 305 IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRED), |
| 306 ValidationCase("15", |
| 307 CREDIT_CARD_EXP_2_DIGIT_YEAR, |
| 308 false, |
| 309 IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRED), |
| 310 // Invalid formats. |
| 311 ValidationCase( |
| 312 "1", |
| 313 CREDIT_CARD_EXP_2_DIGIT_YEAR, |
| 314 false, |
| 315 IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_YEAR), |
| 316 ValidationCase( |
| 317 "123", |
| 318 CREDIT_CARD_EXP_2_DIGIT_YEAR, |
| 319 false, |
| 320 IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_YEAR), |
| 321 ValidationCase( |
| 322 "2087", |
| 323 CREDIT_CARD_EXP_2_DIGIT_YEAR, |
| 324 false, |
| 325 IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_YEAR), |
| 326 |
| 327 /* 4-digit year */ |
| 328 ValidationCase("2087", CREDIT_CARD_EXP_4_DIGIT_YEAR, true, 0), |
| 329 // Expired. |
| 330 ValidationCase("2000", |
| 331 CREDIT_CARD_EXP_4_DIGIT_YEAR, |
| 332 false, |
| 333 IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRED), |
| 334 ValidationCase("2015", |
| 335 CREDIT_CARD_EXP_4_DIGIT_YEAR, |
| 336 false, |
| 337 IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRED), |
| 338 // Invalid formats. |
| 339 ValidationCase( |
| 340 "00", |
| 341 CREDIT_CARD_EXP_4_DIGIT_YEAR, |
| 342 false, |
| 343 IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_YEAR), |
| 344 ValidationCase( |
| 345 "123", |
| 346 CREDIT_CARD_EXP_4_DIGIT_YEAR, |
| 347 false, |
| 348 IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_YEAR), |
| 349 ValidationCase( |
| 350 "87", |
| 351 CREDIT_CARD_EXP_4_DIGIT_YEAR, |
| 352 false, |
| 353 IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_YEAR))); |
| 354 |
| 151 } // namespace autofill | 355 } // namespace autofill |
| OLD | NEW |