Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(79)

Side by Side Diff: components/autofill/core/browser/autofill_profile_unittest.cc

Issue 2110563002: Use AutofillProfileComparator in place of ad-hoc merge logic. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@merge
Patch Set: Rebase Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/autofill_profile.h" 5 #include "components/autofill/core/browser/autofill_profile.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 10
(...skipping 825 matching lines...) Expand 10 before | Expand all | Expand 10 after
836 new AutofillProfile(base::GenerateGUID(), "https://www.example.com/")); 836 new AutofillProfile(base::GenerateGUID(), "https://www.example.com/"));
837 test::SetProfileInfo(a.get(), "Thomas", NULL, "Jefferson", 837 test::SetProfileInfo(a.get(), "Thomas", NULL, "Jefferson",
838 "declaration_guy@gmail.com", NULL, NULL, NULL, NULL, NULL, NULL, NULL, 838 "declaration_guy@gmail.com", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
839 NULL); 839 NULL);
840 test::SetProfileInfo(a.get(), "Thomas", NULL, "Adams", 840 test::SetProfileInfo(a.get(), "Thomas", NULL, "Adams",
841 "declaration_guy@gmail.com", NULL, NULL, NULL, NULL, NULL, NULL, NULL, 841 "declaration_guy@gmail.com", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
842 NULL); 842 NULL);
843 EXPECT_FALSE(a->IsSubsetOf(*b, "en-US")); 843 EXPECT_FALSE(a->IsSubsetOf(*b, "en-US"));
844 } 844 }
845 845
846 TEST(AutofillProfileTest, OverwriteWith_DifferentProfile) { 846 TEST(AutofillProfileTest, MergeDataFrom_DifferentProfile) {
847 AutofillProfile a; 847 AutofillProfile a;
848 SetupTestProfile(a); 848 SetupTestProfile(a);
849 849
850 // Create an identical profile except that the new profile: 850 // Create an identical profile except that the new profile:
851 // (1) Has a different origin, 851 // (1) Has a different origin,
852 // (2) Has a different address line 2, 852 // (2) Has a different address line 2,
853 // (3) Lacks a company name, 853 // (3) Lacks a company name,
854 // (4) Has a different full name, and 854 // (4) Has a different full name, and
855 // (5) Has a language code. 855 // (5) Has a language code.
856 AutofillProfile b = a; 856 AutofillProfile b = a;
857 b.set_guid(base::GenerateGUID()); 857 b.set_guid(base::GenerateGUID());
858 b.set_origin(kSettingsOrigin); 858 b.set_origin(kSettingsOrigin);
859 b.SetRawInfo(ADDRESS_HOME_LINE2, ASCIIToUTF16("area 51")); 859 b.SetRawInfo(ADDRESS_HOME_LINE2, ASCIIToUTF16("Unit 5, area 51"));
860 b.SetRawInfo(COMPANY_NAME, base::string16()); 860 b.SetRawInfo(COMPANY_NAME, base::string16());
861 861
862 b.SetRawInfo(NAME_MIDDLE, ASCIIToUTF16("M."));
862 b.SetRawInfo(NAME_FULL, ASCIIToUTF16("Marion M. Morrison")); 863 b.SetRawInfo(NAME_FULL, ASCIIToUTF16("Marion M. Morrison"));
863 b.set_language_code("en"); 864 b.set_language_code("en");
864 865
865 EXPECT_TRUE(a.OverwriteWith(b, "en-US")); 866 EXPECT_TRUE(a.MergeDataFrom(b, "en-US"));
866 EXPECT_EQ(kSettingsOrigin, a.origin()); 867 EXPECT_EQ(kSettingsOrigin, a.origin());
867 EXPECT_EQ(ASCIIToUTF16("area 51"), a.GetRawInfo(ADDRESS_HOME_LINE2)); 868 EXPECT_EQ(ASCIIToUTF16("Unit 5, area 51"), a.GetRawInfo(ADDRESS_HOME_LINE2));
868 EXPECT_EQ(ASCIIToUTF16("Fox"), a.GetRawInfo(COMPANY_NAME)); 869 EXPECT_EQ(ASCIIToUTF16("Fox"), a.GetRawInfo(COMPANY_NAME));
869 base::string16 name = a.GetInfo(AutofillType(NAME_FULL), "en-US"); 870 base::string16 name = a.GetInfo(AutofillType(NAME_FULL), "en-US");
870 EXPECT_EQ(ASCIIToUTF16("Marion M. Morrison"), name); 871 EXPECT_EQ(ASCIIToUTF16("Marion Mitchell Morrison"), name);
871 EXPECT_EQ("en", a.language_code()); 872 EXPECT_EQ("en", a.language_code());
872 } 873 }
873 874
874 TEST(AutofillProfileTest, OverwriteWith_SameProfile) { 875 TEST(AutofillProfileTest, MergeDataFrom_SameProfile) {
875 AutofillProfile a; 876 AutofillProfile a;
876 SetupTestProfile(a); 877 SetupTestProfile(a);
877 878
879 // The profile has no full name yet. Merge will add it.
878 AutofillProfile b = a; 880 AutofillProfile b = a;
879 b.set_guid(base::GenerateGUID()); 881 b.set_guid(base::GenerateGUID());
880 EXPECT_FALSE(a.OverwriteWith(b, "en-US")); 882 EXPECT_TRUE(a.MergeDataFrom(b, "en-US"));
881 } 883 EXPECT_EQ(2u, a.use_count());
882 884
883 TEST(AutofillProfileTest, OverwriteWith_DifferentName) { 885 // Now the profile is fully populated. Merging it again has no effect (except
884 AutofillProfile a; 886 // for usage statistics).
885 SetupTestProfile(a); 887 AutofillProfile c = a;
886 888 c.set_guid(base::GenerateGUID());
887 AutofillProfile b = a; 889 c.set_use_count(3);
888 b.SetRawInfo(NAME_FIRST, ASCIIToUTF16("Mario")); 890 EXPECT_FALSE(a.MergeDataFrom(c, "en-US"));
889 EXPECT_TRUE(a.OverwriteWith(b, "en-US")); 891 EXPECT_EQ(5u, a.use_count());
890 base::string16 name_full = a.GetInfo(AutofillType(NAME_FULL), "en-US");
891 EXPECT_EQ(ASCIIToUTF16("Mario Mitchell Morrison"), name_full);
892 }
893
894 TEST(AutofillProfileTest, OverwriteWith_DifferentAddress) {
895 AutofillProfile a;
896 SetupTestProfile(a);
897
898 AutofillProfile b = a;
899 b.SetRawInfo(ADDRESS_HOME_LINE1, ASCIIToUTF16("123 Aquarium St."));
900 EXPECT_TRUE(a.OverwriteWith(b, "en-US"));
901 base::string16 address = a.GetRawInfo(ADDRESS_HOME_LINE1);
902 EXPECT_EQ(ASCIIToUTF16("123 Aquarium St."), address);
903 } 892 }
904 893
905 TEST(AutofillProfileTest, OverwriteName_AddNameFull) { 894 TEST(AutofillProfileTest, OverwriteName_AddNameFull) {
906 AutofillProfile a; 895 AutofillProfile a;
907 896
908 a.SetRawInfo(NAME_FIRST, base::ASCIIToUTF16("Marion")); 897 a.SetRawInfo(NAME_FIRST, base::ASCIIToUTF16("Marion"));
909 a.SetRawInfo(NAME_MIDDLE, base::ASCIIToUTF16("Mitchell")); 898 a.SetRawInfo(NAME_MIDDLE, base::ASCIIToUTF16("Mitchell"));
910 a.SetRawInfo(NAME_LAST, base::ASCIIToUTF16("Morrison")); 899 a.SetRawInfo(NAME_LAST, base::ASCIIToUTF16("Morrison"));
911 900
912 AutofillProfile b = a; 901 AutofillProfile b = a;
913 b.SetRawInfo(NAME_FULL, base::ASCIIToUTF16("Marion Mitchell Morrison")); 902 b.SetRawInfo(NAME_FULL, base::ASCIIToUTF16("Marion Mitchell Morrison"));
914 903
915 EXPECT_TRUE(a.OverwriteWith(b, "en-US")); 904 EXPECT_TRUE(a.MergeDataFrom(b, "en-US"));
916 EXPECT_EQ(base::ASCIIToUTF16("Marion"), a.GetRawInfo(NAME_FIRST)); 905 EXPECT_EQ(base::ASCIIToUTF16("Marion"), a.GetRawInfo(NAME_FIRST));
917 EXPECT_EQ(base::ASCIIToUTF16("Mitchell"), a.GetRawInfo(NAME_MIDDLE)); 906 EXPECT_EQ(base::ASCIIToUTF16("Mitchell"), a.GetRawInfo(NAME_MIDDLE));
918 EXPECT_EQ(base::ASCIIToUTF16("Morrison"), a.GetRawInfo(NAME_LAST)); 907 EXPECT_EQ(base::ASCIIToUTF16("Morrison"), a.GetRawInfo(NAME_LAST));
919 EXPECT_EQ(base::ASCIIToUTF16("Marion Mitchell Morrison"), 908 EXPECT_EQ(base::ASCIIToUTF16("Marion Mitchell Morrison"),
920 a.GetRawInfo(NAME_FULL)); 909 a.GetRawInfo(NAME_FULL));
921 } 910 }
922 911
923 // Tests that OverwriteName overwrites the name parts if they have different 912 // Tests that OverwriteName overwrites the name parts if they have different
924 // case. 913 // case.
925 TEST(AutofillProfileTest, OverwriteName_DifferentCase) { 914 TEST(AutofillProfileTest, OverwriteName_DifferentCase) {
926 AutofillProfile a; 915 AutofillProfile a;
927 916
928 a.SetRawInfo(NAME_FIRST, base::ASCIIToUTF16("marion")); 917 a.SetRawInfo(NAME_FIRST, base::ASCIIToUTF16("marion"));
929 a.SetRawInfo(NAME_MIDDLE, base::ASCIIToUTF16("mitchell")); 918 a.SetRawInfo(NAME_MIDDLE, base::ASCIIToUTF16("mitchell"));
930 a.SetRawInfo(NAME_LAST, base::ASCIIToUTF16("morrison")); 919 a.SetRawInfo(NAME_LAST, base::ASCIIToUTF16("morrison"));
931 920
932 AutofillProfile b = a; 921 AutofillProfile b = a;
933 b.SetRawInfo(NAME_FIRST, base::ASCIIToUTF16("Marion")); 922 b.SetRawInfo(NAME_FIRST, base::ASCIIToUTF16("Marion"));
934 b.SetRawInfo(NAME_MIDDLE, base::ASCIIToUTF16("Mitchell")); 923 b.SetRawInfo(NAME_MIDDLE, base::ASCIIToUTF16("Mitchell"));
935 b.SetRawInfo(NAME_LAST, base::ASCIIToUTF16("Morrison")); 924 b.SetRawInfo(NAME_LAST, base::ASCIIToUTF16("Morrison"));
936 925
937 EXPECT_TRUE(a.OverwriteWith(b, "en-US")); 926 EXPECT_TRUE(a.MergeDataFrom(b, "en-US"));
938 EXPECT_EQ(base::ASCIIToUTF16("Marion"), a.GetRawInfo(NAME_FIRST)); 927 EXPECT_EQ(base::ASCIIToUTF16("Marion"), a.GetRawInfo(NAME_FIRST));
939 EXPECT_EQ(base::ASCIIToUTF16("Mitchell"), a.GetRawInfo(NAME_MIDDLE)); 928 EXPECT_EQ(base::ASCIIToUTF16("Mitchell"), a.GetRawInfo(NAME_MIDDLE));
940 EXPECT_EQ(base::ASCIIToUTF16("Morrison"), a.GetRawInfo(NAME_LAST)); 929 EXPECT_EQ(base::ASCIIToUTF16("Morrison"), a.GetRawInfo(NAME_LAST));
941 } 930 }
942 931
943 TEST(AutofillProfileTest, AssignmentOperator) { 932 TEST(AutofillProfileTest, AssignmentOperator) {
944 AutofillProfile a(base::GenerateGUID(), "https://www.example.com/"); 933 AutofillProfile a(base::GenerateGUID(), "https://www.example.com/");
945 test::SetProfileInfo(&a, "Marion", "Mitchell", "Morrison", 934 test::SetProfileInfo(&a, "Marion", "Mitchell", "Morrison",
946 "marion@me.xyz", "Fox", "123 Zoo St.", "unit 5", 935 "marion@me.xyz", "Fox", "123 Zoo St.", "unit 5",
947 "Hollywood", "CA", "91601", "US", 936 "Hollywood", "CA", "91601", "US",
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
1127 profile.SetInfo(AutofillType(ADDRESS_HOME_STATE), 1116 profile.SetInfo(AutofillType(ADDRESS_HOME_STATE),
1128 ASCIIToUTF16("CA"), 1117 ASCIIToUTF16("CA"),
1129 "en-US"); 1118 "en-US");
1130 EXPECT_FALSE(profile.GetInfo(full_address, "en-US").empty()); 1119 EXPECT_FALSE(profile.GetInfo(full_address, "en-US").empty());
1131 profile.SetInfo(AutofillType(ADDRESS_HOME_COUNTRY), 1120 profile.SetInfo(AutofillType(ADDRESS_HOME_COUNTRY),
1132 base::string16(), 1121 base::string16(),
1133 "en-US"); 1122 "en-US");
1134 EXPECT_TRUE(profile.GetInfo(full_address, "en-US").empty()); 1123 EXPECT_TRUE(profile.GetInfo(full_address, "en-US").empty());
1135 } 1124 }
1136 1125
1137 TEST(AutofillProfileTest, CanonicalizeProfileString) {
1138 // NOP.
1139 EXPECT_EQ(base::string16(),
1140 AutofillProfile::CanonicalizeProfileString(base::string16()));
1141
1142 // Simple punctuation removed.
1143 EXPECT_EQ(ASCIIToUTF16("1600 amphitheatre pkwy"),
1144 AutofillProfile::CanonicalizeProfileString(ASCIIToUTF16(
1145 "1600 Amphitheatre, Pkwy.")));
1146
1147 // Unicode punctuation (hyphen and space), multiple spaces collapsed.
1148 EXPECT_EQ(ASCIIToUTF16("mid island plaza"),
1149 AutofillProfile::CanonicalizeProfileString(base::WideToUTF16(
1150 L"Mid\x2013Island\x2003 Plaza")));
1151
1152 // Newline character removed.
1153 EXPECT_EQ(ASCIIToUTF16("1600 amphitheatre pkwy app 2"),
1154 AutofillProfile::CanonicalizeProfileString(
1155 ASCIIToUTF16("1600 amphitheatre pkwy \n App. 2")));
1156
1157 // Diacritics removed.
1158 EXPECT_EQ(UTF8ToUTF16("まeoa정"),
1159 AutofillProfile::CanonicalizeProfileString(UTF8ToUTF16("まéÖä정")));
1160 }
1161
1162 TEST(AutofillProfileTest, SaveAdditionalInfo_Name_AddingNameFull) { 1126 TEST(AutofillProfileTest, SaveAdditionalInfo_Name_AddingNameFull) {
1163 AutofillProfile a; 1127 AutofillProfile a;
1164 1128
1165 a.SetRawInfo(NAME_FIRST, base::ASCIIToUTF16("Marion")); 1129 a.SetRawInfo(NAME_FIRST, base::ASCIIToUTF16("Marion"));
1166 a.SetRawInfo(NAME_MIDDLE, base::ASCIIToUTF16("Mitchell")); 1130 a.SetRawInfo(NAME_MIDDLE, base::ASCIIToUTF16("Mitchell"));
1167 a.SetRawInfo(NAME_LAST, base::ASCIIToUTF16("Morrison")); 1131 a.SetRawInfo(NAME_LAST, base::ASCIIToUTF16("Morrison"));
1168 1132
1169 AutofillProfile b = a; 1133 AutofillProfile b = a;
1170 b.SetRawInfo(NAME_FULL, base::ASCIIToUTF16("Marion Mitchell Morrison")); 1134 b.SetRawInfo(NAME_FULL, base::ASCIIToUTF16("Marion Mitchell Morrison"));
1171 1135
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1215 b.SetRawInfo(NAME_LAST,UTF8ToUTF16("Morrison")); 1179 b.SetRawInfo(NAME_LAST,UTF8ToUTF16("Morrison"));
1216 b.SetRawInfo(NAME_FULL, UTF8ToUTF16("")); 1180 b.SetRawInfo(NAME_FULL, UTF8ToUTF16(""));
1217 1181
1218 EXPECT_TRUE(a.SaveAdditionalInfo(b, "en-US")); 1182 EXPECT_TRUE(a.SaveAdditionalInfo(b, "en-US"));
1219 1183
1220 // The first, middle and last names should have their first letter in 1184 // The first, middle and last names should have their first letter in
1221 // uppercase and have acquired diacritics. 1185 // uppercase and have acquired diacritics.
1222 EXPECT_EQ(UTF8ToUTF16("Märion"), a.GetRawInfo(NAME_FIRST)); 1186 EXPECT_EQ(UTF8ToUTF16("Märion"), a.GetRawInfo(NAME_FIRST));
1223 EXPECT_EQ(UTF8ToUTF16("Mitchéll"), a.GetRawInfo(NAME_MIDDLE)); 1187 EXPECT_EQ(UTF8ToUTF16("Mitchéll"), a.GetRawInfo(NAME_MIDDLE));
1224 EXPECT_EQ(UTF8ToUTF16("Morrison"), a.GetRawInfo(NAME_LAST)); 1188 EXPECT_EQ(UTF8ToUTF16("Morrison"), a.GetRawInfo(NAME_LAST));
1225 EXPECT_EQ(UTF8ToUTF16("marion mitchell morrison"), 1189 EXPECT_EQ(UTF8ToUTF16("Märion Mitchéll Morrison"),
1226 a.GetRawInfo(NAME_FULL)); 1190 a.GetRawInfo(NAME_FULL));
1227 } 1191 }
1228 1192
1229 // Tests that no loss of information happens when SavingAdditionalInfo with a 1193 // Tests that no loss of information happens when SavingAdditionalInfo with a
1230 // profile with an empty name part. 1194 // profile with an empty name part.
1231 TEST(AutofillProfileTest, SaveAdditionalInfo_Name_LossOfInformation) { 1195 TEST(AutofillProfileTest, SaveAdditionalInfo_Name_LossOfInformation) {
1232 AutofillProfile a; 1196 AutofillProfile a;
1233 1197
1234 a.SetRawInfo(NAME_FIRST, base::ASCIIToUTF16("Marion")); 1198 a.SetRawInfo(NAME_FIRST, base::ASCIIToUTF16("Marion"));
1235 a.SetRawInfo(NAME_MIDDLE, base::ASCIIToUTF16("Mitchell")); 1199 a.SetRawInfo(NAME_MIDDLE, base::ASCIIToUTF16("Mitchell"));
(...skipping 25 matching lines...) Expand all
1261 1225
1262 // The first, middle and last names should be kept and name full should be 1226 // The first, middle and last names should be kept and name full should be
1263 // added. 1227 // added.
1264 EXPECT_EQ(base::ASCIIToUTF16("Marion"), a.GetRawInfo(NAME_FIRST)); 1228 EXPECT_EQ(base::ASCIIToUTF16("Marion"), a.GetRawInfo(NAME_FIRST));
1265 EXPECT_EQ(base::ASCIIToUTF16("Mitchell"), a.GetRawInfo(NAME_MIDDLE)); 1229 EXPECT_EQ(base::ASCIIToUTF16("Mitchell"), a.GetRawInfo(NAME_MIDDLE));
1266 EXPECT_EQ(base::ASCIIToUTF16("Morrison"), a.GetRawInfo(NAME_LAST)); 1230 EXPECT_EQ(base::ASCIIToUTF16("Morrison"), a.GetRawInfo(NAME_LAST));
1267 EXPECT_EQ(base::ASCIIToUTF16("Marion Mitchell Morrison"), 1231 EXPECT_EQ(base::ASCIIToUTF16("Marion Mitchell Morrison"),
1268 a.GetRawInfo(NAME_FULL)); 1232 a.GetRawInfo(NAME_FULL));
1269 } 1233 }
1270 1234
1271 // Tests that PrimaryValues of two similar profiles with different
1272 // punctuation and case are equal.
1273 TEST(AutofillProfileTest, PrimaryValue_SimilarProfiles) {
1274 AutofillProfile profile1(base::GenerateGUID(), "https://www.example.com/");
1275 test::SetProfileInfo(&profile1, "Marion", "Mitchell", "Morrison",
1276 "marion@me.xyz", "Fox", "123 Zoo St.", "unit 5",
1277 "Hollywood", "CA", "91601", "US", "12345678910");
1278
1279 AutofillProfile profile2(base::GenerateGUID(), "https://www.example.com/");
1280 test::SetProfileInfo(&profile2, "marion", "mitchell", "morrison",
1281 "marion@me.xyz", "Fox", "123, Zoo St", "unit 5",
1282 "hollywood", "CA", "91601", "US", "12345678910");
1283
1284 EXPECT_EQ(profile1.PrimaryValue("en-US"), profile2.PrimaryValue("en-US"));
1285 }
1286
1287 } // namespace autofill 1235 } // namespace autofill
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698