Home | History | Annotate | Download | only in autofill
      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