15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 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 "content/renderer/android/phone_number_detector.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PhoneNumberDetectorTest : public testing::Test { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static std::string FindNumber(const std::string& content, 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& region) { 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 content_16 = base::UTF8ToUTF16(content); 17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 result_16; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t start, end; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PhoneNumberDetector detector(region); 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string content_text; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (detector.FindContent(content_16.begin(), content_16.end(), 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &start, &end, &content_text)) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result_16 = content_16.substr(start, end - start); 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return base::UTF16ToUTF8(result_16); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static std::string FindAndFormatNumber(const std::string& content, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& region) { 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 content_16 = base::UTF8ToUTF16(content); 30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 result_16; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t start, end; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PhoneNumberDetector detector(region); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string content_text; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) detector.FindContent(content_16.begin(), content_16.end(), 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &start, &end, &content_text); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return content_text; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PhoneNumberDetectorTest, FindNumber) { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tests cases with valid home numbers. 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("617-426-3000", FindNumber("hello 617-426-3000 blah", "us")); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", FindNumber("hello 617-426-3000 blah", "gb")); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("020-7617-4426", FindNumber("<div>020-7617-4426</div>", "gb")); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", FindNumber("<div>020-7617-4426</div>", "fr")); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("02.38.96.68.88", FindNumber("Tel:02.38.96.68.88", "fr")); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", FindNumber("Tel:02.38.96.68.88", "gb")); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("1-800-866-2453", 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FindNumber("You can call this number:1-800-866-2453 for more " 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "information", "us")); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("+1 203-925-4602", FindNumber("+1 203-925-4602", "us")); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PhoneNumberDetectorTest, FindAndFormatNumber) { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("+16174263000", 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FindAndFormatNumber("hello 617-426-3000 blah", "us")); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", FindAndFormatNumber("hello 617-426-3000 blah", "gb")); 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ("02076174426", 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FindAndFormatNumber("<div>020-7617-4426</div>", "gb")); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", FindAndFormatNumber("<div>020-7617-4426</div>", "fr")); 61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ("0238966888", FindAndFormatNumber("Tel:02.38.96.68.88", "fr")); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("+18008662453", 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FindAndFormatNumber("You can call this number:1-800-866-2453 for" 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "more information", "us")); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("+12039254602", FindAndFormatNumber("+1 203-925-4602", "us")); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // "+1 (650) 333-6000" using fullwidth UTF-8 characters. 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("+16503336000", FindAndFormatNumber( 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\xEF\xBC\x8B\xEF\xBC\x91\xE3\x80\x80\xEF\xBC\x88" 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\xEF\xBC\x96\xEF\xBC\x95\xEF\xBC\x90\xEF\xBC\x89" 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\xE3\x80\x80\xEF\xBC\x93\xEF\xBC\x93\xEF\xBC\x93" 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\xE3\x83\xBC\xEF\xBC\x96\xEF\xBC\x90\xEF\xBC\x90" 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\xEF\xBC\x90", "us")); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 77