1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h" 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_country.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::ASCIIToUTF16; 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace autofill { 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test the constructor and accessors 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(AutofillCountryTest, AutofillCountry) { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillCountry united_states_en("US", "en_US"); 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("US", united_states_en.country_code()); 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("United States"), united_states_en.name()); 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("ZIP code"), united_states_en.postal_code_label()); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("State"), united_states_en.state_label()); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillCountry united_states_es("US", "es"); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("US", united_states_es.country_code()); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Estados Unidos"), united_states_es.name()); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillCountry canada_en("CA", "en_US"); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("CA", canada_en.country_code()); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Canada"), canada_en.name()); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Postal code"), canada_en.postal_code_label()); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Province"), canada_en.state_label()); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillCountry canada_hu("CA", "hu"); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("CA", canada_hu.country_code()); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Kanada"), canada_hu.name()); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test locale to country code mapping. 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(AutofillCountryTest, CountryCodeForLocale) { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("US", AutofillCountry::CountryCodeForLocale("en_US")); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("CA", AutofillCountry::CountryCodeForLocale("fr_CA")); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("FR", AutofillCountry::CountryCodeForLocale("fr")); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("US", AutofillCountry::CountryCodeForLocale("Unknown")); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // "es-419" isn't associated with a country. See base/l10n/l10n_util.cc 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for details about this locale. Default to US. 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("US", AutofillCountry::CountryCodeForLocale("es-419")); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test mapping of localized country names to country codes. 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(AutofillCountryTest, GetCountryCode) { 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Basic mapping 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("US", AutofillCountry::GetCountryCode(ASCIIToUTF16("United States"), 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "en_US")); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("CA", AutofillCountry::GetCountryCode(ASCIIToUTF16("Canada"), 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "en_US")); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Case-insensitive mapping 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("US", AutofillCountry::GetCountryCode(ASCIIToUTF16("united states"), 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "en_US")); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Country codes should map to themselves, independent of locale. 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("US", AutofillCountry::GetCountryCode(ASCIIToUTF16("US"), "en_US")); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("HU", AutofillCountry::GetCountryCode(ASCIIToUTF16("hu"), "en_US")); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("CA", AutofillCountry::GetCountryCode(ASCIIToUTF16("CA"), "fr_CA")); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("MX", AutofillCountry::GetCountryCode(ASCIIToUTF16("mx"), "fr_CA")); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Basic synonyms 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("US", 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillCountry::GetCountryCode( 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("United States of America"), "en_US")); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("US", AutofillCountry::GetCountryCode(ASCIIToUTF16("USA"), 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "en_US")); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Other locales 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("US", 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillCountry::GetCountryCode(ASCIIToUTF16("Estados Unidos"), 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "es")); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("IT", AutofillCountry::GetCountryCode(ASCIIToUTF16("Italia"), 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "it")); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("DE", AutofillCountry::GetCountryCode(ASCIIToUTF16("duitsland"), 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "nl")); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Should fall back to "en_US" locale if all else fails. 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("US", AutofillCountry::GetCountryCode(ASCIIToUTF16("United States"), 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "es")); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("US", AutofillCountry::GetCountryCode(ASCIIToUTF16("united states"), 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "es")); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("US", AutofillCountry::GetCountryCode(ASCIIToUTF16("USA"), "es")); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Test mapping of empty country name to country code. 93116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(AutofillCountryTest, EmptyCountryNameHasEmptyCountryCode) { 94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(AutofillCountry::GetCountryCode(base::string16(), "en").empty()); 95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Test mapping all country codes to country names. 98116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(AutofillCountryTest, AllCountryCodesHaveCountryName) { 99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::vector<std::string> country_codes; 100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch AutofillCountry::GetAvailableCountries(&country_codes); 101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch for (size_t i = 0; i < country_codes.size(); ++i) { 102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SCOPED_TRACE("Country code '" + country_codes[i] + "' should have a name."); 103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_NE(ASCIIToUTF16(country_codes[i]), 104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch AutofillCountry(country_codes[i], "en").name()); 105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace autofill 109