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)