| Index: components/autofill/browser/autofill_profile_unittest.cc
 | 
| diff --git a/components/autofill/browser/autofill_profile_unittest.cc b/components/autofill/browser/autofill_profile_unittest.cc
 | 
| deleted file mode 100644
 | 
| index 9e49a750ee7d63d71142b5974f9f59368d606164..0000000000000000000000000000000000000000
 | 
| --- a/components/autofill/browser/autofill_profile_unittest.cc
 | 
| +++ /dev/null
 | 
| @@ -1,898 +0,0 @@
 | 
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
 | 
| -// Use of this source code is governed by a BSD-style license that can be
 | 
| -// found in the LICENSE file.
 | 
| -
 | 
| -#include "base/basictypes.h"
 | 
| -#include "base/guid.h"
 | 
| -#include "base/memory/scoped_ptr.h"
 | 
| -#include "base/memory/scoped_vector.h"
 | 
| -#include "base/stl_util.h"
 | 
| -#include "base/strings/string16.h"
 | 
| -#include "base/strings/stringprintf.h"
 | 
| -#include "base/strings/utf_string_conversions.h"
 | 
| -#include "components/autofill/browser/autofill_common_test.h"
 | 
| -#include "components/autofill/browser/autofill_profile.h"
 | 
| -#include "components/autofill/core/common/form_field_data.h"
 | 
| -#include "grit/component_strings.h"
 | 
| -#include "testing/gtest/include/gtest/gtest.h"
 | 
| -
 | 
