| 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 "base/basictypes.h" | 5 #include "base/basictypes.h" |
| 6 #include "base/format_macros.h" | 6 #include "base/format_macros.h" |
| 7 #include "base/guid.h" | 7 #include "base/guid.h" |
| 8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
| 9 #include "base/memory/scoped_vector.h" | 9 #include "base/memory/scoped_vector.h" |
| 10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
| (...skipping 813 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 824 new AutofillProfile(base::GenerateGUID(), "https://www.example.com/")); | 824 new AutofillProfile(base::GenerateGUID(), "https://www.example.com/")); |
| 825 test::SetProfileInfo(a.get(), "Thomas", NULL, "Jefferson", | 825 test::SetProfileInfo(a.get(), "Thomas", NULL, "Jefferson", |
| 826 "declaration_guy@gmail.com", NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 826 "declaration_guy@gmail.com", NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| 827 NULL); | 827 NULL); |
| 828 test::SetProfileInfo(a.get(), "Thomas", NULL, "Adams", | 828 test::SetProfileInfo(a.get(), "Thomas", NULL, "Adams", |
| 829 "declaration_guy@gmail.com", NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 829 "declaration_guy@gmail.com", NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| 830 NULL); | 830 NULL); |
| 831 EXPECT_FALSE(a->IsSubsetOf(*b, "en-US")); | 831 EXPECT_FALSE(a->IsSubsetOf(*b, "en-US")); |
| 832 } | 832 } |
| 833 | 833 |
| 834 TEST(AutofillProfileTest, OverwriteWithOrAddTo) { | 834 TEST(AutofillProfileTest, OverwriteWith) { |
| 835 AutofillProfile a(base::GenerateGUID(), "https://www.example.com"); | 835 AutofillProfile a(base::GenerateGUID(), "https://www.example.com"); |
| 836 test::SetProfileInfo(&a, "Marion", "Mitchell", "Morrison", | 836 test::SetProfileInfo(&a, "Marion", "Mitchell", "Morrison", |
| 837 "marion@me.xyz", "Fox", "123 Zoo St.", "unit 5", | 837 "marion@me.xyz", "Fox", "123 Zoo St.", "unit 5", |
| 838 "Hollywood", "CA", "91601", "US", | 838 "Hollywood", "CA", "91601", "US", |
| 839 "12345678910"); | 839 "12345678910"); |
| 840 std::vector<base::string16> first_names; | |
| 841 a.GetRawMultiInfo(NAME_FIRST, &first_names); | |
| 842 first_names.push_back(ASCIIToUTF16("Marion")); | |
| 843 a.SetRawMultiInfo(NAME_FIRST, first_names); | |
| 844 | |
| 845 std::vector<base::string16> last_names; | |
| 846 a.GetRawMultiInfo(NAME_LAST, &last_names); | |
| 847 last_names[last_names.size() - 1] = ASCIIToUTF16("Morrison"); | |
| 848 a.SetRawMultiInfo(NAME_LAST, last_names); | |
| 849 | 840 |
| 850 // Create an identical profile except that the new profile: | 841 // Create an identical profile except that the new profile: |
| 851 // (1) Has a different origin, | 842 // (1) Has a different origin, |
| 852 // (2) Has a different address line 2, | 843 // (2) Has a different address line 2, |
| 853 // (3) Lacks a company name, | 844 // (3) Lacks a company name, |
| 854 // (4) Has a different full name variant, and | 845 // (4) Has a different full name, and |
| 855 // (5) Has a language code. | 846 // (5) Has a language code. |
| 856 AutofillProfile b = a; | 847 AutofillProfile b = a; |
| 857 b.set_guid(base::GenerateGUID()); | 848 b.set_guid(base::GenerateGUID()); |
| 858 b.set_origin("Chrome settings"); | 849 b.set_origin("Chrome settings"); |
| 859 b.SetRawInfo(ADDRESS_HOME_LINE2, ASCIIToUTF16("area 51")); | 850 b.SetRawInfo(ADDRESS_HOME_LINE2, ASCIIToUTF16("area 51")); |
| 860 b.SetRawInfo(COMPANY_NAME, base::string16()); | 851 b.SetRawInfo(COMPANY_NAME, base::string16()); |
| 861 | 852 |
| 862 std::vector<base::string16> names; | 853 b.SetRawInfo(NAME_FULL, ASCIIToUTF16("Marion M. Morrison")); |
| 863 b.GetMultiInfo(AutofillType(NAME_FULL), "en-US", &names); | |
| 864 names.push_back(ASCIIToUTF16("Marion M. Morrison")); | |
| 865 b.SetRawMultiInfo(NAME_FULL, names); | |
| 866 b.set_language_code("en"); | 854 b.set_language_code("en"); |
| 867 | 855 |
| 868 a.OverwriteWithOrAddTo(b, "en-US"); | 856 a.OverwriteWith(b, "en-US"); |
| 869 EXPECT_EQ("Chrome settings", a.origin()); | 857 EXPECT_EQ("Chrome settings", a.origin()); |
| 870 EXPECT_EQ(ASCIIToUTF16("area 51"), a.GetRawInfo(ADDRESS_HOME_LINE2)); | 858 EXPECT_EQ(ASCIIToUTF16("area 51"), a.GetRawInfo(ADDRESS_HOME_LINE2)); |
| 871 EXPECT_EQ(ASCIIToUTF16("Fox"), a.GetRawInfo(COMPANY_NAME)); | 859 EXPECT_EQ(ASCIIToUTF16("Fox"), a.GetRawInfo(COMPANY_NAME)); |
| 872 a.GetMultiInfo(AutofillType(NAME_FULL), "en-US", &names); | 860 base::string16 name = a.GetInfo(AutofillType(NAME_FULL), "en-US"); |
| 873 ASSERT_EQ(3U, names.size()); | 861 EXPECT_EQ(ASCIIToUTF16("Marion M. Morrison"), name); |
| 874 EXPECT_EQ(ASCIIToUTF16("Marion Mitchell Morrison"), names[0]); | |
| 875 EXPECT_EQ(ASCIIToUTF16("Marion Morrison"), names[1]); | |
| 876 EXPECT_EQ(ASCIIToUTF16("Marion M. Morrison"), names[2]); | |
| 877 EXPECT_EQ("en", a.language_code()); | 862 EXPECT_EQ("en", a.language_code()); |
| 878 } | 863 } |
| 879 | 864 |
| 880 TEST(AutofillProfileTest, AssignmentOperator) { | 865 TEST(AutofillProfileTest, AssignmentOperator) { |
| 881 AutofillProfile a(base::GenerateGUID(), "https://www.example.com/"); | 866 AutofillProfile a(base::GenerateGUID(), "https://www.example.com/"); |
| 882 test::SetProfileInfo(&a, "Marion", "Mitchell", "Morrison", | 867 test::SetProfileInfo(&a, "Marion", "Mitchell", "Morrison", |
| 883 "marion@me.xyz", "Fox", "123 Zoo St.", "unit 5", | 868 "marion@me.xyz", "Fox", "123 Zoo St.", "unit 5", |
| 884 "Hollywood", "CA", "91601", "US", | 869 "Hollywood", "CA", "91601", "US", |
| 885 "12345678910"); | 870 "12345678910"); |
| 886 | 871 |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 946 a.SetRawInfo(ADDRESS_HOME_STREET_ADDRESS, | 931 a.SetRawInfo(ADDRESS_HOME_STREET_ADDRESS, |
| 947 ASCIIToUTF16("line one\nline two")); | 932 ASCIIToUTF16("line one\nline two")); |
| 948 test::SetProfileInfo(&b, "John", NULL, NULL, NULL, | 933 test::SetProfileInfo(&b, "John", NULL, NULL, NULL, |
| 949 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); | 934 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); |
| 950 b.SetRawInfo(ADDRESS_HOME_STREET_ADDRESS, | 935 b.SetRawInfo(ADDRESS_HOME_STREET_ADDRESS, |
| 951 ASCIIToUTF16("line one\nline two\nline three")); | 936 ASCIIToUTF16("line one\nline two\nline three")); |
| 952 EXPECT_GT(0, a.Compare(b)); | 937 EXPECT_GT(0, a.Compare(b)); |
| 953 EXPECT_LT(0, b.Compare(a)); | 938 EXPECT_LT(0, b.Compare(a)); |
| 954 } | 939 } |
| 955 | 940 |
| 956 TEST(AutofillProfileTest, MultiValueNames) { | |
| 957 AutofillProfile p(base::GenerateGUID(), "https://www.example.com/"); | |
| 958 const base::string16 kJohnDoe(ASCIIToUTF16("John Doe")); | |
| 959 const base::string16 kJohnPDoe(ASCIIToUTF16("John P. Doe")); | |
| 960 std::vector<base::string16> set_values; | |
| 961 set_values.push_back(kJohnDoe); | |
| 962 set_values.push_back(kJohnPDoe); | |
| 963 p.SetRawMultiInfo(NAME_FULL, set_values); | |
| 964 | |
| 965 // Expect regular |GetInfo| returns the first element. | |
| 966 EXPECT_EQ(kJohnDoe, p.GetRawInfo(NAME_FULL)); | |
| 967 | |
| 968 // Ensure that we get out what we put in. | |
| 969 std::vector<base::string16> get_values; | |
| 970 p.GetRawMultiInfo(NAME_FULL, &get_values); | |
| 971 ASSERT_EQ(2UL, get_values.size()); | |
| 972 EXPECT_EQ(kJohnDoe, get_values[0]); | |
| 973 EXPECT_EQ(kJohnPDoe, get_values[1]); | |
| 974 | |
| 975 // Update the values. | |
| 976 AutofillProfile p2 = p; | |
| 977 EXPECT_EQ(0, p.Compare(p2)); | |
| 978 const base::string16 kNoOne(ASCIIToUTF16("No One")); | |
| 979 set_values[1] = kNoOne; | |
| 980 p.SetRawMultiInfo(NAME_FULL, set_values); | |
| 981 p.GetRawMultiInfo(NAME_FULL, &get_values); | |
| 982 ASSERT_EQ(2UL, get_values.size()); | |
| 983 EXPECT_EQ(kJohnDoe, get_values[0]); | |
| 984 EXPECT_EQ(kNoOne, get_values[1]); | |
| 985 EXPECT_NE(0, p.Compare(p2)); | |
| 986 | |
| 987 // Delete values. | |
| 988 set_values.clear(); | |
| 989 p.SetRawMultiInfo(NAME_FULL, set_values); | |
| 990 p.GetRawMultiInfo(NAME_FULL, &get_values); | |
| 991 ASSERT_EQ(1UL, get_values.size()); | |
| 992 EXPECT_EQ(base::string16(), get_values[0]); | |
| 993 | |
| 994 // Expect regular |GetInfo| returns empty value. | |
| 995 EXPECT_EQ(base::string16(), p.GetRawInfo(NAME_FULL)); | |
| 996 } | |
| 997 | |
| 998 TEST(AutofillProfileTest, MultiValueEmails) { | |
| 999 AutofillProfile p(base::GenerateGUID(), "https://www.example.com/"); | |
| 1000 const base::string16 kJohnDoe(ASCIIToUTF16("john@doe.com")); | |
| 1001 const base::string16 kJohnPDoe(ASCIIToUTF16("john_p@doe.com")); | |
| 1002 std::vector<base::string16> set_values; | |
| 1003 set_values.push_back(kJohnDoe); | |
| 1004 set_values.push_back(kJohnPDoe); | |
| 1005 p.SetRawMultiInfo(EMAIL_ADDRESS, set_values); | |
| 1006 | |
| 1007 // Expect regular |GetInfo| returns the first element. | |
| 1008 EXPECT_EQ(kJohnDoe, p.GetRawInfo(EMAIL_ADDRESS)); | |
| 1009 | |
| 1010 // Ensure that we get out what we put in. | |
| 1011 std::vector<base::string16> get_values; | |
| 1012 p.GetRawMultiInfo(EMAIL_ADDRESS, &get_values); | |
| 1013 ASSERT_EQ(2UL, get_values.size()); | |
| 1014 EXPECT_EQ(kJohnDoe, get_values[0]); | |
| 1015 EXPECT_EQ(kJohnPDoe, get_values[1]); | |
| 1016 | |
| 1017 // Update the values. | |
| 1018 AutofillProfile p2 = p; | |
| 1019 EXPECT_EQ(0, p.Compare(p2)); | |
| 1020 const base::string16 kNoOne(ASCIIToUTF16("no@one.com")); | |
| 1021 set_values[1] = kNoOne; | |
| 1022 p.SetRawMultiInfo(EMAIL_ADDRESS, set_values); | |
| 1023 p.GetRawMultiInfo(EMAIL_ADDRESS, &get_values); | |
| 1024 ASSERT_EQ(2UL, get_values.size()); | |
| 1025 EXPECT_EQ(kJohnDoe, get_values[0]); | |
| 1026 EXPECT_EQ(kNoOne, get_values[1]); | |
| 1027 EXPECT_NE(0, p.Compare(p2)); | |
| 1028 | |
| 1029 // Delete values. | |
| 1030 set_values.clear(); | |
| 1031 p.SetRawMultiInfo(EMAIL_ADDRESS, set_values); | |
| 1032 p.GetRawMultiInfo(EMAIL_ADDRESS, &get_values); | |
| 1033 ASSERT_EQ(1UL, get_values.size()); | |
| 1034 EXPECT_EQ(base::string16(), get_values[0]); | |
| 1035 | |
| 1036 // Expect regular |GetInfo| returns empty value. | |
| 1037 EXPECT_EQ(base::string16(), p.GetRawInfo(EMAIL_ADDRESS)); | |
| 1038 } | |
| 1039 | |
| 1040 TEST(AutofillProfileTest, MultiValuePhone) { | |
| 1041 AutofillProfile p(base::GenerateGUID(), "https://www.example.com/"); | |
| 1042 const base::string16 kJohnDoe(ASCIIToUTF16("4151112222")); | |
| 1043 const base::string16 kJohnPDoe(ASCIIToUTF16("4151113333")); | |
| 1044 std::vector<base::string16> set_values; | |
| 1045 set_values.push_back(kJohnDoe); | |
| 1046 set_values.push_back(kJohnPDoe); | |
| 1047 p.SetRawMultiInfo(PHONE_HOME_WHOLE_NUMBER, set_values); | |
| 1048 | |
| 1049 // Expect regular |GetInfo| returns the first element. | |
| 1050 EXPECT_EQ(kJohnDoe, p.GetRawInfo(PHONE_HOME_WHOLE_NUMBER)); | |
| 1051 | |
| 1052 // Ensure that we get out what we put in. | |
| 1053 std::vector<base::string16> get_values; | |
| 1054 p.GetRawMultiInfo(PHONE_HOME_WHOLE_NUMBER, &get_values); | |
| 1055 ASSERT_EQ(2UL, get_values.size()); | |
| 1056 EXPECT_EQ(kJohnDoe, get_values[0]); | |
| 1057 EXPECT_EQ(kJohnPDoe, get_values[1]); | |
| 1058 | |
| 1059 // Update the values. | |
| 1060 AutofillProfile p2 = p; | |
| 1061 EXPECT_EQ(0, p.Compare(p2)); | |
| 1062 const base::string16 kNoOne(ASCIIToUTF16("4152110000")); | |
| 1063 set_values[1] = kNoOne; | |
| 1064 p.SetRawMultiInfo(PHONE_HOME_WHOLE_NUMBER, set_values); | |
| 1065 p.GetRawMultiInfo(PHONE_HOME_WHOLE_NUMBER, &get_values); | |
| 1066 ASSERT_EQ(2UL, get_values.size()); | |
| 1067 EXPECT_EQ(kJohnDoe, get_values[0]); | |
| 1068 EXPECT_EQ(kNoOne, get_values[1]); | |
| 1069 EXPECT_NE(0, p.Compare(p2)); | |
| 1070 | |
| 1071 // Delete values. | |
| 1072 set_values.clear(); | |
| 1073 p.SetRawMultiInfo(PHONE_HOME_WHOLE_NUMBER, set_values); | |
| 1074 p.GetRawMultiInfo(PHONE_HOME_WHOLE_NUMBER, &get_values); | |
| 1075 ASSERT_EQ(1UL, get_values.size()); | |
| 1076 EXPECT_EQ(base::string16(), get_values[0]); | |
| 1077 | |
| 1078 // Expect regular |GetInfo| returns empty value. | |
| 1079 EXPECT_EQ(base::string16(), p.GetRawInfo(PHONE_HOME_WHOLE_NUMBER)); | |
| 1080 } | |
| 1081 | |
| 1082 TEST(AutofillProfileTest, IsPresentButInvalid) { | 941 TEST(AutofillProfileTest, IsPresentButInvalid) { |
| 1083 AutofillProfile profile(base::GenerateGUID(), "https://www.example.com/"); | 942 AutofillProfile profile(base::GenerateGUID(), "https://www.example.com/"); |
| 1084 EXPECT_FALSE(profile.IsPresentButInvalid(ADDRESS_HOME_STATE)); | 943 EXPECT_FALSE(profile.IsPresentButInvalid(ADDRESS_HOME_STATE)); |
| 1085 EXPECT_FALSE(profile.IsPresentButInvalid(ADDRESS_HOME_ZIP)); | 944 EXPECT_FALSE(profile.IsPresentButInvalid(ADDRESS_HOME_ZIP)); |
| 1086 EXPECT_FALSE(profile.IsPresentButInvalid(PHONE_HOME_WHOLE_NUMBER)); | 945 EXPECT_FALSE(profile.IsPresentButInvalid(PHONE_HOME_WHOLE_NUMBER)); |
| 1087 | 946 |
| 1088 profile.SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("US")); | 947 profile.SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("US")); |
| 1089 EXPECT_FALSE(profile.IsPresentButInvalid(ADDRESS_HOME_STATE)); | 948 EXPECT_FALSE(profile.IsPresentButInvalid(ADDRESS_HOME_STATE)); |
| 1090 EXPECT_FALSE(profile.IsPresentButInvalid(ADDRESS_HOME_ZIP)); | 949 EXPECT_FALSE(profile.IsPresentButInvalid(ADDRESS_HOME_ZIP)); |
| 1091 EXPECT_FALSE(profile.IsPresentButInvalid(PHONE_HOME_WHOLE_NUMBER)); | 950 EXPECT_FALSE(profile.IsPresentButInvalid(PHONE_HOME_WHOLE_NUMBER)); |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1207 AutofillProfile::CanonicalizeProfileString(ASCIIToUTF16( | 1066 AutofillProfile::CanonicalizeProfileString(ASCIIToUTF16( |
| 1208 "1600 Amphitheatre, Pkwy."))); | 1067 "1600 Amphitheatre, Pkwy."))); |
| 1209 | 1068 |
| 1210 // Unicode punctuation (hyphen and space), multiple spaces collapsed. | 1069 // Unicode punctuation (hyphen and space), multiple spaces collapsed. |
| 1211 EXPECT_EQ(ASCIIToUTF16("mid island plaza"), | 1070 EXPECT_EQ(ASCIIToUTF16("mid island plaza"), |
| 1212 AutofillProfile::CanonicalizeProfileString(base::WideToUTF16( | 1071 AutofillProfile::CanonicalizeProfileString(base::WideToUTF16( |
| 1213 L"Mid\x2013Island\x2003 Plaza"))); | 1072 L"Mid\x2013Island\x2003 Plaza"))); |
| 1214 } | 1073 } |
| 1215 | 1074 |
| 1216 } // namespace autofill | 1075 } // namespace autofill |
| OLD | NEW |