| 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 11 matching lines...) Expand all  Loading... | 
| 22 using base::ASCIIToUTF16; | 22 using base::ASCIIToUTF16; | 
| 23 | 23 | 
| 24 namespace autofill { | 24 namespace autofill { | 
| 25 | 25 | 
| 26 namespace { | 26 namespace { | 
| 27 | 27 | 
| 28 base::string16 GetLabel(AutofillProfile* profile) { | 28 base::string16 GetLabel(AutofillProfile* profile) { | 
| 29   std::vector<AutofillProfile*> profiles; | 29   std::vector<AutofillProfile*> profiles; | 
| 30   profiles.push_back(profile); | 30   profiles.push_back(profile); | 
| 31   std::vector<base::string16> labels; | 31   std::vector<base::string16> labels; | 
| 32   AutofillProfile::CreateDifferentiatingLabels(profiles, &labels); | 32   AutofillProfile::CreateDifferentiatingLabels(profiles, "en-US", &labels); | 
| 33   return labels[0]; | 33   return labels[0]; | 
| 34 } | 34 } | 
| 35 | 35 | 
| 36 // Holds the autofill profile |first|, |middle| and |last| names. | 36 // Holds the autofill profile |first|, |middle| and |last| names. | 
| 37 struct NameParts { | 37 struct NameParts { | 
| 38   NameParts(const std::string& first, | 38   NameParts(const std::string& first, | 
| 39             const std::string& middle, | 39             const std::string& middle, | 
| 40             const std::string& last) | 40             const std::string& last) | 
| 41       : first(first), middle(middle), last(last) {} | 41       : first(first), middle(middle), last(last) {} | 
| 42 | 42 | 
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 169   // Case 7a: "<firstname> <lastname>, <address>" - same as #7, except for | 169   // Case 7a: "<firstname> <lastname>, <address>" - same as #7, except for | 
| 170   // e-mail. | 170   // e-mail. | 
| 171   AutofillProfile profile7a(base::GenerateGUID(), "https://www.example.com/"); | 171   AutofillProfile profile7a(base::GenerateGUID(), "https://www.example.com/"); | 
| 172   test::SetProfileInfo(&profile7a, "Marion", "Mitchell", | 172   test::SetProfileInfo(&profile7a, "Marion", "Mitchell", | 
| 173     "Morrison", "marion@me.xyz", "Fox", "123 Zoo St.", "unit 5", | 173     "Morrison", "marion@me.xyz", "Fox", "123 Zoo St.", "unit 5", | 
| 174     "Hollywood", "CA", "91601", "US", "16505678910"); | 174     "Hollywood", "CA", "91601", "US", "16505678910"); | 
| 175   std::vector<AutofillProfile*> profiles; | 175   std::vector<AutofillProfile*> profiles; | 
| 176   profiles.push_back(&profile7); | 176   profiles.push_back(&profile7); | 
| 177   profiles.push_back(&profile7a); | 177   profiles.push_back(&profile7a); | 
| 178   std::vector<base::string16> labels; | 178   std::vector<base::string16> labels; | 
| 179   AutofillProfile::CreateDifferentiatingLabels(profiles, &labels); | 179   AutofillProfile::CreateDifferentiatingLabels(profiles, "en-US", &labels); | 
| 180   ASSERT_EQ(profiles.size(), labels.size()); | 180   ASSERT_EQ(profiles.size(), labels.size()); | 
| 181   summary7 = labels[0]; | 181   summary7 = labels[0]; | 
| 182   base::string16 summary7a = labels[1]; | 182   base::string16 summary7a = labels[1]; | 
| 183   EXPECT_EQ(ASCIIToUTF16( | 183   EXPECT_EQ(ASCIIToUTF16( | 
| 184       "Marion Mitchell Morrison, 123 Zoo St., johnwayne@me.xyz"), summary7); | 184       "Marion Mitchell Morrison, 123 Zoo St., johnwayne@me.xyz"), summary7); | 
| 185   EXPECT_EQ(ASCIIToUTF16( | 185   EXPECT_EQ(ASCIIToUTF16( | 
| 186       "Marion Mitchell Morrison, 123 Zoo St., marion@me.xyz"), summary7a); | 186       "Marion Mitchell Morrison, 123 Zoo St., marion@me.xyz"), summary7a); | 
| 187 } | 187 } | 
| 188 | 188 | 
| 189 TEST(AutofillProfileTest, AdjustInferredLabels) { | 189 TEST(AutofillProfileTest, AdjustInferredLabels) { | 
| (...skipping 22 matching lines...) Expand all  Loading... | 
| 212       "Doe", | 212       "Doe", | 
| 213       "janedoe@tertium.com", | 213       "janedoe@tertium.com", | 
| 214       "Pluto Inc.", | 214       "Pluto Inc.", | 
| 215       "123 Letha Shore.", | 215       "123 Letha Shore.", | 
| 216       "", | 216       "", | 
| 217       "Dis", "CA", | 217       "Dis", "CA", | 
| 218       "91222", | 218       "91222", | 
| 219       "US", | 219       "US", | 
| 220       "12345678910"); | 220       "12345678910"); | 
| 221   std::vector<base::string16> labels; | 221   std::vector<base::string16> labels; | 
| 222   AutofillProfile::CreateDifferentiatingLabels(profiles.get(), &labels); | 222   AutofillProfile::CreateDifferentiatingLabels( | 
|  | 223       profiles.get(), "en-US", &labels); | 
| 223   ASSERT_EQ(2U, labels.size()); | 224   ASSERT_EQ(2U, labels.size()); | 
| 224   EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St."), labels[0]); | 225   EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St."), labels[0]); | 
| 225   EXPECT_EQ(ASCIIToUTF16("Jane Doe, 123 Letha Shore."), labels[1]); | 226   EXPECT_EQ(ASCIIToUTF16("Jane Doe, 123 Letha Shore."), labels[1]); | 
| 226 | 227 | 
| 227   profiles.push_back( | 228   profiles.push_back( | 
| 228       new AutofillProfile(base::GenerateGUID(), "Chrome settings")); | 229       new AutofillProfile(base::GenerateGUID(), "Chrome settings")); | 
| 229   test::SetProfileInfo( | 230   test::SetProfileInfo( | 
| 230       profiles[2], | 231       profiles[2], | 
| 231       "John", | 232       "John", | 
| 232       "", | 233       "", | 
| 233       "Doe", | 234       "Doe", | 
| 234       "johndoe@tertium.com", | 235       "johndoe@tertium.com", | 
| 235       "Underworld", | 236       "Underworld", | 
| 236       "666 Erebus St.", | 237       "666 Erebus St.", | 
| 237       "", | 238       "", | 
| 238       "Elysium", "CA", | 239       "Elysium", "CA", | 
| 239       "91111", | 240       "91111", | 
| 240       "US", | 241       "US", | 
| 241       "16502111111"); | 242       "16502111111"); | 
| 242   labels.clear(); | 243   labels.clear(); | 
| 243   AutofillProfile::CreateDifferentiatingLabels(profiles.get(), &labels); | 244   AutofillProfile::CreateDifferentiatingLabels( | 
|  | 245       profiles.get(), "en-US", &labels); | 
| 244 | 246 | 
| 245   // Profile 0 and 2 inferred label now includes an e-mail. | 247   // Profile 0 and 2 inferred label now includes an e-mail. | 
| 246   ASSERT_EQ(3U, labels.size()); | 248   ASSERT_EQ(3U, labels.size()); | 
| 247   EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., johndoe@hades.com"), | 249   EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., johndoe@hades.com"), | 
| 248             labels[0]); | 250             labels[0]); | 
| 249   EXPECT_EQ(ASCIIToUTF16("Jane Doe, 123 Letha Shore."), labels[1]); | 251   EXPECT_EQ(ASCIIToUTF16("Jane Doe, 123 Letha Shore."), labels[1]); | 
| 250   EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., johndoe@tertium.com"), | 252   EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., johndoe@tertium.com"), | 
| 251             labels[2]); | 253             labels[2]); | 
| 252 | 254 | 
| 253   profiles.resize(2); | 255   profiles.resize(2); | 
| 254 | 256 | 
| 255   profiles.push_back( | 257   profiles.push_back( | 
| 256       new AutofillProfile(base::GenerateGUID(), std::string())); | 258       new AutofillProfile(base::GenerateGUID(), std::string())); | 
| 257   test::SetProfileInfo( | 259   test::SetProfileInfo( | 
| 258       profiles[2], | 260       profiles[2], | 
| 259       "John", | 261       "John", | 
| 260       "", | 262       "", | 
| 261       "Doe", | 263       "Doe", | 
| 262       "johndoe@hades.com", | 264       "johndoe@hades.com", | 
| 263       "Underworld", | 265       "Underworld", | 
| 264       "666 Erebus St.", | 266       "666 Erebus St.", | 
| 265       "", | 267       "", | 
| 266       "Elysium", "CO",  // State is different | 268       "Elysium", "CO",  // State is different | 
| 267       "91111", | 269       "91111", | 
| 268       "US", | 270       "US", | 
| 269       "16502111111"); | 271       "16502111111"); | 
| 270 | 272 | 
| 271   labels.clear(); | 273   labels.clear(); | 
| 272   AutofillProfile::CreateDifferentiatingLabels(profiles.get(), &labels); | 274   AutofillProfile::CreateDifferentiatingLabels( | 
|  | 275       profiles.get(), "en-US", &labels); | 
| 273 | 276 | 
| 274   // Profile 0 and 2 inferred label now includes a state. | 277   // Profile 0 and 2 inferred label now includes a state. | 
| 275   ASSERT_EQ(3U, labels.size()); | 278   ASSERT_EQ(3U, labels.size()); | 
| 276   EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., CA"), labels[0]); | 279   EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., CA"), labels[0]); | 
| 277   EXPECT_EQ(ASCIIToUTF16("Jane Doe, 123 Letha Shore."), labels[1]); | 280   EXPECT_EQ(ASCIIToUTF16("Jane Doe, 123 Letha Shore."), labels[1]); | 
| 278   EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., CO"), labels[2]); | 281   EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., CO"), labels[2]); | 
| 279 | 282 | 
| 280   profiles.push_back( | 283   profiles.push_back( | 
| 281       new AutofillProfile(base::GenerateGUID(), "https://www.example.com/")); | 284       new AutofillProfile(base::GenerateGUID(), "https://www.example.com/")); | 
| 282   test::SetProfileInfo( | 285   test::SetProfileInfo( | 
| 283       profiles[3], | 286       profiles[3], | 
| 284       "John", | 287       "John", | 
| 285       "", | 288       "", | 
| 286       "Doe", | 289       "Doe", | 
| 287       "johndoe@hades.com", | 290       "johndoe@hades.com", | 
| 288       "Underworld", | 291       "Underworld", | 
| 289       "666 Erebus St.", | 292       "666 Erebus St.", | 
| 290       "", | 293       "", | 
| 291       "Elysium", "CO",  // State is different for some. | 294       "Elysium", "CO",  // State is different for some. | 
| 292       "91111", | 295       "91111", | 
| 293       "US", | 296       "US", | 
| 294       "16504444444");  // Phone is different for some. | 297       "16504444444");  // Phone is different for some. | 
| 295 | 298 | 
| 296   labels.clear(); | 299   labels.clear(); | 
| 297   AutofillProfile::CreateDifferentiatingLabels(profiles.get(), &labels); | 300   AutofillProfile::CreateDifferentiatingLabels( | 
|  | 301       profiles.get(), "en-US", &labels); | 
| 298   ASSERT_EQ(4U, labels.size()); | 302   ASSERT_EQ(4U, labels.size()); | 
| 299   EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., CA"), labels[0]); | 303   EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., CA"), labels[0]); | 
| 300   EXPECT_EQ(ASCIIToUTF16("Jane Doe, 123 Letha Shore."), labels[1]); | 304   EXPECT_EQ(ASCIIToUTF16("Jane Doe, 123 Letha Shore."), labels[1]); | 
| 301   EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., CO, 16502111111"), | 305   EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., CO, 16502111111"), | 
| 302             labels[2]); | 306             labels[2]); | 
| 303   // This one differs from other ones by unique phone, so no need for extra | 307   // This one differs from other ones by unique phone, so no need for extra | 
| 304   // information. | 308   // information. | 
| 305   EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., CO, 16504444444"), | 309   EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., CO, 16504444444"), | 
| 306             labels[3]); | 310             labels[3]); | 
| 307 | 311 | 
| 308   profiles.push_back( | 312   profiles.push_back( | 
| 309       new AutofillProfile(base::GenerateGUID(), "https://www.example.com/")); | 313       new AutofillProfile(base::GenerateGUID(), "https://www.example.com/")); | 
| 310   test::SetProfileInfo( | 314   test::SetProfileInfo( | 
| 311       profiles[4], | 315       profiles[4], | 
| 312       "John", | 316       "John", | 
| 313       "", | 317       "", | 
| 314       "Doe", | 318       "Doe", | 
| 315       "johndoe@styx.com",  // E-Mail is different for some. | 319       "johndoe@styx.com",  // E-Mail is different for some. | 
| 316       "Underworld", | 320       "Underworld", | 
| 317       "666 Erebus St.", | 321       "666 Erebus St.", | 
| 318       "", | 322       "", | 
| 319       "Elysium", "CO",  // State is different for some. | 323       "Elysium", "CO",  // State is different for some. | 
| 320       "91111", | 324       "91111", | 
| 321       "US", | 325       "US", | 
| 322       "16504444444");  // Phone is different for some. | 326       "16504444444");  // Phone is different for some. | 
| 323 | 327 | 
| 324   labels.clear(); | 328   labels.clear(); | 
| 325   AutofillProfile::CreateDifferentiatingLabels(profiles.get(), &labels); | 329   AutofillProfile::CreateDifferentiatingLabels( | 
|  | 330       profiles.get(), "en-US", &labels); | 
| 326   ASSERT_EQ(5U, labels.size()); | 331   ASSERT_EQ(5U, labels.size()); | 
| 327   EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., CA"), labels[0]); | 332   EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., CA"), labels[0]); | 
| 328   EXPECT_EQ(ASCIIToUTF16("Jane Doe, 123 Letha Shore."), labels[1]); | 333   EXPECT_EQ(ASCIIToUTF16("Jane Doe, 123 Letha Shore."), labels[1]); | 
| 329   EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., CO, johndoe@hades.com," | 334   EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., CO, johndoe@hades.com," | 
| 330                          " 16502111111"), labels[2]); | 335                          " 16502111111"), labels[2]); | 
| 331   EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., CO, johndoe@hades.com," | 336   EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., CO, johndoe@hades.com," | 
| 332                          " 16504444444"), labels[3]); | 337                          " 16504444444"), labels[3]); | 
| 333   // This one differs from other ones by unique e-mail, so no need for extra | 338   // This one differs from other ones by unique e-mail, so no need for extra | 
| 334   // information. | 339   // information. | 
| 335   EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., CO, johndoe@styx.com"), | 340   EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., CO, johndoe@styx.com"), | 
| (...skipping 26 matching lines...) Expand all  Loading... | 
| 362                        "Pluto Inc.", | 367                        "Pluto Inc.", | 
| 363                        "123 Letha Shore.", | 368                        "123 Letha Shore.", | 
| 364                        "", | 369                        "", | 
| 365                        "Dis", "CA", | 370                        "Dis", "CA", | 
| 366                        "91222", | 371                        "91222", | 
| 367                        "US", | 372                        "US", | 
| 368                        "12345678910"); | 373                        "12345678910"); | 
| 369   std::vector<base::string16> labels; | 374   std::vector<base::string16> labels; | 
| 370   // Two fields at least - no filter. | 375   // Two fields at least - no filter. | 
| 371   AutofillProfile::CreateInferredLabels(profiles.get(), NULL, UNKNOWN_TYPE, 2, | 376   AutofillProfile::CreateInferredLabels(profiles.get(), NULL, UNKNOWN_TYPE, 2, | 
| 372                                         &labels); | 377                                         "en-US", &labels); | 
| 373   EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St."), labels[0]); | 378   EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St."), labels[0]); | 
| 374   EXPECT_EQ(ASCIIToUTF16("Jane Doe, 123 Letha Shore."), labels[1]); | 379   EXPECT_EQ(ASCIIToUTF16("Jane Doe, 123 Letha Shore."), labels[1]); | 
| 375 | 380 | 
| 376   // Three fields at least - no filter. | 381   // Three fields at least - no filter. | 
| 377   AutofillProfile::CreateInferredLabels(profiles.get(), NULL, UNKNOWN_TYPE, 3, | 382   AutofillProfile::CreateInferredLabels(profiles.get(), NULL, UNKNOWN_TYPE, 3, | 
| 378                                         &labels); | 383                                         "en-US", &labels); | 
| 379   EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., Elysium"), | 384   EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., Elysium"), | 
| 380             labels[0]); | 385             labels[0]); | 
| 381   EXPECT_EQ(ASCIIToUTF16("Jane Doe, 123 Letha Shore., Dis"), | 386   EXPECT_EQ(ASCIIToUTF16("Jane Doe, 123 Letha Shore., Dis"), | 
| 382             labels[1]); | 387             labels[1]); | 
| 383 | 388 | 
| 384   std::vector<ServerFieldType> suggested_fields; | 389   std::vector<ServerFieldType> suggested_fields; | 
| 385   suggested_fields.push_back(ADDRESS_HOME_CITY); | 390   suggested_fields.push_back(ADDRESS_HOME_CITY); | 
| 386   suggested_fields.push_back(ADDRESS_HOME_STATE); | 391   suggested_fields.push_back(ADDRESS_HOME_STATE); | 
| 387   suggested_fields.push_back(ADDRESS_HOME_ZIP); | 392   suggested_fields.push_back(ADDRESS_HOME_ZIP); | 
| 388 | 393 | 
| 389   // Two fields at least, from suggested fields - no filter. | 394   // Two fields at least, from suggested fields - no filter. | 
| 390   AutofillProfile::CreateInferredLabels(profiles.get(), &suggested_fields, | 395   AutofillProfile::CreateInferredLabels(profiles.get(), &suggested_fields, | 
| 391                                         UNKNOWN_TYPE, 2, &labels); | 396                                         UNKNOWN_TYPE, 2, "en-US", &labels); | 
| 392   EXPECT_EQ(ASCIIToUTF16("Elysium, CA"), labels[0]); | 397   EXPECT_EQ(ASCIIToUTF16("Elysium, CA"), labels[0]); | 
| 393   EXPECT_EQ(ASCIIToUTF16("Dis, CA"), labels[1]); | 398   EXPECT_EQ(ASCIIToUTF16("Dis, CA"), labels[1]); | 
| 394 | 399 | 
| 395   // Three fields at least, from suggested fields - no filter. | 400   // Three fields at least, from suggested fields - no filter. | 
| 396   AutofillProfile::CreateInferredLabels(profiles.get(), &suggested_fields, | 401   AutofillProfile::CreateInferredLabels(profiles.get(), &suggested_fields, | 
| 397                                         UNKNOWN_TYPE, 3, &labels); | 402                                         UNKNOWN_TYPE, 3, "en-US", &labels); | 
| 398   EXPECT_EQ(ASCIIToUTF16("Elysium, CA, 91111"), labels[0]); | 403   EXPECT_EQ(ASCIIToUTF16("Elysium, CA, 91111"), labels[0]); | 
| 399   EXPECT_EQ(ASCIIToUTF16("Dis, CA, 91222"), labels[1]); | 404   EXPECT_EQ(ASCIIToUTF16("Dis, CA, 91222"), labels[1]); | 
| 400 | 405 | 
| 401   // Three fields at least, from suggested fields - but filter reduces available | 406   // Three fields at least, from suggested fields - but filter reduces available | 
| 402   // fields to two. | 407   // fields to two. | 
| 403   AutofillProfile::CreateInferredLabels(profiles.get(), &suggested_fields, | 408   AutofillProfile::CreateInferredLabels(profiles.get(), &suggested_fields, | 
| 404                                         ADDRESS_HOME_STATE, 3, &labels); | 409                                         ADDRESS_HOME_STATE, 3, "en-US", | 
|  | 410                                         &labels); | 
| 405   EXPECT_EQ(ASCIIToUTF16("Elysium, 91111"), labels[0]); | 411   EXPECT_EQ(ASCIIToUTF16("Elysium, 91111"), labels[0]); | 
| 406   EXPECT_EQ(ASCIIToUTF16("Dis, 91222"), labels[1]); | 412   EXPECT_EQ(ASCIIToUTF16("Dis, 91222"), labels[1]); | 
| 407 | 413 | 
| 408   suggested_fields.clear(); | 414   suggested_fields.clear(); | 
| 409   // In our implementation we always display NAME_FULL for all NAME* fields... | 415   // In our implementation we always display NAME_FULL for all NAME* fields... | 
| 410   suggested_fields.push_back(NAME_MIDDLE); | 416   suggested_fields.push_back(NAME_MIDDLE); | 
| 411   // One field at least, from suggested fields - no filter. | 417   // One field at least, from suggested fields - no filter. | 
| 412   AutofillProfile::CreateInferredLabels(profiles.get(), &suggested_fields, | 418   AutofillProfile::CreateInferredLabels(profiles.get(), &suggested_fields, | 
| 413                                         UNKNOWN_TYPE, 1, &labels); | 419                                         UNKNOWN_TYPE, 1, "en-US", &labels); | 
| 414   EXPECT_EQ(ASCIIToUTF16("John Doe"), labels[0]); | 420   EXPECT_EQ(ASCIIToUTF16("John Doe"), labels[0]); | 
| 415   EXPECT_EQ(ASCIIToUTF16("Jane Doe"), labels[1]); | 421   EXPECT_EQ(ASCIIToUTF16("Jane Doe"), labels[1]); | 
| 416 | 422 | 
| 417   // One field at least, from suggested fields - filter the same as suggested | 423   // One field at least, from suggested fields - filter the same as suggested | 
| 418   // field. | 424   // field. | 
| 419   AutofillProfile::CreateInferredLabels(profiles.get(), &suggested_fields, | 425   AutofillProfile::CreateInferredLabels(profiles.get(), &suggested_fields, | 
| 420                                         NAME_MIDDLE, 1, &labels); | 426                                         NAME_MIDDLE, 1, "en-US", &labels); | 
| 421   EXPECT_EQ(base::string16(), labels[0]); | 427   EXPECT_EQ(base::string16(), labels[0]); | 
| 422   EXPECT_EQ(base::string16(), labels[1]); | 428   EXPECT_EQ(base::string16(), labels[1]); | 
| 423 | 429 | 
| 424   suggested_fields.clear(); | 430   suggested_fields.clear(); | 
| 425   // In our implementation we always display NAME_FULL for NAME_MIDDLE_INITIAL | 431   // In our implementation we always display NAME_FULL for NAME_MIDDLE_INITIAL | 
| 426   suggested_fields.push_back(NAME_MIDDLE_INITIAL); | 432   suggested_fields.push_back(NAME_MIDDLE_INITIAL); | 
| 427   // One field at least, from suggested fields - no filter. | 433   // One field at least, from suggested fields - no filter. | 
| 428   AutofillProfile::CreateInferredLabels(profiles.get(), &suggested_fields, | 434   AutofillProfile::CreateInferredLabels(profiles.get(), &suggested_fields, | 
| 429                                         UNKNOWN_TYPE, 1, &labels); | 435                                         UNKNOWN_TYPE, 1, "en-US", &labels); | 
| 430   EXPECT_EQ(ASCIIToUTF16("John Doe"), labels[0]); | 436   EXPECT_EQ(ASCIIToUTF16("John Doe"), labels[0]); | 
| 431   EXPECT_EQ(ASCIIToUTF16("Jane Doe"), labels[1]); | 437   EXPECT_EQ(ASCIIToUTF16("Jane Doe"), labels[1]); | 
| 432 | 438 | 
| 433   // One field at least, from suggested fields - filter same as the first non- | 439   // One field at least, from suggested fields - filter same as the first non- | 
| 434   // unknown suggested field. | 440   // unknown suggested field. | 
| 435   suggested_fields.clear(); | 441   suggested_fields.clear(); | 
| 436   suggested_fields.push_back(UNKNOWN_TYPE); | 442   suggested_fields.push_back(UNKNOWN_TYPE); | 
| 437   suggested_fields.push_back(NAME_FULL); | 443   suggested_fields.push_back(NAME_FULL); | 
| 438   suggested_fields.push_back(ADDRESS_HOME_LINE1); | 444   suggested_fields.push_back(ADDRESS_HOME_LINE1); | 
| 439   AutofillProfile::CreateInferredLabels(profiles.get(), &suggested_fields, | 445   AutofillProfile::CreateInferredLabels(profiles.get(), &suggested_fields, | 
| 440                                         NAME_FULL, 1, &labels); | 446                                         NAME_FULL, 1, "en-US", &labels); | 
| 441   EXPECT_EQ(base::string16(ASCIIToUTF16("666 Erebus St.")), labels[0]); | 447   EXPECT_EQ(base::string16(ASCIIToUTF16("666 Erebus St.")), labels[0]); | 
| 442   EXPECT_EQ(base::string16(ASCIIToUTF16("123 Letha Shore.")), labels[1]); | 448   EXPECT_EQ(base::string16(ASCIIToUTF16("123 Letha Shore.")), labels[1]); | 
| 443 } | 449 } | 
| 444 | 450 | 
| 445 // Test that we fall back to using the full name if there are no other | 451 // Test that we fall back to using the full name if there are no other | 
| 446 // distinguishing fields, but only if it makes sense given the suggested fields. | 452 // distinguishing fields, but only if it makes sense given the suggested fields. | 
| 447 TEST(AutofillProfileTest, CreateInferredLabelsFallsBackToFullName) { | 453 TEST(AutofillProfileTest, CreateInferredLabelsFallsBackToFullName) { | 
| 448   ScopedVector<AutofillProfile> profiles; | 454   ScopedVector<AutofillProfile> profiles; | 
| 449   profiles.push_back( | 455   profiles.push_back( | 
| 450       new AutofillProfile(base::GenerateGUID(), "https://www.example.com/")); | 456       new AutofillProfile(base::GenerateGUID(), "https://www.example.com/")); | 
| 451   test::SetProfileInfo(profiles[0], | 457   test::SetProfileInfo(profiles[0], | 
| 452                        "John", "", "Doe", "doe@example.com", "", | 458                        "John", "", "Doe", "doe@example.com", "", | 
| 453                        "88 Nowhere Ave.", "", "", "", "", "", ""); | 459                        "88 Nowhere Ave.", "", "", "", "", "", ""); | 
| 454   profiles.push_back( | 460   profiles.push_back( | 
| 455       new AutofillProfile(base::GenerateGUID(), "https://www.example.com/")); | 461       new AutofillProfile(base::GenerateGUID(), "https://www.example.com/")); | 
| 456   test::SetProfileInfo(profiles[1], | 462   test::SetProfileInfo(profiles[1], | 
| 457                        "Johnny", "K", "Doe", "doe@example.com", "", | 463                        "Johnny", "K", "Doe", "doe@example.com", "", | 
| 458                        "88 Nowhere Ave.", "", "", "", "", "", ""); | 464                        "88 Nowhere Ave.", "", "", "", "", "", ""); | 
| 459 | 465 | 
| 460   // If the only name field in the suggested fields is the excluded field, we | 466   // If the only name field in the suggested fields is the excluded field, we | 
| 461   // should not fall back to the full name as a distinguishing field. | 467   // should not fall back to the full name as a distinguishing field. | 
| 462   std::vector<ServerFieldType> suggested_fields; | 468   std::vector<ServerFieldType> suggested_fields; | 
| 463   suggested_fields.push_back(NAME_LAST); | 469   suggested_fields.push_back(NAME_LAST); | 
| 464   suggested_fields.push_back(ADDRESS_HOME_LINE1); | 470   suggested_fields.push_back(ADDRESS_HOME_LINE1); | 
| 465   suggested_fields.push_back(EMAIL_ADDRESS); | 471   suggested_fields.push_back(EMAIL_ADDRESS); | 
| 466   std::vector<base::string16> labels; | 472   std::vector<base::string16> labels; | 
| 467   AutofillProfile::CreateInferredLabels(profiles.get(), &suggested_fields, | 473   AutofillProfile::CreateInferredLabels(profiles.get(), &suggested_fields, | 
| 468                                         NAME_LAST, 1, &labels); | 474                                         NAME_LAST, 1, "en-US", &labels); | 
| 469   ASSERT_EQ(2U, labels.size()); | 475   ASSERT_EQ(2U, labels.size()); | 
| 470   EXPECT_EQ(ASCIIToUTF16("88 Nowhere Ave."), labels[0]); | 476   EXPECT_EQ(ASCIIToUTF16("88 Nowhere Ave."), labels[0]); | 
| 471   EXPECT_EQ(ASCIIToUTF16("88 Nowhere Ave."), labels[1]); | 477   EXPECT_EQ(ASCIIToUTF16("88 Nowhere Ave."), labels[1]); | 
| 472 | 478 | 
| 473   // Otherwise, we should. | 479   // Otherwise, we should. | 
| 474   suggested_fields.push_back(NAME_FIRST); | 480   suggested_fields.push_back(NAME_FIRST); | 
| 475   AutofillProfile::CreateInferredLabels(profiles.get(),  &suggested_fields, | 481   AutofillProfile::CreateInferredLabels(profiles.get(),  &suggested_fields, | 
| 476                                         NAME_LAST, 1, &labels); | 482                                         NAME_LAST, 1, "en-US", &labels); | 
| 477   ASSERT_EQ(2U, labels.size()); | 483   ASSERT_EQ(2U, labels.size()); | 
| 478   EXPECT_EQ(ASCIIToUTF16("88 Nowhere Ave., John Doe"), labels[0]); | 484   EXPECT_EQ(ASCIIToUTF16("88 Nowhere Ave., John Doe"), labels[0]); | 
| 479   EXPECT_EQ(ASCIIToUTF16("88 Nowhere Ave., Johnny K Doe"), labels[1]); | 485   EXPECT_EQ(ASCIIToUTF16("88 Nowhere Ave., Johnny K Doe"), labels[1]); | 
| 480 } | 486 } | 
| 481 | 487 | 
| 482 // Test that we do not show duplicate fields in the labels. | 488 // Test that we do not show duplicate fields in the labels. | 
| 483 TEST(AutofillProfileTest, CreateInferredLabelsNoDuplicatedFields) { | 489 TEST(AutofillProfileTest, CreateInferredLabelsNoDuplicatedFields) { | 
| 484   ScopedVector<AutofillProfile> profiles; | 490   ScopedVector<AutofillProfile> profiles; | 
| 485   profiles.push_back( | 491   profiles.push_back( | 
| 486       new AutofillProfile(base::GenerateGUID(), "https://www.example.com/")); | 492       new AutofillProfile(base::GenerateGUID(), "https://www.example.com/")); | 
| 487   test::SetProfileInfo(profiles[0], | 493   test::SetProfileInfo(profiles[0], | 
| 488                        "John", "", "Doe", "doe@example.com", "", | 494                        "John", "", "Doe", "doe@example.com", "", | 
| 489                        "88 Nowhere Ave.", "", "", "", "", "", ""); | 495                        "88 Nowhere Ave.", "", "", "", "", "", ""); | 
| 490   profiles.push_back( | 496   profiles.push_back( | 
| 491       new AutofillProfile(base::GenerateGUID(), "https://www.example.com/")); | 497       new AutofillProfile(base::GenerateGUID(), "https://www.example.com/")); | 
| 492   test::SetProfileInfo(profiles[1], | 498   test::SetProfileInfo(profiles[1], | 
| 493                        "John", "", "Doe", "dojo@example.com", "", | 499                        "John", "", "Doe", "dojo@example.com", "", | 
| 494                        "88 Nowhere Ave.", "", "", "", "", "", ""); | 500                        "88 Nowhere Ave.", "", "", "", "", "", ""); | 
| 495 | 501 | 
| 496   // If the only name field in the suggested fields is the excluded field, we | 502   // If the only name field in the suggested fields is the excluded field, we | 
| 497   // should not fall back to the full name as a distinguishing field. | 503   // should not fall back to the full name as a distinguishing field. | 
| 498   std::vector<ServerFieldType> suggested_fields; | 504   std::vector<ServerFieldType> suggested_fields; | 
| 499   suggested_fields.push_back(ADDRESS_HOME_LINE1); | 505   suggested_fields.push_back(ADDRESS_HOME_LINE1); | 
| 500   suggested_fields.push_back(ADDRESS_BILLING_LINE1); | 506   suggested_fields.push_back(ADDRESS_BILLING_LINE1); | 
| 501   suggested_fields.push_back(EMAIL_ADDRESS); | 507   suggested_fields.push_back(EMAIL_ADDRESS); | 
| 502   std::vector<base::string16> labels; | 508   std::vector<base::string16> labels; | 
| 503   AutofillProfile::CreateInferredLabels(profiles.get(), &suggested_fields, | 509   AutofillProfile::CreateInferredLabels(profiles.get(), &suggested_fields, | 
| 504                                         UNKNOWN_TYPE, 2, &labels); | 510                                         UNKNOWN_TYPE, 2, "en-US", &labels); | 
| 505   ASSERT_EQ(2U, labels.size()); | 511   ASSERT_EQ(2U, labels.size()); | 
| 506   EXPECT_EQ(ASCIIToUTF16("88 Nowhere Ave., doe@example.com"), labels[0]); | 512   EXPECT_EQ(ASCIIToUTF16("88 Nowhere Ave., doe@example.com"), labels[0]); | 
| 507   EXPECT_EQ(ASCIIToUTF16("88 Nowhere Ave., dojo@example.com"), labels[1]); | 513   EXPECT_EQ(ASCIIToUTF16("88 Nowhere Ave., dojo@example.com"), labels[1]); | 
| 508 } | 514 } | 
| 509 | 515 | 
| 510 // Make sure that empty fields are not treated as distinguishing fields. | 516 // Make sure that empty fields are not treated as distinguishing fields. | 
| 511 TEST(AutofillProfileTest, CreateInferredLabelsSkipsEmptyFields) { | 517 TEST(AutofillProfileTest, CreateInferredLabelsSkipsEmptyFields) { | 
| 512   ScopedVector<AutofillProfile> profiles; | 518   ScopedVector<AutofillProfile> profiles; | 
| 513   profiles.push_back( | 519   profiles.push_back( | 
| 514       new AutofillProfile(base::GenerateGUID(), "https://www.example.com/")); | 520       new AutofillProfile(base::GenerateGUID(), "https://www.example.com/")); | 
| 515   test::SetProfileInfo(profiles[0], | 521   test::SetProfileInfo(profiles[0], | 
| 516                        "John", "", "Doe", "doe@example.com", | 522                        "John", "", "Doe", "doe@example.com", | 
| 517                        "Gogole", "", "", "", "", "", "", ""); | 523                        "Gogole", "", "", "", "", "", "", ""); | 
| 518   profiles.push_back( | 524   profiles.push_back( | 
| 519       new AutofillProfile(base::GenerateGUID(), "https://www.example.com/")); | 525       new AutofillProfile(base::GenerateGUID(), "https://www.example.com/")); | 
| 520   test::SetProfileInfo(profiles[1], | 526   test::SetProfileInfo(profiles[1], | 
| 521                        "John", "", "Doe", "doe@example.com", | 527                        "John", "", "Doe", "doe@example.com", | 
| 522                        "Ggoole", "", "", "", "", "", "", ""); | 528                        "Ggoole", "", "", "", "", "", "", ""); | 
| 523   profiles.push_back( | 529   profiles.push_back( | 
| 524       new AutofillProfile(base::GenerateGUID(), "https://www.example.com/")); | 530       new AutofillProfile(base::GenerateGUID(), "https://www.example.com/")); | 
| 525   test::SetProfileInfo(profiles[2], | 531   test::SetProfileInfo(profiles[2], | 
| 526                        "John", "", "Doe", "john.doe@example.com", | 532                        "John", "", "Doe", "john.doe@example.com", | 
| 527                        "Goolge", "", "", "", "", "", "", ""); | 533                        "Goolge", "", "", "", "", "", "", ""); | 
| 528 | 534 | 
| 529   std::vector<base::string16> labels; | 535   std::vector<base::string16> labels; | 
| 530   AutofillProfile::CreateInferredLabels(profiles.get(), NULL, UNKNOWN_TYPE, 3, | 536   AutofillProfile::CreateInferredLabels(profiles.get(), NULL, UNKNOWN_TYPE, 3, | 
| 531                                         &labels); | 537                                         "en-US", &labels); | 
| 532   ASSERT_EQ(3U, labels.size()); | 538   ASSERT_EQ(3U, labels.size()); | 
| 533   EXPECT_EQ(ASCIIToUTF16("John Doe, doe@example.com, Gogole"), labels[0]); | 539   EXPECT_EQ(ASCIIToUTF16("John Doe, doe@example.com, Gogole"), labels[0]); | 
| 534   EXPECT_EQ(ASCIIToUTF16("John Doe, doe@example.com, Ggoole"), labels[1]); | 540   EXPECT_EQ(ASCIIToUTF16("John Doe, doe@example.com, Ggoole"), labels[1]); | 
| 535   EXPECT_EQ(ASCIIToUTF16("John Doe, john.doe@example.com, Goolge"), labels[2]); | 541   EXPECT_EQ(ASCIIToUTF16("John Doe, john.doe@example.com, Goolge"), labels[2]); | 
| 536 | 542 | 
| 537   // A field must have a non-empty value for each profile to be considered a | 543   // A field must have a non-empty value for each profile to be considered a | 
| 538   // distinguishing field. | 544   // distinguishing field. | 
| 539   profiles[1]->SetRawInfo(ADDRESS_HOME_LINE1, ASCIIToUTF16("88 Nowhere Ave.")); | 545   profiles[1]->SetRawInfo(ADDRESS_HOME_LINE1, ASCIIToUTF16("88 Nowhere Ave.")); | 
| 540   AutofillProfile::CreateInferredLabels(profiles.get(), NULL, UNKNOWN_TYPE, 1, | 546   AutofillProfile::CreateInferredLabels(profiles.get(), NULL, UNKNOWN_TYPE, 1, | 
| 541                                         &labels); | 547                                         "en-US", &labels); | 
| 542   ASSERT_EQ(3U, labels.size()); | 548   ASSERT_EQ(3U, labels.size()); | 
| 543   EXPECT_EQ(ASCIIToUTF16("John Doe, doe@example.com, Gogole"), labels[0]); | 549   EXPECT_EQ(ASCIIToUTF16("John Doe, doe@example.com, Gogole"), labels[0]); | 
| 544   EXPECT_EQ(ASCIIToUTF16("John Doe, 88 Nowhere Ave., doe@example.com, Ggoole"), | 550   EXPECT_EQ(ASCIIToUTF16("John Doe, 88 Nowhere Ave., doe@example.com, Ggoole"), | 
| 545             labels[1]) << labels[1]; | 551             labels[1]) << labels[1]; | 
| 546   EXPECT_EQ(ASCIIToUTF16("John Doe, john.doe@example.com"), labels[2]); | 552   EXPECT_EQ(ASCIIToUTF16("John Doe, john.doe@example.com"), labels[2]); | 
| 547 } | 553 } | 
| 548 | 554 | 
| 549 // Test that labels that would otherwise have multiline values are flattened. | 555 // Test that labels that would otherwise have multiline values are flattened. | 
| 550 TEST(AutofillProfileTest, CreateInferredLabelsFlattensMultiLineValues) { | 556 TEST(AutofillProfileTest, CreateInferredLabelsFlattensMultiLineValues) { | 
| 551   ScopedVector<AutofillProfile> profiles; | 557   ScopedVector<AutofillProfile> profiles; | 
| 552   profiles.push_back( | 558   profiles.push_back( | 
| 553       new AutofillProfile(base::GenerateGUID(), "https://www.example.com/")); | 559       new AutofillProfile(base::GenerateGUID(), "https://www.example.com/")); | 
| 554   test::SetProfileInfo(profiles[0], | 560   test::SetProfileInfo(profiles[0], | 
| 555                        "John", "", "Doe", "doe@example.com", "", | 561                        "John", "", "Doe", "doe@example.com", "", | 
| 556                        "88 Nowhere Ave.", "Apt. 42", "", "", "", "", ""); | 562                        "88 Nowhere Ave.", "Apt. 42", "", "", "", "", ""); | 
| 557 | 563 | 
| 558   // If the only name field in the suggested fields is the excluded field, we | 564   // If the only name field in the suggested fields is the excluded field, we | 
| 559   // should not fall back to the full name as a distinguishing field. | 565   // should not fall back to the full name as a distinguishing field. | 
| 560   std::vector<ServerFieldType> suggested_fields; | 566   std::vector<ServerFieldType> suggested_fields; | 
| 561   suggested_fields.push_back(NAME_FULL); | 567   suggested_fields.push_back(NAME_FULL); | 
| 562   suggested_fields.push_back(ADDRESS_HOME_STREET_ADDRESS); | 568   suggested_fields.push_back(ADDRESS_HOME_STREET_ADDRESS); | 
| 563   std::vector<base::string16> labels; | 569   std::vector<base::string16> labels; | 
| 564   AutofillProfile::CreateInferredLabels(profiles.get(), &suggested_fields, | 570   AutofillProfile::CreateInferredLabels(profiles.get(), &suggested_fields, | 
| 565                                         NAME_FULL, 1, &labels); | 571                                         NAME_FULL, 1, "en-US", &labels); | 
| 566   ASSERT_EQ(1U, labels.size()); | 572   ASSERT_EQ(1U, labels.size()); | 
| 567   EXPECT_EQ(ASCIIToUTF16("88 Nowhere Ave., Apt. 42"), labels[0]); | 573   EXPECT_EQ(ASCIIToUTF16("88 Nowhere Ave., Apt. 42"), labels[0]); | 
| 568 } | 574 } | 
| 569 | 575 | 
| 570 TEST(AutofillProfileTest, IsSubsetOf) { | 576 TEST(AutofillProfileTest, IsSubsetOf) { | 
| 571   scoped_ptr<AutofillProfile> a, b; | 577   scoped_ptr<AutofillProfile> a, b; | 
| 572 | 578 | 
| 573   // |a| is a subset of |b|. | 579   // |a| is a subset of |b|. | 
| 574   a.reset( | 580   a.reset( | 
| 575       new AutofillProfile(base::GenerateGUID(), "https://www.example.com/")); | 581       new AutofillProfile(base::GenerateGUID(), "https://www.example.com/")); | 
| (...skipping 26 matching lines...) Expand all  Loading... | 
| 602       NULL); | 608       NULL); | 
| 603   EXPECT_FALSE(a->IsSubsetOf(*b, "en-US")); | 609   EXPECT_FALSE(a->IsSubsetOf(*b, "en-US")); | 
| 604 } | 610 } | 
| 605 | 611 | 
| 606 TEST(AutofillProfileTest, OverwriteWithOrAddTo) { | 612 TEST(AutofillProfileTest, OverwriteWithOrAddTo) { | 
| 607   AutofillProfile a(base::GenerateGUID(), "https://www.example.com"); | 613   AutofillProfile a(base::GenerateGUID(), "https://www.example.com"); | 
| 608   test::SetProfileInfo(&a, "Marion", "Mitchell", "Morrison", | 614   test::SetProfileInfo(&a, "Marion", "Mitchell", "Morrison", | 
| 609                        "marion@me.xyz", "Fox", "123 Zoo St.", "unit 5", | 615                        "marion@me.xyz", "Fox", "123 Zoo St.", "unit 5", | 
| 610                        "Hollywood", "CA", "91601", "US", | 616                        "Hollywood", "CA", "91601", "US", | 
| 611                        "12345678910"); | 617                        "12345678910"); | 
| 612   std::vector<base::string16> names; | 618   std::vector<base::string16> first_names; | 
| 613   a.GetRawMultiInfo(NAME_FULL, &names); | 619   a.GetRawMultiInfo(NAME_FIRST, &first_names); | 
| 614   names.push_back(ASCIIToUTF16("Marion Morrison")); | 620   first_names.push_back(ASCIIToUTF16("Marion")); | 
| 615   a.SetRawMultiInfo(NAME_FULL, names); | 621   a.SetRawMultiInfo(NAME_FIRST, first_names); | 
|  | 622 | 
|  | 623   std::vector<base::string16> last_names; | 
|  | 624   a.GetRawMultiInfo(NAME_LAST, &last_names); | 
|  | 625   last_names[last_names.size() - 1] = ASCIIToUTF16("Morrison"); | 
|  | 626   a.SetRawMultiInfo(NAME_LAST, last_names); | 
| 616 | 627 | 
| 617   // Create an identical profile except that the new profile: | 628   // Create an identical profile except that the new profile: | 
| 618   //   (1) Has a different origin, | 629   //   (1) Has a different origin, | 
| 619   //   (2) Has a different address line 2, | 630   //   (2) Has a different address line 2, | 
| 620   //   (3) Lacks a company name, | 631   //   (3) Lacks a company name, | 
| 621   //   (4) Has a different full name variant, and | 632   //   (4) Has a different full name variant, and | 
| 622   //   (5) Has a language code. | 633   //   (5) Has a language code. | 
| 623   AutofillProfile b = a; | 634   AutofillProfile b = a; | 
| 624   b.set_guid(base::GenerateGUID()); | 635   b.set_guid(base::GenerateGUID()); | 
| 625   b.set_origin("Chrome settings"); | 636   b.set_origin("Chrome settings"); | 
| 626   b.SetRawInfo(ADDRESS_HOME_LINE2, ASCIIToUTF16("area 51")); | 637   b.SetRawInfo(ADDRESS_HOME_LINE2, ASCIIToUTF16("area 51")); | 
| 627   b.SetRawInfo(COMPANY_NAME, base::string16()); | 638   b.SetRawInfo(COMPANY_NAME, base::string16()); | 
| 628   b.GetRawMultiInfo(NAME_FULL, &names); | 639 | 
|  | 640   std::vector<base::string16> names; | 
|  | 641   b.GetMultiInfo(AutofillType(NAME_FULL), "en-US", &names); | 
| 629   names.push_back(ASCIIToUTF16("Marion M. Morrison")); | 642   names.push_back(ASCIIToUTF16("Marion M. Morrison")); | 
| 630   b.SetRawMultiInfo(NAME_FULL, names); | 643   b.SetRawMultiInfo(NAME_FULL, names); | 
| 631   b.set_language_code("en"); | 644   b.set_language_code("en"); | 
| 632 | 645 | 
| 633   a.OverwriteWithOrAddTo(b, "en-US"); | 646   a.OverwriteWithOrAddTo(b, "en-US"); | 
| 634   EXPECT_EQ("Chrome settings", a.origin()); | 647   EXPECT_EQ("Chrome settings", a.origin()); | 
| 635   EXPECT_EQ(ASCIIToUTF16("area 51"), a.GetRawInfo(ADDRESS_HOME_LINE2)); | 648   EXPECT_EQ(ASCIIToUTF16("area 51"), a.GetRawInfo(ADDRESS_HOME_LINE2)); | 
| 636   EXPECT_EQ(ASCIIToUTF16("Fox"), a.GetRawInfo(COMPANY_NAME)); | 649   EXPECT_EQ(ASCIIToUTF16("Fox"), a.GetRawInfo(COMPANY_NAME)); | 
| 637   a.GetRawMultiInfo(NAME_FULL, &names); | 650   a.GetMultiInfo(AutofillType(NAME_FULL), "en-US", &names); | 
| 638   ASSERT_EQ(3U, names.size()); | 651   ASSERT_EQ(3U, names.size()); | 
| 639   EXPECT_EQ(ASCIIToUTF16("Marion Mitchell Morrison"), names[0]); | 652   EXPECT_EQ(ASCIIToUTF16("Marion Mitchell Morrison"), names[0]); | 
| 640   EXPECT_EQ(ASCIIToUTF16("Marion Morrison"), names[1]); | 653   EXPECT_EQ(ASCIIToUTF16("Marion Morrison"), names[1]); | 
| 641   EXPECT_EQ(ASCIIToUTF16("Marion M. Morrison"), names[2]); | 654   EXPECT_EQ(ASCIIToUTF16("Marion M. Morrison"), names[2]); | 
| 642   EXPECT_EQ("en", a.language_code()); | 655   EXPECT_EQ("en", a.language_code()); | 
| 643 } | 656 } | 
| 644 | 657 | 
| 645 TEST(AutofillProfileTest, AssignmentOperator) { | 658 TEST(AutofillProfileTest, AssignmentOperator) { | 
| 646   AutofillProfile a(base::GenerateGUID(), "https://www.example.com/"); | 659   AutofillProfile a(base::GenerateGUID(), "https://www.example.com/"); | 
| 647   test::SetProfileInfo(&a, "Marion", "Mitchell", "Morrison", | 660   test::SetProfileInfo(&a, "Marion", "Mitchell", "Morrison", | 
| (...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1103 | 1116 | 
| 1104     for (size_t i = 0; i < current_case.expected_result.size(); ++i) { | 1117     for (size_t i = 0; i < current_case.expected_result.size(); ++i) { | 
| 1105       EXPECT_EQ(first_names[i], merged_first_names[i]); | 1118       EXPECT_EQ(first_names[i], merged_first_names[i]); | 
| 1106       EXPECT_EQ(middle_names[i], merged_middle_names[i]); | 1119       EXPECT_EQ(middle_names[i], merged_middle_names[i]); | 
| 1107       EXPECT_EQ(last_names[i], merged_last_names[i]); | 1120       EXPECT_EQ(last_names[i], merged_last_names[i]); | 
| 1108     } | 1121     } | 
| 1109   } | 1122   } | 
| 1110 } | 1123 } | 
| 1111 | 1124 | 
| 1112 }  // namespace autofill | 1125 }  // namespace autofill | 
| OLD | NEW | 
|---|