| -namespace autofill {
 | 
| -
 | 
| -namespace {
 | 
| -
 | 
| -bool UpdateProfileLabel(AutofillProfile *profile) {
 | 
| -  std::vector<AutofillProfile*> profiles;
 | 
| -  profiles.push_back(profile);
 | 
| -  return AutofillProfile::AdjustInferredLabels(&profiles);
 | 
| -}
 | 
| -
 | 
| -}  // namespace
 | 
| -
 | 
| -// Tests different possibilities for summary string generation.
 | 
| -// Based on existence of first name, last name, and address line 1.
 | 
| -TEST(AutofillProfileTest, PreviewSummaryString) {
 | 
| -  // Case 0/null: ""
 | 
| -  AutofillProfile profile0(base::GenerateGUID(), "https://www.example.com/");
 | 
| -  // Empty profile - nothing to update.
 | 
| -  EXPECT_FALSE(UpdateProfileLabel(&profile0));
 | 
| -  base::string16 summary0 = profile0.Label();
 | 
| -  EXPECT_EQ(base::string16(), summary0);
 | 
| -
 | 
| -  // Case 0a/empty name and address, so the first two fields of the rest of the
 | 
| -  // data is used: "Hollywood, CA"
 | 
| -  AutofillProfile profile00(base::GenerateGUID(), "https://www.example.com/");
 | 
| -  test::SetProfileInfo(&profile00, "", "", "",
 | 
| -      "johnwayne@me.xyz", "Fox", "", "", "Hollywood", "CA", "91601", "US",
 | 
| -      "16505678910");
 | 
| -  EXPECT_TRUE(UpdateProfileLabel(&profile00));
 | 
| -  base::string16 summary00 = profile00.Label();
 | 
| -  EXPECT_EQ(ASCIIToUTF16("Hollywood, CA"), summary00);
 | 
| -
 | 
| -  // Case 1: "<address>" without line 2.
 | 
| -  AutofillProfile profile1(base::GenerateGUID(), "https://www.example.com/");
 | 
| -  test::SetProfileInfo(&profile1, "", "", "",
 | 
| -      "johnwayne@me.xyz", "Fox", "123 Zoo St.", "", "Hollywood", "CA",
 | 
| -      "91601", "US", "16505678910");
 | 
| -  EXPECT_TRUE(UpdateProfileLabel(&profile1));
 | 
| -  base::string16 summary1 = profile1.Label();
 | 
| -  EXPECT_EQ(ASCIIToUTF16("123 Zoo St., Hollywood"), summary1);
 | 
| -
 | 
| -  // Case 1a: "<address>" with line 2.
 | 
| -  AutofillProfile profile1a(base::GenerateGUID(), "https://www.example.com/");
 | 
| -  test::SetProfileInfo(&profile1a, "", "", "",
 | 
| -      "johnwayne@me.xyz", "Fox", "123 Zoo St.", "unit 5", "Hollywood", "CA",
 | 
| -      "91601", "US", "16505678910");
 | 
| -  EXPECT_TRUE(UpdateProfileLabel(&profile1a));
 | 
| -  base::string16 summary1a = profile1a.Label();
 | 
| -  EXPECT_EQ(ASCIIToUTF16("123 Zoo St., unit 5"), summary1a);
 | 
| -
 | 
| -  // Case 2: "<lastname>"
 | 
| -  AutofillProfile profile2(base::GenerateGUID(), "https://www.example.com/");
 | 
| -  test::SetProfileInfo(&profile2, "", "Mitchell",
 | 
| -      "Morrison", "johnwayne@me.xyz", "Fox", "", "", "Hollywood", "CA",
 | 
| -      "91601", "US", "16505678910");
 | 
| -  EXPECT_TRUE(UpdateProfileLabel(&profile2));
 | 
| -  base::string16 summary2 = profile2.Label();
 | 
| -  // Summary includes full name, to the maximal extent available.
 | 
| -  EXPECT_EQ(ASCIIToUTF16("Mitchell Morrison, Hollywood"), summary2);
 | 
| -
 | 
| -  // Case 3: "<lastname>, <address>"
 | 
| -  AutofillProfile profile3(base::GenerateGUID(), "https://www.example.com/");
 | 
| -  test::SetProfileInfo(&profile3, "", "Mitchell",
 | 
| -      "Morrison", "johnwayne@me.xyz", "Fox", "123 Zoo St.", "",
 | 
| -      "Hollywood", "CA", "91601", "US", "16505678910");
 | 
| -  EXPECT_TRUE(UpdateProfileLabel(&profile3));
 | 
| -  base::string16 summary3 = profile3.Label();
 | 
| -  EXPECT_EQ(ASCIIToUTF16("Mitchell Morrison, 123 Zoo St."), summary3);
 | 
| -
 | 
| -  // Case 4: "<firstname>"
 | 
| -  AutofillProfile profile4(base::GenerateGUID(), "https://www.example.com/");
 | 
| -  test::SetProfileInfo(&profile4, "Marion", "Mitchell", "",
 | 
| -      "johnwayne@me.xyz", "Fox", "", "", "Hollywood", "CA", "91601", "US",
 | 
| -      "16505678910");
 | 
| -  EXPECT_TRUE(UpdateProfileLabel(&profile4));
 | 
| -  base::string16 summary4 = profile4.Label();
 | 
| -  EXPECT_EQ(ASCIIToUTF16("Marion Mitchell, Hollywood"), summary4);
 | 
| -
 | 
| -  // Case 5: "<firstname>, <address>"
 | 
| -  AutofillProfile profile5(base::GenerateGUID(), "https://www.example.com/");
 | 
| -  test::SetProfileInfo(&profile5, "Marion", "Mitchell", "",
 | 
| -      "johnwayne@me.xyz", "Fox", "123 Zoo St.", "unit 5", "Hollywood", "CA",
 | 
| -      "91601", "US", "16505678910");
 | 
| -  EXPECT_TRUE(UpdateProfileLabel(&profile5));
 | 
| -  base::string16 summary5 = profile5.Label();
 | 
| -  EXPECT_EQ(ASCIIToUTF16("Marion Mitchell, 123 Zoo St."), summary5);
 | 
| -
 | 
| -  // Case 6: "<firstname> <lastname>"
 | 
| -  AutofillProfile profile6(base::GenerateGUID(), "https://www.example.com/");
 | 
| -  test::SetProfileInfo(&profile6, "Marion", "Mitchell",
 | 
| -      "Morrison", "johnwayne@me.xyz", "Fox", "", "", "Hollywood", "CA",
 | 
| -      "91601", "US", "16505678910");
 | 
| -  EXPECT_TRUE(UpdateProfileLabel(&profile6));
 | 
| -  base::string16 summary6 = profile6.Label();
 | 
| -  EXPECT_EQ(ASCIIToUTF16("Marion Mitchell Morrison, Hollywood"),
 | 
| -            summary6);
 | 
| -
 | 
| -  // Case 7: "<firstname> <lastname>, <address>"
 | 
| -  AutofillProfile profile7(base::GenerateGUID(), "https://www.example.com/");
 | 
| -  test::SetProfileInfo(&profile7, "Marion", "Mitchell",
 | 
| -      "Morrison", "johnwayne@me.xyz", "Fox", "123 Zoo St.", "unit 5",
 | 
| -      "Hollywood", "CA", "91601", "US", "16505678910");
 | 
| -  EXPECT_TRUE(UpdateProfileLabel(&profile7));
 | 
| -  base::string16 summary7 = profile7.Label();
 | 
| -  EXPECT_EQ(ASCIIToUTF16("Marion Mitchell Morrison, 123 Zoo St."), summary7);
 | 
| -
 | 
| -  // Case 7a: "<firstname> <lastname>, <address>" - same as #7, except for
 | 
| -  // e-mail.
 | 
| -  AutofillProfile profile7a(base::GenerateGUID(), "https://www.example.com/");
 | 
| -  test::SetProfileInfo(&profile7a, "Marion", "Mitchell",
 | 
| -    "Morrison", "marion@me.xyz", "Fox", "123 Zoo St.", "unit 5",
 | 
| -    "Hollywood", "CA", "91601", "US", "16505678910");
 | 
| -  std::vector<AutofillProfile*> profiles;
 | 
| -  profiles.push_back(&profile7);
 | 
| -  profiles.push_back(&profile7a);
 | 
| -  EXPECT_TRUE(AutofillProfile::AdjustInferredLabels(&profiles));
 | 
| -  summary7 = profile7.Label();
 | 
| -  base::string16 summary7a = profile7a.Label();
 | 
| -  EXPECT_EQ(ASCIIToUTF16(
 | 
| -      "Marion Mitchell Morrison, 123 Zoo St., johnwayne@me.xyz"), summary7);
 | 
| -  EXPECT_EQ(ASCIIToUTF16(
 | 
| -      "Marion Mitchell Morrison, 123 Zoo St., marion@me.xyz"), summary7a);
 | 
| -}
 | 
| -
 | 
| -TEST(AutofillProfileTest, AdjustInferredLabels) {
 | 
| -  ScopedVector<AutofillProfile> profiles;
 | 
| -  profiles.push_back(
 | 
| -      new AutofillProfile(base::GenerateGUID(), "https://www.example.com/"));
 | 
| -  test::SetProfileInfo(
 | 
| -      profiles[0],
 | 
| -      "John",
 | 
| -      "",
 | 
| -      "Doe",
 | 
| -      "johndoe@hades.com",
 | 
| -      "Underworld",
 | 
| -      "666 Erebus St.",
 | 
| -      "",
 | 
| -      "Elysium", "CA",
 | 
| -      "91111",
 | 
| -      "US",
 | 
| -      "16502111111");
 | 
| -  profiles.push_back(
 | 
| -      new AutofillProfile(base::GenerateGUID(), "http://www.example.com/"));
 | 
| -  test::SetProfileInfo(
 | 
| -      profiles[1],
 | 
| -      "Jane",
 | 
| -      "",
 | 
| -      "Doe",
 | 
| -      "janedoe@tertium.com",
 | 
| -      "Pluto Inc.",
 | 
| -      "123 Letha Shore.",
 | 
| -      "",
 | 
| -      "Dis", "CA",
 | 
| -      "91222",
 | 
| -      "US",
 | 
| -      "12345678910");
 | 
| -  // As labels are empty they are adjusted the first time.
 | 
| -  EXPECT_TRUE(AutofillProfile::AdjustInferredLabels(&profiles.get()));
 | 
| -  // No need to adjust them anymore.
 | 
| -  EXPECT_FALSE(AutofillProfile::AdjustInferredLabels(&profiles.get()));
 | 
| -  EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St."),
 | 
| -            profiles[0]->Label());
 | 
| -  EXPECT_EQ(ASCIIToUTF16("Jane Doe, 123 Letha Shore."),
 | 
| -            profiles[1]->Label());
 | 
| -
 | 
| -  profiles.push_back(
 | 
| -      new AutofillProfile(base::GenerateGUID(), "Chrome settings"));
 | 
| -  test::SetProfileInfo(
 | 
| -      profiles[2],
 | 
| -      "John",
 | 
| -      "",
 | 
| -      "Doe",
 | 
| -      "johndoe@tertium.com",
 | 
| -      "Underworld",
 | 
| -      "666 Erebus St.",
 | 
| -      "",
 | 
| -      "Elysium", "CA",
 | 
| -      "91111",
 | 
| -      "US",
 | 
| -      "16502111111");
 | 
| -  EXPECT_TRUE(AutofillProfile::AdjustInferredLabels(&profiles.get()));
 | 
| -
 | 
| -  // Profile 0 and 2 inferred label now includes an e-mail.
 | 
| -  EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., johndoe@hades.com"),
 | 
| -            profiles[0]->Label());
 | 
| -  EXPECT_EQ(ASCIIToUTF16("Jane Doe, 123 Letha Shore."),
 | 
| -            profiles[1]->Label());
 | 
| -  EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., johndoe@tertium.com"),
 | 
| -            profiles[2]->Label());
 | 
| -
 | 
| -  profiles.resize(2);
 | 
| -
 | 
| -  profiles.push_back(
 | 
| -      new AutofillProfile(base::GenerateGUID(), std::string()));
 | 
| -  test::SetProfileInfo(
 | 
| -      profiles[2],
 | 
| -      "John",
 | 
| -      "",
 | 
| -      "Doe",
 | 
| -      "johndoe@hades.com",
 | 
| -      "Underworld",
 | 
| -      "666 Erebus St.",
 | 
| -      "",
 | 
| -      "Elysium", "CO",  // State is different
 | 
| -      "91111",
 | 
| -      "US",
 | 
| -      "16502111111");
 | 
