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. 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. 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. 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. 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