diff options
author | philip.liard@gmail.com <philip.liard@gmail.com@ee073f10-1060-11df-b6a4-87a95322a99c> | 2011-07-22 09:54:01 +0000 |
---|---|---|
committer | philip.liard@gmail.com <philip.liard@gmail.com@ee073f10-1060-11df-b6a4-87a95322a99c> | 2011-07-22 09:54:01 +0000 |
commit | 4fe89c337cdb67e10fcfabed1b6a7222dd3ccfb8 (patch) | |
tree | 612f7c30dab8e75e9eb41f171a94e5b03b56538a | |
parent | 384682a45e06c1a6c4956fcf23669ddf23ef336e (diff) | |
download | phonenumbers-4fe89c337cdb67e10fcfabed1b6a7222dd3ccfb8.tar.gz |
CPP: Move unit tests to the test directory.
git-svn-id: http://libphonenumber.googlecode.com/svn/trunk/cpp/src/phonenumbers@306 ee073f10-1060-11df-b6a4-87a95322a99c
-rw-r--r-- | logger_test.cc | 104 | ||||
-rw-r--r-- | phonenumberutil_test.cc | 2948 | ||||
-rw-r--r-- | regexp_adapter_test.cc | 323 | ||||
-rw-r--r-- | regexp_cache_test.cc | 58 | ||||
-rw-r--r-- | run_tests.cc | 7 | ||||
-rw-r--r-- | stringutil_test.cc | 231 | ||||
-rw-r--r-- | utf/unicodetext_test.cc | 45 |
7 files changed, 0 insertions, 3716 deletions
diff --git a/logger_test.cc b/logger_test.cc deleted file mode 100644 index 89bad7e..0000000 --- a/logger_test.cc +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright (C) 2011 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Author: Philippe Liard - -#include <string> - -#include <gtest/gtest.h> - -#include "phonenumbers/default_logger.h" - -namespace i18n { -namespace phonenumbers { - -using std::string; - -// String logger implementation used for testing. Messages are output to a -// string for convenience. -class StringLogger : public Logger { - public: - virtual ~StringLogger() {} - - const string& message() const { - return msg_; - } - - virtual void WriteMessage(const string& msg) { - msg_ += msg; - } - - private: - string msg_; -}; - -class LoggerTest : public ::testing::Test { - protected: - virtual void SetUp() { - test_logger_.reset(new StringLogger()); - test_logger_->set_level(LOG_INFO); - // Save the current logger implementation and restore it when the test is - // done to avoid side-effects in other tests (including phonenumberutil - // tests) as the logger implementation is global. - old_logger_ = Logger::mutable_logger_impl(); - Logger::set_logger_impl(test_logger_.get()); - } - - virtual void TearDown() { - // Restore the previous logger implementation to avoid side-effects in other - // tests as mentioned above. - Logger::set_logger_impl(old_logger_); - } - - scoped_ptr<StringLogger> test_logger_; - Logger* old_logger_; -}; - -TEST_F(LoggerTest, LoggerIgnoresHigherVerbosity) { - // The logger verbosity is set to LOG_INFO, therefore LOG_DEBUG messages - // should be ignored. - VLOG(LOG_DEBUG) << "Hello"; - EXPECT_EQ("", test_logger_->message()); -} - -TEST_F(LoggerTest, LoggerOutputsNewline) { - VLOG(LOG_INFO) << "Hello"; - EXPECT_EQ("Hello\n", test_logger_->message()); -} - -TEST_F(LoggerTest, LoggerLogsEqualVerbosity) { - VLOG(LOG_INFO) << "Hello"; - EXPECT_EQ("Hello\n", test_logger_->message()); -} - -TEST_F(LoggerTest, LoggerLogsLowerVerbosity) { - VLOG(LOG_WARNING) << "Hello"; - EXPECT_EQ("Hello\n", test_logger_->message()); -} - -TEST_F(LoggerTest, LoggerConcatenatesMessages) { - VLOG(LOG_INFO) << "Hello"; - ASSERT_EQ("Hello\n", test_logger_->message()); - - VLOG(LOG_INFO) << " World"; - EXPECT_EQ("Hello\n World\n", test_logger_->message()); -} - -TEST_F(LoggerTest, LoggerHandlesDifferentTypes) { - VLOG(LOG_INFO) << "Hello " << 42; - EXPECT_EQ("Hello 42\n", test_logger_->message()); -} - -} // namespace phonenumbers -} // namespace i18n diff --git a/phonenumberutil_test.cc b/phonenumberutil_test.cc deleted file mode 100644 index ce206ce..0000000 --- a/phonenumberutil_test.cc +++ /dev/null @@ -1,2948 +0,0 @@ -// Copyright (C) 2009 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Author: Shaopeng Jia -// Author: Lara Rennie -// Open-sourced by: Philippe Liard - -#include <iostream> -#include <set> -#include <string> - -#include <gtest/gtest.h> - -#include "phonenumbers/phonemetadata.pb.h" -#include "phonenumbers/phonenumber.h" -#include "phonenumbers/phonenumber.pb.h" -#include "phonenumbers/phonenumberutil.h" - -namespace i18n { -namespace phonenumbers { - -using std::endl; -using std::make_pair; -using std::ostream; - -using google::protobuf::RepeatedPtrField; - -namespace { - -// Class containing string constants of region codes for easier testing. This is -// intended to replace region_code.h for testing in this file, with more -// constants defined. -class RegionCode { - public: - static const string& AD() { - static const string s = "AD"; - return s; - } - - static const string& AO() { - static const string s = "AO"; - return s; - } - - static const string& AR() { - static const string s = "AR"; - return s; - } - - static const string& AU() { - static const string s = "AU"; - return s; - } - - static const string& BS() { - static const string s = "BS"; - return s; - } - - static const string& CN() { - static const string s = "CN"; - return s; - } - - static const string& CS() { - static const string s = "CS"; - return s; - } - - static const string& DE() { - static const string s = "DE"; - return s; - } - - static const string& GB() { - static const string s = "GB"; - return s; - } - - static const string& IT() { - static const string s = "IT"; - return s; - } - - static const string& KR() { - static const string s = "KR"; - return s; - } - - static const string& MX() { - static const string s = "MX"; - return s; - } - - static const string& NZ() { - static const string s = "NZ"; - return s; - } - - static const string& PL() { - static const string s = "PL"; - return s; - } - - static const string& RE() { - static const string s = "RE"; - return s; - } - - static const string& SG() { - static const string s = "SG"; - return s; - } - - static const string& US() { - static const string s = "US"; - return s; - } - - static const string& YT() { - static const string s = "YT"; - return s; - } - - // Returns a region code string representing the "unknown" region. - static const string& GetUnknown() { - static const string s = "ZZ"; - return s; - } -}; - -} // namespace - -class PhoneNumberUtilTest : public testing::Test { - protected: - PhoneNumberUtilTest() : phone_util_(*PhoneNumberUtil::GetInstance()) { - } - - // Wrapper functions for private functions that we want to test. - const PhoneMetadata* GetPhoneMetadata(const string& region_code) const { - return phone_util_.GetMetadataForRegion(region_code); - } - - void GetSupportedRegions(set<string>* regions) { - phone_util_.GetSupportedRegions(regions); - } - - void ExtractPossibleNumber(const string& number, - string* extracted_number) const { - phone_util_.ExtractPossibleNumber(number, extracted_number); - } - - bool IsViablePhoneNumber(const string& number) const { - return phone_util_.IsViablePhoneNumber(number); - } - - void Normalize(string* number) const { - phone_util_.Normalize(number); - } - - bool IsLeadingZeroPossible(int country_calling_code) const { - return phone_util_.IsLeadingZeroPossible(country_calling_code); - } - - PhoneNumber::CountryCodeSource MaybeStripInternationalPrefixAndNormalize( - const string& possible_idd_prefix, - string* number) const { - return phone_util_.MaybeStripInternationalPrefixAndNormalize( - possible_idd_prefix, - number); - } - - void MaybeStripNationalPrefixAndCarrierCode(const PhoneMetadata& metadata, - string* number, - string* carrier_code) const { - phone_util_.MaybeStripNationalPrefixAndCarrierCode(metadata, number, - carrier_code); - } - - bool MaybeStripExtension(string* number, string* extension) const { - return phone_util_.MaybeStripExtension(number, extension); - } - - PhoneNumberUtil::ErrorType MaybeExtractCountryCode( - const PhoneMetadata* default_region_metadata, - bool keep_raw_input, - string* national_number, - PhoneNumber* phone_number) const { - return phone_util_.MaybeExtractCountryCode(default_region_metadata, - keep_raw_input, - national_number, - phone_number); - } - - void GetNddPrefixForRegion(const string& region, - bool strip_non_digits, - string* ndd_prefix) const { - // For testing purposes, we check this is empty first. - ndd_prefix->clear(); - phone_util_.GetNddPrefixForRegion(region, strip_non_digits, ndd_prefix); - } - - static bool Equals(const PhoneNumberDesc& expected_number, - const PhoneNumberDesc& actual_number) { - return ExactlySameAs(expected_number, actual_number); - } - - const PhoneNumberUtil& phone_util_; -}; - -// Provides PhoneNumber comparison operators to support the use of EXPECT_EQ and -// EXPECT_NE in the unittests. -bool operator==(const PhoneNumber& number1, const PhoneNumber& number2) { - return ExactlySameAs(number1, number2); -} - -bool operator!=(const PhoneNumber& number1, const PhoneNumber& number2) { - return !(number1 == number2); -} - -// Needed by Google Test to display errors. -ostream& operator<<(ostream& os, const PhoneNumber& number) { - os << endl - << "country_code: " << number.country_code() << endl - << "national_number: " << number.national_number() << endl; - if (number.has_extension()) { - os << "extension: " << number.extension() << endl; - } - if (number.has_italian_leading_zero()) { - os << "italian_leading_zero: " << number.italian_leading_zero() << endl; - } - if (number.has_raw_input()) { - os << "raw_input: " << number.raw_input() << endl; - } - if (number.has_country_code_source()) { - os << "country_code_source: " << number.country_code_source() << endl; - } - if (number.has_preferred_domestic_carrier_code()) { - os << "preferred_domestic_carrier_code: " - << number.preferred_domestic_carrier_code() << endl; - } - return os; -} - -TEST_F(PhoneNumberUtilTest, GetSupportedRegions) { - set<string> regions; - - GetSupportedRegions(®ions); - EXPECT_GT(regions.size(), 0U); -} - -TEST_F(PhoneNumberUtilTest, GetInstanceLoadUSMetadata) { - const PhoneMetadata* metadata = GetPhoneMetadata(RegionCode::US()); - EXPECT_EQ("US", metadata->id()); - EXPECT_EQ(1, metadata->country_code()); - EXPECT_EQ("011", metadata->international_prefix()); - EXPECT_TRUE(metadata->has_national_prefix()); - ASSERT_EQ(2, metadata->number_format_size()); - EXPECT_EQ("(\\d{3})(\\d{3})(\\d{4})", - metadata->number_format(1).pattern()); - EXPECT_EQ("$1 $2 $3", metadata->number_format(1).format()); - EXPECT_EQ("[13-9]\\d{9}|2[0-35-9]\\d{8}", - metadata->general_desc().national_number_pattern()); - EXPECT_EQ("\\d{7}(?:\\d{3})?", - metadata->general_desc().possible_number_pattern()); - EXPECT_TRUE(Equals(metadata->general_desc(), metadata->fixed_line())); - EXPECT_EQ("\\d{10}", metadata->toll_free().possible_number_pattern()); - EXPECT_EQ("900\\d{7}", metadata->premium_rate().national_number_pattern()); - // No shared-cost data is available, so it should be initialised to "NA". - EXPECT_EQ("NA", metadata->shared_cost().national_number_pattern()); - EXPECT_EQ("NA", metadata->shared_cost().possible_number_pattern()); -} - -TEST_F(PhoneNumberUtilTest, GetInstanceLoadDEMetadata) { - const PhoneMetadata* metadata = GetPhoneMetadata(RegionCode::DE()); - EXPECT_EQ("DE", metadata->id()); - EXPECT_EQ(49, metadata->country_code()); - EXPECT_EQ("00", metadata->international_prefix()); - EXPECT_EQ("0", metadata->national_prefix()); - ASSERT_EQ(6, metadata->number_format_size()); - EXPECT_EQ(1, metadata->number_format(5).leading_digits_pattern_size()); - EXPECT_EQ("900", metadata->number_format(5).leading_digits_pattern(0)); - EXPECT_EQ("(\\d{3})(\\d{3,4})(\\d{4})", - metadata->number_format(5).pattern()); - EXPECT_EQ("$1 $2 $3", metadata->number_format(5).format()); - EXPECT_EQ("(?:[24-6]\\d{2}|3[03-9]\\d|[789](?:[1-9]\\d|0[2-9]))\\d{3,8}", - metadata->fixed_line().national_number_pattern()); - EXPECT_EQ("\\d{2,14}", metadata->fixed_line().possible_number_pattern()); - EXPECT_EQ("30123456", metadata->fixed_line().example_number()); - EXPECT_EQ("\\d{10}", metadata->toll_free().possible_number_pattern()); - EXPECT_EQ("900([135]\\d{6}|9\\d{7})", - metadata->premium_rate().national_number_pattern()); -} - -TEST_F(PhoneNumberUtilTest, GetInstanceLoadARMetadata) { - const PhoneMetadata* metadata = GetPhoneMetadata(RegionCode::AR()); - EXPECT_EQ("AR", metadata->id()); - EXPECT_EQ(54, metadata->country_code()); - EXPECT_EQ("00", metadata->international_prefix()); - EXPECT_EQ("0", metadata->national_prefix()); - EXPECT_EQ("0(?:(11|343|3715)15)?", metadata->national_prefix_for_parsing()); - EXPECT_EQ("9$1", metadata->national_prefix_transform_rule()); - ASSERT_EQ(5, metadata->number_format_size()); - EXPECT_EQ("$2 15 $3-$4", metadata->number_format(2).format()); - EXPECT_EQ("(9)(\\d{4})(\\d{2})(\\d{4})", - metadata->number_format(3).pattern()); - EXPECT_EQ("(9)(\\d{4})(\\d{2})(\\d{4})", - metadata->intl_number_format(3).pattern()); - EXPECT_EQ("$1 $2 $3 $4", metadata->intl_number_format(3).format()); -} - -TEST_F(PhoneNumberUtilTest, GetNationalSignificantNumber) { - PhoneNumber number; - number.set_country_code(1); - number.set_national_number(6502530000ULL); - string national_significant_number; - phone_util_.GetNationalSignificantNumber(number, - &national_significant_number); - EXPECT_EQ("6502530000", national_significant_number); - - // An Italian mobile number. - national_significant_number.clear(); - number.set_country_code(39); - number.set_national_number(312345678ULL); - phone_util_.GetNationalSignificantNumber(number, - &national_significant_number); - EXPECT_EQ("312345678", national_significant_number); - - // An Italian fixed line number. - national_significant_number.clear(); - number.set_country_code(39); - number.set_national_number(236618300ULL); - number.set_italian_leading_zero(true); - phone_util_.GetNationalSignificantNumber(number, - &national_significant_number); - EXPECT_EQ("0236618300", national_significant_number); -} - -TEST_F(PhoneNumberUtilTest, GetExampleNumber) { - PhoneNumber de_number; - de_number.set_country_code(49); - de_number.set_national_number(30123456ULL); - PhoneNumber test_number; - bool success = phone_util_.GetExampleNumber(RegionCode::DE(), &test_number); - EXPECT_TRUE(success); - EXPECT_EQ(de_number, test_number); - success = phone_util_.GetExampleNumberForType(RegionCode::DE(), - PhoneNumberUtil::FIXED_LINE, - &test_number); - EXPECT_TRUE(success); - EXPECT_EQ(de_number, test_number); - test_number.Clear(); - success = phone_util_.GetExampleNumberForType(RegionCode::DE(), - PhoneNumberUtil::MOBILE, - &test_number); - // Here we test that an example number was not returned, and that the number - // passed in was not modified. - EXPECT_FALSE(success); - EXPECT_EQ(PhoneNumber::default_instance(), test_number); - // For the US, the example number is placed under general description, and - // hence should be used for both fixed line and mobile, so neither of these - // should return null. - test_number.Clear(); - success = phone_util_.GetExampleNumberForType(RegionCode::US(), - PhoneNumberUtil::FIXED_LINE, - &test_number); - // Here we test that the call to get an example number succeeded, and that the - // number passed in was modified. - EXPECT_TRUE(success); - EXPECT_NE(PhoneNumber::default_instance(), test_number); - test_number.Clear(); - success = phone_util_.GetExampleNumberForType(RegionCode::US(), - PhoneNumberUtil::MOBILE, - &test_number); - EXPECT_TRUE(success); - EXPECT_NE(PhoneNumber::default_instance(), test_number); - - test_number.Clear(); - // CS is an invalid region, so we have no data for it. We should return false. - EXPECT_FALSE(phone_util_.GetExampleNumberForType(RegionCode::CS(), - PhoneNumberUtil::MOBILE, - &test_number)); - EXPECT_EQ(PhoneNumber::default_instance(), test_number); -} - -TEST_F(PhoneNumberUtilTest, FormatUSNumber) { - PhoneNumber test_number; - string formatted_number; - test_number.set_country_code(1); - test_number.set_national_number(6502530000ULL); - phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number); - EXPECT_EQ("650 253 0000", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL, - &formatted_number); - EXPECT_EQ("+1 650 253 0000", formatted_number); - - test_number.set_national_number(8002530000ULL); - phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number); - EXPECT_EQ("800 253 0000", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL, - &formatted_number); - EXPECT_EQ("+1 800 253 0000", formatted_number); - - test_number.set_national_number(9002530000ULL); - phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number); - EXPECT_EQ("900 253 0000", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL, - &formatted_number); - EXPECT_EQ("+1 900 253 0000", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::RFC3966, &formatted_number); - EXPECT_EQ("+1-900-253-0000", formatted_number); -} - -TEST_F(PhoneNumberUtilTest, FormatBSNumber) { - PhoneNumber test_number; - string formatted_number; - test_number.set_country_code(1); - test_number.set_national_number(2421234567ULL); - phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number); - EXPECT_EQ("242 123 4567", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL, - &formatted_number); - EXPECT_EQ("+1 242 123 4567", formatted_number); - - test_number.set_national_number(8002530000ULL); - phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number); - EXPECT_EQ("800 253 0000", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL, - &formatted_number); - EXPECT_EQ("+1 800 253 0000", formatted_number); - - test_number.set_national_number(9002530000ULL); - phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number); - EXPECT_EQ("900 253 0000", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL, - &formatted_number); - EXPECT_EQ("+1 900 253 0000", formatted_number); -} - -TEST_F(PhoneNumberUtilTest, FormatGBNumber) { - PhoneNumber test_number; - string formatted_number; - test_number.set_country_code(44); - test_number.set_national_number(2087389353ULL); - phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number); - EXPECT_EQ("(020) 8738 9353", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL, - &formatted_number); - EXPECT_EQ("+44 20 8738 9353", formatted_number); - - test_number.set_national_number(7912345678ULL); - phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number); - EXPECT_EQ("(07912) 345 678", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL, - &formatted_number); - EXPECT_EQ("+44 7912 345 678", formatted_number); -} - -TEST_F(PhoneNumberUtilTest, FormatDENumber) { - PhoneNumber test_number; - string formatted_number; - test_number.set_country_code(49); - test_number.set_national_number(301234ULL); - phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number); - EXPECT_EQ("030/1234", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL, - &formatted_number); - EXPECT_EQ("+49 30/1234", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::RFC3966, &formatted_number); - EXPECT_EQ("+49-30-1234", formatted_number); - - test_number.set_national_number(291123ULL); - phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number); - EXPECT_EQ("0291 123", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL, - &formatted_number); - EXPECT_EQ("+49 291 123", formatted_number); - - test_number.set_national_number(29112345678ULL); - phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number); - EXPECT_EQ("0291 12345678", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL, - &formatted_number); - EXPECT_EQ("+49 291 12345678", formatted_number); - - test_number.set_national_number(9123123ULL); - phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number); - EXPECT_EQ("09123 123", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL, - &formatted_number); - EXPECT_EQ("+49 9123 123", formatted_number); - - test_number.set_national_number(80212345ULL); - phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number); - EXPECT_EQ("08021 2345", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL, - &formatted_number); - EXPECT_EQ("+49 8021 2345", formatted_number); - - test_number.set_national_number(1234ULL); - // Note this number is correctly formatted without national prefix. Most of - // the numbers that are treated as invalid numbers by the library are short - // numbers, and they are usually not dialed with national prefix. - phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number); - EXPECT_EQ("1234", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL, - &formatted_number); - EXPECT_EQ("+49 1234", formatted_number); -} - -TEST_F(PhoneNumberUtilTest, FormatITNumber) { - PhoneNumber test_number; - string formatted_number; - test_number.set_country_code(39); - test_number.set_national_number(236618300ULL); - test_number.set_italian_leading_zero(true); - phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number); - EXPECT_EQ("02 3661 8300", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL, - &formatted_number); - EXPECT_EQ("+39 02 3661 8300", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::E164, - &formatted_number); - EXPECT_EQ("+390236618300", formatted_number); - - test_number.set_national_number(345678901ULL); - test_number.set_italian_leading_zero(false); - phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number); - EXPECT_EQ("345 678 901", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL, - &formatted_number); - EXPECT_EQ("+39 345 678 901", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::E164, - &formatted_number); - EXPECT_EQ("+39345678901", formatted_number); -} - -TEST_F(PhoneNumberUtilTest, FormatAUNumber) { - PhoneNumber test_number; - string formatted_number; - test_number.set_country_code(61); - test_number.set_national_number(236618300ULL); - phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number); - EXPECT_EQ("02 3661 8300", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL, - &formatted_number); - EXPECT_EQ("+61 2 3661 8300", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::E164, - &formatted_number); - EXPECT_EQ("+61236618300", formatted_number); - - test_number.set_national_number(1800123456ULL); - phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number); - EXPECT_EQ("1800 123 456", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL, - &formatted_number); - EXPECT_EQ("+61 1800 123 456", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::E164, - &formatted_number); - EXPECT_EQ("+611800123456", formatted_number); -} - -TEST_F(PhoneNumberUtilTest, FormatARNumber) { - PhoneNumber test_number; - string formatted_number; - test_number.set_country_code(54); - test_number.set_national_number(1187654321ULL); - phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number); - EXPECT_EQ("011 8765-4321", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL, - &formatted_number); - EXPECT_EQ("+54 11 8765-4321", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::E164, - &formatted_number); - EXPECT_EQ("+541187654321", formatted_number); - - test_number.set_national_number(91187654321ULL); - phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number); - EXPECT_EQ("011 15 8765-4321", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL, - &formatted_number); - EXPECT_EQ("+54 9 11 8765 4321", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::E164, - &formatted_number); - EXPECT_EQ("+5491187654321", formatted_number); -} - -TEST_F(PhoneNumberUtilTest, FormatMXNumber) { - PhoneNumber test_number; - string formatted_number; - test_number.set_country_code(52); - test_number.set_national_number(12345678900ULL); - phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number); - EXPECT_EQ("045 234 567 8900", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL, - &formatted_number); - EXPECT_EQ("+52 1 234 567 8900", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::E164, - &formatted_number); - EXPECT_EQ("+5212345678900", formatted_number); - - test_number.set_national_number(15512345678ULL); - phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number); - EXPECT_EQ("045 55 1234 5678", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL, - &formatted_number); - EXPECT_EQ("+52 1 55 1234 5678", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::E164, - &formatted_number); - EXPECT_EQ("+5215512345678", formatted_number); - - test_number.set_national_number(3312345678LL); - phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number); - EXPECT_EQ("01 33 1234 5678", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL, - &formatted_number); - EXPECT_EQ("+52 33 1234 5678", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::E164, - &formatted_number); - EXPECT_EQ("+523312345678", formatted_number); - - test_number.set_national_number(8211234567LL); - phone_util_.Format(test_number, PhoneNumberUtil::NATIONAL, &formatted_number); - EXPECT_EQ("01 821 123 4567", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::INTERNATIONAL, - &formatted_number); - EXPECT_EQ("+52 821 123 4567", formatted_number); - phone_util_.Format(test_number, PhoneNumberUtil::E164, - &formatted_number); - EXPECT_EQ("+528211234567", formatted_number); -} - -TEST_F(PhoneNumberUtilTest, FormatOutOfCountryCallingNumber) { - PhoneNumber test_number; - string formatted_number; - test_number.set_country_code(1); - test_number.set_national_number(9002530000ULL); - phone_util_.FormatOutOfCountryCallingNumber(test_number, RegionCode::DE(), - &formatted_number); - EXPECT_EQ("00 1 900 253 0000", formatted_number); - - test_number.set_national_number(6502530000ULL); - phone_util_.FormatOutOfCountryCallingNumber(test_number, RegionCode::BS(), - &formatted_number); - EXPECT_EQ("1 650 253 0000", formatted_number); - phone_util_.FormatOutOfCountryCallingNumber(test_number, RegionCode::PL(), - &formatted_number); - EXPECT_EQ("0~0 1 650 253 0000", formatted_number); - - test_number.set_country_code(44); - test_number.set_national_number(7912345678ULL); - phone_util_.FormatOutOfCountryCallingNumber(test_number, RegionCode::US(), - &formatted_number); - EXPECT_EQ("011 44 7912 345 678", formatted_number); - - test_number.set_country_code(49); - test_number.set_national_number(1234ULL); - phone_util_.FormatOutOfCountryCallingNumber(test_number, RegionCode::GB(), - &formatted_number); - EXPECT_EQ("00 49 1234", formatted_number); - // Note this number is correctly formatted without national prefix. Most of - // the numbers that are treated as invalid numbers by the library are short - // numbers, and they are usually not dialed with national prefix. - phone_util_.FormatOutOfCountryCallingNumber(test_number, RegionCode::DE(), - &formatted_number); - EXPECT_EQ("1234", formatted_number); - - test_number.set_country_code(39); - test_number.set_national_number(236618300ULL); - test_number.set_italian_leading_zero(true); - phone_util_.FormatOutOfCountryCallingNumber(test_number, RegionCode::US(), - &formatted_number); - EXPECT_EQ("011 39 02 3661 8300", formatted_number); - phone_util_.FormatOutOfCountryCallingNumber(test_number, RegionCode::IT(), - &formatted_number); - EXPECT_EQ("02 3661 8300", formatted_number); - phone_util_.FormatOutOfCountryCallingNumber(test_number, RegionCode::SG(), - &formatted_number); - EXPECT_EQ("+39 02 3661 8300", formatted_number); - - test_number.set_country_code(65); - test_number.set_national_number(94777892ULL); - test_number.set_italian_leading_zero(false); - phone_util_.FormatOutOfCountryCallingNumber(test_number, RegionCode::SG(), - &formatted_number); - EXPECT_EQ("9477 7892", formatted_number); - - test_number.set_country_code(54); - test_number.set_national_number(91187654321ULL); - phone_util_.FormatOutOfCountryCallingNumber(test_number, RegionCode::US(), - &formatted_number); - EXPECT_EQ("011 54 9 11 8765 4321", formatted_number); - - test_number.set_extension("1234"); - phone_util_.FormatOutOfCountryCallingNumber(test_number, RegionCode::US(), - &formatted_number); - EXPECT_EQ("011 54 9 11 8765 4321 ext. 1234", formatted_number); - phone_util_.FormatOutOfCountryCallingNumber(test_number, RegionCode::AU(), - &formatted_number); - EXPECT_EQ("0011 54 9 11 8765 4321 ext. 1234", formatted_number); - phone_util_.FormatOutOfCountryCallingNumber(test_number, RegionCode::AR(), - &formatted_number); - EXPECT_EQ("011 15 8765-4321 ext. 1234", formatted_number); -} - -TEST_F(PhoneNumberUtilTest, FormatOutOfCountryWithPreferredIntlPrefix) { - PhoneNumber test_number; - string formatted_number; - test_number.set_country_code(39); - test_number.set_national_number(236618300ULL); - test_number.set_italian_leading_zero(true); - // This should use 0011, since that is the preferred international prefix - // (both 0011 and 0012 are accepted as possible international prefixes in our - // test metadta.) - phone_util_.FormatOutOfCountryCallingNumber(test_number, RegionCode::AU(), - &formatted_number); - EXPECT_EQ("0011 39 02 3661 8300", formatted_number); -} - -TEST_F(PhoneNumberUtilTest, FormatOutOfCountryKeepingAlphaChars) { - PhoneNumber alpha_numeric_number; - string formatted_number; - alpha_numeric_number.set_country_code(1); - alpha_numeric_number.set_national_number(8007493524ULL); - alpha_numeric_number.set_raw_input("1800 six-flag"); - phone_util_.FormatOutOfCountryKeepingAlphaChars(alpha_numeric_number, - RegionCode::AU(), - &formatted_number); - EXPECT_EQ("0011 1 800 SIX-FLAG", formatted_number); - - formatted_number.clear(); - alpha_numeric_number.set_raw_input("1-800-SIX-flag"); - phone_util_.FormatOutOfCountryKeepingAlphaChars(alpha_numeric_number, - RegionCode::AU(), - &formatted_number); - EXPECT_EQ("0011 1 800-SIX-FLAG", formatted_number); - - formatted_number.clear(); - alpha_numeric_number.set_raw_input("Call us from UK: 00 1 800 SIX-flag"); - phone_util_.FormatOutOfCountryKeepingAlphaChars(alpha_numeric_number, - RegionCode::AU(), - &formatted_number); - EXPECT_EQ("0011 1 800 SIX-FLAG", formatted_number); - - formatted_number.clear(); - alpha_numeric_number.set_raw_input("800 SIX-flag"); - phone_util_.FormatOutOfCountryKeepingAlphaChars(alpha_numeric_number, - RegionCode::AU(), - &formatted_number); - EXPECT_EQ("0011 1 800 SIX-FLAG", formatted_number); - - // Formatting from within the NANPA region. - formatted_number.clear(); - phone_util_.FormatOutOfCountryKeepingAlphaChars(alpha_numeric_number, - RegionCode::US(), - &formatted_number); - EXPECT_EQ("1 800 SIX-FLAG", formatted_number); - formatted_number.clear(); - phone_util_.FormatOutOfCountryKeepingAlphaChars(alpha_numeric_number, - RegionCode::BS(), - &formatted_number); - EXPECT_EQ("1 800 SIX-FLAG", formatted_number); - - // Testing that if the raw input doesn't exist, it is formatted using - // FormatOutOfCountryCallingNumber. - alpha_numeric_number.clear_raw_input(); - formatted_number.clear(); - phone_util_.FormatOutOfCountryKeepingAlphaChars(alpha_numeric_number, - RegionCode::DE(), - &formatted_number); - EXPECT_EQ("00 1 800 749 3524", formatted_number); - - // Testing AU alpha number formatted from Australia. - alpha_numeric_number.set_country_code(61); - alpha_numeric_number.set_national_number(827493524ULL); - alpha_numeric_number.set_raw_input("+61 82749-FLAG"); - formatted_number.clear(); - phone_util_.FormatOutOfCountryKeepingAlphaChars(alpha_numeric_number, - RegionCode::AU(), - &formatted_number); - // This number should have the national prefix prefixed. - EXPECT_EQ("082749-FLAG", formatted_number); - - alpha_numeric_number.set_raw_input("082749-FLAG"); - formatted_number.clear(); - phone_util_.FormatOutOfCountryKeepingAlphaChars(alpha_numeric_number, - RegionCode::AU(), - &formatted_number); - EXPECT_EQ("082749-FLAG", formatted_number); - - alpha_numeric_number.set_national_number(18007493524ULL); - alpha_numeric_number.set_raw_input("1-800-SIX-flag"); - formatted_number.clear(); - phone_util_.FormatOutOfCountryKeepingAlphaChars(alpha_numeric_number, - RegionCode::AU(), - &formatted_number); - // This number should not have the national prefix prefixed, in accordance - // with the override for this specific formatting rule. - EXPECT_EQ("1-800-SIX-FLAG", formatted_number); - // The metadata should not be permanently changed, since we copied it before - // modifying patterns. Here we check this. - formatted_number.clear(); - alpha_numeric_number.set_national_number(1800749352ULL); - phone_util_.FormatOutOfCountryCallingNumber(alpha_numeric_number, - RegionCode::AU(), - &formatted_number); - EXPECT_EQ("1800 749 352", formatted_number); - - // Testing a country with multiple international prefixes. - formatted_number.clear(); - phone_util_.FormatOutOfCountryKeepingAlphaChars(alpha_numeric_number, - RegionCode::SG(), - &formatted_number); - EXPECT_EQ("+61 1-800-SIX-FLAG", formatted_number); - - // Testing the case with an invalid country code. - formatted_number.clear(); - alpha_numeric_number.set_country_code(0); - alpha_numeric_number.set_national_number(18007493524ULL); - alpha_numeric_number.set_raw_input("1-800-SIX-flag"); - phone_util_.FormatOutOfCountryKeepingAlphaChars(alpha_numeric_number, - RegionCode::DE(), - &formatted_number); - // Uses the raw input only. - EXPECT_EQ("1-800-SIX-flag", formatted_number); - - // Testing the case of an invalid alpha number. - formatted_number.clear(); - alpha_numeric_number.set_country_code(1); - alpha_numeric_number.set_national_number(80749ULL); - alpha_numeric_number.set_raw_input("180-SIX"); - phone_util_.FormatOutOfCountryKeepingAlphaChars(alpha_numeric_number, - RegionCode::DE(), - &formatted_number); - // No country-code stripping can be done. - EXPECT_EQ("00 1 180-SIX", formatted_number); -} - -TEST_F(PhoneNumberUtilTest, FormatWithCarrierCode) { - // We only support this for AR in our test metadata. - PhoneNumber ar_number; - string formatted_number; - ar_number.set_country_code(54); - ar_number.set_national_number(91234125678ULL); - phone_util_.Format(ar_number, PhoneNumberUtil::NATIONAL, &formatted_number); - EXPECT_EQ("01234 12-5678", formatted_number); - // Test formatting with a carrier code. - phone_util_.FormatNationalNumberWithCarrierCode(ar_number, "15", - &formatted_number); - EXPECT_EQ("01234 15 12-5678", formatted_number); - phone_util_.FormatNationalNumberWithCarrierCode(ar_number, "", - &formatted_number); - EXPECT_EQ("01234 12-5678", formatted_number); - // Here the international rule is used, so no carrier code should be present. - phone_util_.Format(ar_number, PhoneNumberUtil::E164, &formatted_number); - EXPECT_EQ("+5491234125678", formatted_number); - // We don't support this for the US so there should be no change. - PhoneNumber us_number; - us_number.set_country_code(1); - us_number.set_national_number(4241231234ULL); - phone_util_.Format(us_number, PhoneNumberUtil::NATIONAL, &formatted_number); - EXPECT_EQ("424 123 1234", formatted_number); - phone_util_.FormatNationalNumberWithCarrierCode(us_number, "15", - &formatted_number); - EXPECT_EQ("424 123 1234", formatted_number); -} - -TEST_F(PhoneNumberUtilTest, FormatWithPreferredCarrierCode) { - // We only support this for AR in our test metadata. - PhoneNumber ar_number; - string formatted_number; - ar_number.set_country_code(54); - ar_number.set_national_number(91234125678ULL); - // Test formatting with no preferred carrier code stored in the number itself. - phone_util_.FormatNationalNumberWithPreferredCarrierCode(ar_number, "15", - &formatted_number); - EXPECT_EQ("01234 15 12-5678", formatted_number); - phone_util_.FormatNationalNumberWithPreferredCarrierCode(ar_number, "", - &formatted_number); - EXPECT_EQ("01234 12-5678", formatted_number); - // Test formatting with preferred carrier code present. - ar_number.set_preferred_domestic_carrier_code("19"); - phone_util_.Format(ar_number, PhoneNumberUtil::NATIONAL, &formatted_number); - EXPECT_EQ("01234 12-5678", formatted_number); - phone_util_.FormatNationalNumberWithPreferredCarrierCode(ar_number, "15", - &formatted_number); - EXPECT_EQ("01234 19 12-5678", formatted_number); - phone_util_.FormatNationalNumberWithPreferredCarrierCode(ar_number, "", - &formatted_number); - EXPECT_EQ("01234 19 12-5678", formatted_number); - // When the preferred_domestic_carrier_code is present (even when it contains - // an empty string), use it instead of the default carrier code passed in. - ar_number.set_preferred_domestic_carrier_code(""); - phone_util_.FormatNationalNumberWithPreferredCarrierCode(ar_number, "15", - &formatted_number); - EXPECT_EQ("01234 12-5678", formatted_number); - // We don't support this for the US so there should be no change. - PhoneNumber us_number; - us_number.set_country_code(1); - us_number.set_national_number(4241231234ULL); - us_number.set_preferred_domestic_carrier_code("99"); - phone_util_.Format(us_number, PhoneNumberUtil::NATIONAL, &formatted_number); - EXPECT_EQ("424 123 1234", formatted_number); - phone_util_.FormatNationalNumberWithPreferredCarrierCode(us_number, "15", - &formatted_number); - EXPECT_EQ("424 123 1234", formatted_number); -} - -TEST_F(PhoneNumberUtilTest, FormatByPattern) { - PhoneNumber test_number; - string formatted_number; - test_number.set_country_code(1); - test_number.set_national_number(6502530000ULL); - - RepeatedPtrField<NumberFormat> number_formats; - NumberFormat* number_format = number_formats.Add(); - number_format->set_pattern("(\\d{3})(\\d{3})(\\d{4})"); - number_format->set_format("($1) $2-$3"); - phone_util_.FormatByPattern(test_number, PhoneNumberUtil::NATIONAL, - number_formats, - &formatted_number); - EXPECT_EQ("(650) 253-0000", formatted_number); - phone_util_.FormatByPattern(test_number, PhoneNumberUtil::INTERNATIONAL, - number_formats, - &formatted_number); - EXPECT_EQ("+1 (650) 253-0000", formatted_number); - - // $NP is set to '1' for the US. Here we check that for other NANPA countries - // the US rules are followed. - number_format->set_national_prefix_formatting_rule("$NP ($FG)"); - number_format->set_format("$1 $2-$3"); - test_number.set_country_code(1); - test_number.set_national_number(4168819999ULL); - phone_util_.FormatByPattern(test_number, PhoneNumberUtil::NATIONAL, - number_formats, - &formatted_number); - EXPECT_EQ("1 (416) 881-9999", formatted_number); - phone_util_.FormatByPattern(test_number, PhoneNumberUtil::INTERNATIONAL, - number_formats, - &formatted_number); - EXPECT_EQ("+1 416 881-9999", formatted_number); - - test_number.set_country_code(39); - test_number.set_national_number(236618300ULL); - test_number.set_italian_leading_zero(true); - number_format->set_pattern("(\\d{2})(\\d{5})(\\d{3})"); - number_format->set_format("$1-$2 $3"); - phone_util_.FormatByPattern(test_number, PhoneNumberUtil::NATIONAL, - number_formats, - &formatted_number); - EXPECT_EQ("02-36618 300", formatted_number); - phone_util_.FormatByPattern(test_number, PhoneNumberUtil::INTERNATIONAL, - number_formats, - &formatted_number); - EXPECT_EQ("+39 02-36618 300", formatted_number); - - test_number.set_country_code(44); - test_number.set_national_number(2012345678ULL); - test_number.set_italian_leading_zero(false); - number_format->set_national_prefix_formatting_rule("$NP$FG"); - number_format->set_pattern("(\\d{2})(\\d{4})(\\d{4})"); - number_format->set_format("$1 $2 $3"); - phone_util_.FormatByPattern(test_number, PhoneNumberUtil::NATIONAL, - number_formats, - &formatted_number); - EXPECT_EQ("020 1234 5678", formatted_number); - - number_format->set_national_prefix_formatting_rule("($NP$FG)"); - phone_util_.FormatByPattern(test_number, PhoneNumberUtil::NATIONAL, - number_formats, - &formatted_number); - EXPECT_EQ("(020) 1234 5678", formatted_number); - number_format->set_national_prefix_formatting_rule(""); - phone_util_.FormatByPattern(test_number, PhoneNumberUtil::NATIONAL, - number_formats, - &formatted_number); - EXPECT_EQ("20 1234 5678", formatted_number); - number_format->set_national_prefix_formatting_rule(""); - phone_util_.FormatByPattern(test_number, PhoneNumberUtil::INTERNATIONAL, - number_formats, - &formatted_number); - EXPECT_EQ("+44 20 1234 5678", formatted_number); -} - -TEST_F(PhoneNumberUtilTest, FormatE164Number) { - PhoneNumber test_number; - string formatted_number; - test_number.set_country_code(1); - test_number.set_national_number(6502530000ULL); - phone_util_.Format(test_number, PhoneNumberUtil::E164, &formatted_number); - EXPECT_EQ("+16502530000", formatted_number); - - test_number.set_country_code(49); - test_number.set_national_number(301234ULL); - phone_util_.Format(test_number, PhoneNumberUtil::E164, &formatted_number); - EXPECT_EQ("+49301234", formatted_number); -} - -TEST_F(PhoneNumberUtilTest, FormatNumberWithExtension) { - PhoneNumber nz_number; - nz_number.set_country_code(64); - nz_number.set_national_number(33316005ULL); - nz_number.set_extension("1234"); - string formatted_number; - // Uses default extension prefix: - phone_util_.Format(nz_number, PhoneNumberUtil::NATIONAL, &formatted_number); - EXPECT_EQ("03-331 6005 ext. 1234", formatted_number); - // Uses RFC 3966 syntax. - phone_util_.Format(nz_number, PhoneNumberUtil::RFC3966, &formatted_number); - EXPECT_EQ("+64-3-331-6005;ext=1234", formatted_number); - // Extension prefix overridden in the territory information for the US: - PhoneNumber us_number_with_extension; - us_number_with_extension.set_country_code(1); - us_number_with_extension.set_national_number(6502530000ULL); - us_number_with_extension.set_extension("4567"); - phone_util_.Format(us_number_with_extension, - PhoneNumberUtil::NATIONAL, &formatted_number); - EXPECT_EQ("650 253 0000 extn. 4567", formatted_number); -} - -TEST_F(PhoneNumberUtilTest, GetLengthOfGeographicalAreaCode) { - PhoneNumber number; - // Google MTV, which has area code "650". - number.set_country_code(1); - number.set_national_number(6502530000ULL); - EXPECT_EQ(3, phone_util_.GetLengthOfGeographicalAreaCode(number)); - - // A North America toll-free number, which has no area code. - number.set_country_code(1); - number.set_national_number(8002530000ULL); - EXPECT_EQ(0, phone_util_.GetLengthOfGeographicalAreaCode(number)); - - // An invalid US number (1 digit shorter), which has no area code. - number.set_country_code(1); - number.set_national_number(650253000ULL); - EXPECT_EQ(0, phone_util_.GetLengthOfGeographicalAreaCode(number)); - - // Google London, which has area code "20". - number.set_country_code(44); - number.set_national_number(2070313000ULL); - EXPECT_EQ(2, phone_util_.GetLengthOfGeographicalAreaCode(number)); - - // A UK mobile phone, which has no area code. - number.set_country_code(44); - number.set_national_number(7123456789ULL); - EXPECT_EQ(0, phone_util_.GetLengthOfGeographicalAreaCode(number)); - - // Google Buenos Aires, which has area code "11". - number.set_country_code(54); - number.set_national_number(1155303000ULL); - EXPECT_EQ(2, phone_util_.GetLengthOfGeographicalAreaCode(number)); - - // Google Sydney, which has area code "2". - number.set_country_code(61); - number.set_national_number(293744000ULL); - EXPECT_EQ(1, phone_util_.GetLengthOfGeographicalAreaCode(number)); - - // Google Singapore. Singapore has no area code and no national prefix. - number.set_country_code(65); - number.set_national_number(65218000ULL); - EXPECT_EQ(0, phone_util_.GetLengthOfGeographicalAreaCode(number)); -} - -TEST_F(PhoneNumberUtilTest, GetLengthOfNationalDestinationCode) { - PhoneNumber number; - // Google MTV, which has national destination code (NDC) "650". - number.set_country_code(1); - number.set_national_number(6502530000ULL); - EXPECT_EQ(3, phone_util_.GetLengthOfNationalDestinationCode(number)); - - // A North America toll-free number, which has NDC "800". - number.set_country_code(1); - number.set_national_number(8002530000ULL); - EXPECT_EQ(3, phone_util_.GetLengthOfNationalDestinationCode(number)); - - // Google London, which has NDC "20". - number.set_country_code(44); - number.set_national_number(2070313000ULL); - EXPECT_EQ(2, phone_util_.GetLengthOfNationalDestinationCode(number)); - - // A UK mobile phone, which has NDC "7123" - number.set_country_code(44); - number.set_national_number(7123456789ULL); - EXPECT_EQ(4, phone_util_.GetLengthOfNationalDestinationCode(number)); - - // Google Buenos Aires, which has NDC "11". - number.set_country_code(54); - number.set_national_number(1155303000ULL); - EXPECT_EQ(2, phone_util_.GetLengthOfNationalDestinationCode(number)); - - // Google Sydney, which has NDC "2". - number.set_country_code(61); - number.set_national_number(293744000ULL); - EXPECT_EQ(1, phone_util_.GetLengthOfNationalDestinationCode(number)); - - // Google Singapore. Singapore has NDC "6521". - number.set_country_code(65); - number.set_national_number(65218000ULL); - EXPECT_EQ(4, phone_util_.GetLengthOfNationalDestinationCode(number)); - - // An invalid US number (1 digit shorter), which has no NDC. - number.set_country_code(1); - number.set_national_number(650253000ULL); - EXPECT_EQ(0, phone_util_.GetLengthOfNationalDestinationCode(number)); - - // A number containing an invalid country code, which shouldn't have any NDC. - number.set_country_code(123); - number.set_national_number(650253000ULL); - EXPECT_EQ(0, phone_util_.GetLengthOfNationalDestinationCode(number)); - - // A number that has only one group of digits after country code when - // formatted in the international format. - number.set_country_code(376); - number.set_national_number(12345ULL); - EXPECT_EQ(0, phone_util_.GetLengthOfNationalDestinationCode(number)); - - // The same number above, but with an extension. - number.set_country_code(376); - number.set_national_number(12345ULL); - number.set_extension("321"); - EXPECT_EQ(0, phone_util_.GetLengthOfNationalDestinationCode(number)); -} - -TEST_F(PhoneNumberUtilTest, ExtractPossibleNumber) { - // Removes preceding funky punctuation and letters but leaves the rest - // untouched. - string extracted_number; - ExtractPossibleNumber("Tel:0800-345-600", &extracted_number); - EXPECT_EQ("0800-345-600", extracted_number); - ExtractPossibleNumber("Tel:0800 FOR PIZZA", &extracted_number); - EXPECT_EQ("0800 FOR PIZZA", extracted_number); - - // Should not remove plus sign. - ExtractPossibleNumber("Tel:+800-345-600", &extracted_number); - EXPECT_EQ("+800-345-600", extracted_number); - // Should recognise wide digits as possible start values. - ExtractPossibleNumber("\xEF\xBC\x90\xEF\xBC\x92\xEF\xBC\x93" /* "023" */, - &extracted_number); - EXPECT_EQ("\xEF\xBC\x90\xEF\xBC\x92\xEF\xBC\x93" /* "023" */, - extracted_number); - // Dashes are not possible start values and should be removed. - ExtractPossibleNumber("Num-\xEF\xBC\x91\xEF\xBC\x92\xEF\xBC\x93" - /* "Num-123" */, &extracted_number); - EXPECT_EQ("\xEF\xBC\x91\xEF\xBC\x92\xEF\xBC\x93" /* "123" */, - extracted_number); - // If not possible number present, return empty string. - ExtractPossibleNumber("Num-....", &extracted_number); - EXPECT_EQ("", extracted_number); - // Leading brackets are stripped - these are not used when parsing. - ExtractPossibleNumber("(650) 253-0000", &extracted_number); - EXPECT_EQ("650) 253-0000", extracted_number); - - // Trailing non-alpha-numeric characters should be removed. - ExtractPossibleNumber("(650) 253-0000..- ..", &extracted_number); - EXPECT_EQ("650) 253-0000", extracted_number); - ExtractPossibleNumber("(650) 253-0000.", &extracted_number); - EXPECT_EQ("650) 253-0000", extracted_number); - // This case has a trailing RTL char. - ExtractPossibleNumber("(650) 253-0000\xE2\x80\x8F" - /* "(650) 253-0000" */, &extracted_number); - EXPECT_EQ("650) 253-0000", extracted_number); -} - -TEST_F(PhoneNumberUtilTest, IsNANPACountry) { - EXPECT_TRUE(phone_util_.IsNANPACountry(RegionCode::US())); - EXPECT_TRUE(phone_util_.IsNANPACountry(RegionCode::BS())); -} - -TEST_F(PhoneNumberUtilTest, IsValidNumber) { - PhoneNumber us_number; - us_number.set_country_code(1); - us_number.set_national_number(6502530000ULL); - EXPECT_TRUE(phone_util_.IsValidNumber(us_number)); - - PhoneNumber it_number; - it_number.set_country_code(39); - it_number.set_national_number(236618300ULL); - it_number.set_italian_leading_zero(true); - EXPECT_TRUE(phone_util_.IsValidNumber(it_number)); - - PhoneNumber gb_number; - gb_number.set_country_code(44); - gb_number.set_national_number(7912345678ULL); - EXPECT_TRUE(phone_util_.IsValidNumber(gb_number)); - - PhoneNumber nz_number; - nz_number.set_country_code(64); - nz_number.set_national_number(21387835ULL); - EXPECT_TRUE(phone_util_.IsValidNumber(nz_number)); -} - -TEST_F(PhoneNumberUtilTest, IsValidForRegion) { - // This number is valid for the Bahamas, but is not a valid US number. - PhoneNumber bs_number; - bs_number.set_country_code(1); - bs_number.set_national_number(2423232345ULL); - EXPECT_TRUE(phone_util_.IsValidNumber(bs_number)); - EXPECT_TRUE(phone_util_.IsValidNumberForRegion(bs_number, RegionCode::BS())); - EXPECT_FALSE(phone_util_.IsValidNumberForRegion(bs_number, RegionCode::US())); - bs_number.set_national_number(2421232345ULL); - // This number is no longer valid. - EXPECT_FALSE(phone_util_.IsValidNumber(bs_number)); - - // La Mayotte and Réunion use 'leadingDigits' to differentiate them. - PhoneNumber re_number; - re_number.set_country_code(262); - re_number.set_national_number(262123456ULL); - EXPECT_TRUE(phone_util_.IsValidNumber(re_number)); - EXPECT_TRUE(phone_util_.IsValidNumberForRegion(re_number, RegionCode::RE())); - EXPECT_FALSE(phone_util_.IsValidNumberForRegion(re_number, RegionCode::YT())); - // Now change the number to be a number for La Mayotte. - re_number.set_national_number(269601234ULL); - EXPECT_TRUE(phone_util_.IsValidNumberForRegion(re_number, RegionCode::YT())); - EXPECT_FALSE(phone_util_.IsValidNumberForRegion(re_number, RegionCode::RE())); - // This number is no longer valid. - re_number.set_national_number(269123456ULL); - EXPECT_FALSE(phone_util_.IsValidNumberForRegion(re_number, RegionCode::YT())); - EXPECT_FALSE(phone_util_.IsValidNumberForRegion(re_number, RegionCode::RE())); - EXPECT_FALSE(phone_util_.IsValidNumber(re_number)); - // However, it should be recognised as from La Mayotte. - string region_code; - phone_util_.GetRegionCodeForNumber(re_number, ®ion_code); - EXPECT_EQ(RegionCode::YT(), region_code); - // This number is valid in both places. - re_number.set_national_number(800123456ULL); - EXPECT_TRUE(phone_util_.IsValidNumberForRegion(re_number, RegionCode::YT())); - EXPECT_TRUE(phone_util_.IsValidNumberForRegion(re_number, RegionCode::RE())); -} - -TEST_F(PhoneNumberUtilTest, IsNotValidNumber) { - PhoneNumber us_number; - us_number.set_country_code(1); - us_number.set_national_number(2530000ULL); - EXPECT_FALSE(phone_util_.IsValidNumber(us_number)); - - PhoneNumber it_number; - it_number.set_country_code(39); - it_number.set_national_number(23661830000ULL); - it_number.set_italian_leading_zero(true); - EXPECT_FALSE(phone_util_.IsValidNumber(it_number)); - - PhoneNumber gb_number; - gb_number.set_country_code(44); - gb_number.set_national_number(791234567ULL); - EXPECT_FALSE(phone_util_.IsValidNumber(gb_number)); - - PhoneNumber de_number; - de_number.set_country_code(49); - de_number.set_national_number(1234ULL); - EXPECT_FALSE(phone_util_.IsValidNumber(de_number)); - - PhoneNumber nz_number; - nz_number.set_country_code(64); - nz_number.set_national_number(3316005ULL); - EXPECT_FALSE(phone_util_.IsValidNumber(nz_number)); -} - -TEST_F(PhoneNumberUtilTest, IsPossibleNumber) { - PhoneNumber number; - number.set_country_code(1); - number.set_national_number(6502530000ULL); - EXPECT_TRUE(phone_util_.IsPossibleNumber(number)); - - number.set_country_code(1); - number.set_national_number(2530000ULL); - EXPECT_TRUE(phone_util_.IsPossibleNumber(number)); - - number.set_country_code(44); - number.set_national_number(2070313000ULL); - EXPECT_TRUE(phone_util_.IsPossibleNumber(number)); - - EXPECT_TRUE(phone_util_.IsPossibleNumberForString("+1 650 253 0000", - RegionCode::US())); - EXPECT_TRUE(phone_util_.IsPossibleNumberForString("+1 650 GOO OGLE", - RegionCode::US())); - EXPECT_TRUE(phone_util_.IsPossibleNumberForString("(650) 253-0000", - RegionCode::US())); - EXPECT_TRUE(phone_util_.IsPossibleNumberForString("253-0000", - RegionCode::US())); - EXPECT_TRUE(phone_util_.IsPossibleNumberForString("+1 650 253 0000", - RegionCode::GB())); - EXPECT_TRUE(phone_util_.IsPossibleNumberForString("+44 20 7031 3000", - RegionCode::GB())); - EXPECT_TRUE(phone_util_.IsPossibleNumberForString("(020) 7031 3000", - RegionCode::GB())); - EXPECT_TRUE(phone_util_.IsPossibleNumberForString("7031 3000", - RegionCode::GB())); - EXPECT_TRUE(phone_util_.IsPossibleNumberForString("3331 6005", - RegionCode::NZ())); -} - -TEST_F(PhoneNumberUtilTest, IsPossibleNumberWithReason) { - // FYI, national numbers for country code +1 that are within 7 to 10 digits - // are possible. - PhoneNumber number; - number.set_country_code(1); - number.set_national_number(6502530000ULL); - EXPECT_EQ(PhoneNumberUtil::IS_POSSIBLE, - phone_util_.IsPossibleNumberWithReason(number)); - - number.set_country_code(1); - number.set_national_number(2530000ULL); - EXPECT_EQ(PhoneNumberUtil::IS_POSSIBLE, - phone_util_.IsPossibleNumberWithReason(number)); - - number.set_country_code(0); - number.set_national_number(2530000ULL); - EXPECT_EQ(PhoneNumberUtil::INVALID_COUNTRY_CODE, - phone_util_.IsPossibleNumberWithReason(number)); - - number.set_country_code(1); - number.set_national_number(253000ULL); - EXPECT_EQ(PhoneNumberUtil::TOO_SHORT, - phone_util_.IsPossibleNumberWithReason(number)); - - number.set_country_code(1); - number.set_national_number(65025300000ULL); - EXPECT_EQ(PhoneNumberUtil::TOO_LONG, - phone_util_.IsPossibleNumberWithReason(number)); - - number.set_country_code(44); - number.set_national_number(2070310000ULL); - EXPECT_EQ(PhoneNumberUtil::IS_POSSIBLE, - phone_util_.IsPossibleNumberWithReason(number)); - - number.set_country_code(49); - number.set_national_number(30123456ULL); - EXPECT_EQ(PhoneNumberUtil::IS_POSSIBLE, - phone_util_.IsPossibleNumberWithReason(number)); - - number.set_country_code(65); - number.set_national_number(1234567890ULL); - EXPECT_EQ(PhoneNumberUtil::IS_POSSIBLE, - phone_util_.IsPossibleNumberWithReason(number)); - - // Try with number that we don't have metadata for. - PhoneNumber ad_number; - ad_number.set_country_code(376); - ad_number.set_national_number(12345ULL); - EXPECT_EQ(PhoneNumberUtil::IS_POSSIBLE, - phone_util_.IsPossibleNumberWithReason(ad_number)); - ad_number.set_country_code(376); - ad_number.set_national_number(13ULL); - EXPECT_EQ(PhoneNumberUtil::TOO_SHORT, - phone_util_.IsPossibleNumberWithReason(ad_number)); - ad_number.set_country_code(376); - ad_number.set_national_number(1234567890123456ULL); - EXPECT_EQ(PhoneNumberUtil::TOO_LONG, - phone_util_.IsPossibleNumberWithReason(ad_number)); -} - -TEST_F(PhoneNumberUtilTest, IsNotPossibleNumber) { - PhoneNumber number; - number.set_country_code(1); - number.set_national_number(65025300000ULL); - EXPECT_FALSE(phone_util_.IsPossibleNumber(number)); - - number.set_country_code(1); - number.set_national_number(253000ULL); - EXPECT_FALSE(phone_util_.IsPossibleNumber(number)); - - number.set_country_code(44); - number.set_national_number(300ULL); - EXPECT_FALSE(phone_util_.IsPossibleNumber(number)); - - EXPECT_FALSE(phone_util_.IsPossibleNumberForString("+1 650 253 00000", - RegionCode::US())); - EXPECT_FALSE(phone_util_.IsPossibleNumberForString("(650) 253-00000", - RegionCode::US())); - EXPECT_FALSE(phone_util_.IsPossibleNumberForString("I want a Pizza", - RegionCode::US())); - EXPECT_FALSE(phone_util_.IsPossibleNumberForString("253-000", - RegionCode::US())); - EXPECT_FALSE(phone_util_.IsPossibleNumberForString("1 3000", - RegionCode::GB())); - EXPECT_FALSE(phone_util_.IsPossibleNumberForString("+44 300", - RegionCode::GB())); -} - -TEST_F(PhoneNumberUtilTest, TruncateTooLongNumber) { - // US number 650-253-0000, but entered with one additional digit at the end. - PhoneNumber too_long_number; - too_long_number.set_country_code(1); - too_long_number.set_national_number(65025300001ULL); - PhoneNumber valid_number; - valid_number.set_country_code(1); - valid_number.set_national_number(6502530000ULL); - EXPECT_TRUE(phone_util_.TruncateTooLongNumber(&too_long_number)); - EXPECT_EQ(valid_number, too_long_number); - - // GB number 080 1234 5678, but entered with 4 extra digits at the end. - too_long_number.set_country_code(44); - too_long_number.set_national_number(80123456780123ULL); - valid_number.set_country_code(44); - valid_number.set_national_number(8012345678ULL); - EXPECT_TRUE(phone_util_.TruncateTooLongNumber(&too_long_number)); - EXPECT_EQ(valid_number, too_long_number); - - // IT number 022 3456 7890, but entered with 3 extra digits at the end. - too_long_number.set_country_code(39); - too_long_number.set_national_number(2234567890123ULL); - too_long_number.set_italian_leading_zero(true); - valid_number.set_country_code(39); - valid_number.set_national_number(2234567890ULL); - valid_number.set_italian_leading_zero(true); - EXPECT_TRUE(phone_util_.TruncateTooLongNumber(&too_long_number)); - EXPECT_EQ(valid_number, too_long_number); - - // Tests what happens when a valid number is passed in. - PhoneNumber valid_number_copy(valid_number); - EXPECT_TRUE(phone_util_.TruncateTooLongNumber(&valid_number)); - // Tests the number is not modified. - EXPECT_EQ(valid_number_copy, valid_number); - - // Tests what happens when a number with invalid prefix is passed in. - PhoneNumber number_with_invalid_prefix; - number_with_invalid_prefix.set_country_code(1); - // The test metadata says US numbers cannot have prefix 240. - number_with_invalid_prefix.set_national_number(2401234567ULL); - PhoneNumber invalid_number_copy(number_with_invalid_prefix); - EXPECT_FALSE(phone_util_.TruncateTooLongNumber(&number_with_invalid_prefix)); - // Tests the number is not modified. - EXPECT_EQ(invalid_number_copy, number_with_invalid_prefix); - - // Tests what happens when a too short number is passed in. - PhoneNumber too_short_number; - too_short_number.set_country_code(1); - too_short_number.set_national_number(1234ULL); - PhoneNumber too_short_number_copy(too_short_number); - EXPECT_FALSE(phone_util_.TruncateTooLongNumber(&too_short_number)); - // Tests the number is not modified. - EXPECT_EQ(too_short_number_copy, too_short_number); -} - -TEST_F(PhoneNumberUtilTest, IsLeadingZeroPossible) { - EXPECT_TRUE(IsLeadingZeroPossible(39)); // Italy - EXPECT_FALSE(IsLeadingZeroPossible(1)); // USA - EXPECT_FALSE(IsLeadingZeroPossible(800)); // Not in metadata file, should - // return default value of false. -} - -TEST_F(PhoneNumberUtilTest, FormatUsingOriginalNumberFormat) { - PhoneNumber phone_number; - string formatted_number; - - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.ParseAndKeepRawInput("+442087654321", RegionCode::GB(), - &phone_number)); - phone_util_.FormatInOriginalFormat(phone_number, RegionCode::GB(), - &formatted_number); - EXPECT_EQ("+44 20 8765 4321", formatted_number); - - phone_number.Clear(); - formatted_number.clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.ParseAndKeepRawInput("02087654321", RegionCode::GB(), - &phone_number)); - phone_util_.FormatInOriginalFormat(phone_number, RegionCode::GB(), - &formatted_number); - EXPECT_EQ("(020) 8765 4321", formatted_number); - - phone_number.Clear(); - formatted_number.clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.ParseAndKeepRawInput("011442087654321", - RegionCode::US(), &phone_number)); - phone_util_.FormatInOriginalFormat(phone_number, RegionCode::US(), - &formatted_number); - EXPECT_EQ("011 44 20 8765 4321", formatted_number); - - phone_number.Clear(); - formatted_number.clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.ParseAndKeepRawInput("442087654321", RegionCode::GB(), - &phone_number)); - phone_util_.FormatInOriginalFormat(phone_number, RegionCode::GB(), - &formatted_number); - EXPECT_EQ("44 20 8765 4321", formatted_number); - - phone_number.Clear(); - formatted_number.clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("+442087654321", RegionCode::GB(), - &phone_number)); - phone_util_.FormatInOriginalFormat(phone_number, RegionCode::GB(), - &formatted_number); - EXPECT_EQ("(020) 8765 4321", formatted_number); -} - -TEST_F(PhoneNumberUtilTest, IsPremiumRate) { - PhoneNumber number; - number.set_country_code(1); - number.set_national_number(9004433030ULL); - EXPECT_EQ(PhoneNumberUtil::PREMIUM_RATE, phone_util_.GetNumberType(number)); - - number.set_country_code(39); - number.set_national_number(892123ULL); - EXPECT_EQ(PhoneNumberUtil::PREMIUM_RATE, phone_util_.GetNumberType(number)); - - number.set_country_code(44); - number.set_national_number(9187654321ULL); - EXPECT_EQ(PhoneNumberUtil::PREMIUM_RATE, phone_util_.GetNumberType(number)); - - number.set_country_code(49); - number.set_national_number(9001654321ULL); - EXPECT_EQ(PhoneNumberUtil::PREMIUM_RATE, phone_util_.GetNumberType(number)); - - number.set_country_code(49); - number.set_national_number(90091234567ULL); - EXPECT_EQ(PhoneNumberUtil::PREMIUM_RATE, phone_util_.GetNumberType(number)); -} - -TEST_F(PhoneNumberUtilTest, IsTollFree) { - PhoneNumber number; - number.set_country_code(1); - number.set_national_number(8881234567ULL); - EXPECT_EQ(PhoneNumberUtil::TOLL_FREE, phone_util_.GetNumberType(number)); - - number.set_country_code(39); - number.set_national_number(803123ULL); - EXPECT_EQ(PhoneNumberUtil::TOLL_FREE, phone_util_.GetNumberType(number)); - - number.set_country_code(44); - number.set_national_number(8012345678ULL); - EXPECT_EQ(PhoneNumberUtil::TOLL_FREE, phone_util_.GetNumberType(number)); - - number.set_country_code(49); - number.set_national_number(8001234567ULL); - EXPECT_EQ(PhoneNumberUtil::TOLL_FREE, phone_util_.GetNumberType(number)); -} - -TEST_F(PhoneNumberUtilTest, IsMobile) { - PhoneNumber number; - // A Bahama mobile number - number.set_country_code(1); - number.set_national_number(2423570000ULL); - EXPECT_EQ(PhoneNumberUtil::MOBILE, phone_util_.GetNumberType(number)); - - number.set_country_code(39); - number.set_national_number(312345678ULL); - EXPECT_EQ(PhoneNumberUtil::MOBILE, phone_util_.GetNumberType(number)); - - number.set_country_code(44); - number.set_national_number(7912345678ULL); - EXPECT_EQ(PhoneNumberUtil::MOBILE, phone_util_.GetNumberType(number)); - - number.set_country_code(49); - number.set_national_number(15123456789ULL); - EXPECT_EQ(PhoneNumberUtil::MOBILE, phone_util_.GetNumberType(number)); - - number.set_country_code(54); - number.set_national_number(91187654321ULL); - EXPECT_EQ(PhoneNumberUtil::MOBILE, phone_util_.GetNumberType(number)); -} - -TEST_F(PhoneNumberUtilTest, IsFixedLine) { - PhoneNumber number; - // A Bahama fixed-line number - number.set_country_code(1); - number.set_national_number(2423651234ULL); - EXPECT_EQ(PhoneNumberUtil::FIXED_LINE, phone_util_.GetNumberType(number)); - - // An Italian fixed-line number - number.Clear(); - number.set_country_code(39); - number.set_national_number(236618300ULL); - number.set_italian_leading_zero(true); - EXPECT_EQ(PhoneNumberUtil::FIXED_LINE, phone_util_.GetNumberType(number)); - - number.Clear(); - number.set_country_code(44); - number.set_national_number(2012345678ULL); - EXPECT_EQ(PhoneNumberUtil::FIXED_LINE, phone_util_.GetNumberType(number)); - - number.set_country_code(49); - number.set_national_number(301234ULL); - EXPECT_EQ(PhoneNumberUtil::FIXED_LINE, phone_util_.GetNumberType(number)); -} - -TEST_F(PhoneNumberUtilTest, IsFixedLineAndMobile) { - PhoneNumber number; - number.set_country_code(1); - number.set_national_number(6502531111ULL); - EXPECT_EQ(PhoneNumberUtil::FIXED_LINE_OR_MOBILE, - phone_util_.GetNumberType(number)); - - number.set_country_code(54); - number.set_national_number(1987654321ULL); - EXPECT_EQ(PhoneNumberUtil::FIXED_LINE_OR_MOBILE, - phone_util_.GetNumberType(number)); -} - -TEST_F(PhoneNumberUtilTest, IsSharedCost) { - PhoneNumber number; - number.set_country_code(44); - number.set_national_number(8431231234ULL); - EXPECT_EQ(PhoneNumberUtil::SHARED_COST, phone_util_.GetNumberType(number)); -} - -TEST_F(PhoneNumberUtilTest, IsVoip) { - PhoneNumber number; - number.set_country_code(44); - number.set_national_number(5631231234ULL); - EXPECT_EQ(PhoneNumberUtil::VOIP, phone_util_.GetNumberType(number)); -} - -TEST_F(PhoneNumberUtilTest, IsPersonalNumber) { - PhoneNumber number; - number.set_country_code(44); - number.set_national_number(7031231234ULL); - EXPECT_EQ(PhoneNumberUtil::PERSONAL_NUMBER, - phone_util_.GetNumberType(number)); -} - -TEST_F(PhoneNumberUtilTest, IsUnknown) { - PhoneNumber number; - number.set_country_code(1); - number.set_national_number(65025311111ULL); - EXPECT_EQ(PhoneNumberUtil::UNKNOWN, phone_util_.GetNumberType(number)); -} - -TEST_F(PhoneNumberUtilTest, GetCountryCodeForRegion) { - EXPECT_EQ(1, phone_util_.GetCountryCodeForRegion(RegionCode::US())); - EXPECT_EQ(64, phone_util_.GetCountryCodeForRegion(RegionCode::NZ())); - EXPECT_EQ(0, phone_util_.GetCountryCodeForRegion(RegionCode::GetUnknown())); - // CS is already deprecated so the library doesn't support it. - EXPECT_EQ(0, phone_util_.GetCountryCodeForRegion(RegionCode::CS())); -} - -TEST_F(PhoneNumberUtilTest, GetNationalDiallingPrefixForRegion) { - string ndd_prefix; - GetNddPrefixForRegion(RegionCode::US(), false, &ndd_prefix); - EXPECT_EQ("1", ndd_prefix); - - // Test non-main country to see it gets the national dialling prefix for the - // main country with that country calling code. - GetNddPrefixForRegion(RegionCode::BS(), false, &ndd_prefix); - EXPECT_EQ("1", ndd_prefix); - - GetNddPrefixForRegion(RegionCode::NZ(), false, &ndd_prefix); - EXPECT_EQ("0", ndd_prefix); - - // Test case with non digit in the national prefix. - GetNddPrefixForRegion(RegionCode::AO(), false, &ndd_prefix); - EXPECT_EQ("0~0", ndd_prefix); - - GetNddPrefixForRegion(RegionCode::AO(), true, &ndd_prefix); - EXPECT_EQ("00", ndd_prefix); - - // Test cases with invalid regions. - GetNddPrefixForRegion(RegionCode::GetUnknown(), false, &ndd_prefix); - EXPECT_EQ("", ndd_prefix); - - // CS is already deprecated so the library doesn't support it. - GetNddPrefixForRegion(RegionCode::CS(), false, &ndd_prefix); - EXPECT_EQ("", ndd_prefix); -} - -TEST_F(PhoneNumberUtilTest, IsViablePhoneNumber) { - // Only one or two digits before strange non-possible punctuation. - EXPECT_FALSE(IsViablePhoneNumber("12. March")); - EXPECT_FALSE(IsViablePhoneNumber("1+1+1")); - EXPECT_FALSE(IsViablePhoneNumber("80+0")); - EXPECT_FALSE(IsViablePhoneNumber("00")); - // Three digits is viable. - EXPECT_TRUE(IsViablePhoneNumber("111")); - // Alpha numbers. - EXPECT_TRUE(IsViablePhoneNumber("0800-4-pizza")); - EXPECT_TRUE(IsViablePhoneNumber("0800-4-PIZZA")); - // Only one or two digits before possible punctuation followed by more digits. - // The punctuation used here is the unicode character u+3000. - EXPECT_TRUE(IsViablePhoneNumber("1\xE3\x80\x80" "34" /* "1 34" */)); - EXPECT_FALSE(IsViablePhoneNumber("1\xE3\x80\x80" "3+4" /* "1 3+4" */)); - // Unicode variants of possible starting character and other allowed - // punctuation/digits. - EXPECT_TRUE(IsViablePhoneNumber("\xEF\xBC\x88" "1\xEF\xBC\x89\xE3\x80\x80" - "3456789" /* "(1) 3456789" */ )); - // Testing a leading + is okay. - EXPECT_TRUE(IsViablePhoneNumber("+1\xEF\xBC\x89\xE3\x80\x80" - "3456789" /* "+1) 3456789" */)); -} - -TEST_F(PhoneNumberUtilTest, ConvertAlphaCharactersInNumber) { - string input("1800-ABC-DEF"); - phone_util_.ConvertAlphaCharactersInNumber(&input); - // Alpha chars are converted to digits; everything else is left untouched. - static const string kExpectedOutput = "1800-222-333"; - EXPECT_EQ(kExpectedOutput, input); - - // Try with some non-ASCII characters. - input.assign("1\xE3\x80\x80\xEF\xBC\x88" "800) ABC-DEF" - /* "1 (800) ABCD-DEF" */); - static const string kExpectedFullwidthOutput = - "1\xE3\x80\x80\xEF\xBC\x88" "800) 222-333" /* "1 (800) 222-333" */; - phone_util_.ConvertAlphaCharactersInNumber(&input); - EXPECT_EQ(kExpectedFullwidthOutput, input); -} - -TEST_F(PhoneNumberUtilTest, NormaliseRemovePunctuation) { - string input_number("034-56&+#234"); - Normalize(&input_number); - static const string kExpectedOutput("03456234"); - EXPECT_EQ(kExpectedOutput, input_number) - << "Conversion did not correctly remove punctuation"; -} - -TEST_F(PhoneNumberUtilTest, NormaliseReplaceAlphaCharacters) { - string input_number("034-I-am-HUNGRY"); - Normalize(&input_number); - static const string kExpectedOutput("034426486479"); - EXPECT_EQ(kExpectedOutput, input_number) - << "Conversion did not correctly replace alpha characters"; -} - -TEST_F(PhoneNumberUtilTest, NormaliseOtherDigits) { - // The first digit is a full-width 2, the last digit is an Arabic-indic digit - // 5. - string input_number("\xEF\xBC\x92" "5\xD9\xA5" /* "25٥" */); - Normalize(&input_number); - static const string kExpectedOutput("255"); - EXPECT_EQ(kExpectedOutput, input_number) - << "Conversion did not correctly replace non-latin digits"; - // The first digit is an Eastern-Arabic 5, the latter an Eastern-Arabic 0. - string eastern_arabic_input_number("\xDB\xB5" "2\xDB\xB0" /* "۵2۰" */); - Normalize(&eastern_arabic_input_number); - static const string kExpectedOutput2("520"); - EXPECT_EQ(kExpectedOutput2, eastern_arabic_input_number) - << "Conversion did not correctly replace non-latin digits"; -} - -TEST_F(PhoneNumberUtilTest, NormaliseStripAlphaCharacters) { - string input_number("034-56&+a#234"); - phone_util_.NormalizeDigitsOnly(&input_number); - static const string kExpectedOutput("03456234"); - EXPECT_EQ(kExpectedOutput, input_number) - << "Conversion did not correctly remove alpha characters"; -} - -TEST_F(PhoneNumberUtilTest, MaybeStripInternationalPrefix) { - string international_prefix("00[39]"); - string number_to_strip("0034567700-3898003"); - // Note the dash is removed as part of the normalization. - string stripped_number("45677003898003"); - EXPECT_EQ(PhoneNumber::FROM_NUMBER_WITH_IDD, - MaybeStripInternationalPrefixAndNormalize(international_prefix, - &number_to_strip)); - EXPECT_EQ(stripped_number, number_to_strip) - << "The number was not stripped of its international prefix."; - - // Now the number no longer starts with an IDD prefix, so it should now report - // FROM_DEFAULT_COUNTRY. - EXPECT_EQ(PhoneNumber::FROM_DEFAULT_COUNTRY, - MaybeStripInternationalPrefixAndNormalize(international_prefix, - &number_to_strip)); - - number_to_strip.assign("00945677003898003"); - EXPECT_EQ(PhoneNumber::FROM_NUMBER_WITH_IDD, - MaybeStripInternationalPrefixAndNormalize(international_prefix, - &number_to_strip)); - EXPECT_EQ(stripped_number, number_to_strip) - << "The number was not stripped of its international prefix."; - - // Test it works when the international prefix is broken up by spaces. - number_to_strip.assign("00 9 45677003898003"); - EXPECT_EQ(PhoneNumber::FROM_NUMBER_WITH_IDD, - MaybeStripInternationalPrefixAndNormalize(international_prefix, - &number_to_strip)); - EXPECT_EQ(stripped_number, number_to_strip) - << "The number was not stripped of its international prefix."; - // Now the number no longer starts with an IDD prefix, so it should now report - // FROM_DEFAULT_COUNTRY. - EXPECT_EQ(PhoneNumber::FROM_DEFAULT_COUNTRY, - MaybeStripInternationalPrefixAndNormalize(international_prefix, - &number_to_strip)); - - // Test the + symbol is also recognised and stripped. - number_to_strip.assign("+45677003898003"); - stripped_number.assign("45677003898003"); - EXPECT_EQ(PhoneNumber::FROM_NUMBER_WITH_PLUS_SIGN, - MaybeStripInternationalPrefixAndNormalize(international_prefix, - &number_to_strip)); - EXPECT_EQ(stripped_number, number_to_strip) - << "The number supplied was not stripped of the plus symbol."; - - // If the number afterwards is a zero, we should not strip this - no country - // code begins with 0. - number_to_strip.assign("0090112-3123"); - stripped_number.assign("00901123123"); - EXPECT_EQ(PhoneNumber::FROM_DEFAULT_COUNTRY, - MaybeStripInternationalPrefixAndNormalize(international_prefix, - &number_to_strip)); - EXPECT_EQ(stripped_number, number_to_strip) - << "The number had a 0 after the match so shouldn't be stripped."; - // Here the 0 is separated by a space from the IDD. - number_to_strip.assign("009 0-112-3123"); - EXPECT_EQ(PhoneNumber::FROM_DEFAULT_COUNTRY, - MaybeStripInternationalPrefixAndNormalize(international_prefix, - &number_to_strip)); -} - -TEST_F(PhoneNumberUtilTest, MaybeStripNationalPrefixAndCarrierCode) { - PhoneMetadata metadata; - metadata.set_national_prefix_for_parsing("34"); - metadata.mutable_general_desc()->set_national_number_pattern("\\d{4,8}"); - string number_to_strip("34356778"); - string stripped_number("356778"); - string carrier_code; - MaybeStripNationalPrefixAndCarrierCode(metadata, &number_to_strip, - &carrier_code); - EXPECT_EQ(stripped_number, number_to_strip) - << "Should have had national prefix stripped."; - EXPECT_EQ("", carrier_code) << "Should have had no carrier code stripped."; - // Retry stripping - now the number should not start with the national prefix, - // so no more stripping should occur. - MaybeStripNationalPrefixAndCarrierCode(metadata, &number_to_strip, - &carrier_code); - EXPECT_EQ(stripped_number, number_to_strip) - << "Should have had no change - no national prefix present."; - // Some countries have no national prefix. Repeat test with none specified. - metadata.clear_national_prefix_for_parsing(); - MaybeStripNationalPrefixAndCarrierCode(metadata, &number_to_strip, - &carrier_code); - EXPECT_EQ(stripped_number, number_to_strip) - << "Should have had no change - empty national prefix."; - // If the resultant number doesn't match the national rule, it shouldn't be - // stripped. - metadata.set_national_prefix_for_parsing("3"); - number_to_strip.assign("3123"); - stripped_number.assign("3123"); - MaybeStripNationalPrefixAndCarrierCode(metadata, &number_to_strip, - &carrier_code); - EXPECT_EQ(stripped_number, number_to_strip) - << "Should have had no change - after stripping, it wouldn't have " - << "matched the national rule."; - // Test extracting carrier selection code. - metadata.set_national_prefix_for_parsing("0(81)?"); - number_to_strip.assign("08122123456"); - stripped_number.assign("22123456"); - MaybeStripNationalPrefixAndCarrierCode(metadata, &number_to_strip, - &carrier_code); - EXPECT_EQ("81", carrier_code) << "Should have had carrier code stripped."; - EXPECT_EQ(stripped_number, number_to_strip) - << "Should have had national prefix and carrier code stripped."; - // If there was a transform rule, check it was applied. - metadata.set_national_prefix_transform_rule("5$15"); - // Note that a capturing group is present here. - metadata.set_national_prefix_for_parsing("0(\\d{2})"); - number_to_strip.assign("031123"); - string transformed_number("5315123"); - MaybeStripNationalPrefixAndCarrierCode(metadata, &number_to_strip, - &carrier_code); - EXPECT_EQ(transformed_number, number_to_strip) - << "Was not successfully transformed."; -} - -TEST_F(PhoneNumberUtilTest, MaybeStripExtension) { - // One with extension. - string number("1234576 ext. 1234"); - string extension; - string expected_extension("1234"); - string stripped_number("1234576"); - EXPECT_TRUE(MaybeStripExtension(&number, &extension)); - EXPECT_EQ(stripped_number, number); - EXPECT_EQ(expected_extension, extension); - - // One without extension. - number.assign("1234-576"); - extension.clear(); - stripped_number.assign("1234-576"); - EXPECT_FALSE(MaybeStripExtension(&number, &extension)); - EXPECT_EQ(stripped_number, number); - EXPECT_TRUE(extension.empty()); - - // One with an extension caught by the second capturing group in - // kKnownExtnPatterns. - number.assign("1234576-123#"); - extension.clear(); - expected_extension.assign("123"); - stripped_number.assign("1234576"); - EXPECT_TRUE(MaybeStripExtension(&number, &extension)); - EXPECT_EQ(stripped_number, number); - EXPECT_EQ(expected_extension, extension); - - number.assign("1234576 ext.123#"); - extension.clear(); - EXPECT_TRUE(MaybeStripExtension(&number, &extension)); - EXPECT_EQ(stripped_number, number); - EXPECT_EQ(expected_extension, extension); -} - -TEST_F(PhoneNumberUtilTest, MaybeExtractCountryCode) { - PhoneNumber number; - const PhoneMetadata* metadata = GetPhoneMetadata(RegionCode::US()); - // Note that for the US, the IDD is 011. - string phone_number("011112-3456789"); - string stripped_number("123456789"); - int expected_country_code = 1; - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - MaybeExtractCountryCode(metadata, true, &phone_number, &number)); - EXPECT_EQ(expected_country_code, number.country_code()); - EXPECT_EQ(PhoneNumber::FROM_NUMBER_WITH_IDD, number.country_code_source()); - EXPECT_EQ(stripped_number, phone_number); - - number.Clear(); - phone_number.assign("+6423456789"); - stripped_number.assign("23456789"); - expected_country_code = 64; - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - MaybeExtractCountryCode(metadata, true, &phone_number, &number)); - EXPECT_EQ(expected_country_code, number.country_code()); - EXPECT_EQ(PhoneNumber::FROM_NUMBER_WITH_PLUS_SIGN, - number.country_code_source()); - EXPECT_EQ(stripped_number, phone_number); - - // Should not have extracted a country code - no international prefix present. - number.Clear(); - expected_country_code = 0; - phone_number.assign("2345-6789"); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - MaybeExtractCountryCode(metadata, true, &phone_number, &number)); - EXPECT_EQ(expected_country_code, number.country_code()); - EXPECT_EQ(PhoneNumber::FROM_DEFAULT_COUNTRY, number.country_code_source()); - EXPECT_EQ(stripped_number, phone_number); - - expected_country_code = 0; - phone_number.assign("0119991123456789"); - stripped_number.assign(phone_number); - EXPECT_EQ(PhoneNumberUtil::INVALID_COUNTRY_CODE_ERROR, - MaybeExtractCountryCode(metadata, true, &phone_number, &number)); - - number.Clear(); - phone_number.assign("(1 610) 619 4466"); - stripped_number.assign("6106194466"); - expected_country_code = 1; - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - MaybeExtractCountryCode(metadata, true, &phone_number, &number)); - EXPECT_EQ(expected_country_code, number.country_code()); - EXPECT_EQ(PhoneNumber::FROM_NUMBER_WITHOUT_PLUS_SIGN, - number.country_code_source()); - EXPECT_EQ(stripped_number, phone_number); - - number.Clear(); - phone_number.assign("(1 610) 619 4466"); - stripped_number.assign("6106194466"); - expected_country_code = 1; - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - MaybeExtractCountryCode(metadata, false, &phone_number, &number)); - EXPECT_EQ(expected_country_code, number.country_code()); - EXPECT_FALSE(number.has_country_code_source()); - EXPECT_EQ(stripped_number, phone_number); - - // Should not have extracted a country code - invalid number after extraction - // of uncertain country code. - number.Clear(); - phone_number.assign("(1 610) 619 446"); - stripped_number.assign("1610619446"); - expected_country_code = 0; - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - MaybeExtractCountryCode(metadata, false, &phone_number, &number)); - EXPECT_EQ(expected_country_code, number.country_code()); - EXPECT_FALSE(number.has_country_code_source()); - EXPECT_EQ(stripped_number, phone_number); - - number.Clear(); - phone_number.assign("(1 610) 619"); - stripped_number.assign("1610619"); - expected_country_code = 0; - // Should not have extracted a country code - invalid number both before and - // after extraction of uncertain country code. - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - MaybeExtractCountryCode(metadata, true, &phone_number, &number)); - EXPECT_EQ(expected_country_code, number.country_code()); - EXPECT_EQ(PhoneNumber::FROM_DEFAULT_COUNTRY, number.country_code_source()); - EXPECT_EQ(stripped_number, phone_number); -} - -TEST_F(PhoneNumberUtilTest, CountryWithNoNumberDesc) { - string formatted_number; - // Andorra is a country where we don't have PhoneNumberDesc info in the - // metadata. - PhoneNumber ad_number; - ad_number.set_country_code(376); - ad_number.set_national_number(12345ULL); - phone_util_.Format(ad_number, PhoneNumberUtil::INTERNATIONAL, - &formatted_number); - EXPECT_EQ("+376 12345", formatted_number); - phone_util_.Format(ad_number, PhoneNumberUtil::E164, &formatted_number); - EXPECT_EQ("+37612345", formatted_number); - phone_util_.Format(ad_number, PhoneNumberUtil::NATIONAL, &formatted_number); - EXPECT_EQ("12345", formatted_number); - EXPECT_EQ(PhoneNumberUtil::UNKNOWN, phone_util_.GetNumberType(ad_number)); - EXPECT_TRUE(phone_util_.IsValidNumber(ad_number)); - - // Test dialing a US number from within Andorra. - PhoneNumber us_number; - us_number.set_country_code(1); - us_number.set_national_number(6502530000ULL); - phone_util_.FormatOutOfCountryCallingNumber(us_number, RegionCode::AD(), - &formatted_number); - EXPECT_EQ("00 1 650 253 0000", formatted_number); -} - -TEST_F(PhoneNumberUtilTest, UnknownCountryCallingCodeForValidation) { - PhoneNumber invalid_number; - invalid_number.set_country_code(0); - invalid_number.set_national_number(1234ULL); - EXPECT_FALSE(phone_util_.IsValidNumber(invalid_number)); -} - -TEST_F(PhoneNumberUtilTest, IsNumberMatchMatches) { - // Test simple matches where formatting is different, or leading zeroes, or - // country code has been specified. - EXPECT_EQ(PhoneNumberUtil::EXACT_MATCH, - phone_util_.IsNumberMatchWithTwoStrings("+64 3 331 6005", - "+64 03 331 6005")); - EXPECT_EQ(PhoneNumberUtil::EXACT_MATCH, - phone_util_.IsNumberMatchWithTwoStrings("+64 03 331-6005", - "+64 03331 6005")); - EXPECT_EQ(PhoneNumberUtil::EXACT_MATCH, - phone_util_.IsNumberMatchWithTwoStrings("+643 331-6005", - "+64033316005")); - EXPECT_EQ(PhoneNumberUtil::EXACT_MATCH, - phone_util_.IsNumberMatchWithTwoStrings("+643 331-6005", - "+6433316005")); - EXPECT_EQ(PhoneNumberUtil::EXACT_MATCH, - phone_util_.IsNumberMatchWithTwoStrings("+64 3 331-6005", - "+6433316005")); - // Test alpha numbers. - EXPECT_EQ(PhoneNumberUtil::EXACT_MATCH, - phone_util_.IsNumberMatchWithTwoStrings("+1800 siX-Flags", - "+1 800 7493 5247")); - // Test numbers with extensions. - EXPECT_EQ(PhoneNumberUtil::EXACT_MATCH, - phone_util_.IsNumberMatchWithTwoStrings("+64 3 331-6005 extn 1234", - "+6433316005#1234")); - // Test proto buffers. - PhoneNumber nz_number; - nz_number.set_country_code(64); - nz_number.set_national_number(33316005ULL); - nz_number.set_extension("3456"); - EXPECT_EQ(PhoneNumberUtil::EXACT_MATCH, - phone_util_.IsNumberMatchWithOneString(nz_number, - "+643 331 6005 ext 3456")); - nz_number.clear_extension(); - EXPECT_EQ(PhoneNumberUtil::EXACT_MATCH, - phone_util_.IsNumberMatchWithOneString(nz_number, - "+643 331 6005")); - // Check empty extensions are ignored. - nz_number.set_extension(""); - EXPECT_EQ(PhoneNumberUtil::EXACT_MATCH, - phone_util_.IsNumberMatchWithOneString(nz_number, - "+643 331 6005")); - // Check variant with two proto buffers. - PhoneNumber nz_number_2; - nz_number_2.set_country_code(64); - nz_number_2.set_national_number(33316005ULL); - EXPECT_EQ(PhoneNumberUtil::EXACT_MATCH, - phone_util_.IsNumberMatch(nz_number, nz_number_2)); - - // Check raw_input, country_code_source and preferred_domestic_carrier_code - // are ignored. - PhoneNumber br_number_1; - PhoneNumber br_number_2; - br_number_1.set_country_code(55); - br_number_1.set_national_number(3121286979ULL); - br_number_1.set_country_code_source(PhoneNumber::FROM_NUMBER_WITH_PLUS_SIGN); - br_number_1.set_preferred_domestic_carrier_code("12"); - br_number_1.set_raw_input("012 3121286979"); - br_number_2.set_country_code(55); - br_number_2.set_national_number(3121286979ULL); - br_number_2.set_country_code_source(PhoneNumber::FROM_DEFAULT_COUNTRY); - br_number_2.set_preferred_domestic_carrier_code("14"); - br_number_2.set_raw_input("143121286979"); - EXPECT_EQ(PhoneNumberUtil::EXACT_MATCH, - phone_util_.IsNumberMatch(br_number_1, br_number_2)); -} - -TEST_F(PhoneNumberUtilTest, IsNumberMatchNonMetches) { - // NSN matches. - EXPECT_EQ(PhoneNumberUtil::NO_MATCH, - phone_util_.IsNumberMatchWithTwoStrings("03 331 6005", - "03 331 6006")); - // Different country code, partial number match. - EXPECT_EQ(PhoneNumberUtil::NO_MATCH, - phone_util_.IsNumberMatchWithTwoStrings("+64 3 331-6005", - "+16433316005")); - // Different country code, same number. - EXPECT_EQ(PhoneNumberUtil::NO_MATCH, - phone_util_.IsNumberMatchWithTwoStrings("+64 3 331-6005", - "+6133316005")); - // Extension different, all else the same. - EXPECT_EQ(PhoneNumberUtil::NO_MATCH, - phone_util_.IsNumberMatchWithTwoStrings("+64 3 331-6005 extn 1234", - "+0116433316005#1235")); - // NSN matches, but extension is different - not the same number. - EXPECT_EQ(PhoneNumberUtil::NO_MATCH, - phone_util_.IsNumberMatchWithTwoStrings("+64 3 331-6005 ext.1235", - "3 331 6005#1234")); - // Invalid numbers that can't be parsed. - EXPECT_EQ(PhoneNumberUtil::INVALID_NUMBER, - phone_util_.IsNumberMatchWithTwoStrings("43", "3 331 6043")); - // Invalid numbers that can't be parsed. - EXPECT_EQ(PhoneNumberUtil::INVALID_NUMBER, - phone_util_.IsNumberMatchWithTwoStrings("+43", "+64 3 331 6005")); - EXPECT_EQ(PhoneNumberUtil::INVALID_NUMBER, - phone_util_.IsNumberMatchWithTwoStrings("+43", "64 3 331 6005")); - EXPECT_EQ(PhoneNumberUtil::INVALID_NUMBER, - phone_util_.IsNumberMatchWithTwoStrings("Dog", "64 3 331 6005")); -} - -TEST_F(PhoneNumberUtilTest, IsNumberMatchNsnMatches) { - // NSN matches. - EXPECT_EQ(PhoneNumberUtil::NSN_MATCH, - phone_util_.IsNumberMatchWithTwoStrings("+64 3 331-6005", - "03 331 6005")); - - EXPECT_EQ(PhoneNumberUtil::NSN_MATCH, - phone_util_.IsNumberMatchWithTwoStrings("3 331-6005", - "03 331 6005")); - - PhoneNumber nz_number; - nz_number.set_country_code(64); - nz_number.set_national_number(33316005ULL); - nz_number.set_extension(""); - EXPECT_EQ(PhoneNumberUtil::NSN_MATCH, - phone_util_.IsNumberMatchWithOneString(nz_number, "03 331 6005")); - // Here the second number possibly starts with the country code for New - // Zealand, although we are unsure. - EXPECT_EQ(PhoneNumberUtil::NSN_MATCH, - phone_util_.IsNumberMatchWithOneString(nz_number, - "(64-3) 331 6005")); - - // Here, the 1 might be a national prefix, if we compare it to the US number, - // so the resultant match is an NSN match. - PhoneNumber us_number; - us_number.set_country_code(1); - us_number.set_national_number(2345678901ULL); - EXPECT_EQ(PhoneNumberUtil::NSN_MATCH, - phone_util_.IsNumberMatchWithOneString(us_number, - "1-234-567-8901")); - EXPECT_EQ(PhoneNumberUtil::NSN_MATCH, - phone_util_.IsNumberMatchWithOneString(us_number, "2345678901")); - EXPECT_EQ(PhoneNumberUtil::NSN_MATCH, - phone_util_.IsNumberMatchWithTwoStrings("+1 234-567 8901", - "1 234 567 8901")); - EXPECT_EQ(PhoneNumberUtil::NSN_MATCH, - phone_util_.IsNumberMatchWithTwoStrings("1 234-567 8901", - "1 234 567 8901")); - EXPECT_EQ(PhoneNumberUtil::NSN_MATCH, - phone_util_.IsNumberMatchWithTwoStrings("1 234-567 8901", - "+1 234 567 8901")); - // For this case, the match will be a short NSN match, because we cannot - // assume that the 1 might be a national prefix, so don't remove it when - // parsing. - PhoneNumber random_number; - random_number.set_country_code(41); - random_number.set_national_number(2345678901ULL); - EXPECT_EQ(PhoneNumberUtil::SHORT_NSN_MATCH, - phone_util_.IsNumberMatchWithOneString(random_number, - "1-234-567-8901")); -} - -TEST_F(PhoneNumberUtilTest, IsNumberMatchShortNsnMatches) { - // Short NSN matches with the country not specified for either one or both - // numbers. - EXPECT_EQ(PhoneNumberUtil::SHORT_NSN_MATCH, - phone_util_.IsNumberMatchWithTwoStrings("+64 3 331-6005", - "331 6005")); - - EXPECT_EQ(PhoneNumberUtil::SHORT_NSN_MATCH, - phone_util_.IsNumberMatchWithTwoStrings("3 331-6005", - "331 6005")); - - EXPECT_EQ(PhoneNumberUtil::SHORT_NSN_MATCH, - phone_util_.IsNumberMatchWithTwoStrings("3 331-6005", - "+64 331 6005")); - - // Short NSN match with the country specified. - EXPECT_EQ(PhoneNumberUtil::SHORT_NSN_MATCH, - phone_util_.IsNumberMatchWithTwoStrings("03 331-6005", - "331 6005")); - - EXPECT_EQ(PhoneNumberUtil::SHORT_NSN_MATCH, - phone_util_.IsNumberMatchWithTwoStrings("1 234 345 6789", - "345 6789")); - - EXPECT_EQ(PhoneNumberUtil::SHORT_NSN_MATCH, - phone_util_.IsNumberMatchWithTwoStrings("+1 (234) 345 6789", - "345 6789")); - - // NSN matches, country code omitted for one number, extension missing for - // one. - EXPECT_EQ(PhoneNumberUtil::SHORT_NSN_MATCH, - phone_util_.IsNumberMatchWithTwoStrings("+64 3 331-6005", - "3 331 6005#1234")); - - // One has Italian leading zero, one does not. - PhoneNumber it_number_1, it_number_2; - it_number_1.set_country_code(39); - it_number_1.set_national_number(1234ULL); - it_number_1.set_italian_leading_zero(true); - it_number_2.set_country_code(39); - it_number_2.set_national_number(1234ULL); - EXPECT_EQ(PhoneNumberUtil::SHORT_NSN_MATCH, - phone_util_.IsNumberMatch(it_number_1, it_number_2)); - - // One has an extension, the other has an extension of "". - it_number_1.set_extension("1234"); - it_number_1.clear_italian_leading_zero(); - it_number_2.set_extension(""); - EXPECT_EQ(PhoneNumberUtil::SHORT_NSN_MATCH, - phone_util_.IsNumberMatch(it_number_1, it_number_2)); -} - -TEST_F(PhoneNumberUtilTest, ParseNationalNumber) { - PhoneNumber nz_number; - nz_number.set_country_code(64); - nz_number.set_national_number(33316005ULL); - PhoneNumber test_number; - // National prefix attached. - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("033316005", RegionCode::NZ(), &test_number)); - EXPECT_EQ(nz_number, test_number); - // National prefix missing. - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("33316005", RegionCode::NZ(), &test_number)); - EXPECT_EQ(nz_number, test_number); - // National prefix attached and some formatting present. - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("03-331 6005", RegionCode::NZ(), &test_number)); - EXPECT_EQ(nz_number, test_number); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("03 331 6005", RegionCode::NZ(), &test_number)); - EXPECT_EQ(nz_number, test_number); - - // Testing international prefixes. - // Should strip country code. - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("0064 3 331 6005", - RegionCode::NZ(), &test_number)); - EXPECT_EQ(nz_number, test_number); - // Try again, but this time we have an international number with Region Code - // US. It should recognise the country code and parse accordingly. - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("01164 3 331 6005", - RegionCode::US(), &test_number)); - EXPECT_EQ(nz_number, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("+64 3 331 6005", - RegionCode::US(), &test_number)); - EXPECT_EQ(nz_number, test_number); - - // Test for http://b/issue?id=2247493 - nz_number.Clear(); - nz_number.set_country_code(64); - nz_number.set_national_number(64123456ULL); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("+64(0)64123456", - RegionCode::US(), &test_number)); - EXPECT_EQ(nz_number, test_number); - - // Check that using a "/" is fine in a phone number. - PhoneNumber de_number; - de_number.set_country_code(49); - de_number.set_national_number(12345678ULL); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("123/45678", RegionCode::DE(), &test_number)); - EXPECT_EQ(de_number, test_number); - - PhoneNumber us_number; - us_number.set_country_code(1); - // Check it doesn't use the '1' as a country code when parsing if the phone - // number was already possible. - us_number.set_national_number(1234567890ULL); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("123-456-7890", RegionCode::US(), &test_number)); - EXPECT_EQ(us_number, test_number); -} - -TEST_F(PhoneNumberUtilTest, ParseNumberWithAlphaCharacters) { - // Test case with alpha characters. - PhoneNumber test_number; - PhoneNumber tollfree_number; - tollfree_number.set_country_code(64); - tollfree_number.set_national_number(800332005ULL); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("0800 DDA 005", RegionCode::NZ(), &test_number)); - EXPECT_EQ(tollfree_number, test_number); - - test_number.Clear(); - PhoneNumber premium_number; - premium_number.set_country_code(64); - premium_number.set_national_number(9003326005ULL); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("0900 DDA 6005", RegionCode::NZ(), &test_number)); - EXPECT_EQ(premium_number, test_number); - - // Not enough alpha characters for them to be considered intentional, so they - // are stripped. - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("0900 332 6005a", - RegionCode::NZ(), &test_number)); - EXPECT_EQ(premium_number, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("0900 332 600a5", - RegionCode::NZ(), &test_number)); - EXPECT_EQ(premium_number, test_number); - - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("0900 332 600A5", - RegionCode::NZ(), &test_number)); - EXPECT_EQ(premium_number, test_number); - - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("0900 a332 600A5", - RegionCode::NZ(), &test_number)); - EXPECT_EQ(premium_number, test_number); -} - -TEST_F(PhoneNumberUtilTest, ParseWithInternationalPrefixes) { - PhoneNumber us_number; - us_number.set_country_code(1); - us_number.set_national_number(6503336000ULL); - PhoneNumber test_number; - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("+1 (650) 333-6000", - RegionCode::US(), &test_number)); - EXPECT_EQ(us_number, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("+1-650-333-6000", - RegionCode::US(), &test_number)); - EXPECT_EQ(us_number, test_number); - - // Calling the US number from Singapore by using different service providers - // 1st test: calling using SingTel IDD service (IDD is 001) - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("0011-650-333-6000", - RegionCode::SG(), &test_number)); - EXPECT_EQ(us_number, test_number); - // 2nd test: calling using StarHub IDD service (IDD is 008) - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("0081-650-333-6000", - RegionCode::SG(), &test_number)); - EXPECT_EQ(us_number, test_number); - // 3rd test: calling using SingTel V019 service (IDD is 019) - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("0191-650-333-6000", - RegionCode::SG(), &test_number)); - EXPECT_EQ(us_number, test_number); - // Calling the US number from Poland - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("0~01-650-333-6000", - RegionCode::PL(), &test_number)); - EXPECT_EQ(us_number, test_number); - - // Using "++" at the start. - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("++1 (650) 333-6000", - RegionCode::PL(), &test_number)); - EXPECT_EQ(us_number, test_number); - // Using a full-width plus sign. - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("\xEF\xBC\x8B" "1 (650) 333-6000", - /* "+1 (650) 333-6000" */ - RegionCode::SG(), &test_number)); - EXPECT_EQ(us_number, test_number); - // The whole number, including punctuation, is here represented in full-width - // form. - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("\xEF\xBC\x8B\xEF\xBC\x91\xE3\x80\x80\xEF\xBC\x88" - "\xEF\xBC\x96\xEF\xBC\x95\xEF\xBC\x90\xEF\xBC\x89" - "\xE3\x80\x80\xEF\xBC\x93\xEF\xBC\x93\xEF\xBC\x93" - "\xEF\xBC\x8D\xEF\xBC\x96\xEF\xBC\x90\xEF\xBC\x90" - "\xEF\xBC\x90", - /* "+1 (650) 333-6000" */ - RegionCode::SG(), &test_number)); - EXPECT_EQ(us_number, test_number); - - // Using the U+30FC dash. - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("\xEF\xBC\x8B\xEF\xBC\x91\xE3\x80\x80\xEF\xBC\x88" - "\xEF\xBC\x96\xEF\xBC\x95\xEF\xBC\x90\xEF\xBC\x89" - "\xE3\x80\x80\xEF\xBC\x93\xEF\xBC\x93\xEF\xBC\x93" - "\xE3\x83\xBC\xEF\xBC\x96\xEF\xBC\x90\xEF\xBC\x90" - "\xEF\xBC\x90", - /* "+1 (650) 333ー6000" */ - RegionCode::SG(), &test_number)); - EXPECT_EQ(us_number, test_number); -} - -TEST_F(PhoneNumberUtilTest, ParseWithLeadingZero) { - PhoneNumber it_number; - it_number.set_country_code(39); - it_number.set_national_number(236618300ULL); - it_number.set_italian_leading_zero(true); - PhoneNumber test_number; - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("+39 02-36618 300", - RegionCode::NZ(), &test_number)); - EXPECT_EQ(it_number, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("02-36618 300", RegionCode::IT(), &test_number)); - EXPECT_EQ(it_number, test_number); - - it_number.Clear(); - it_number.set_country_code(39); - it_number.set_national_number(312345678ULL); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("312 345 678", RegionCode::IT(), &test_number)); - EXPECT_EQ(it_number, test_number); -} - -TEST_F(PhoneNumberUtilTest, ParseNationalNumberArgentina) { - // Test parsing mobile numbers of Argentina. - PhoneNumber ar_number; - ar_number.set_country_code(54); - ar_number.set_national_number(93435551212ULL); - PhoneNumber test_number; - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("+54 9 343 555 1212", RegionCode::AR(), - &test_number)); - EXPECT_EQ(ar_number, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("0343 15 555 1212", RegionCode::AR(), - &test_number)); - EXPECT_EQ(ar_number, test_number); - - ar_number.set_national_number(93715654320ULL); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("+54 9 3715 65 4320", RegionCode::AR(), - &test_number)); - EXPECT_EQ(ar_number, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("03715 15 65 4320", RegionCode::AR(), - &test_number)); - EXPECT_EQ(ar_number, test_number); - - // Test parsing fixed-line numbers of Argentina. - ar_number.set_national_number(1137970000ULL); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("+54 11 3797 0000", RegionCode::AR(), - &test_number)); - EXPECT_EQ(ar_number, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("011 3797 0000", RegionCode::AR(), &test_number)); - EXPECT_EQ(ar_number, test_number); - - ar_number.set_national_number(3715654321ULL); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("+54 3715 65 4321", RegionCode::AR(), - &test_number)); - EXPECT_EQ(ar_number, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("03715 65 4321", RegionCode::AR(), &test_number)); - EXPECT_EQ(ar_number, test_number); - - ar_number.set_national_number(2312340000ULL); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("+54 23 1234 0000", RegionCode::AR(), - &test_number)); - EXPECT_EQ(ar_number, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("023 1234 0000", RegionCode::AR(), &test_number)); - EXPECT_EQ(ar_number, test_number); -} - -TEST_F(PhoneNumberUtilTest, ParseWithXInNumber) { - // Test that having an 'x' in the phone number at the start is ok and that it - // just gets removed. - PhoneNumber ar_number; - ar_number.set_country_code(54); - ar_number.set_national_number(123456789ULL); - PhoneNumber test_number; - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("0123456789", RegionCode::AR(), &test_number)); - EXPECT_EQ(ar_number, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("(0) 123456789", RegionCode::AR(), &test_number)); - EXPECT_EQ(ar_number, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("0 123456789", RegionCode::AR(), &test_number)); - EXPECT_EQ(ar_number, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("(0xx) 123456789", RegionCode::AR(), - &test_number)); - EXPECT_EQ(ar_number, test_number); - - PhoneNumber ar_from_us; - ar_from_us.set_country_code(54); - ar_from_us.set_national_number(81429712ULL); - // This test is intentionally constructed such that the number of digit after - // xx is larger than 7, so that the number won't be mistakenly treated as an - // extension, as we allow extensions up to 7 digits. This assumption is okay - // for now as all the countries where a carrier selection code is written in - // the form of xx have a national significant number of length larger than 7. - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("011xx5481429712", RegionCode::US(), - &test_number)); - EXPECT_EQ(ar_from_us, test_number); -} - -TEST_F(PhoneNumberUtilTest, ParseNumbersMexico) { - // Test parsing fixed-line numbers of Mexico. - PhoneNumber mx_number; - - mx_number.set_country_code(52); - mx_number.set_national_number(4499780001ULL); - PhoneNumber test_number; - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("+52 (449)978-0001", RegionCode::MX(), - &test_number)); - EXPECT_EQ(mx_number, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("01 (449)978-0001", RegionCode::MX(), - &test_number)); - EXPECT_EQ(mx_number, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("(449)978-0001", RegionCode::MX(), - &test_number)); - EXPECT_EQ(mx_number, test_number); - - // Test parsing mobile numbers of Mexico. - mx_number.Clear(); - mx_number.set_country_code(52); - mx_number.set_national_number(13312345678ULL); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("+52 1 33 1234-5678", RegionCode::MX(), - &test_number)); - EXPECT_EQ(mx_number, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("044 (33) 1234-5678", RegionCode::MX(), - &test_number)); - EXPECT_EQ(mx_number, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("045 33 1234-5678", RegionCode::MX(), - &test_number)); - EXPECT_EQ(mx_number, test_number); -} - -TEST_F(PhoneNumberUtilTest, FailedParseOnInvalidNumbers) { - PhoneNumber test_number; - EXPECT_EQ(PhoneNumberUtil::NOT_A_NUMBER, - phone_util_.Parse("This is not a phone number", RegionCode::NZ(), - &test_number)); - EXPECT_EQ(PhoneNumber::default_instance(), test_number); - - EXPECT_EQ(PhoneNumberUtil::TOO_LONG_NSN, - phone_util_.Parse("01495 72553301873 810104", RegionCode::GB(), - &test_number)); - EXPECT_EQ(PhoneNumber::default_instance(), test_number); - - EXPECT_EQ(PhoneNumberUtil::TOO_SHORT_NSN, - phone_util_.Parse("+49 0", RegionCode::DE(), - &test_number)); - EXPECT_EQ(PhoneNumber::default_instance(), test_number); - - EXPECT_EQ(PhoneNumberUtil::INVALID_COUNTRY_CODE_ERROR, - phone_util_.Parse("+210 3456 56789", RegionCode::NZ(), - &test_number)); - EXPECT_EQ(PhoneNumber::default_instance(), test_number); - - EXPECT_EQ(PhoneNumberUtil::INVALID_COUNTRY_CODE_ERROR, - phone_util_.Parse("123 456 7890", RegionCode::GetUnknown(), - &test_number)); - EXPECT_EQ(PhoneNumber::default_instance(), test_number); - - EXPECT_EQ(PhoneNumberUtil::INVALID_COUNTRY_CODE_ERROR, - phone_util_.Parse("123 456 7890", RegionCode::CS(), - &test_number)); - EXPECT_EQ(PhoneNumber::default_instance(), test_number); - - EXPECT_EQ(PhoneNumberUtil::TOO_SHORT_AFTER_IDD, - phone_util_.Parse("0044-----", RegionCode::GB(), - &test_number)); - EXPECT_EQ(PhoneNumber::default_instance(), test_number); - EXPECT_EQ(PhoneNumberUtil::TOO_SHORT_AFTER_IDD, - phone_util_.Parse("0044", RegionCode::GB(), - &test_number)); - EXPECT_EQ(PhoneNumber::default_instance(), test_number); - - EXPECT_EQ(PhoneNumberUtil::TOO_SHORT_AFTER_IDD, - phone_util_.Parse("011", RegionCode::US(), - &test_number)); - EXPECT_EQ(PhoneNumber::default_instance(), test_number); - EXPECT_EQ(PhoneNumberUtil::TOO_SHORT_AFTER_IDD, - phone_util_.Parse("0119", RegionCode::US(), - &test_number)); - EXPECT_EQ(PhoneNumber::default_instance(), test_number); -} - -TEST_F(PhoneNumberUtilTest, ParseNumbersWithPlusWithNoRegion) { - PhoneNumber nz_number; - nz_number.set_country_code(64); - nz_number.set_national_number(33316005ULL); - // "ZZ" is allowed only if the number starts with a '+' - then the country - // code can be calculated. - PhoneNumber result_proto; - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("+64 3 331 6005", RegionCode::GetUnknown(), - &result_proto)); - EXPECT_EQ(nz_number, result_proto); - - // Test with full-width plus. - result_proto.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("\xEF\xBC\x8B" "64 3 331 6005", - /* "+64 3 331 6005" */ - RegionCode::GetUnknown(), &result_proto)); - EXPECT_EQ(nz_number, result_proto); - // Test with normal plus but leading characters that need to be stripped. - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse(" +64 3 331 6005", RegionCode::GetUnknown(), - &result_proto)); - EXPECT_EQ(nz_number, result_proto); - - nz_number.set_raw_input("+64 3 331 6005"); - nz_number.set_country_code_source(PhoneNumber::FROM_NUMBER_WITH_PLUS_SIGN); - // It is important that we set this to an empty string, since we used - // ParseAndKeepRawInput and no carrrier code was found. - nz_number.set_preferred_domestic_carrier_code(""); - result_proto.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.ParseAndKeepRawInput("+64 3 331 6005", - RegionCode::GetUnknown(), - &result_proto)); - EXPECT_EQ(nz_number, result_proto); -} - -TEST_F(PhoneNumberUtilTest, ParseExtensions) { - PhoneNumber nz_number; - nz_number.set_country_code(64); - nz_number.set_national_number(33316005ULL); - nz_number.set_extension("3456"); - PhoneNumber test_number; - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("03 331 6005 ext 3456", RegionCode::NZ(), - &test_number)); - EXPECT_EQ(nz_number, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("03 331 6005x3456", RegionCode::NZ(), - &test_number)); - EXPECT_EQ(nz_number, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("03-331 6005 int.3456", RegionCode::NZ(), - &test_number)); - EXPECT_EQ(nz_number, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("03 331 6005 #3456", RegionCode::NZ(), - &test_number)); - EXPECT_EQ(nz_number, test_number); - - // Test the following do not extract extensions: - PhoneNumber non_extn_number; - non_extn_number.set_country_code(1); - non_extn_number.set_national_number(80074935247ULL); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("1800 six-flags", RegionCode::US(), - &test_number)); - EXPECT_EQ(non_extn_number, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("1800 SIX-FLAGS", RegionCode::US(), - &test_number)); - EXPECT_EQ(non_extn_number, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("0~0 1800 7493 5247", RegionCode::PL(), - &test_number)); - EXPECT_EQ(non_extn_number, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("(1800) 7493.5247", RegionCode::US(), - &test_number)); - EXPECT_EQ(non_extn_number, test_number); - - // Check that the last instance of an extension token is matched. - PhoneNumber extn_number; - extn_number.set_country_code(1); - extn_number.set_national_number(80074935247ULL); - extn_number.set_extension("1234"); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("0~0 1800 7493 5247 ~1234", RegionCode::PL(), - &test_number)); - EXPECT_EQ(extn_number, test_number); - - // Verifying bug-fix where the last digit of a number was previously omitted - // if it was a 0 when extracting the extension. Also verifying a few different - // cases of extensions. - PhoneNumber uk_number; - uk_number.set_country_code(44); - uk_number.set_national_number(2034567890ULL); - uk_number.set_extension("456"); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("+44 2034567890x456", RegionCode::NZ(), - &test_number)); - EXPECT_EQ(uk_number, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("+44 2034567890x456", RegionCode::GB(), - &test_number)); - EXPECT_EQ(uk_number, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("+44 2034567890 x456", RegionCode::GB(), - &test_number)); - EXPECT_EQ(uk_number, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("+44 2034567890 X456", RegionCode::GB(), - &test_number)); - EXPECT_EQ(uk_number, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("+44 2034567890 X 456", RegionCode::GB(), - &test_number)); - EXPECT_EQ(uk_number, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("+44 2034567890 X 456", RegionCode::GB(), - &test_number)); - EXPECT_EQ(uk_number, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("+44 2034567890 x 456 ", RegionCode::GB(), - &test_number)); - EXPECT_EQ(uk_number, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("+44 2034567890 X 456", RegionCode::GB(), - &test_number)); - EXPECT_EQ(uk_number, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("+44-2034567890;ext=456", RegionCode::GB(), - &test_number)); - EXPECT_EQ(uk_number, test_number); - - PhoneNumber us_with_extension; - us_with_extension.set_country_code(1); - us_with_extension.set_national_number(8009013355ULL); - us_with_extension.set_extension("7246433"); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("(800) 901-3355 x 7246433", RegionCode::US(), - &test_number)); - EXPECT_EQ(us_with_extension, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("(800) 901-3355 , ext 7246433", RegionCode::US(), - &test_number)); - EXPECT_EQ(us_with_extension, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("(800) 901-3355 ,extension 7246433", - RegionCode::US(), - &test_number)); - EXPECT_EQ(us_with_extension, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("(800) 901-3355 ,extensi\xC3\xB3n 7246433", - /* "(800) 901-3355 ,extensión 7246433" */ - RegionCode::US(), - &test_number)); - EXPECT_EQ(us_with_extension, test_number); - test_number.Clear(); - // Repeat with the small letter o with acute accent created by combining - // characters. - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("(800) 901-3355 ,extensio\xCC\x81n 7246433", - /* "(800) 901-3355 ,extensión 7246433" */ - RegionCode::US(), - &test_number)); - EXPECT_EQ(us_with_extension, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("(800) 901-3355 , 7246433", RegionCode::US(), - &test_number)); - EXPECT_EQ(us_with_extension, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("(800) 901-3355 ext: 7246433", RegionCode::US(), - &test_number)); - EXPECT_EQ(us_with_extension, test_number); - - // Test that if a number has two extensions specified, we ignore the second. - PhoneNumber us_with_two_extensions_number; - us_with_two_extensions_number.set_country_code(1); - us_with_two_extensions_number.set_national_number(2121231234ULL); - us_with_two_extensions_number.set_extension("508"); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("(212)123-1234 x508/x1234", RegionCode::US(), - &test_number)); - EXPECT_EQ(us_with_two_extensions_number, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("(212)123-1234 x508/ x1234", RegionCode::US(), - &test_number)); - EXPECT_EQ(us_with_two_extensions_number, test_number); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("(212)123-1234 x508\\x1234", RegionCode::US(), - &test_number)); - EXPECT_EQ(us_with_two_extensions_number, test_number); - - // Test parsing numbers in the form (645) 123-1234-910# works, where the last - // 3 digits before the # are an extension. - us_with_extension.Clear(); - us_with_extension.set_country_code(1); - us_with_extension.set_national_number(6451231234ULL); - us_with_extension.set_extension("910"); - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.Parse("+1 (645) 123 1234-910#", RegionCode::US(), - &test_number)); - EXPECT_EQ(us_with_extension, test_number); -} - -TEST_F(PhoneNumberUtilTest, ParseAndKeepRaw) { - PhoneNumber alpha_numeric_number; - alpha_numeric_number.set_country_code(1); - alpha_numeric_number.set_national_number(80074935247ULL); - alpha_numeric_number.set_raw_input("800 six-flags"); - alpha_numeric_number.set_country_code_source( - PhoneNumber::FROM_DEFAULT_COUNTRY); - alpha_numeric_number.set_preferred_domestic_carrier_code(""); - - PhoneNumber test_number; - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.ParseAndKeepRawInput("800 six-flags", RegionCode::US(), - &test_number)); - EXPECT_EQ(alpha_numeric_number, test_number); - - alpha_numeric_number.set_national_number(8007493524ULL); - alpha_numeric_number.set_raw_input("1800 six-flag"); - alpha_numeric_number.set_country_code_source( - PhoneNumber::FROM_NUMBER_WITHOUT_PLUS_SIGN); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.ParseAndKeepRawInput("1800 six-flag", RegionCode::US(), - &test_number)); - EXPECT_EQ(alpha_numeric_number, test_number); - - alpha_numeric_number.set_raw_input("+1800 six-flag"); - alpha_numeric_number.set_country_code_source( - PhoneNumber::FROM_NUMBER_WITH_PLUS_SIGN); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.ParseAndKeepRawInput("+1800 six-flag", RegionCode::CN(), - &test_number)); - EXPECT_EQ(alpha_numeric_number, test_number); - - alpha_numeric_number.set_raw_input("001800 six-flag"); - alpha_numeric_number.set_country_code_source( - PhoneNumber::FROM_NUMBER_WITH_IDD); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.ParseAndKeepRawInput("001800 six-flag", - RegionCode::NZ(), - &test_number)); - EXPECT_EQ(alpha_numeric_number, test_number); - - // Try with invalid region - expect failure. - test_number.Clear(); - EXPECT_EQ(PhoneNumberUtil::INVALID_COUNTRY_CODE_ERROR, - phone_util_.Parse("123 456 7890", RegionCode::CS(), &test_number)); - EXPECT_EQ(PhoneNumber::default_instance(), test_number); - - PhoneNumber korean_number; - korean_number.set_country_code(82); - korean_number.set_national_number(22123456); - korean_number.set_raw_input("08122123456"); - korean_number.set_country_code_source(PhoneNumber::FROM_DEFAULT_COUNTRY); - korean_number.set_preferred_domestic_carrier_code("81"); - EXPECT_EQ(PhoneNumberUtil::NO_PARSING_ERROR, - phone_util_.ParseAndKeepRawInput("08122123456", - RegionCode::KR(), - &test_number)); - EXPECT_EQ(korean_number, test_number); -} - -TEST_F(PhoneNumberUtilTest, IsAlphaNumber) { - static const string kAlphaNumber("1800 six-flags"); - EXPECT_TRUE(phone_util_.IsAlphaNumber(kAlphaNumber)); - static const string kAlphaNumberWithExtension = "1800 six-flags ext. 1234"; - EXPECT_TRUE(phone_util_.IsAlphaNumber(kAlphaNumberWithExtension)); - static const string kNonAlphaNumber("1800 123-1234"); - EXPECT_FALSE(phone_util_.IsAlphaNumber(kNonAlphaNumber)); - static const string kNonAlphaNumberWithExtension( - "1800 123-1234 extension: 1234"); - EXPECT_FALSE(phone_util_.IsAlphaNumber(kNonAlphaNumberWithExtension)); -} - -} // namespace phonenumbers -} // namespace i18n diff --git a/regexp_adapter_test.cc b/regexp_adapter_test.cc deleted file mode 100644 index ebc2c06..0000000 --- a/regexp_adapter_test.cc +++ /dev/null @@ -1,323 +0,0 @@ -// Copyright (C) 2011 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Author: George Yakovlev -// Philippe Liard - -#include "phonenumbers/regexp_adapter.h" - -#include <string> -#include <vector> - -#include <gtest/gtest.h> - -#include "base/basictypes.h" -#include "base/scoped_ptr.h" -#include "stl_util.h" -#include "stringutil.h" - -#ifdef USE_RE2 -#include "phonenumbers/regexp_adapter_re2.h" -#else -#include "phonenumbers/regexp_adapter_icu.h" -#endif // USE_RE2 - -namespace i18n { -namespace phonenumbers { - -using std::string; -using std::vector; - -// Structure that contains the attributes used to test an implementation of the -// regexp adapter. -struct RegExpTestContext { - explicit RegExpTestContext(const string& name, - const AbstractRegExpFactory* factory) - : name(name), - factory(factory), - digits(factory->CreateRegExp("\\d+")), - parentheses_digits(factory->CreateRegExp("\\((\\d+)\\)")), - single_digit(factory->CreateRegExp("\\d")), - two_digit_groups(factory->CreateRegExp("(\\d+)-(\\d+)")) {} - - const string name; - const scoped_ptr<const AbstractRegExpFactory> factory; - const scoped_ptr<const RegExp> digits; - const scoped_ptr<const RegExp> parentheses_digits; - const scoped_ptr<const RegExp> single_digit; - const scoped_ptr<const RegExp> two_digit_groups; -}; - -class RegExpAdapterTest : public testing::Test { - protected: - RegExpAdapterTest() { -#ifdef USE_RE2 - contexts_.push_back( - new RegExpTestContext("RE2", new RE2RegExpFactory())); -#else - contexts_.push_back( - new RegExpTestContext("ICU Regex", new ICURegExpFactory())); -#endif // USE_RE2 - } - - ~RegExpAdapterTest() { - STLDeleteElements(&contexts_); - } - - static string ErrorMessage(const RegExpTestContext& context) { - return StrCat("Test failed with ", context.name, " implementation."); - } - - typedef vector<const RegExpTestContext*>::const_iterator TestContextIterator; - vector<const RegExpTestContext*> contexts_; -}; - -TEST_F(RegExpAdapterTest, TestConsumeNoMatch) { - for (vector<const RegExpTestContext*>::const_iterator it = contexts_.begin(); - it != contexts_.end(); - ++it) { - const RegExpTestContext& context = **it; - const scoped_ptr<RegExpInput> input( - context.factory->CreateInput("+1-123-456-789")); - - // When 'true' is passed to Consume(), the match occurs from the beginning - // of the input. - ASSERT_FALSE(context.digits->Consume(input.get(), true, NULL, NULL, NULL)) - << ErrorMessage(context); - ASSERT_EQ("+1-123-456-789", input->ToString()) << ErrorMessage(context); - - string res1; - ASSERT_FALSE(context.parentheses_digits->Consume( - input.get(), true, &res1, NULL, NULL)) << ErrorMessage(context); - ASSERT_EQ("+1-123-456-789", input->ToString()) << ErrorMessage(context); - ASSERT_EQ("", res1) << ErrorMessage(context); - } -} - -TEST_F(RegExpAdapterTest, TestConsumeWithNull) { - for (TestContextIterator it = contexts_.begin(); it != contexts_.end(); - ++it) { - const RegExpTestContext& context = **it; - const AbstractRegExpFactory& factory = *context.factory; - const scoped_ptr<RegExpInput> input(factory.CreateInput("+123")); - const scoped_ptr<const RegExp> plus_sign(factory.CreateRegExp("(\\+)")); - - ASSERT_TRUE(plus_sign->Consume(input.get(), true, NULL, NULL, NULL)) - << ErrorMessage(context); - ASSERT_EQ("123", input->ToString()) << ErrorMessage(context); - } -} - -TEST_F(RegExpAdapterTest, TestConsumeRetainsMatches) { - for (TestContextIterator it = contexts_.begin(); it != contexts_.end(); - ++it) { - const RegExpTestContext& context = **it; - const scoped_ptr<RegExpInput> input( - context.factory->CreateInput("1-123-456-789")); - - string res1, res2; - ASSERT_TRUE(context.two_digit_groups->Consume( - input.get(), true, &res1, &res2, NULL)) << ErrorMessage(context); - ASSERT_EQ("-456-789", input->ToString()) << ErrorMessage(context); - ASSERT_EQ("1", res1) << ErrorMessage(context); - ASSERT_EQ("123", res2) << ErrorMessage(context); - } -} - -TEST_F(RegExpAdapterTest, TestFindAndConsume) { - for (TestContextIterator it = contexts_.begin(); it != contexts_.end(); - ++it) { - const RegExpTestContext& context = **it; - const scoped_ptr<RegExpInput> input( - context.factory->CreateInput("+1-123-456-789")); - - // When 'false' is passed to Consume(), the match can occur from any place - // in the input. - ASSERT_TRUE(context.digits->Consume(input.get(), false, NULL, NULL, NULL)) - << ErrorMessage(context); - ASSERT_EQ("-123-456-789", input->ToString()) << ErrorMessage(context); - - ASSERT_TRUE(context.digits->Consume(input.get(), false, NULL, NULL, NULL)) - << ErrorMessage(context); - ASSERT_EQ("-456-789", input->ToString()) << ErrorMessage(context); - - ASSERT_FALSE(context.parentheses_digits->Consume( - input.get(), false, NULL, NULL, NULL)) << ErrorMessage(context); - ASSERT_EQ("-456-789", input->ToString()) << ErrorMessage(context); - - string res1, res2; - ASSERT_TRUE(context.two_digit_groups->Consume( - input.get(), false, &res1, &res2, NULL)) << ErrorMessage(context); - ASSERT_EQ("", input->ToString()) << ErrorMessage(context); - ASSERT_EQ("456", res1) << ErrorMessage(context); - ASSERT_EQ("789", res2) << ErrorMessage(context); - } -} - -TEST_F(RegExpAdapterTest, TestPartialMatch) { - for (TestContextIterator it = contexts_.begin(); it != contexts_.end(); - ++it) { - const RegExpTestContext& context = **it; - const AbstractRegExpFactory& factory = *context.factory; - const scoped_ptr<const RegExp> reg_exp(factory.CreateRegExp("([\\da-z]+)")); - string matched; - - EXPECT_TRUE(reg_exp->PartialMatch("12345af", &matched)) - << ErrorMessage(context); - EXPECT_EQ("12345af", matched) << ErrorMessage(context); - - EXPECT_TRUE(reg_exp->PartialMatch("12345af", NULL)) - << ErrorMessage(context); - - EXPECT_TRUE(reg_exp->PartialMatch("[12]", &matched)) - << ErrorMessage(context); - EXPECT_EQ("12", matched) << ErrorMessage(context); - - matched.clear(); - EXPECT_FALSE(reg_exp->PartialMatch("[]", &matched)) - << ErrorMessage(context); - EXPECT_EQ("", matched) << ErrorMessage(context); - } -} - -TEST_F(RegExpAdapterTest, TestFullMatch) { - for (TestContextIterator it = contexts_.begin(); it != contexts_.end(); - ++it) { - const RegExpTestContext& context = **it; - const AbstractRegExpFactory& factory = *context.factory; - const scoped_ptr<const RegExp> reg_exp(factory.CreateRegExp("([\\da-z]+)")); - string matched; - - EXPECT_TRUE(reg_exp->FullMatch("12345af", &matched)) - << ErrorMessage(context); - EXPECT_EQ("12345af", matched) << ErrorMessage(context); - - EXPECT_TRUE(reg_exp->FullMatch("12345af", NULL)) << ErrorMessage(context); - - matched.clear(); - EXPECT_FALSE(reg_exp->FullMatch("[12]", &matched)) << ErrorMessage(context); - EXPECT_EQ("", matched) << ErrorMessage(context); - - matched.clear(); - EXPECT_FALSE(reg_exp->FullMatch("[]", &matched)) << ErrorMessage(context); - EXPECT_EQ("", matched) << ErrorMessage(context); - } -} - -TEST_F(RegExpAdapterTest, TestReplace) { - for (vector<const RegExpTestContext*>::const_iterator it = contexts_.begin(); - it != contexts_.end(); - ++it) { - const RegExpTestContext& context = **it; - string input("123-4567 "); - - ASSERT_TRUE(context.single_digit->Replace(&input, "+")) - << ErrorMessage(context); - ASSERT_EQ("+23-4567 ", input) << ErrorMessage(context); - - ASSERT_TRUE(context.single_digit->Replace(&input, "+")) - << ErrorMessage(context); - ASSERT_EQ("++3-4567 ", input) << ErrorMessage(context); - - const scoped_ptr<const RegExp> single_letter( - context.factory->CreateRegExp("[a-z]")); - ASSERT_FALSE(single_letter->Replace(&input, "+")) << ErrorMessage(context); - ASSERT_EQ("++3-4567 ", input) << ErrorMessage(context); - } -} - -TEST_F(RegExpAdapterTest, TestReplaceWithGroup) { - for (TestContextIterator it = contexts_.begin(); it != contexts_.end(); - ++it) { - const RegExpTestContext& context = **it; - - // Make sure referencing groups in the regexp in the replacement string - // works. $[0-9] notation is used. - string input = "123-4567 abc"; - ASSERT_TRUE(context.two_digit_groups->Replace(&input, "$2")) - << ErrorMessage(context); - ASSERT_EQ("4567 abc", input) << ErrorMessage(context); - - input = "123-4567"; - ASSERT_TRUE(context.two_digit_groups->Replace(&input, "$1")) - << ErrorMessage(context); - ASSERT_EQ("123", input) << ErrorMessage(context); - - input = "123-4567"; - ASSERT_TRUE(context.two_digit_groups->Replace(&input, "$2")) - << ErrorMessage(context); - ASSERT_EQ("4567", input) << ErrorMessage(context); - - input = "123-4567"; - ASSERT_TRUE(context.two_digit_groups->Replace(&input, "$1 $2")) - << ErrorMessage(context); - ASSERT_EQ("123 4567", input) << ErrorMessage(context); - } -} - -TEST_F(RegExpAdapterTest, TestReplaceWithDollarSign) { - for (TestContextIterator it = contexts_.begin(); it != contexts_.end(); - ++it) { - const RegExpTestContext& context = **it; - - // Make sure '$' can be used in the replacement string when escaped. - string input = "123-4567"; - ASSERT_TRUE(context.two_digit_groups->Replace(&input, "\\$1 \\$2")) - << ErrorMessage(context); - - ASSERT_EQ("$1 $2", input) << ErrorMessage(context); - } -} - -TEST_F(RegExpAdapterTest, TestGlobalReplace) { - for (TestContextIterator it = contexts_.begin(); it != contexts_.end(); - ++it) { - const RegExpTestContext& context = **it; - - string input("123-4567 "); - - ASSERT_TRUE(context.single_digit->GlobalReplace(&input, "*")) - << ErrorMessage(context); - ASSERT_EQ("***-**** ", input) << ErrorMessage(context); - - ASSERT_FALSE(context.single_digit->GlobalReplace(&input, "*")) - << ErrorMessage(context); - ASSERT_EQ("***-**** ", input) << ErrorMessage(context); - } -} - -TEST_F(RegExpAdapterTest, TestUtf8) { - for (TestContextIterator it = contexts_.begin(); it != contexts_.end(); - ++it) { - const RegExpTestContext& context = **it; - const AbstractRegExpFactory& factory = *context.factory; - - const scoped_ptr<const RegExp> reg_exp(factory.CreateRegExp( - "\xE2\x84\xA1\xE2\x8A\x8F([\xCE\xB1-\xCF\x89]*)\xE2\x8A\x90" - /* "℡⊏([α-ω]*)⊐" */)); - string matched; - - EXPECT_FALSE(reg_exp->Match( - "\xE2\x84\xA1\xE2\x8A\x8F" "123\xE2\x8A\x90" /* "℡⊏123⊐" */, true, - &matched)) << ErrorMessage(context); - EXPECT_TRUE(reg_exp->Match( - "\xE2\x84\xA1\xE2\x8A\x8F\xCE\xB1\xCE\xB2\xE2\x8A\x90" - /* "℡⊏αβ⊐" */, true, &matched)) << ErrorMessage(context); - - EXPECT_EQ("\xCE\xB1\xCE\xB2" /* "αβ" */, matched) << ErrorMessage(context); - } -} - -} // namespace phonenumbers -} // namespace i18n diff --git a/regexp_cache_test.cc b/regexp_cache_test.cc deleted file mode 100644 index ebc1f27..0000000 --- a/regexp_cache_test.cc +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (C) 2011 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Author: Fredrik Roubert - -#include <cstddef> -#include <string> - -#include <gtest/gtest.h> - -#include "phonenumbers/regexp_cache.h" -#include "phonenumbers/regexp_factory.h" - -namespace i18n { -namespace phonenumbers { - -using std::string; - -class RegExpCacheTest : public testing::Test { - protected: - static const size_t min_items_ = 2; - - RegExpCacheTest() : cache_(regexp_factory_, min_items_) {} - virtual ~RegExpCacheTest() {} - - RegExpFactory regexp_factory_; - RegExpCache cache_; -}; - -TEST_F(RegExpCacheTest, CacheConstructor) { - ASSERT_TRUE(cache_.cache_impl_ != NULL); - EXPECT_TRUE(cache_.cache_impl_->empty()); -} - -TEST_F(RegExpCacheTest, GetRegExp) { - static const string pattern1("foo"); - static const string pattern2("foo"); - - const RegExp& regexp1 = cache_.GetRegExp(pattern1); - // "foo" has been cached therefore we must get the same object. - const RegExp& regexp2 = cache_.GetRegExp(pattern2); - - EXPECT_TRUE(®exp1 == ®exp2); -} - -} // namespace phonenumbers -} // namespace i18n diff --git a/run_tests.cc b/run_tests.cc deleted file mode 100644 index b38e7bc..0000000 --- a/run_tests.cc +++ /dev/null @@ -1,7 +0,0 @@ -#include <gtest/gtest.h> - -int main(int argc, char** argv) { - ::testing::InitGoogleTest(&argc, argv); - - return RUN_ALL_TESTS(); -} diff --git a/stringutil_test.cc b/stringutil_test.cc deleted file mode 100644 index ccd6ab0..0000000 --- a/stringutil_test.cc +++ /dev/null @@ -1,231 +0,0 @@ -// Copyright (C) 2011 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Author: Philippe Liard - -#include <gtest/gtest.h> - -#include "phonenumbers/stringutil.h" - -namespace i18n { -namespace phonenumbers { - -// Test operator+(const string&, int). -TEST(StringUtilTest, OperatorPlus) { - EXPECT_EQ("hello10", string("hello") + 10); -} - -// Test SimpleItoa implementation. -TEST(StringUtilTest, SimpleItoa) { - EXPECT_EQ("10", SimpleItoa(10)); -} - -// Test TryStripPrefixString. -TEST(StringUtilTest, TryStripPrefixString) { - string s; - - EXPECT_TRUE(TryStripPrefixString("hello world", "hello", &s)); - EXPECT_EQ(" world", s); - s.clear(); - - EXPECT_FALSE(TryStripPrefixString("hello world", "helloa", &s)); - s.clear(); - - EXPECT_TRUE(TryStripPrefixString("hello world", "", &s)); - EXPECT_EQ("hello world", s); - s.clear(); - - EXPECT_FALSE(TryStripPrefixString("", "hello", &s)); - s.clear(); -} - -// Test HasSuffixString. -TEST(StringUtilTest, HasSuffixString) { - EXPECT_TRUE(HasSuffixString("hello world", "hello world")); - EXPECT_TRUE(HasSuffixString("hello world", "world")); - EXPECT_FALSE(HasSuffixString("hello world", "world!")); - EXPECT_TRUE(HasSuffixString("hello world", "")); - EXPECT_FALSE(HasSuffixString("", "hello")); -} - -// Test safe_strto32. -TEST(StringUtilTest, safe_strto32) { - int32 n; - - safe_strto32("0", &n); - EXPECT_EQ(0, n); - - safe_strto32("16", &n); - EXPECT_EQ(16, n); - - safe_strto32("2147483647", &n); - EXPECT_EQ(2147483647, n); - - safe_strto32("-2147483648", &n); - EXPECT_EQ(-2147483648LL, n); -} - -// Test safe_strtou64. -TEST(StringUtilTest, safe_strtou64) { - uint64 n; - - safe_strtou64("0", &n); - EXPECT_EQ(0U, n); - - safe_strtou64("16", &n); - EXPECT_EQ(16U, n); - - safe_strtou64("18446744073709551615UL", &n); - EXPECT_EQ(18446744073709551615ULL, n); -} - -// Test strrmm. -TEST(StringUtilTest, strrmm) { - string input("hello"); - - strrmm(&input, ""); - EXPECT_EQ(input, input); - - string empty; - strrmm(&empty, ""); - EXPECT_EQ("", empty); - - strrmm(&empty, "aa"); - EXPECT_EQ("", empty); - - strrmm(&input, "h"); - EXPECT_EQ("ello", input); - - strrmm(&input, "el"); - EXPECT_EQ("o", input); -} - -// Test GlobalReplaceSubstring. -TEST(StringUtilTest, GlobalReplaceSubstring) { - string input("hello"); - - EXPECT_EQ(0, GlobalReplaceSubstring("aaa", "", &input)); - EXPECT_EQ("hello", input); - - EXPECT_EQ(0, GlobalReplaceSubstring("", "aaa", &input)); - EXPECT_EQ("hello", input); - - EXPECT_EQ(0, GlobalReplaceSubstring("", "", &input)); - EXPECT_EQ("hello", input); - - EXPECT_EQ(0, GlobalReplaceSubstring("aaa", "bbb", &input)); - EXPECT_EQ("hello", input); - - EXPECT_EQ(1, GlobalReplaceSubstring("o", "o world", &input)); - ASSERT_EQ("hello world", input); - - EXPECT_EQ(2, GlobalReplaceSubstring("o", "O", &input)); - EXPECT_EQ("hellO wOrld", input); -} - -// Test the StringHolder class. -TEST(StringUtilTest, StringHolder) { - // Test with C string. - static const char cstring[] = "aaa"; - StringHolder sh1(cstring); - EXPECT_EQ(cstring, sh1.GetCString()); - EXPECT_EQ(NULL, sh1.GetString()); - - // Test with std::string. - string s = "bbb"; - StringHolder sh2(s); - EXPECT_EQ(NULL, sh2.GetCString()); - EXPECT_EQ(&s, sh2.GetString()); - - // Test GetLength(). - string s2 = "hello"; - StringHolder sh3(s2); - EXPECT_EQ(5U, sh3.Length()); - - // Test with uint64. - StringHolder sh4(42); - EXPECT_TRUE(sh4.GetCString() == NULL); - EXPECT_EQ(2U, sh4.Length()); - EXPECT_EQ("42", *sh4.GetString()); -} - -// Test the operator+=(string& lhs, const StringHolder& rhs) implementation. -TEST(StringUtilTest, OperatorPlusEquals) { - // Test with a const char* string to append. - string s = "h"; - static const char append1[] = "ello"; - s += StringHolder(append1); // force StringHolder usage - - EXPECT_EQ("hello", s); - - // Test with a std::string to append. - s = "h"; - string append2 = "ello"; - s += StringHolder(append2); // force StringHolder usage - - EXPECT_EQ("hello", s); -} - -// Test the StrCat implementations -TEST(StringUtilTest, StrCat) { - string s; - - // Test with 2 arguments. - s = StrCat("a", "b"); - EXPECT_EQ("ab", s); - - // Test with 3 arguments. - s = StrCat("a", "b", "c"); - EXPECT_EQ("abc", s); - - // Test with 4 arguments. - s = StrCat("a", "b", "c", "d"); - EXPECT_EQ("abcd", s); - - // Test with 5 arguments. - s = StrCat("a", "b", "c", "d", "e"); - EXPECT_EQ("abcde", s); - - // Test with 6 arguments. - s = StrCat("a", "b", "c", "d", "e", "f"); - EXPECT_EQ("abcdef", s); - - // Test with 7 arguments. - s = StrCat("a", "b", "c", "d", "e", "f", "g"); - EXPECT_EQ("abcdefg", s); - - // Test with 11 arguments. - s = StrCat("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"); - EXPECT_EQ("abcdefghijk", s); -} - -// Test the StrAppend implementations. -TEST(StringUtilTest, StrAppend) { - string s; - - // Test with 1 argument. - StrAppend(&s, "a"); - EXPECT_EQ("a", s); - - // Test with 2 arguments. - StrAppend(&s, "b", "c"); - EXPECT_EQ("abc", s); - - // Test with int argument. - StrAppend(&s, 42); - EXPECT_EQ("abc42", s); -} - -} // namespace phonenumbers -} // namespace i18n diff --git a/utf/unicodetext_test.cc b/utf/unicodetext_test.cc deleted file mode 100644 index b4ad589..0000000 --- a/utf/unicodetext_test.cc +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2011 Facebook, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. -// -// Author: Ben Gertzfield - -#include <gtest/gtest.h> - -#include "phonenumbers/utf/unicodetext.h" - -namespace i18n { -namespace unicodetext { - -TEST(UnicodeTextTest, Iterator) { - struct value { - const char* utf8; - char32 code_point; - } values[] = { - { "\x31", 0x31 }, // U+0031 DIGIT ONE - { "\xC2\xBD", 0x00BD }, // U+00BD VULGAR FRACTION ONE HALF - { "\xEF\xBC\x91", 0xFF11 }, // U+FF11 FULLWIDTH DIGIT ONE - { "\xF0\x9F\x80\x80", 0x1F000 }, // U+1F000 MAHJONG TILE EAST WIND - }; - - for (size_t i = 0; i < sizeof values / sizeof values[0]; i++) { - string number(values[i].utf8); - UnicodeText number_as_unicode; - number_as_unicode.PointToUTF8(number.data(), number.size()); - UnicodeText::const_iterator it = number_as_unicode.begin(); - EXPECT_EQ(values[i].code_point, *it); - } -} - -} // namespace unicodetext -} // namespace i18n |