| 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 <stddef.h> | 5 #include <stddef.h> |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 3180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3191 } | 3191 } |
| 3192 | 3192 |
| 3193 // Tests that DeterminePossibleFieldTypesForUpload makes accurate matches. | 3193 // Tests that DeterminePossibleFieldTypesForUpload makes accurate matches. |
| 3194 TEST_F(AutofillManagerTest, DeterminePossibleFieldTypesForUpload) { | 3194 TEST_F(AutofillManagerTest, DeterminePossibleFieldTypesForUpload) { |
| 3195 // Set up the test profiles. | 3195 // Set up the test profiles. |
| 3196 std::vector<AutofillProfile> profiles; | 3196 std::vector<AutofillProfile> profiles; |
| 3197 AutofillProfile profile; | 3197 AutofillProfile profile; |
| 3198 test::SetProfileInfo(&profile, "Elvis", "Aaron", "Presley", | 3198 test::SetProfileInfo(&profile, "Elvis", "Aaron", "Presley", |
| 3199 "theking@gmail.com", "RCA", "3734 Elvis Presley Blvd.", | 3199 "theking@gmail.com", "RCA", "3734 Elvis Presley Blvd.", |
| 3200 "Apt. 10", "Memphis", "Tennessee", "38116", "US", | 3200 "Apt. 10", "Memphis", "Tennessee", "38116", "US", |
| 3201 "12345678901"); | 3201 "+1 (234) 567-8901"); |
| 3202 profile.set_guid("00000000-0000-0000-0000-000000000001"); | 3202 profile.set_guid("00000000-0000-0000-0000-000000000001"); |
| 3203 profiles.push_back(profile); | 3203 profiles.push_back(profile); |
| 3204 test::SetProfileInfo(&profile, "Charles", "", "Holley", "buddy@gmail.com", | 3204 test::SetProfileInfo(&profile, "Charles", "", "Holley", "buddy@gmail.com", |
| 3205 "Decca", "123 Apple St.", "unit 6", "Lubbock", "Texas", | 3205 "Decca", "123 Apple St.", "unit 6", "Lubbock", "Texas", |
| 3206 "79401", "US", "23456789012"); | 3206 "79401", "US", "5142821292"); |
| 3207 profile.set_guid("00000000-0000-0000-0000-000000000002"); | 3207 profile.set_guid("00000000-0000-0000-0000-000000000002"); |
| 3208 profiles.push_back(profile); | 3208 profiles.push_back(profile); |
| 3209 test::SetProfileInfo(&profile, "Charles", "", "Baudelaire", |
| 3210 "lesfleursdumal@gmail.com", "", "108 Rue Saint-Lazare", |
| 3211 "Apt. 10", "Paris", "Ile de France", "75008", "FR", |
| 3212 "+33 2 49 19 70 70"); |
| 3213 profile.set_guid("00000000-0000-0000-0000-000000000001"); |
| 3214 profiles.push_back(profile); |
| 3209 | 3215 |
| 3210 // Set up the test credit cards. | 3216 // Set up the test credit cards. |
| 3211 std::vector<CreditCard> credit_cards; | 3217 std::vector<CreditCard> credit_cards; |
| 3212 CreditCard credit_card; | 3218 CreditCard credit_card; |
| 3213 test::SetCreditCardInfo(&credit_card, "Elvis Presley", "4234-5678-9012-3456", | 3219 test::SetCreditCardInfo(&credit_card, "Elvis Presley", "4234-5678-9012-3456", |
| 3214 "04", "2012"); | 3220 "04", "2012"); |
| 3215 credit_card.set_guid("00000000-0000-0000-0000-000000000003"); | 3221 credit_card.set_guid("00000000-0000-0000-0000-000000000003"); |
| 3216 credit_cards.push_back(credit_card); | 3222 credit_cards.push_back(credit_card); |
| 3217 | 3223 |
| 3218 typedef struct { | 3224 typedef struct { |
| 3219 std::string input_value; // The value to input in the field. | 3225 std::string input_value; // The value to input in the field. |
| 3220 ServerFieldType field_type; // The expected field type to be determined. | 3226 ServerFieldType field_type; // The expected field type to be determined. |
| 3221 } TestCase; | 3227 } TestCase; |
| 3222 | 3228 |
| 3223 TestCase test_cases[] = { | 3229 TestCase test_cases[] = { |
| 3224 // Profile fields matches. | 3230 // Profile fields matches. |
| 3225 {"Elvis", NAME_FIRST}, | 3231 {"Elvis", NAME_FIRST}, |
| 3226 {"Aaron", NAME_MIDDLE}, | 3232 {"Aaron", NAME_MIDDLE}, |
| 3227 {"A", NAME_MIDDLE_INITIAL}, | 3233 {"A", NAME_MIDDLE_INITIAL}, |
| 3228 {"Presley", NAME_LAST}, | 3234 {"Presley", NAME_LAST}, |
| 3229 {"Elvis Aaron Presley", NAME_FULL}, | 3235 {"Elvis Aaron Presley", NAME_FULL}, |
| 3230 {"theking@gmail.com", EMAIL_ADDRESS}, | 3236 {"theking@gmail.com", EMAIL_ADDRESS}, |
| 3231 {"RCA", COMPANY_NAME}, | 3237 {"RCA", COMPANY_NAME}, |
| 3232 {"3734 Elvis Presley Blvd.", ADDRESS_HOME_LINE1}, | 3238 {"3734 Elvis Presley Blvd.", ADDRESS_HOME_LINE1}, |
| 3233 {"Apt. 10", ADDRESS_HOME_LINE2}, | 3239 {"Apt. 10", ADDRESS_HOME_LINE2}, |
| 3234 {"Memphis", ADDRESS_HOME_CITY}, | 3240 {"Memphis", ADDRESS_HOME_CITY}, |
| 3235 {"Tennessee", ADDRESS_HOME_STATE}, | 3241 {"Tennessee", ADDRESS_HOME_STATE}, |
| 3236 {"38116", ADDRESS_HOME_ZIP}, | 3242 {"38116", ADDRESS_HOME_ZIP}, |
| 3237 {"USA", ADDRESS_HOME_COUNTRY}, | 3243 {"USA", ADDRESS_HOME_COUNTRY}, |
| 3238 {"United States", ADDRESS_HOME_COUNTRY}, | 3244 {"United States", ADDRESS_HOME_COUNTRY}, |
| 3239 {"+1 (234) 567-8901", PHONE_HOME_WHOLE_NUMBER}, | 3245 {"12345678901", PHONE_HOME_WHOLE_NUMBER}, |
| 3240 {"2345678901", PHONE_HOME_CITY_AND_NUMBER}, | 3246 {"+1 (234) 567-8901", PHONE_HOME_WHOLE_NUMBER}, |
| 3241 {"1", PHONE_HOME_COUNTRY_CODE}, | 3247 {"(234)567-8901", PHONE_HOME_CITY_AND_NUMBER}, |
| 3242 {"234", PHONE_HOME_CITY_CODE}, | 3248 {"2345678901", PHONE_HOME_CITY_AND_NUMBER}, |
| 3243 {"5678901", PHONE_HOME_NUMBER}, | 3249 {"1", PHONE_HOME_COUNTRY_CODE}, |
| 3244 {"567", PHONE_HOME_NUMBER}, | 3250 {"234", PHONE_HOME_CITY_CODE}, |
| 3245 {"8901", PHONE_HOME_NUMBER}, | 3251 {"5678901", PHONE_HOME_NUMBER}, |
| 3252 {"567", PHONE_HOME_NUMBER}, |
| 3253 {"8901", PHONE_HOME_NUMBER}, |
| 3246 | 3254 |
| 3247 // Make sure matches for a second profile work. | 3255 // Test an european profile. |
| 3248 {"Charles Holley", NAME_FULL}, | 3256 {"Paris", ADDRESS_HOME_CITY}, |
| 3257 {"Ile de France", ADDRESS_HOME_STATE}, |
| 3258 {"75008", ADDRESS_HOME_ZIP}, |
| 3259 {"FR", ADDRESS_HOME_COUNTRY}, |
| 3260 {"France", ADDRESS_HOME_COUNTRY}, |
| 3261 {"33249197070", PHONE_HOME_WHOLE_NUMBER}, |
| 3262 {"+33 2 49 19 70 70", PHONE_HOME_WHOLE_NUMBER}, |
| 3263 {"2 49 19 70 70", PHONE_HOME_CITY_AND_NUMBER}, |
| 3264 {"249197070", PHONE_HOME_CITY_AND_NUMBER}, |
| 3265 {"33", PHONE_HOME_COUNTRY_CODE}, |
| 3266 {"2", PHONE_HOME_CITY_CODE}, |
| 3249 | 3267 |
| 3250 // Credit card fields matches. | 3268 // Credit card fields matches. |
| 3251 {"Elvis Presley", CREDIT_CARD_NAME}, | 3269 {"Elvis Presley", CREDIT_CARD_NAME}, |
| 3252 {"4234-5678-9012-3456", CREDIT_CARD_NUMBER}, | 3270 {"4234-5678-9012-3456", CREDIT_CARD_NUMBER}, |
| 3253 {"04", CREDIT_CARD_EXP_MONTH}, | 3271 {"04", CREDIT_CARD_EXP_MONTH}, |
| 3254 {"April", CREDIT_CARD_EXP_MONTH}, | 3272 {"April", CREDIT_CARD_EXP_MONTH}, |
| 3255 {"2012", CREDIT_CARD_EXP_4_DIGIT_YEAR}, | 3273 {"2012", CREDIT_CARD_EXP_4_DIGIT_YEAR}, |
| 3256 {"12", CREDIT_CARD_EXP_2_DIGIT_YEAR}, | 3274 {"12", CREDIT_CARD_EXP_2_DIGIT_YEAR}, |
| 3257 {"04/2012", CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR}, | 3275 {"04/2012", CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR}, |
| 3258 | 3276 |
| 3259 // Make sure whitespaces are trimmed properly. | 3277 // Make sure whitespaces are trimmed properly. |
| 3260 {"", EMPTY_TYPE}, | 3278 {"", EMPTY_TYPE}, |
| 3261 {" ", EMPTY_TYPE}, | 3279 {" ", EMPTY_TYPE}, |
| 3262 {" Elvis", NAME_FIRST}, | 3280 {" Elvis", NAME_FIRST}, |
| 3263 {"Elvis ", NAME_FIRST}, | 3281 {"Elvis ", NAME_FIRST}, |
| 3264 | 3282 |
| 3265 // Make sure fields that differ by case match. | 3283 // Make sure fields that differ by case match. |
| 3266 {"elvis ", NAME_FIRST}, | 3284 {"elvis ", NAME_FIRST}, |
| 3267 {"UnItEd StAtEs", ADDRESS_HOME_COUNTRY}, | 3285 {"UnItEd StAtEs", ADDRESS_HOME_COUNTRY}, |
| 3268 | 3286 |
| 3269 // Make sure fields that differ by punctuation match. | 3287 // Make sure fields that differ by punctuation match. |
| 3270 {"3734 Elvis Presley Blvd", ADDRESS_HOME_LINE1}, | 3288 {"3734 Elvis Presley Blvd", ADDRESS_HOME_LINE1}, |
| 3271 {"3734, Elvis Presley Blvd.", ADDRESS_HOME_LINE1}, | 3289 {"3734, Elvis Presley Blvd.", ADDRESS_HOME_LINE1}, |
| 3272 | 3290 |
| 3273 // Make sure unsupported variants do not match. | 3291 // Special phone number case. A profile with no country code should only |
| 3274 {"Elvis Aaron", UNKNOWN_TYPE}, | 3292 // match PHONE_HOME_CITY_AND_NUMBER. |
| 3275 {"Mr. Presley", UNKNOWN_TYPE}, | 3293 {"5142821292", PHONE_HOME_CITY_AND_NUMBER}, |
| 3276 {"3734 Elvis Presley", UNKNOWN_TYPE}, | 3294 |
| 3277 {"TN", UNKNOWN_TYPE}, | 3295 // Make sure unsupported variants do not match. |
| 3278 {"38116-1023", UNKNOWN_TYPE}, | 3296 {"Elvis Aaron", UNKNOWN_TYPE}, |
| 3279 {"5", UNKNOWN_TYPE}, | 3297 {"Mr. Presley", UNKNOWN_TYPE}, |
| 3280 {"56", UNKNOWN_TYPE}, | 3298 {"3734 Elvis Presley", UNKNOWN_TYPE}, |
| 3281 {"901", UNKNOWN_TYPE}}; | 3299 {"TN", UNKNOWN_TYPE}, |
| 3300 {"38116-1023", UNKNOWN_TYPE}, |
| 3301 {"5", UNKNOWN_TYPE}, |
| 3302 {"56", UNKNOWN_TYPE}, |
| 3303 {"901", UNKNOWN_TYPE}}; |
| 3282 | 3304 |
| 3283 for (TestCase test_case : test_cases) { | 3305 for (TestCase test_case : test_cases) { |
| 3284 FormData form; | 3306 FormData form; |
| 3285 form.name = ASCIIToUTF16("MyForm"); | 3307 form.name = ASCIIToUTF16("MyForm"); |
| 3286 form.origin = GURL("http://myform.com/form.html"); | 3308 form.origin = GURL("http://myform.com/form.html"); |
| 3287 form.action = GURL("http://myform.com/submit.html"); | 3309 form.action = GURL("http://myform.com/submit.html"); |
| 3288 | 3310 |
| 3289 FormFieldData field; | 3311 FormFieldData field; |
| 3290 ServerFieldTypeSet types; | 3312 ServerFieldTypeSet types; |
| 3291 test::CreateTestFormField("", "1", "", "text", &field); | 3313 test::CreateTestFormField("", "1", "", "text", &field); |
| 3292 field.value = ASCIIToUTF16(test_case.input_value); | 3314 field.value = ASCIIToUTF16(test_case.input_value); |
| 3293 types.clear(); | 3315 types.clear(); |
| 3294 types.insert(test_case.field_type); | 3316 types.insert(test_case.field_type); |
| 3295 form.fields.push_back(field); | 3317 form.fields.push_back(field); |
| 3296 | 3318 |
| 3297 FormStructure form_structure(form); | 3319 FormStructure form_structure(form); |
| 3298 | 3320 |
| 3299 AutofillManager::DeterminePossibleFieldTypesForUpload( | 3321 AutofillManager::DeterminePossibleFieldTypesForUpload( |
| 3300 profiles, credit_cards, "en-us", &form_structure); | 3322 profiles, credit_cards, "en-us", &form_structure); |
| 3301 | 3323 |
| 3302 ASSERT_EQ(1U, form_structure.field_count()); | 3324 ASSERT_EQ(1U, form_structure.field_count()); |
| 3303 ServerFieldTypeSet possible_types = | 3325 ServerFieldTypeSet possible_types = |
| 3304 form_structure.field(0)->possible_types(); | 3326 form_structure.field(0)->possible_types(); |
| 3327 EXPECT_EQ(1U, possible_types.size()); |
| 3328 |
| 3305 EXPECT_NE(possible_types.end(), possible_types.find(test_case.field_type)); | 3329 EXPECT_NE(possible_types.end(), possible_types.find(test_case.field_type)); |
| 3306 } | 3330 } |
| 3307 } | 3331 } |
| 3308 | 3332 |
| 3309 // Tests that DeterminePossibleFieldTypesForUpload is called when a form is | 3333 // Tests that DeterminePossibleFieldTypesForUpload is called when a form is |
| 3310 // submitted. | 3334 // submitted. |
| 3311 TEST_F(AutofillManagerTest, DeterminePossibleFieldTypesForUpload_IsTriggered) { | 3335 TEST_F(AutofillManagerTest, DeterminePossibleFieldTypesForUpload_IsTriggered) { |
| 3312 FormData form; | 3336 FormData form; |
| 3313 form.name = ASCIIToUTF16("MyForm"); | 3337 form.name = ASCIIToUTF16("MyForm"); |
| 3314 form.origin = GURL("http://myform.com/form.html"); | 3338 form.origin = GURL("http://myform.com/form.html"); |
| (...skipping 898 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4213 FormsSeen(mixed_forms); | 4237 FormsSeen(mixed_forms); |
| 4214 | 4238 |
| 4215 // Suggestions should always be displayed. | 4239 // Suggestions should always be displayed. |
| 4216 for (const FormFieldData& field : mixed_form.fields) { | 4240 for (const FormFieldData& field : mixed_form.fields) { |
| 4217 GetAutofillSuggestions(mixed_form, field); | 4241 GetAutofillSuggestions(mixed_form, field); |
| 4218 EXPECT_TRUE(external_delegate_->on_suggestions_returned_seen()); | 4242 EXPECT_TRUE(external_delegate_->on_suggestions_returned_seen()); |
| 4219 } | 4243 } |
| 4220 } | 4244 } |
| 4221 | 4245 |
| 4222 } // namespace autofill | 4246 } // namespace autofill |
| OLD | NEW |