Chromium Code Reviews| 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* value; | |
|
please use gerrit instead
2017/02/07 21:55:22
const char* const
(First const says don't change
Mathieu
2017/02/08 02:03:25
Done.
| |
| 168 ServerFieldType field_type; | |
|
please use gerrit instead
2017/02/07 21:55:22
const
Mathieu
2017/02/08 02:03:25
Done.
| |
| 169 bool expected_valid; | |
|
please use gerrit instead
2017/02/07 21:55:22
const
Mathieu
2017/02/08 02:03:25
Done.
| |
| 170 int expected_error_id; | |
|
please use gerrit instead
2017/02/07 21:55:22
const
Mathieu
2017/02/08 02:03:25
Done.
| |
| 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_AUTOFILL_VALIDATION_INVALID_CREDIT_CARD_EXPIRED), | |
| 202 ValidationCase( | |
| 203 "MM/2012", | |
| 204 CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, | |
| 205 false, | |
| 206 IDS_AUTOFILL_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_DATE), | |
| 207 ValidationCase( | |
| 208 "05/12", | |
| 209 CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, | |
| 210 false, | |
| 211 IDS_AUTOFILL_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_DATE), | |
| 212 ValidationCase( | |
| 213 "05/45", | |
| 214 CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, | |
| 215 false, | |
| 216 IDS_AUTOFILL_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_DATE), | |
| 217 ValidationCase( | |
| 218 "05/1987", | |
| 219 CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, | |
| 220 false, | |
| 221 IDS_AUTOFILL_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_DATE), | |
| 222 | |
| 223 ValidationCase("05/87", CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, true, 0), | |
| 224 ValidationCase("05-87", CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, true, 0), | |
| 225 ValidationCase("0587", CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, true, 0), | |
| 226 ValidationCase("05|87", CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, true, 0), | |
| 227 ValidationCase( | |
| 228 "05/1987", | |
| 229 CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, | |
| 230 false, | |
| 231 IDS_AUTOFILL_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_DATE), | |
| 232 ValidationCase("05/12", | |
| 233 CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, | |
| 234 false, | |
| 235 IDS_AUTOFILL_VALIDATION_INVALID_CREDIT_CARD_EXPIRED))); | |
| 236 | |
| 237 INSTANTIATE_TEST_CASE_P( | |
| 238 CreditCardNumber, | |
| 239 AutofillTypeValidationTest, | |
| 240 testing::Values( | |
| 241 ValidationCase(kValidNumbers[0], CREDIT_CARD_NUMBER, true, 0), | |
| 242 ValidationCase(kValidNumbers[1], CREDIT_CARD_NUMBER, true, 0), | |
| 243 ValidationCase(kValidNumbers[2], CREDIT_CARD_NUMBER, true, 0), | |
| 244 ValidationCase(kValidNumbers[3], CREDIT_CARD_NUMBER, true, 0), | |
| 245 ValidationCase(kValidNumbers[4], CREDIT_CARD_NUMBER, true, 0), | |
| 246 ValidationCase(kValidNumbers[5], CREDIT_CARD_NUMBER, true, 0), | |
| 247 ValidationCase(kValidNumbers[6], CREDIT_CARD_NUMBER, true, 0), | |
| 248 ValidationCase(kValidNumbers[7], CREDIT_CARD_NUMBER, true, 0), | |
| 249 ValidationCase(kValidNumbers[8], CREDIT_CARD_NUMBER, true, 0), | |
| 250 ValidationCase(kValidNumbers[9], CREDIT_CARD_NUMBER, true, 0), | |
| 251 ValidationCase(kValidNumbers[10], CREDIT_CARD_NUMBER, true, 0), | |
| 252 ValidationCase(kValidNumbers[11], CREDIT_CARD_NUMBER, true, 0), | |
| 253 ValidationCase(kValidNumbers[12], CREDIT_CARD_NUMBER, true, 0), | |
| 254 ValidationCase(kValidNumbers[13], CREDIT_CARD_NUMBER, true, 0), | |
| 255 ValidationCase(kValidNumbers[14], CREDIT_CARD_NUMBER, true, 0), | |
| 256 ValidationCase(kValidNumbers[15], CREDIT_CARD_NUMBER, true, 0), | |
| 257 ValidationCase(kValidNumbers[16], CREDIT_CARD_NUMBER, true, 0), | |
| 258 ValidationCase(kValidNumbers[17], CREDIT_CARD_NUMBER, true, 0), | |
| 259 | |
| 260 ValidationCase(kInvalidNumbers[0], | |
| 261 CREDIT_CARD_NUMBER, | |
| 262 false, | |
| 263 IDS_AUTOFILL_VALIDATION_INVALID_CREDIT_CARD_NUMBER), | |
| 264 ValidationCase(kInvalidNumbers[1], | |
| 265 CREDIT_CARD_NUMBER, | |
| 266 false, | |
| 267 IDS_AUTOFILL_VALIDATION_INVALID_CREDIT_CARD_NUMBER), | |
| 268 ValidationCase(kInvalidNumbers[2], | |
| 269 CREDIT_CARD_NUMBER, | |
| 270 false, | |
| 271 IDS_AUTOFILL_VALIDATION_INVALID_CREDIT_CARD_NUMBER), | |
| 272 ValidationCase(kInvalidNumbers[3], | |
| 273 CREDIT_CARD_NUMBER, | |
| 274 false, | |
| 275 IDS_AUTOFILL_VALIDATION_INVALID_CREDIT_CARD_NUMBER))); | |
| 276 | |
| 277 INSTANTIATE_TEST_CASE_P( | |
| 278 CreditCardMonth, | |
| 279 AutofillTypeValidationTest, | |
| 280 testing::Values( | |
| 281 ValidationCase("01", CREDIT_CARD_EXP_MONTH, true, 0), | |
| 282 ValidationCase("1", CREDIT_CARD_EXP_MONTH, true, 0), | |
| 283 ValidationCase("12", CREDIT_CARD_EXP_MONTH, true, 0), | |
| 284 ValidationCase( | |
| 285 "0", | |
| 286 CREDIT_CARD_EXP_MONTH, | |
| 287 false, | |
| 288 IDS_AUTOFILL_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_MONTH), | |
| 289 ValidationCase( | |
| 290 "-1", | |
| 291 CREDIT_CARD_EXP_MONTH, | |
| 292 false, | |
| 293 IDS_AUTOFILL_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_MONTH), | |
| 294 ValidationCase( | |
| 295 "13", | |
| 296 CREDIT_CARD_EXP_MONTH, | |
| 297 false, | |
| 298 IDS_AUTOFILL_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_MONTH))); | |
| 299 | |
| 300 INSTANTIATE_TEST_CASE_P( | |
| 301 CreditCardYear, | |
| 302 AutofillTypeValidationTest, | |
| 303 testing::Values( | |
| 304 /* 2-digit year */ | |
| 305 ValidationCase("87", CREDIT_CARD_EXP_2_DIGIT_YEAR, true, 0), | |
| 306 // These are considered expired in the context of this millenium. | |
| 307 ValidationCase("02", | |
| 308 CREDIT_CARD_EXP_2_DIGIT_YEAR, | |
| 309 false, | |
| 310 IDS_AUTOFILL_VALIDATION_INVALID_CREDIT_CARD_EXPIRED), | |
| 311 ValidationCase("15", | |
| 312 CREDIT_CARD_EXP_2_DIGIT_YEAR, | |
| 313 false, | |
| 314 IDS_AUTOFILL_VALIDATION_INVALID_CREDIT_CARD_EXPIRED), | |
| 315 // Invalid formats. | |
| 316 ValidationCase( | |
| 317 "1", | |
| 318 CREDIT_CARD_EXP_2_DIGIT_YEAR, | |
| 319 false, | |
| 320 IDS_AUTOFILL_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_YEAR), | |
| 321 ValidationCase( | |
| 322 "123", | |
| 323 CREDIT_CARD_EXP_2_DIGIT_YEAR, | |
| 324 false, | |
| 325 IDS_AUTOFILL_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_YEAR), | |
| 326 ValidationCase( | |
| 327 "2087", | |
| 328 CREDIT_CARD_EXP_2_DIGIT_YEAR, | |
| 329 false, | |
| 330 IDS_AUTOFILL_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_YEAR), | |
| 331 | |
| 332 /* 4-digit year */ | |
| 333 ValidationCase("2087", CREDIT_CARD_EXP_4_DIGIT_YEAR, true, 0), | |
| 334 // Expired. | |
| 335 ValidationCase("2000", | |
| 336 CREDIT_CARD_EXP_4_DIGIT_YEAR, | |
| 337 false, | |
| 338 IDS_AUTOFILL_VALIDATION_INVALID_CREDIT_CARD_EXPIRED), | |
| 339 ValidationCase("2015", | |
| 340 CREDIT_CARD_EXP_4_DIGIT_YEAR, | |
| 341 false, | |
| 342 IDS_AUTOFILL_VALIDATION_INVALID_CREDIT_CARD_EXPIRED), | |
| 343 // Invalid formats. | |
| 344 ValidationCase( | |
| 345 "00", | |
| 346 CREDIT_CARD_EXP_4_DIGIT_YEAR, | |
| 347 false, | |
| 348 IDS_AUTOFILL_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_YEAR), | |
| 349 ValidationCase( | |
| 350 "123", | |
| 351 CREDIT_CARD_EXP_4_DIGIT_YEAR, | |
| 352 false, | |
| 353 IDS_AUTOFILL_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_YEAR), | |
| 354 ValidationCase( | |
| 355 "87", | |
| 356 CREDIT_CARD_EXP_4_DIGIT_YEAR, | |
| 357 false, | |
| 358 IDS_AUTOFILL_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_YEAR))); | |
| 359 | |
| 151 } // namespace autofill | 360 } // namespace autofill |
| OLD | NEW |