| -
 | 
| -  EXPECT_TRUE(AutofillProfile::AdjustInferredLabels(&profiles.get()));
 | 
| -
 | 
| -  // Profile 0 and 2 inferred label now includes a state.
 | 
| -  EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., CA"),
 | 
| -            profiles[0]->Label());
 | 
| -  EXPECT_EQ(ASCIIToUTF16("Jane Doe, 123 Letha Shore."),
 | 
| -            profiles[1]->Label());
 | 
| -  EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., CO"),
 | 
| -            profiles[2]->Label());
 | 
| -
 | 
| -  profiles.push_back(
 | 
| -      new AutofillProfile(base::GenerateGUID(), "https://www.example.com/"));
 | 
| -  test::SetProfileInfo(
 | 
| -      profiles[3],
 | 
| -      "John",
 | 
| -      "",
 | 
| -      "Doe",
 | 
| -      "johndoe@hades.com",
 | 
| -      "Underworld",
 | 
| -      "666 Erebus St.",
 | 
| -      "",
 | 
| -      "Elysium", "CO",  // State is different for some.
 | 
| -      "91111",
 | 
| -      "US",
 | 
| -      "16504444444");  // Phone is different for some.
 | 
| -
 | 
| -  EXPECT_TRUE(AutofillProfile::AdjustInferredLabels(&profiles.get()));
 | 
| -
 | 
| -  EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., CA"),
 | 
| -            profiles[0]->Label());
 | 
| -  EXPECT_EQ(ASCIIToUTF16("Jane Doe, 123 Letha Shore."),
 | 
| -            profiles[1]->Label());
 | 
| -  EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., CO, 16502111111"),
 | 
| -            profiles[2]->Label());
 | 
| -  // This one differs from other ones by unique phone, so no need for extra
 | 
| -  // information.
 | 
| -  EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., CO, 16504444444"),
 | 
| -            profiles[3]->Label());
 | 
| -
 | 
| -  profiles.push_back(
 | 
| -      new AutofillProfile(base::GenerateGUID(), "https://www.example.com/"));
 | 
| -  test::SetProfileInfo(
 | 
| -      profiles[4],
 | 
| -      "John",
 | 
| -      "",
 | 
| -      "Doe",
 | 
| -      "johndoe@styx.com",  // E-Mail is different for some.
 | 
| -      "Underworld",
 | 
| -      "666 Erebus St.",
 | 
| -      "",
 | 
| -      "Elysium", "CO",  // State is different for some.
 | 
| -      "91111",
 | 
| -      "US",
 | 
| -      "16504444444");  // Phone is different for some.
 | 
| -
 | 
| -  EXPECT_TRUE(AutofillProfile::AdjustInferredLabels(&profiles.get()));
 | 
| -
 | 
| -  EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., CA"),
 | 
| -            profiles[0]->Label());
 | 
| -  EXPECT_EQ(ASCIIToUTF16("Jane Doe, 123 Letha Shore."),
 | 
| -            profiles[1]->Label());
 | 
| -  EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., CO, johndoe@hades.com,"
 | 
| -                         " 16502111111"),
 | 
| -            profiles[2]->Label());
 | 
| -  EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., CO, johndoe@hades.com,"
 | 
| -                         " 16504444444"),
 | 
| -            profiles[3]->Label());
 | 
| -  // This one differs from other ones by unique e-mail, so no need for extra
 | 
| -  // information.
 | 
| -  EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., CO, johndoe@styx.com"),
 | 
| -            profiles[4]->Label());
 | 
| -
 | 
| -  EXPECT_FALSE(AutofillProfile::AdjustInferredLabels(&profiles.get()));
 | 
| -}
 | 
| -
 | 
