1 // Copyright (c) 2012 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 "content/renderer/android/phone_number_detector.h" 6 7 #include "base/strings/utf_string_conversions.h" 8 #include "testing/gtest/include/gtest/gtest.h" 9 10 namespace content { 11 12 class PhoneNumberDetectorTest : public testing::Test { 13 public: 14 static std::string FindNumber(const std::string& content, 15 const std::string& region) { 16 base::string16 content_16 = base::UTF8ToUTF16(content); 17 base::string16 result_16; 18 size_t start, end; 19 PhoneNumberDetector detector(region); 20 std::string content_text; 21 if (detector.FindContent(content_16.begin(), content_16.end(), 22 &start, &end, &content_text)) 23 result_16 = content_16.substr(start, end - start); 24 return base::UTF16ToUTF8(result_16); 25 } 26 27 static std::string FindAndFormatNumber(const std::string& content, 28 const std::string& region) { 29 base::string16 content_16 = base::UTF8ToUTF16(content); 30 base::string16 result_16; 31 size_t start, end; 32 PhoneNumberDetector detector(region); 33 std::string content_text; 34 detector.FindContent(content_16.begin(), content_16.end(), 35 &start, &end, &content_text); 36 return content_text; 37 } 38 }; 39 40 TEST_F(PhoneNumberDetectorTest, FindNumber) { 41 // Tests cases with valid home numbers. 42 EXPECT_EQ("617-426-3000", FindNumber("hello 617-426-3000 blah", "us")); 43 EXPECT_EQ("", FindNumber("hello 617-426-3000 blah", "gb")); 44 EXPECT_EQ("020-7617-4426", FindNumber("<div>020-7617-4426</div>", "gb")); 45 EXPECT_EQ("", FindNumber("<div>020-7617-4426</div>", "fr")); 46 EXPECT_EQ("02.38.96.68.88", FindNumber("Tel:02.38.96.68.88", "fr")); 47 EXPECT_EQ("", FindNumber("Tel:02.38.96.68.88", "gb")); 48 EXPECT_EQ("1-800-866-2453", 49 FindNumber("You can call this number:1-800-866-2453 for more " 50 "information", "us")); 51 EXPECT_EQ("+1 203-925-4602", FindNumber("+1 203-925-4602", "us")); 52 } 53 54 TEST_F(PhoneNumberDetectorTest, FindAndFormatNumber) { 55 EXPECT_EQ("+16174263000", 56 FindAndFormatNumber("hello 617-426-3000 blah", "us")); 57 EXPECT_EQ("", FindAndFormatNumber("hello 617-426-3000 blah", "gb")); 58 EXPECT_EQ("02076174426", 59 FindAndFormatNumber("<div>020-7617-4426</div>", "gb")); 60 EXPECT_EQ("", FindAndFormatNumber("<div>020-7617-4426</div>", "fr")); 61 EXPECT_EQ("0238966888", FindAndFormatNumber("Tel:02.38.96.68.88", "fr")); 62 EXPECT_EQ("+18008662453", 63 FindAndFormatNumber("You can call this number:1-800-866-2453 for" 64 "more information", "us")); 65 EXPECT_EQ("+12039254602", FindAndFormatNumber("+1 203-925-4602", "us")); 66 67 // "+1 (650) 333-6000" using fullwidth UTF-8 characters. 68 EXPECT_EQ("+16503336000", FindAndFormatNumber( 69 "\xEF\xBC\x8B\xEF\xBC\x91\xE3\x80\x80\xEF\xBC\x88" 70 "\xEF\xBC\x96\xEF\xBC\x95\xEF\xBC\x90\xEF\xBC\x89" 71 "\xE3\x80\x80\xEF\xBC\x93\xEF\xBC\x93\xEF\xBC\x93" 72 "\xE3\x83\xBC\xEF\xBC\x96\xEF\xBC\x90\xEF\xBC\x90" 73 "\xEF\xBC\x90", "us")); 74 } 75 76 } // namespace content 77