1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "components/autofill/core/browser/ui/address_combobox_model.h"
6
7 #include "components/autofill/core/browser/autofill_test_utils.h"
8 #include "components/autofill/core/browser/test_personal_data_manager.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "third_party/libaddressinput/src/cpp/include/libaddressinput/region_data.h"
11
12 namespace autofill {
13
14 namespace {
15 const char kAppLocale[] = "fr-CA";
16 }
17
TEST(AddressComboboxModelTest,Empty)18 TEST(AddressComboboxModelTest, Empty) {
19 TestPersonalDataManager test_personal_data_manager;
20 test_personal_data_manager.SetAutofillProfileEnabled(true);
21
22 AddressComboboxModel model(test_personal_data_manager, kAppLocale, "");
23 EXPECT_EQ(1, model.GetItemCount());
24 EXPECT_FALSE(model.IsItemSeparatorAt(0));
25 EXPECT_TRUE(model.GetItemIdentifierAt(0).empty());
26 EXPECT_EQ(-1, model.GetIndexOfIdentifier("Anything"));
27 }
28
TEST(AddressComboboxModelTest,OneAddress)29 TEST(AddressComboboxModelTest, OneAddress) {
30 TestPersonalDataManager test_personal_data_manager;
31 test_personal_data_manager.SetAutofillProfileEnabled(true);
32 AutofillProfile profile1(test::GetFullProfile());
33 test_personal_data_manager.AddProfile(profile1);
34
35 AddressComboboxModel model(test_personal_data_manager, kAppLocale,
36 profile1.guid());
37 EXPECT_EQ(3, model.GetItemCount());
38 EXPECT_FALSE(model.IsItemSeparatorAt(0));
39 EXPECT_TRUE(model.IsItemSeparatorAt(1));
40 EXPECT_TRUE(model.GetItemIdentifierAt(0).empty());
41 EXPECT_TRUE(model.GetItemIdentifierAt(1).empty());
42 EXPECT_EQ(-1, model.GetIndexOfIdentifier("Anything"));
43 EXPECT_EQ(profile1.guid(), model.GetItemIdentifierAt(2));
44 EXPECT_EQ(2, model.GetIndexOfIdentifier(profile1.guid()));
45 EXPECT_EQ(2, model.GetDefaultIndex());
46 }
47
TEST(AddressComboboxModelTest,TwoAddresses)48 TEST(AddressComboboxModelTest, TwoAddresses) {
49 TestPersonalDataManager test_personal_data_manager;
50 test_personal_data_manager.SetAutofillProfileEnabled(true);
51 AutofillProfile profile1(test::GetFullProfile());
52 AutofillProfile profile2(test::GetFullProfile2());
53
54 // Force |profile1| to be shown first in the combobox.
55 profile1.set_use_count(100);
56 test_personal_data_manager.AddProfile(profile1);
57 test_personal_data_manager.AddProfile(profile2);
58
59 AddressComboboxModel model(test_personal_data_manager, kAppLocale,
60 profile2.guid());
61 EXPECT_EQ(4, model.GetItemCount());
62 EXPECT_FALSE(model.IsItemSeparatorAt(0));
63 EXPECT_TRUE(model.IsItemSeparatorAt(1));
64 EXPECT_TRUE(model.GetItemIdentifierAt(0).empty());
65 EXPECT_TRUE(model.GetItemIdentifierAt(1).empty());
66 EXPECT_EQ(-1, model.GetIndexOfIdentifier("Anything"));
67 EXPECT_EQ(profile1.guid(), model.GetItemIdentifierAt(2));
68 EXPECT_EQ(profile2.guid(), model.GetItemIdentifierAt(3));
69 EXPECT_EQ(2, model.GetIndexOfIdentifier(profile1.guid()));
70 EXPECT_EQ(3, model.GetIndexOfIdentifier(profile2.guid()));
71 EXPECT_EQ(3, model.GetDefaultIndex());
72 }
73
TEST(AddressComboboxModelTest,AddAnAddress)74 TEST(AddressComboboxModelTest, AddAnAddress) {
75 TestPersonalDataManager test_personal_data_manager;
76 test_personal_data_manager.SetAutofillProfileEnabled(true);
77 AutofillProfile profile1(test::GetFullProfile());
78 test_personal_data_manager.AddProfile(profile1);
79
80 AddressComboboxModel model(test_personal_data_manager, kAppLocale, "");
81 EXPECT_EQ(3, model.GetItemCount());
82 EXPECT_EQ(profile1.guid(), model.GetItemIdentifierAt(2));
83 EXPECT_EQ(2, model.GetIndexOfIdentifier(profile1.guid()));
84
85 AutofillProfile profile2(test::GetFullProfile2());
86 int new_profile_index = model.AddNewProfile(profile2);
87 EXPECT_EQ(3, new_profile_index);
88 EXPECT_EQ(4, model.GetItemCount());
89 EXPECT_EQ(profile2.guid(), model.GetItemIdentifierAt(3));
90 EXPECT_EQ(3, model.GetIndexOfIdentifier(profile2.guid()));
91
92 // First profile shouldn't have changed, here the order is guaranteed.
93 EXPECT_EQ(profile1.guid(), model.GetItemIdentifierAt(2));
94 EXPECT_EQ(2, model.GetIndexOfIdentifier(profile1.guid()));
95 }
96
97 } // namespace autofill
98