| -TEST(AutofillProfileTest, CreateInferredLabels) {
 | 
| -  ScopedVector<AutofillProfile> profiles;
 | 
| -  profiles.push_back(
 | 
| -      new AutofillProfile(base::GenerateGUID(), "https://www.example.com/"));
 | 
| -  test::SetProfileInfo(profiles[0],
 | 
| -                       "John",
 | 
| -                       "",
 | 
| -                       "Doe",
 | 
| -                       "johndoe@hades.com",
 | 
| -                       "Underworld",
 | 
| -                       "666 Erebus St.",
 | 
| -                       "",
 | 
| -                       "Elysium", "CA",
 | 
| -                       "91111",
 | 
| -                       "US",
 | 
| -                       "16502111111");
 | 
| -  profiles.push_back(
 | 
| -      new AutofillProfile(base::GenerateGUID(), "https://www.example.com/"));
 | 
| -  test::SetProfileInfo(profiles[1],
 | 
| -                       "Jane",
 | 
| -                       "",
 | 
| -                       "Doe",
 | 
| -                       "janedoe@tertium.com",
 | 
| -                       "Pluto Inc.",
 | 
| -                       "123 Letha Shore.",
 | 
| -                       "",
 | 
| -                       "Dis", "CA",
 | 
| -                       "91222",
 | 
| -                       "US",
 | 
| -                       "12345678910");
 | 
| -  std::vector<base::string16> labels;
 | 
| -  // Two fields at least - no filter.
 | 
| -  AutofillProfile::CreateInferredLabels(&profiles.get(), NULL, UNKNOWN_TYPE, 2,
 | 
| -                                        &labels);
 | 
| -  EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St."), labels[0]);
 | 
| -  EXPECT_EQ(ASCIIToUTF16("Jane Doe, 123 Letha Shore."), labels[1]);
 | 
| -
 | 
| -  // Three fields at least - no filter.
 | 
| -  AutofillProfile::CreateInferredLabels(&profiles.get(), NULL, UNKNOWN_TYPE, 3,
 | 
| -                                        &labels);
 | 
| -  EXPECT_EQ(ASCIIToUTF16("John Doe, 666 Erebus St., Elysium"),
 | 
| -            labels[0]);
 | 
| -  EXPECT_EQ(ASCIIToUTF16("Jane Doe, 123 Letha Shore., Dis"),
 | 
| -            labels[1]);
 | 
| -
 | 
| -  std::vector<AutofillFieldType> suggested_fields;
 | 
| -  suggested_fields.push_back(ADDRESS_HOME_CITY);
 | 
| -  suggested_fields.push_back(ADDRESS_HOME_STATE);
 | 
| -  suggested_fields.push_back(ADDRESS_HOME_ZIP);
 | 
| -
 | 
| -  // Two fields at least, from suggested fields - no filter.
 | 
| -  AutofillProfile::CreateInferredLabels(&profiles.get(), &suggested_fields,
 | 
| -                                        UNKNOWN_TYPE, 2, &labels);
 | 
| -  EXPECT_EQ(ASCIIToUTF16("Elysium, CA"), labels[0]);
 | 
| -  EXPECT_EQ(ASCIIToUTF16("Dis, CA"), labels[1]);
 | 
| -
 | 
| -  // Three fields at least, from suggested fields - no filter.
 | 
| -  AutofillProfile::CreateInferredLabels(&profiles.get(), &suggested_fields,
 | 
| -                                        UNKNOWN_TYPE, 3, &labels);
 | 
| -  EXPECT_EQ(ASCIIToUTF16("Elysium, CA, 91111"), labels[0]);
 | 
| -  EXPECT_EQ(ASCIIToUTF16("Dis, CA, 91222"), labels[1]);
 | 
| -
 | 
| -  // Three fields at least, from suggested fields - but filter reduces available
 | 
| -  // fields to two.
 | 
| -  AutofillProfile::CreateInferredLabels(&profiles.get(), &suggested_fields,
 | 
| -                                        ADDRESS_HOME_STATE, 3, &labels);
 | 
| -  EXPECT_EQ(ASCIIToUTF16("Elysium, 91111"), labels[0]);
 | 
| -  EXPECT_EQ(ASCIIToUTF16("Dis, 91222"), labels[1]);
 | 
| -
 | 
| -  suggested_fields.clear();
 | 
| -  // In our implementation we always display NAME_FULL for all NAME* fields...
 | 
| -  suggested_fields.push_back(NAME_MIDDLE);
 | 
| -  // One field at least, from suggested fields - no filter.
 | 
| -  AutofillProfile::CreateInferredLabels(&profiles.get(), &suggested_fields,
 | 
| -                                        UNKNOWN_TYPE, 1, &labels);
 | 
| -  EXPECT_EQ(ASCIIToUTF16("John Doe"), labels[0]);
 | 
| -  EXPECT_EQ(ASCIIToUTF16("Jane Doe"), labels[1]);
 | 
| -
 | 
| -  // One field at least, from suggested fields - filter the same as suggested
 | 
| -  // field.
 | 
| -  AutofillProfile::CreateInferredLabels(&profiles.get(), &suggested_fields,
 | 
| -                                        NAME_MIDDLE, 1, &labels);
 | 
| -  EXPECT_EQ(base::string16(), labels[0]);
 | 
| -  EXPECT_EQ(base::string16(), labels[1]);
 | 
| -
 | 
| -  suggested_fields.clear();
 | 
| -  // In our implementation we always display NAME_FULL for NAME_MIDDLE_INITIAL
 | 
| -  suggested_fields.push_back(NAME_MIDDLE_INITIAL);
 | 
| -  // One field at least, from suggested fields - no filter.
 | 
| -  AutofillProfile::CreateInferredLabels(&profiles.get(), &suggested_fields,
 | 
| -                                        UNKNOWN_TYPE, 1, &labels);
 | 
| -  EXPECT_EQ(ASCIIToUTF16("John Doe"), labels[0]);
 | 
| -  EXPECT_EQ(ASCIIToUTF16("Jane Doe"), labels[1]);
 | 
| -
 | 
| -  // One field at least, from suggested fields - filter same as the first non-
 | 
| -  // unknown suggested field.
 | 
| -  suggested_fields.clear();
 | 
| -  suggested_fields.push_back(UNKNOWN_TYPE);
 | 
| -  suggested_fields.push_back(NAME_FULL);
 | 
| -  suggested_fields.push_back(ADDRESS_HOME_LINE1);
 | 
| -  AutofillProfile::CreateInferredLabels(&profiles.get(), &suggested_fields,
 | 
| -                                        NAME_FULL, 1, &labels);
 | 
| -  EXPECT_EQ(base::string16(ASCIIToUTF16("666 Erebus St.")), labels[0]);
 | 
| -  EXPECT_EQ(base::string16(ASCIIToUTF16("123 Letha Shore.")), labels[1]);
 | 
| -}
 | 
| -
 | 
| -// Test that we fall back to using the full name if there are no other
 | 
| -// distinguishing fields, but only if it makes sense given the suggested fields.
 | 
| -TEST(AutofillProfileTest, CreateInferredLabelsFallsBackToFullName) {
 | 
| -  ScopedVector<AutofillProfile> profiles;
 | 
| -  profiles.push_back(
 | 
| -      new AutofillProfile(base::GenerateGUID(), "https://www.example.com/"));
 | 
| -  test::SetProfileInfo(profiles[0],
 | 
| -                       "John", "", "Doe", "doe@example.com", "",
 | 
| -                       "88 Nowhere Ave.", "", "", "", "", "", "");
 | 
| -  profiles.push_back(
 | 
| -      new AutofillProfile(base::GenerateGUID(), "https://www.example.com/"));
 | 
| -  test::SetProfileInfo(profiles[1],
 | 
| -                       "Johnny", "K", "Doe", "doe@example.com", "",
 | 
| -                       "88 Nowhere Ave.", "", "", "", "", "", "");
 | 
| -
 | 
| -  // If the only name field in the suggested fields is the excluded field, we
 | 
| -  // should not fall back to the full name as a distinguishing field.
 | 
| -  std::vector<AutofillFieldType> suggested_fields;
 | 
| -  suggested_fields.push_back(NAME_LAST);
 | 
| -  suggested_fields.push_back(ADDRESS_HOME_LINE1);
 | 
| -  suggested_fields.push_back(EMAIL_ADDRESS);
 | 
| -  std::vector<base::string16> labels;
 | 
| -  AutofillProfile::CreateInferredLabels(&profiles.get(), &suggested_fields,
 | 
| -                                        NAME_LAST, 1, &labels);
 | 
| -  ASSERT_EQ(2U, labels.size());
 | 
| -  EXPECT_EQ(ASCIIToUTF16("88 Nowhere Ave."), labels[0]);
 | 
| -  EXPECT_EQ(ASCIIToUTF16("88 Nowhere Ave."), labels[1]);
 | 
| -
 | 
| -  // Otherwise, we should.
 | 
| -  suggested_fields.push_back(NAME_FIRST);
 | 
| -  AutofillProfile::CreateInferredLabels(&profiles.get(),  &suggested_fields,
 | 
| -                                        NAME_LAST, 1, &labels);
 | 
| -  ASSERT_EQ(2U, labels.size());
 | 
| -  EXPECT_EQ(ASCIIToUTF16("88 Nowhere Ave., John Doe"), labels[0]);
 | 
| -  EXPECT_EQ(ASCIIToUTF16("88 Nowhere Ave., Johnny K Doe"), labels[1]);
 | 
| -}
 | 
| -
 | 
| -// Test that we do not show duplicate fields in the labels.
 | 
