1ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 27d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 37d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// found in the LICENSE file. 47d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 57d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/message_loop/message_loop.h" 67d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/strings/string16.h" 77d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 87d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "components/autofill/core/browser/phone_number_i18n.h" 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "third_party/libphonenumber/src/phonenumber_api.h" 117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using base::ASCIIToUTF16; 137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)using base::UTF8ToUTF16; 147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace autofill { 167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)using i18n::NormalizePhoneNumber; 187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)using i18n::ParsePhoneNumber; 197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)using i18n::ConstructPhoneNumber; 20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)using i18n::PhoneNumbersMatch; 217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST(PhoneNumberI18NTest, NormalizePhoneNumber) { 237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // "Large" digits. 2468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::string16 phone1(UTF8ToUTF16( 25ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "\xEF\xBC\x91\xEF\xBC\x96\xEF\xBC\x95\xEF\xBC\x90" 26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "\xEF\xBC\x97\xEF\xBC\x94\xEF\xBC\x99\xEF\xBC\x98" 277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) "\xEF\xBC\x93\xEF\xBC\x92\xEF\xBC\x93")); 287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(NormalizePhoneNumber(phone1, "US"), ASCIIToUTF16("16507498323")); 29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 30ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Devanagari script digits. 31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::string16 phone2(UTF8ToUTF16( 327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) "\xD9\xA1\xD9\xA6\xD9\xA5\xD9\xA0\xD9\xA8\xD9\xA3" 337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) "\xD9\xA2\xD9\xA3\xD9\xA7\xD9\xA4\xD9\xA9")); 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(NormalizePhoneNumber(phone2, "US"), ASCIIToUTF16("16508323749")); 357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::string16 phone3(UTF8ToUTF16("16503334\xef\xbc\x92\x35\xd9\xa5")); 37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(NormalizePhoneNumber(phone3, "US"), ASCIIToUTF16("16503334255")); 387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::string16 phone4(UTF8ToUTF16("+1(650)2346789")); 407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(NormalizePhoneNumber(phone4, "US"), ASCIIToUTF16("16502346789")); 417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::string16 phone5(UTF8ToUTF16("6502346789")); 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(NormalizePhoneNumber(phone5, "US"), ASCIIToUTF16("6502346789")); 447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST(PhoneNumberI18NTest, ParsePhoneNumber) { 477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const struct test_case { 487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Expected parsing result. 497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool valid; 507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Inputs. 517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string input; 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string assumed_region; 537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Further expectations. 547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string number; 557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string city_code; 567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string country_code; 577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string deduced_region; 587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } test_cases[] = { 597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Test for empty string. Should give back empty strings. 607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {false, "", "US"}, 617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Test for string with less than 7 digits. Should give back empty 627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // strings. 637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {false, "1234", "US"}, 647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Test for string with exactly 7 digits. 657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Not a valid number - starts with 1 668bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) {false, "17134567", "US"}, 678bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Not a valid number - does not have area code. 688bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) {false, "7134567", "US"}, 698bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Valid Canadian toll-free number. 708bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) {true, "3101234", "US", "3101234", "", "", "CA"}, 718bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Test for string with greater than 7 digits but less than 10 digits. 728bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Should fail parsing in US. 738bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) {false, "123456789", "US"}, 748bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Test for string with greater than 7 digits but less than 10 digits 757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // and 767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // separators. 77ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Should fail parsing in US. 787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {false, "12.345-6789", "US"}, 797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Test for string with exactly 10 digits. 807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Should give back phone number and city code. 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // This one going to fail because of the incorrect area code. 82a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) {false, "1234567890", "US"}, 83a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // This one going to fail because of the incorrect number (starts with 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // 1). 85c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {false, "6501567890", "US"}, 86c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch {true, "6504567890", "US", "4567890", "650", "", "US"}, 87c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Test for string with exactly 10 digits and separators. 887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Should give back phone number and city code. 897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {true, "(650) 456-7890", "US", "4567890", "650", "", "US"}, 907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Tests for string with over 10 digits. 917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // 01 is incorrect prefix in the USA, and if we interpret 011 as prefix, 927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // the 93a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // rest is too short for international number - the parsing should fail. 94a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) {false, "0116504567890", "US"}, 95a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // 011 is a correct "dial out" prefix in the USA - the parsing should 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // succeed. 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) {true, "01116504567890", "US", "4567890", "650", "1", "US"}, 98a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // 011 is a correct "dial out" prefix in the USA but the rest of the 99a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // number 100a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // can't parse as a US number. 101a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) {true, "01178124567890", "US", "4567890", "812", "7", "RU"}, 102a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Test for string with over 10 digits with separator characters. 103a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Should give back phone number, city code, and country code. "011" is 104a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // US "dial out" code, which is discarded. 105a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) {true, "(0111) 650-456.7890", "US", "4567890", "650", "1", "US"}, 106a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Now try phone from Czech republic - it has 00 dial out code, 420 107a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // country 1086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // code and variable length area codes. 109a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) {true, "+420 27-89.10.112", "US", "910112", "278", "420", "CZ"}, 110a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) {false, "27-89.10.112", "US"}, 111a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) {true, "27-89.10.112", "CZ", "910112", "278", "", "CZ"}, 112a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) {false, "420 57-89.10.112", "US"}, 113a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) {true, "420 57-89.10.112", "CZ", "910112", "578", "420", "CZ"}, 114a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Parses vanity numbers. 1157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {true, "1-650-FLOWERS", "US", "3569377", "650", "1", "US"}, 1167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // 800 is not an area code, but the destination code. In our library 1177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // these 1187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // codes should be treated the same as area codes. 1197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {true, "1-800-FLOWERS", "US", "3569377", "800", "1", "US"}, 1207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Don't add a country code where there was none. 1217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {true, "(08) 450 777 7777", "DE", "7777777", "8450", "", "DE"}, 1227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) }; 1237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { 1257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) SCOPED_TRACE("Testing phone number " + test_cases[i].input); 1267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::string16 country_code, city_code, number; 1287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string deduced_region; 1297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ::i18n::phonenumbers::PhoneNumber unused_i18n_number; 130f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(test_cases[i].valid, 131d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ParsePhoneNumber(ASCIIToUTF16(test_cases[i].input), 1327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) test_cases[i].assumed_region, 1337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) &country_code, 1347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) &city_code, 1357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) &number, 1367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) &deduced_region, 1377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) &unused_i18n_number)); 1387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(test_cases[i].number), number); 1397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(test_cases[i].city_code), city_code); 140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(test_cases[i].country_code), country_code); 141d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_EQ(test_cases[i].deduced_region, deduced_region); 142ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 143ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 144ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 145ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben MurdochTEST(PhoneNumberI18NTest, ConstructPhoneNumber) { 146ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch base::string16 number; 147ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_TRUE(ConstructPhoneNumber(ASCIIToUTF16("1"), 148ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ASCIIToUTF16("650"), 149ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ASCIIToUTF16("2345678"), 150ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "US", 1517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) &number)); 1527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("1 650-234-5678"), number); 1537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(ConstructPhoneNumber(base::string16(), 1547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASCIIToUTF16("650"), 1557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASCIIToUTF16("2345678"), 1565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "US", 1577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) &number)); 1587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("(650) 234-5678"), number); 1597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(ConstructPhoneNumber(ASCIIToUTF16("1"), 1607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::string16(), 1617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASCIIToUTF16("6502345678"), 1627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) "US", 1637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) &number)); 1647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("1 650-234-5678"), number); 1657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(ConstructPhoneNumber(base::string16(), 1663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) base::string16(), 1673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASCIIToUTF16("6502345678"), 1683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "US", 1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &number)); 170c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_EQ(ASCIIToUTF16("(650) 234-5678"), number); 171c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(ConstructPhoneNumber(base::string16(), 1737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASCIIToUTF16("650"), 1747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASCIIToUTF16("234567890"), 1757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) "US", 1767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) &number)); 1777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(base::string16(), number); 1787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Italian number 1797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(ConstructPhoneNumber(ASCIIToUTF16("39"), 1807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASCIIToUTF16("347"), 1817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASCIIToUTF16("2345678"), 1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "IT", 1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &number)); 1845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("+39 347 234 5678"), number); 1855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(ConstructPhoneNumber(base::string16(), 1867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASCIIToUTF16("347"), 1877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASCIIToUTF16("2345678"), 188ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "IT", 189ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch &number)); 190ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ(ASCIIToUTF16("347 234 5678"), number); 191ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // German number. 192ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_TRUE(ConstructPhoneNumber(ASCIIToUTF16("49"), 193ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ASCIIToUTF16("024"), 194ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ASCIIToUTF16("2345678901"), 195ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "DE", 196ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch &number)); 197ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ(ASCIIToUTF16("+49 2423 45678901"), number); 1987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(ConstructPhoneNumber(base::string16(), 199d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ASCIIToUTF16("024"), 200d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ASCIIToUTF16("2345678901"), 201d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) "DE", 202d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) &number)); 2037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("02423 45678901"), number); 2047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 2057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST(PhoneNumberI18NTest, PhoneNumbersMatch) { 2077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Same numbers, defined country code. 2087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(PhoneNumbersMatch(ASCIIToUTF16("4158889999"), 209d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ASCIIToUTF16("4158889999"), 210d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) "US", 2117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) "en-US")); 2127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Same numbers, undefined country code. 213f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(PhoneNumbersMatch(ASCIIToUTF16("4158889999"), 214d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ASCIIToUTF16("4158889999"), 2157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string(), 216d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) "en-US")); 217d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 218d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Numbers differ by country code only. 2196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_TRUE(PhoneNumbersMatch(ASCIIToUTF16("14158889999"), 2207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASCIIToUTF16("4158889999"), 2217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) "US", 222d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) "en-US")); 2237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 224d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Same numbers, different formats. 225d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_TRUE(PhoneNumbersMatch(ASCIIToUTF16("4158889999"), 2263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASCIIToUTF16("415-888-9999"), 2277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) "US", 2287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) "en-US")); 2297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(PhoneNumbersMatch(ASCIIToUTF16("4158889999"), 2307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASCIIToUTF16("(415)888-9999"), 231bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch "US", 232c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "en-US")); 23368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_TRUE(PhoneNumbersMatch(ASCIIToUTF16("4158889999"), 234bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch ASCIIToUTF16("415 888 9999"), 235d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) "US", 2367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) "en-US")); 2377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(PhoneNumbersMatch(ASCIIToUTF16("4158889999"), 2385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASCIIToUTF16("415 TUV WXYZ"), 2395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "US", 2405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "en-US")); 2415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(PhoneNumbersMatch(ASCIIToUTF16("1(415)888-99-99"), 2427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASCIIToUTF16("+14158889999"), 2437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) "US", 244f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "en-US")); 245f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 246f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Partial matches don't count. 247f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(PhoneNumbersMatch(ASCIIToUTF16("14158889999"), 2487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASCIIToUTF16("8889999"), 2497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) "US", 250f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "en-US")); 2515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 252ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Different numbers don't match. 2537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(PhoneNumbersMatch(ASCIIToUTF16("14158889999"), 2547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASCIIToUTF16("1415888"), 2557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) "US", 2567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) "en-US")); 2577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 2587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} // namespace autofill 2607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)