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