| -TEST(AutofillProfileTest, CreateInferredLabelsNoDuplicatedFields) {
 | 
| -  ScopedVector<AutofillProfile> profiles;
 | 
| -  profiles.push_back(
 | 
| -      new AutofillProfile(base::GenerateGUID(), "https://www.example.com/"));
 | 
| -  test::SetProfileInfo(profiles[0],
 | 
| -                       "John", "", "Doe", "doe@example.com", "",
 | 
| -                       "88 Nowhere Ave.", "", "", "", "", "", "");
 | 
| -  profiles.push_back(
 | 
| -      new AutofillProfile(base::GenerateGUID(), "https://www.example.com/"));
 | 
| -  test::SetProfileInfo(profiles[1],
 | 
| -                       "John", "", "Doe", "dojo@example.com", "",
 | 
| -                       "88 Nowhere Ave.", "", "", "", "", "", "");
 | 
| -
 | 
| -  // If the only name field in the suggested fields is the excluded field, we
 | 
| -  // should not fall back to the full name as a distinguishing field.
 | 
| -  std::vector<AutofillFieldType> suggested_fields;
 | 
| -  suggested_fields.push_back(ADDRESS_HOME_LINE1);
 | 
| -  suggested_fields.push_back(ADDRESS_BILLING_LINE1);
 | 
| -  suggested_fields.push_back(EMAIL_ADDRESS);
 | 
| -  std::vector<base::string16> labels;
 | 
| -  AutofillProfile::CreateInferredLabels(&profiles.get(), &suggested_fields,
 | 
| -                                        UNKNOWN_TYPE, 2, &labels);
 | 
| -  ASSERT_EQ(2U, labels.size());
 | 
| -  EXPECT_EQ(ASCIIToUTF16("88 Nowhere Ave., doe@example.com"), labels[0]);
 | 
| -  EXPECT_EQ(ASCIIToUTF16("88 Nowhere Ave., dojo@example.com"), labels[1]);
 | 
| -}
 | 
| -
 | 
| -// Make sure that empty fields are not treated as distinguishing fields.
 | 
| -TEST(AutofillProfileTest, CreateInferredLabelsSkipsEmptyFields) {
 | 
| -  ScopedVector<AutofillProfile> profiles;
 | 
| -  profiles.push_back(
 | 
| -      new AutofillProfile(base::GenerateGUID(), "https://www.example.com/"));
 | 
| -  test::SetProfileInfo(profiles[0],
 | 
| -                       "John", "", "Doe", "doe@example.com",
 | 
| -                       "Gogole", "", "", "", "", "", "", "");
 | 
| -  profiles.push_back(
 | 
| -      new AutofillProfile(base::GenerateGUID(), "https://www.example.com/"));
 | 
| -  test::SetProfileInfo(profiles[1],
 | 
| -                       "John", "", "Doe", "doe@example.com",
 | 
| -                       "Ggoole", "", "", "", "", "", "", "");
 | 
| -  profiles.push_back(
 | 
| -      new AutofillProfile(base::GenerateGUID(), "https://www.example.com/"));
 | 
| -  test::SetProfileInfo(profiles[2],
 | 
| -                       "John", "", "Doe", "john.doe@example.com",
 | 
| -                       "Goolge", "", "", "", "", "", "", "");
 | 
| -
 | 
| -  std::vector<base::string16> labels;
 | 
| -  AutofillProfile::CreateInferredLabels(&profiles.get(), NULL, UNKNOWN_TYPE, 3,
 | 
| -                                        &labels);
 | 
| -  ASSERT_EQ(3U, labels.size());
 | 
| -  EXPECT_EQ(ASCIIToUTF16("John Doe, doe@example.com, Gogole"), labels[0]);
 | 
| -  EXPECT_EQ(ASCIIToUTF16("John Doe, doe@example.com, Ggoole"), labels[1]);
 | 
| -  EXPECT_EQ(ASCIIToUTF16("John Doe, john.doe@example.com, Goolge"), labels[2]);
 | 
| -
 | 
| -  // A field must have a non-empty value for each profile to be considered a
 | 
| -  // distinguishing field.
 | 
| -  profiles[1]->SetRawInfo(ADDRESS_HOME_LINE1, ASCIIToUTF16("88 Nowhere Ave."));
 | 
| -  AutofillProfile::CreateInferredLabels(&profiles.get(), NULL, UNKNOWN_TYPE, 1,
 | 
| -                                        &labels);
 | 
| -  ASSERT_EQ(3U, labels.size());
 | 
| -  EXPECT_EQ(ASCIIToUTF16("John Doe, doe@example.com, Gogole"), labels[0]);
 | 
| -  EXPECT_EQ(ASCIIToUTF16("John Doe, 88 Nowhere Ave., doe@example.com, Ggoole"),
 | 
| -            labels[1]) << labels[1];
 | 
| -  EXPECT_EQ(ASCIIToUTF16("John Doe, john.doe@example.com"), labels[2]);
 | 
| -}
 | 
| -
 | 
| -TEST(AutofillProfileTest, IsSubsetOf) {
 | 
| -  scoped_ptr<AutofillProfile> a, b;
 | 
| -
 | 
| -  // |a| is a subset of |b|.
 | 
| -  a.reset(
 | 
| -      new AutofillProfile(base::GenerateGUID(), "https://www.example.com/"));
 | 
| -  b.reset(
 | 
| -      new AutofillProfile(base::GenerateGUID(), "https://www.example.com/"));
 | 
| -  test::SetProfileInfo(a.get(), "Thomas", NULL, "Jefferson",
 | 
| -      "declaration_guy@gmail.com", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
 | 
| -      NULL);
 | 
| -  test::SetProfileInfo(b.get(), "Thomas", NULL, "Jefferson",
 | 
| -      "declaration_guy@gmail.com", "United States Government", "Monticello",
 | 
| -      NULL, "Charlottesville", "Virginia", "22902", NULL, NULL);
 | 
| -  EXPECT_TRUE(a->IsSubsetOf(*b, "en-US"));
 | 
| -
 | 
| -  // |b| is not a subset of |a|.
 | 
| -  EXPECT_FALSE(b->IsSubsetOf(*a, "en-US"));
 | 
| -
 | 
| -  // |a| is a subset of |a|.
 | 
| -  EXPECT_TRUE(a->IsSubsetOf(*a, "en-US"));
 | 
| -
 | 
| -  // One field in |b| is different.
 | 
| -  a.reset(
 | 
| -      new AutofillProfile(base::GenerateGUID(), "https://www.example.com/"));
 | 
| -  b.reset(
 | 
| -      new AutofillProfile(base::GenerateGUID(), "https://www.example.com/"));
 | 
| -  test::SetProfileInfo(a.get(), "Thomas", NULL, "Jefferson",
 | 
| -      "declaration_guy@gmail.com", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
 | 
| -      NULL);
 | 
| -  test::SetProfileInfo(a.get(), "Thomas", NULL, "Adams",
 | 
| -      "declaration_guy@gmail.com", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
 | 
| -      NULL);
 | 
| -  EXPECT_FALSE(a->IsSubsetOf(*b, "en-US"));
 | 
| -}
 | 
| -
 | 
