• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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 <string>
6 
7 #include "base/string16.h"
8 #include "base/utf_string_conversions.h"
9 #include "chrome/browser/autofill/address.h"
10 #include "chrome/browser/autofill/autofill_type.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12 
13 // Test that the getters and setters for country code are working.
TEST(AddressTest,CountryCode)14 TEST(AddressTest, CountryCode) {
15   Address address;
16   EXPECT_EQ(std::string(), address.country_code());
17 
18   address.set_country_code("US");
19   EXPECT_EQ("US", address.country_code());
20 
21   address.set_country_code("CA");
22   EXPECT_EQ("CA", address.country_code());
23 }
24 
25 // Test that country codes are properly decoded as country names.
TEST(AddressTest,GetCountry)26 TEST(AddressTest, GetCountry) {
27   Address address;
28   EXPECT_EQ(std::string(), address.country_code());
29 
30   // Make sure that nothing breaks when the country code is missing.
31   string16 country = address.GetInfo(ADDRESS_HOME_COUNTRY);
32   EXPECT_EQ(string16(), country);
33 
34   address.set_country_code("US");
35   country = address.GetInfo(ADDRESS_HOME_COUNTRY);
36   EXPECT_EQ(ASCIIToUTF16("United States"), country);
37 
38   address.set_country_code("CA");
39   country = address.GetInfo(ADDRESS_HOME_COUNTRY);
40   EXPECT_EQ(ASCIIToUTF16("Canada"), country);
41 }
42 
43 // Test that we properly detect country codes appropriate for each country.
TEST(AddressTest,SetCountry)44 TEST(AddressTest, SetCountry) {
45   Address address;
46   EXPECT_EQ(std::string(), address.country_code());
47 
48   // Test basic conversion.
49   address.SetInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("United States"));
50   string16 country = address.GetInfo(ADDRESS_HOME_COUNTRY);
51   EXPECT_EQ("US", address.country_code());
52   EXPECT_EQ(ASCIIToUTF16("United States"), country);
53 
54   // Test basic synonym detection.
55   address.SetInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("USA"));
56   country = address.GetInfo(ADDRESS_HOME_COUNTRY);
57   EXPECT_EQ("US", address.country_code());
58   EXPECT_EQ(ASCIIToUTF16("United States"), country);
59 
60   // Test case-insensitivity.
61   address.SetInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("canADA"));
62   country = address.GetInfo(ADDRESS_HOME_COUNTRY);
63   EXPECT_EQ("CA", address.country_code());
64   EXPECT_EQ(ASCIIToUTF16("Canada"), country);
65 
66   // Test country code detection.
67   address.SetInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("JP"));
68   country = address.GetInfo(ADDRESS_HOME_COUNTRY);
69   EXPECT_EQ("JP", address.country_code());
70   EXPECT_EQ(ASCIIToUTF16("Japan"), country);
71 
72   // Test that we ignore unknown countries.
73   address.SetInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("Unknown"));
74   country = address.GetInfo(ADDRESS_HOME_COUNTRY);
75   EXPECT_EQ(std::string(), address.country_code());
76   EXPECT_EQ(string16(), country);
77 }
78 
79 // Test that we properly match typed values to stored country data.
TEST(AddressTest,IsCountry)80 TEST(AddressTest, IsCountry) {
81   Address address;
82   address.set_country_code("US");
83 
84   const char* const kValidMatches[] = {
85     "United States",
86     "USA",
87     "US",
88     "United states",
89     "us"
90   };
91   for (size_t i = 0; i < arraysize(kValidMatches); ++i) {
92     SCOPED_TRACE(kValidMatches[i]);
93     FieldTypeSet possible_field_types;
94     address.GetPossibleFieldTypes(ASCIIToUTF16(kValidMatches[i]),
95                                   &possible_field_types);
96     ASSERT_EQ(1U, possible_field_types.size());
97     EXPECT_EQ(ADDRESS_HOME_COUNTRY, *possible_field_types.begin());
98   }
99 
100   const char* const kInvalidMatches[] = {
101     "United",
102     "Garbage"
103   };
104   for (size_t i = 0; i < arraysize(kInvalidMatches); ++i) {
105     FieldTypeSet possible_field_types;
106     address.GetPossibleFieldTypes(ASCIIToUTF16(kInvalidMatches[i]),
107                                   &possible_field_types);
108     EXPECT_EQ(0U, possible_field_types.size());
109   }
110 
111   // Make sure that garbage values don't match when the country code is empty.
112   address.set_country_code("");
113   EXPECT_EQ(std::string(), address.country_code());
114   FieldTypeSet possible_field_types;
115   address.GetPossibleFieldTypes(ASCIIToUTF16("Garbage"),
116                                 &possible_field_types);
117   EXPECT_EQ(0U, possible_field_types.size());
118 }
119