| OLD | NEW | 
 | (Empty) | 
|    1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |  | 
|    2 // Use of this source code is governed by a BSD-style license that can be |  | 
|    3 // found in the LICENSE file. |  | 
|    4  |  | 
|    5 #include "base/strings/string16.h" |  | 
|    6 #include "base/strings/utf_string_conversions.h" |  | 
|    7 #include "components/autofill/browser/autofill_profile.h" |  | 
|    8 #include "components/autofill/browser/field_types.h" |  | 
|    9 #include "components/autofill/browser/phone_number.h" |  | 
|   10 #include "components/autofill/browser/phone_number_i18n.h" |  | 
|   11 #include "testing/gtest/include/gtest/gtest.h" |  | 
|   12  |  | 
|   13 namespace autofill { |  | 
|   14  |  | 
|   15 TEST(PhoneNumberTest, Matcher) { |  | 
|   16   AutofillProfile profile; |  | 
|   17   profile.SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("US")); |  | 
|   18   // Set phone number so country_code == 1, city_code = 650, number = 2345678. |  | 
|   19   base::string16 phone(ASCIIToUTF16("1 [650] 234-5678")); |  | 
|   20   PhoneNumber phone_number(&profile); |  | 
|   21   phone_number.SetInfo(PHONE_HOME_WHOLE_NUMBER, phone, "US"); |  | 
|   22  |  | 
|   23   FieldTypeSet matching_types; |  | 
|   24   phone_number.GetMatchingTypes(base::string16(), "US", &matching_types); |  | 
|   25   EXPECT_EQ(1U, matching_types.size()); |  | 
|   26   EXPECT_TRUE(matching_types.find(EMPTY_TYPE) != matching_types.end()); |  | 
|   27   matching_types.clear(); |  | 
|   28   phone_number.GetMatchingTypes(ASCIIToUTF16("1"), "US", &matching_types); |  | 
|   29   EXPECT_EQ(1U, matching_types.size()); |  | 
|   30   EXPECT_TRUE(matching_types.find(PHONE_HOME_COUNTRY_CODE) != |  | 
|   31               matching_types.end()); |  | 
|   32   matching_types.clear(); |  | 
|   33   phone_number.GetMatchingTypes(ASCIIToUTF16("16"), "US", &matching_types); |  | 
|   34   EXPECT_EQ(0U, matching_types.size()); |  | 
|   35   phone_number.GetMatchingTypes(ASCIIToUTF16("165"), "US", &matching_types); |  | 
|   36   EXPECT_EQ(0U, matching_types.size()); |  | 
|   37   phone_number.GetMatchingTypes(ASCIIToUTF16("1650"), "US", &matching_types); |  | 
|   38   EXPECT_EQ(0U, matching_types.size()); |  | 
|   39   phone_number.GetMatchingTypes(ASCIIToUTF16("16502"), "US", &matching_types); |  | 
|   40   EXPECT_EQ(0U, matching_types.size()); |  | 
|   41   phone_number.GetMatchingTypes(ASCIIToUTF16("165023"), "US", &matching_types); |  | 
|   42   EXPECT_EQ(0U, matching_types.size()); |  | 
|   43   phone_number.GetMatchingTypes(ASCIIToUTF16("1650234"), "US", &matching_types); |  | 
|   44   EXPECT_EQ(0U, matching_types.size()); |  | 
|   45   matching_types.clear(); |  | 
|   46   phone_number.GetMatchingTypes(ASCIIToUTF16("16502345678"), "US", |  | 
|   47                                 &matching_types); |  | 
|   48   EXPECT_EQ(1U, matching_types.size()); |  | 
|   49   EXPECT_TRUE(matching_types.find(PHONE_HOME_WHOLE_NUMBER) != |  | 
|   50               matching_types.end()); |  | 
|   51   matching_types.clear(); |  | 
|   52   phone_number.GetMatchingTypes(ASCIIToUTF16("650"), "US", &matching_types); |  | 
|   53   EXPECT_EQ(1U, matching_types.size()); |  | 
|   54   EXPECT_TRUE(matching_types.find(PHONE_HOME_CITY_CODE) != |  | 
|   55               matching_types.end()); |  | 
|   56   matching_types.clear(); |  | 
|   57   phone_number.GetMatchingTypes(ASCIIToUTF16("2345678"), "US", &matching_types); |  | 
|   58   EXPECT_EQ(1U, matching_types.size()); |  | 
|   59   EXPECT_TRUE(matching_types.find(PHONE_HOME_NUMBER) != matching_types.end()); |  | 
|   60   matching_types.clear(); |  | 
|   61   phone_number.GetMatchingTypes(ASCIIToUTF16("234"), "US", &matching_types); |  | 
|   62   EXPECT_EQ(1U, matching_types.size()); |  | 
|   63   EXPECT_TRUE(matching_types.find(PHONE_HOME_NUMBER) != matching_types.end()); |  | 
|   64   matching_types.clear(); |  | 
|   65   phone_number.GetMatchingTypes(ASCIIToUTF16("5678"), "US", &matching_types); |  | 
|   66   EXPECT_EQ(1U, matching_types.size()); |  | 
|   67   EXPECT_TRUE(matching_types.find(PHONE_HOME_NUMBER) != matching_types.end()); |  | 
|   68   matching_types.clear(); |  | 
|   69   phone_number.GetMatchingTypes(ASCIIToUTF16("2345"), "US", &matching_types); |  | 
|   70   EXPECT_EQ(0U, matching_types.size()); |  | 
|   71   matching_types.clear(); |  | 
|   72   phone_number.GetMatchingTypes(ASCIIToUTF16("6502345678"), "US", |  | 
|   73                                 &matching_types); |  | 
|   74   EXPECT_EQ(1U, matching_types.size()); |  | 
|   75   EXPECT_TRUE(matching_types.find(PHONE_HOME_CITY_AND_NUMBER) != |  | 
|   76               matching_types.end()); |  | 
|   77   matching_types.clear(); |  | 
|   78   phone_number.GetMatchingTypes(ASCIIToUTF16("(650)2345678"), "US", |  | 
|   79                                 &matching_types); |  | 
|   80   EXPECT_EQ(1U, matching_types.size()); |  | 
|   81   EXPECT_TRUE(matching_types.find(PHONE_HOME_CITY_AND_NUMBER) != |  | 
|   82               matching_types.end()); |  | 
|   83 } |  | 
|   84  |  | 
|   85 // Verify that PhoneNumber::SetInfo() correctly formats the incoming number. |  | 
|   86 TEST(PhoneNumberTest, SetInfo) { |  | 
|   87   AutofillProfile profile; |  | 
|   88   profile.SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("US")); |  | 
|   89  |  | 
|   90   PhoneNumber phone(&profile); |  | 
|   91   EXPECT_EQ(base::string16(), phone.GetRawInfo(PHONE_HOME_WHOLE_NUMBER)); |  | 
|   92  |  | 
|   93   // Set the formatted info directly. |  | 
|   94   EXPECT_TRUE(phone.SetInfo(PHONE_HOME_WHOLE_NUMBER, |  | 
|   95                             ASCIIToUTF16("(650) 234-5678"), "US")); |  | 
|   96   EXPECT_EQ(ASCIIToUTF16("(650) 234-5678"), |  | 
|   97             phone.GetRawInfo(PHONE_HOME_WHOLE_NUMBER)); |  | 
|   98  |  | 
|   99   // Unformatted numbers should be formatted. |  | 
|  100   EXPECT_TRUE(phone.SetInfo(PHONE_HOME_WHOLE_NUMBER, |  | 
|  101                             ASCIIToUTF16("8887776666"), "US")); |  | 
|  102   EXPECT_EQ(ASCIIToUTF16("(888) 777-6666"), |  | 
|  103             phone.GetRawInfo(PHONE_HOME_WHOLE_NUMBER)); |  | 
|  104  |  | 
|  105   // Differently formatted numbers should be re-formatted. |  | 
|  106   EXPECT_TRUE(phone.SetInfo(PHONE_HOME_WHOLE_NUMBER, |  | 
|  107                             ASCIIToUTF16("800-432-8765"), "US")); |  | 
|  108   EXPECT_EQ(ASCIIToUTF16("(800) 432-8765"), |  | 
|  109             phone.GetRawInfo(PHONE_HOME_WHOLE_NUMBER)); |  | 
|  110  |  | 
|  111   // Invalid numbers should not be stored.  In the US, phone numbers cannot |  | 
|  112   // start with the digit '1'. |  | 
|  113   EXPECT_FALSE(phone.SetInfo(PHONE_HOME_WHOLE_NUMBER, |  | 
|  114                              ASCIIToUTF16("650111111"), "US")); |  | 
|  115   EXPECT_EQ(base::string16(), phone.GetRawInfo(PHONE_HOME_WHOLE_NUMBER)); |  | 
|  116 } |  | 
|  117  |  | 
|  118 // Test that cached phone numbers are correctly invalidated and updated. |  | 
|  119 TEST(PhoneNumberTest, UpdateCachedPhoneNumber) { |  | 
|  120   AutofillProfile profile; |  | 
|  121   profile.SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("US")); |  | 
|  122  |  | 
|  123   PhoneNumber phone(&profile); |  | 
|  124   phone.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, ASCIIToUTF16("6502345678")); |  | 
|  125   EXPECT_EQ(ASCIIToUTF16("650"), phone.GetInfo(PHONE_HOME_CITY_CODE, "US")); |  | 
|  126  |  | 
|  127   // Update the area code. |  | 
|  128   phone.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, ASCIIToUTF16("8322345678")); |  | 
|  129   EXPECT_EQ(ASCIIToUTF16("832"), phone.GetInfo(PHONE_HOME_CITY_CODE, "US")); |  | 
|  130  |  | 
|  131   // Change the phone number to have a UK format, but try to parse with the |  | 
|  132   // wrong locale. |  | 
|  133   phone.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, ASCIIToUTF16("07023456789")); |  | 
|  134   EXPECT_EQ(base::string16(), phone.GetInfo(PHONE_HOME_CITY_CODE, "US")); |  | 
|  135  |  | 
|  136   // Now try parsing using the correct locale.  Note that the profile's country |  | 
|  137   // code should override the app locale, which is still set to "US". |  | 
|  138   profile.SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("GB")); |  | 
|  139   phone.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, ASCIIToUTF16("07023456789")); |  | 
|  140   EXPECT_EQ(ASCIIToUTF16("70"), phone.GetInfo(PHONE_HOME_CITY_CODE, "US")); |  | 
|  141 } |  | 
|  142  |  | 
|  143 TEST(PhoneNumberTest, PhoneCombineHelper) { |  | 
|  144   AutofillProfile profile; |  | 
|  145   profile.SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("US")); |  | 
|  146  |  | 
|  147   PhoneNumber::PhoneCombineHelper number1; |  | 
|  148   EXPECT_FALSE(number1.SetInfo(ADDRESS_BILLING_CITY, |  | 
|  149                                ASCIIToUTF16("1"))); |  | 
|  150   EXPECT_TRUE(number1.SetInfo(PHONE_HOME_COUNTRY_CODE, |  | 
|  151                               ASCIIToUTF16("1"))); |  | 
|  152   EXPECT_TRUE(number1.SetInfo(PHONE_HOME_CITY_CODE, |  | 
|  153                               ASCIIToUTF16("650"))); |  | 
|  154   EXPECT_TRUE(number1.SetInfo(PHONE_HOME_NUMBER, |  | 
|  155                               ASCIIToUTF16("2345678"))); |  | 
|  156   base::string16 parsed_phone; |  | 
|  157   EXPECT_TRUE(number1.ParseNumber(profile, "en-US", &parsed_phone)); |  | 
|  158   // International format as it has a country code. |  | 
|  159   EXPECT_EQ(ASCIIToUTF16("+1 650-234-5678"), parsed_phone); |  | 
|  160  |  | 
|  161   PhoneNumber::PhoneCombineHelper number3; |  | 
|  162   EXPECT_TRUE(number3.SetInfo(PHONE_HOME_CITY_CODE, |  | 
|  163                               ASCIIToUTF16("650"))); |  | 
|  164   EXPECT_TRUE(number3.SetInfo(PHONE_HOME_NUMBER, |  | 
|  165                               ASCIIToUTF16("2345680"))); |  | 
|  166   EXPECT_TRUE(number3.ParseNumber(profile, "en-US", &parsed_phone)); |  | 
|  167   // National format as it does not have a country code. |  | 
|  168   EXPECT_EQ(ASCIIToUTF16("(650) 234-5680"), parsed_phone); |  | 
|  169  |  | 
|  170   PhoneNumber::PhoneCombineHelper number4; |  | 
|  171   EXPECT_TRUE(number4.SetInfo(PHONE_HOME_CITY_CODE, |  | 
|  172                               ASCIIToUTF16("123")));  // Incorrect city code. |  | 
|  173   EXPECT_TRUE(number4.SetInfo(PHONE_HOME_NUMBER, |  | 
|  174                               ASCIIToUTF16("2345680"))); |  | 
|  175   EXPECT_FALSE(number4.ParseNumber(profile, "en-US", &parsed_phone)); |  | 
|  176   EXPECT_EQ(base::string16(), parsed_phone); |  | 
|  177  |  | 
|  178   PhoneNumber::PhoneCombineHelper number5; |  | 
|  179   EXPECT_TRUE(number5.SetInfo(PHONE_HOME_CITY_AND_NUMBER, |  | 
|  180                               ASCIIToUTF16("6502345681"))); |  | 
|  181   EXPECT_TRUE(number5.ParseNumber(profile, "en-US", &parsed_phone)); |  | 
|  182   EXPECT_EQ(ASCIIToUTF16("(650) 234-5681"), parsed_phone); |  | 
|  183  |  | 
|  184   PhoneNumber::PhoneCombineHelper number6; |  | 
|  185   EXPECT_TRUE(number6.SetInfo(PHONE_HOME_CITY_CODE, |  | 
|  186                               ASCIIToUTF16("650"))); |  | 
|  187   EXPECT_TRUE(number6.SetInfo(PHONE_HOME_NUMBER, |  | 
|  188                               ASCIIToUTF16("234"))); |  | 
|  189   EXPECT_TRUE(number6.SetInfo(PHONE_HOME_NUMBER, |  | 
|  190                               ASCIIToUTF16("5682"))); |  | 
|  191   EXPECT_TRUE(number6.ParseNumber(profile, "en-US", &parsed_phone)); |  | 
|  192   EXPECT_EQ(ASCIIToUTF16("(650) 234-5682"), parsed_phone); |  | 
|  193  |  | 
|  194   // Ensure parsing is possible when falling back to detecting the country code |  | 
|  195   // based on the app locale. |  | 
|  196   PhoneNumber::PhoneCombineHelper number7; |  | 
|  197   EXPECT_TRUE(number7.SetInfo(PHONE_HOME_CITY_CODE, |  | 
|  198                               ASCIIToUTF16("650"))); |  | 
|  199   EXPECT_TRUE(number7.SetInfo(PHONE_HOME_NUMBER, |  | 
|  200                               ASCIIToUTF16("234"))); |  | 
|  201   EXPECT_TRUE(number7.SetInfo(PHONE_HOME_NUMBER, |  | 
|  202                               ASCIIToUTF16("5682"))); |  | 
|  203   EXPECT_TRUE(number7.ParseNumber(AutofillProfile(), "en-US", &parsed_phone)); |  | 
|  204   EXPECT_EQ(ASCIIToUTF16("(650) 234-5682"), parsed_phone); |  | 
|  205 } |  | 
|  206  |  | 
|  207 }  // namespace autofill |  | 
| OLD | NEW |