| -TEST(AutofillProfileTest, OverwriteWithOrAddTo) {
 | 
| -  AutofillProfile a(base::GenerateGUID(), "https://www.example.com");
 | 
| -  test::SetProfileInfo(&a, "Marion", "Mitchell", "Morrison",
 | 
| -                       "marion@me.xyz", "Fox", "123 Zoo St.", "unit 5",
 | 
| -                       "Hollywood", "CA", "91601", "US",
 | 
| -                       "12345678910");
 | 
| -  std::vector<base::string16> names;
 | 
| -  a.GetRawMultiInfo(NAME_FULL, &names);
 | 
| -  names.push_back(ASCIIToUTF16("Marion Morrison"));
 | 
| -  a.SetRawMultiInfo(NAME_FULL, names);
 | 
| -
 | 
| -  // Create an identical profile except that the new profile:
 | 
| -  //   (1) Has a different origin,
 | 
| -  //   (2) Has a different address line 2,
 | 
| -  //   (3) Lacks a company name, and
 | 
| -  //   (4) Has a different full name variant.
 | 
| -  AutofillProfile b = a;
 | 
| -  b.set_guid(base::GenerateGUID());
 | 
| -  b.set_origin("Chrome settings");
 | 
| -  b.SetRawInfo(ADDRESS_HOME_LINE2, ASCIIToUTF16("area 51"));
 | 
| -  b.SetRawInfo(COMPANY_NAME, base::string16());
 | 
| -  b.GetRawMultiInfo(NAME_FULL, &names);
 | 
| -  names.push_back(ASCIIToUTF16("Marion M. Morrison"));
 | 
| -  b.SetRawMultiInfo(NAME_FULL, names);
 | 
| -
 | 
| -  a.OverwriteWithOrAddTo(b, "en-US");
 | 
| -  EXPECT_EQ("Chrome settings", a.origin());
 | 
| -  EXPECT_EQ(ASCIIToUTF16("area 51"), a.GetRawInfo(ADDRESS_HOME_LINE2));
 | 
| -  EXPECT_EQ(ASCIIToUTF16("Fox"), a.GetRawInfo(COMPANY_NAME));
 | 
| -  a.GetRawMultiInfo(NAME_FULL, &names);
 | 
| -  ASSERT_EQ(3U, names.size());
 | 
| -  EXPECT_EQ(ASCIIToUTF16("Marion Mitchell Morrison"), names[0]);
 | 
| -  EXPECT_EQ(ASCIIToUTF16("Marion Morrison"), names[1]);
 | 
| -  EXPECT_EQ(ASCIIToUTF16("Marion M. Morrison"), names[2]);
 | 
| -}
 | 
| -
 | 
| -TEST(AutofillProfileTest, AssignmentOperator) {
 | 
| -  AutofillProfile a(base::GenerateGUID(), "https://www.example.com/");
 | 
| -  test::SetProfileInfo(&a, "Marion", "Mitchell", "Morrison",
 | 
| -                       "marion@me.xyz", "Fox", "123 Zoo St.", "unit 5",
 | 
| -                       "Hollywood", "CA", "91601", "US",
 | 
| -                       "12345678910");
 | 
| -
 | 
| -  // Result of assignment should be logically equal to the original profile.
 | 
| -  AutofillProfile b(base::GenerateGUID(), "http://www.example.com/");
 | 
| -  b = a;
 | 
| -  EXPECT_TRUE(a == b);
 | 
| -
 | 
| -  // Assignment to self should not change the profile value.
 | 
| -  a = a;
 | 
| -  EXPECT_TRUE(a == b);
 | 
| -}
 | 
| -
 | 
| -TEST(AutofillProfileTest, Copy) {
 | 
| -  AutofillProfile a(base::GenerateGUID(), "https://www.example.com/");
 | 
| -  test::SetProfileInfo(&a, "Marion", "Mitchell", "Morrison",
 | 
| -                       "marion@me.xyz", "Fox", "123 Zoo St.", "unit 5",
 | 
| -                       "Hollywood", "CA", "91601", "US",
 | 
| -                       "12345678910");
 | 
| -
 | 
| -  // Clone should be logically equal to the original.
 | 
| -  AutofillProfile b(a);
 | 
| -  EXPECT_TRUE(a == b);
 | 
| -}
 | 
| -
 | 
| -TEST(AutofillProfileTest, Compare) {
 | 
| -  AutofillProfile a(base::GenerateGUID(), std::string());
 | 
| -  AutofillProfile b(base::GenerateGUID(), std::string());
 | 
| -
 | 
| -  // Empty profiles are the same.
 | 
| -  EXPECT_EQ(0, a.Compare(b));
 | 
| -
 | 
| -  // GUIDs don't count.
 | 
| -  a.set_guid(base::GenerateGUID());
 | 
| -  b.set_guid(base::GenerateGUID());
 | 
| -  EXPECT_EQ(0, a.Compare(b));
 | 
| -
 | 
| -  // Origins don't count.
 | 
| -  a.set_origin("apple");
 | 
| -  b.set_origin("banana");
 | 
| -  EXPECT_EQ(0, a.Compare(b));
 | 
| -
 | 
| -  // Different values produce non-zero results.
 | 
| -  test::SetProfileInfo(&a, "Jimmy", NULL, NULL, NULL,
 | 
| -      NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
 | 
| -  test::SetProfileInfo(&b, "Ringo", NULL, NULL, NULL,
 | 
| -      NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
 | 
| -  EXPECT_GT(0, a.Compare(b));
 | 
| -  EXPECT_LT(0, b.Compare(a));
 | 
| -
 | 
| -  // Phone numbers are compared by the full number, including the area code.
 | 
| -  // This is a regression test for http://crbug.com/163024
 | 
| -  test::SetProfileInfo(&a, NULL, NULL, NULL, NULL,
 | 
| -      NULL, NULL, NULL, NULL, NULL, NULL, NULL, "650.555.4321");
 | 
| -  test::SetProfileInfo(&b, NULL, NULL, NULL, NULL,
 | 
| -      NULL, NULL, NULL, NULL, NULL, NULL, NULL, "408.555.4321");
 | 
| -  EXPECT_GT(0, a.Compare(b));
 | 
| -  EXPECT_LT(0, b.Compare(a));
 | 
| -}
 | 
| -
 | 
| -TEST(AutofillProfileTest, MultiValueNames) {
 | 
| -  AutofillProfile p(base::GenerateGUID(), "https://www.example.com/");
 | 
| -  const base::string16 kJohnDoe(ASCIIToUTF16("John Doe"));
 | 
| -  const base::string16 kJohnPDoe(ASCIIToUTF16("John P. Doe"));
 | 
| -  std::vector<base::string16> set_values;
 | 
| -  set_values.push_back(kJohnDoe);
 | 
| -  set_values.push_back(kJohnPDoe);
 | 
| -  p.SetRawMultiInfo(NAME_FULL, set_values);
 | 
| -
 | 
| -  // Expect regular |GetInfo| returns the first element.
 | 
| -  EXPECT_EQ(kJohnDoe, p.GetRawInfo(NAME_FULL));
 | 
| -
 | 
| -  // Ensure that we get out what we put in.
 | 
| -  std::vector<base::string16> get_values;
 | 
| -  p.GetRawMultiInfo(NAME_FULL, &get_values);
 | 
| -  ASSERT_EQ(2UL, get_values.size());
 | 
| -  EXPECT_EQ(kJohnDoe, get_values[0]);
 | 
| -  EXPECT_EQ(kJohnPDoe, get_values[1]);
 | 
| -
 | 
| -  // Update the values.
 | 
| -  AutofillProfile p2 = p;
 | 
| -  EXPECT_EQ(0, p.Compare(p2));
 | 
| -  const base::string16 kNoOne(ASCIIToUTF16("No One"));
 | 
| -  set_values[1] = kNoOne;
 | 
| -  p.SetRawMultiInfo(NAME_FULL, set_values);
 | 
| -  p.GetRawMultiInfo(NAME_FULL, &get_values);
 | 
| -  ASSERT_EQ(2UL, get_values.size());
 | 
| -  EXPECT_EQ(kJohnDoe, get_values[0]);
 | 
| -  EXPECT_EQ(kNoOne, get_values[1]);
 | 
| -  EXPECT_NE(0, p.Compare(p2));
 | 
| -
 | 
| -  // Delete values.
 | 
| -  set_values.clear();
 | 
| -  p.SetRawMultiInfo(NAME_FULL, set_values);
 | 
| -  p.GetRawMultiInfo(NAME_FULL, &get_values);
 | 
| -  ASSERT_EQ(1UL, get_values.size());
 | 
| -  EXPECT_EQ(base::string16(), get_values[0]);
 | 
| -
 | 
| -  // Expect regular |GetInfo| returns empty value.
 | 
| -  EXPECT_EQ(base::string16(), p.GetRawInfo(NAME_FULL));
 | 
| -}
 | 
| -
 | 
| -TEST(AutofillProfileTest, MultiValueEmails) {
 | 
| -  AutofillProfile p(base::GenerateGUID(), "https://www.example.com/");
 | 
| -  const base::string16 kJohnDoe(ASCIIToUTF16("john@doe.com"));
 | 
| -  const base::string16 kJohnPDoe(ASCIIToUTF16("john_p@doe.com"));
 | 
| -  std::vector<base::string16> set_values;
 | 
| -  set_values.push_back(kJohnDoe);
 | 
| -  set_values.push_back(kJohnPDoe);
 | 
| -  p.SetRawMultiInfo(EMAIL_ADDRESS, set_values);
 | 
| -
 | 
| -  // Expect regular |GetInfo| returns the first element.
 | 
| -  EXPECT_EQ(kJohnDoe, p.GetRawInfo(EMAIL_ADDRESS));
 | 
| -
 | 
| -  // Ensure that we get out what we put in.
 | 
| -  std::vector<base::string16> get_values;
 | 
| -  p.GetRawMultiInfo(EMAIL_ADDRESS, &get_values);
 | 
| -  ASSERT_EQ(2UL, get_values.size());
 | 
| -  EXPECT_EQ(kJohnDoe, get_values[0]);
 | 
| -  EXPECT_EQ(kJohnPDoe, get_values[1]);
 | 
| -
 | 
| -  // Update the values.
 | 
| -  AutofillProfile p2 = p;
 | 
| -  EXPECT_EQ(0, p.Compare(p2));
 | 
| -  const base::string16 kNoOne(ASCIIToUTF16("no@one.com"));
 | 
| -  set_values[1] = kNoOne;
 | 
| -  p.SetRawMultiInfo(EMAIL_ADDRESS, set_values);
 | 
| -  p.GetRawMultiInfo(EMAIL_ADDRESS, &get_values);
 | 
| -  ASSERT_EQ(2UL, get_values.size());
 | 
| -  EXPECT_EQ(kJohnDoe, get_values[0]);
 | 
| -  EXPECT_EQ(kNoOne, get_values[1]);
 | 
| -  EXPECT_NE(0, p.Compare(p2));
 | 
| -
 | 
| -  // Delete values.
 | 
| -  set_values.clear();
 | 
| -  p.SetRawMultiInfo(EMAIL_ADDRESS, set_values);
 | 
| -  p.GetRawMultiInfo(EMAIL_ADDRESS, &get_values);
 | 
| -  ASSERT_EQ(1UL, get_values.size());
 | 
| -  EXPECT_EQ(base::string16(), get_values[0]);
 | 
| -
 | 
| -  // Expect regular |GetInfo| returns empty value.
 | 
| -  EXPECT_EQ(base::string16(), p.GetRawInfo(EMAIL_ADDRESS));
 | 
| -}
 | 
| -
 | 
| -TEST(AutofillProfileTest, MultiValuePhone) {
 | 
| -  AutofillProfile p(base::GenerateGUID(), "https://www.example.com/");
 | 
| -  const base::string16 kJohnDoe(ASCIIToUTF16("4151112222"));
 | 
| -  const base::string16 kJohnPDoe(ASCIIToUTF16("4151113333"));
 | 
| -  std::vector<base::string16> set_values;
 | 
| -  set_values.push_back(kJohnDoe);
 | 
| -  set_values.push_back(kJohnPDoe);
 | 
| -  p.SetRawMultiInfo(PHONE_HOME_WHOLE_NUMBER, set_values);
 | 
| -
 | 
| -  // Expect regular |GetInfo| returns the first element.
 | 
| -  EXPECT_EQ(kJohnDoe, p.GetRawInfo(PHONE_HOME_WHOLE_NUMBER));
 | 
| -
 | 
| -  // Ensure that we get out what we put in.
 | 
| -  std::vector<base::string16> get_values;
 | 
| -  p.GetRawMultiInfo(PHONE_HOME_WHOLE_NUMBER, &get_values);
 | 
| -  ASSERT_EQ(2UL, get_values.size());
 | 
| -  EXPECT_EQ(kJohnDoe, get_values[0]);
 | 
| -  EXPECT_EQ(kJohnPDoe, get_values[1]);
 | 
| -
 | 
| -  // Update the values.
 | 
| -  AutofillProfile p2 = p;
 | 
| -  EXPECT_EQ(0, p.Compare(p2));
 | 
| -  const base::string16 kNoOne(ASCIIToUTF16("4152110000"));
 | 
| -  set_values[1] = kNoOne;
 | 
| -  p.SetRawMultiInfo(PHONE_HOME_WHOLE_NUMBER, set_values);
 | 
| -  p.GetRawMultiInfo(PHONE_HOME_WHOLE_NUMBER, &get_values);
 | 
| -  ASSERT_EQ(2UL, get_values.size());
 | 
| -  EXPECT_EQ(kJohnDoe, get_values[0]);
 | 
| -  EXPECT_EQ(kNoOne, get_values[1]);
 | 
| -  EXPECT_NE(0, p.Compare(p2));
 | 
| -
 | 
| -  // Delete values.
 | 
| -  set_values.clear();
 | 
| -  p.SetRawMultiInfo(PHONE_HOME_WHOLE_NUMBER, set_values);
 | 
| -  p.GetRawMultiInfo(PHONE_HOME_WHOLE_NUMBER, &get_values);
 | 
| -  ASSERT_EQ(1UL, get_values.size());
 | 
| -  EXPECT_EQ(base::string16(), get_values[0]);
 | 
| -
 | 
| -  // Expect regular |GetInfo| returns empty value.
 | 
| -  EXPECT_EQ(base::string16(), p.GetRawInfo(PHONE_HOME_WHOLE_NUMBER));
 | 
| -}
 | 
| -
 | 
| -TEST(AutofillProfileTest, AddressCountryFull) {
 | 
| -  const char* const kCountries[] = {
 | 
| -    "Albania", "Canada"
 | 
| -  };
 | 
| -  std::vector<base::string16> options(arraysize(kCountries));
 | 
| -  for (size_t i = 0; i < arraysize(kCountries); ++i) {
 | 
| -    options[i] = ASCIIToUTF16(kCountries[i]);
 | 
| -  }
 | 
| -
 | 
| -  FormFieldData field;
 | 
| -  field.form_control_type = "select-one";
 | 
| -  field.option_values = options;
 | 
| -  field.option_contents = options;
 | 
| -
 | 
| -  AutofillProfile profile(base::GenerateGUID(), "https://www.example.com/");
 | 
| -  profile.SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("CA"));
 | 
| -  profile.FillSelectControl(ADDRESS_HOME_COUNTRY, "en-US", &field);
 | 
| -  EXPECT_EQ(ASCIIToUTF16("Canada"), field.value);
 | 
| -}
 | 
| -
 | 
| -TEST(AutofillProfileTest, AddressCountryAbbrev) {
 | 
| -  const char* const kCountries[] = {
 | 
| -    "AL", "CA"
 | 
| -  };
 | 
| -  std::vector<base::string16> options(arraysize(kCountries));
 | 
| -  for (size_t i = 0; i < arraysize(kCountries); ++i) {
 | 
| -    options[i] = ASCIIToUTF16(kCountries[i]);
 | 
| -  }
 | 
| -
 | 
| -  FormFieldData field;
 | 
| -  field.form_control_type = "select-one";
 | 
| -  field.option_values = options;
 | 
| -  field.option_contents = options;
 | 
| -
 | 
| -  AutofillProfile profile(base::GenerateGUID(), "https://www.example.com/");
 | 
| -  profile.SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("CA"));
 | 
| -  profile.FillSelectControl(ADDRESS_HOME_COUNTRY, "en-US", &field);
 | 
| -  EXPECT_EQ(ASCIIToUTF16("CA"), field.value);
 | 
| -}
 | 
| -
 | 
| -TEST(AutofillProfileTest, AddressStateFull) {
 | 
| -  const char* const kStates[] = {
 | 
| -    "Alabama", "California"
 | 
| -  };
 | 
| -  std::vector<base::string16> options(arraysize(kStates));
 | 
| -  for (size_t i = 0; i < arraysize(kStates); ++i) {
 | 
| -    options[i] = ASCIIToUTF16(kStates[i]);
 | 
| -  }
 | 
| -
 | 
| -  FormFieldData field;
 | 
| -  field.form_control_type = "select-one";
 | 
| -  field.option_values = options;
 | 
| -  field.option_contents = options;
 | 
| -
 | 
| -  AutofillProfile profile(base::GenerateGUID(), "https://www.example.com/");
 | 
| -  profile.SetRawInfo(ADDRESS_HOME_STATE, ASCIIToUTF16("CA"));
 | 
| -  profile.FillSelectControl(ADDRESS_HOME_STATE, "en-US", &field);
 | 
| -  EXPECT_EQ(ASCIIToUTF16("California"), field.value);
 | 
| -}
 | 
| -
 | 
| -TEST(AutofillProfileTest, AddressStateAbbrev) {
 | 
| -  const char* const kStates[] = {
 | 
| -    "AL", "CA"
 | 
| -  };
 | 
| -  std::vector<base::string16> options(arraysize(kStates));
 | 
| -  for (size_t i = 0; i < arraysize(kStates); ++i) {
 | 
| -    options[i] = ASCIIToUTF16(kStates[i]);
 | 
| -  }
 | 
| -
 | 
| -  FormFieldData field;
 | 
| -  field.form_control_type = "select-one";
 | 
| -  field.option_values = options;
 | 
| -  field.option_contents = options;
 | 
| -
 | 
| -  AutofillProfile profile(base::GenerateGUID(), "https://www.example.com/");
 | 
| -  profile.SetRawInfo(ADDRESS_HOME_STATE, ASCIIToUTF16("California"));
 | 
| -  profile.FillSelectControl(ADDRESS_HOME_STATE, "en-US", &field);
 | 
| -  EXPECT_EQ(ASCIIToUTF16("CA"), field.value);
 | 
| -}
 | 
| -
 | 
| -TEST(AutofillProfileTest, FillByValue) {
 | 
| -  const char* const kStates[] = {
 | 
| -    "Alabama", "California"
 | 
| -  };
 | 
| -  std::vector<base::string16> values(arraysize(kStates));
 | 
| -  std::vector<base::string16> contents(arraysize(kStates));
 | 
| -  for (unsigned int i = 0; i < arraysize(kStates); ++i) {
 | 
| -    values[i] = ASCIIToUTF16(kStates[i]);
 | 
| -    contents[i] = ASCIIToUTF16(base::StringPrintf("%u", i));
 | 
| -  }
 | 
| -
 | 
| -  FormFieldData field;
 | 
| -  field.form_control_type = "select-one";
 | 
| -  field.option_values = values;
 | 
| -  field.option_contents = contents;
 | 
| -
 | 
| -  AutofillProfile profile(base::GenerateGUID(), "https://www.example.com/");
 | 
| -  profile.SetRawInfo(ADDRESS_HOME_STATE, ASCIIToUTF16("California"));
 | 
| -  profile.FillSelectControl(ADDRESS_HOME_STATE, "en-US", &field);
 | 
| -  EXPECT_EQ(ASCIIToUTF16("California"), field.value);
 | 
| -}
 | 
| -
 | 
| -TEST(AutofillProfileTest, FillByContents) {
 | 
| -  const char* const kStates[] = {
 | 
| -    "Alabama", "California"
 | 
| -  };
 | 
| -  std::vector<base::string16> values(arraysize(kStates));
 | 
| -  std::vector<base::string16> contents(arraysize(kStates));
 | 
| -  for (unsigned int i = 0; i < arraysize(kStates); ++i) {
 | 
| -    values[i] = ASCIIToUTF16(base::StringPrintf("%u", i + 1));
 | 
| -    contents[i] = ASCIIToUTF16(kStates[i]);
 | 
| -  }
 | 
| -
 | 
| -  FormFieldData field;
 | 
| -  field.form_control_type = "select-one";
 | 
| -  field.option_values = values;
 | 
| -  field.option_contents = contents;
 | 
| -
 | 
| -  AutofillProfile profile(base::GenerateGUID(), "https://www.example.com/");
 | 
| -  profile.SetRawInfo(ADDRESS_HOME_STATE, ASCIIToUTF16("California"));
 | 
| -  profile.FillSelectControl(ADDRESS_HOME_STATE, "en-US", &field);
 | 
| -  EXPECT_EQ(ASCIIToUTF16("2"), field.value);
 | 
| -}
 | 
| -
 | 
| -}  // namespace autofill
 | 
| 
 |