From daa985805d04fc6ffba69a6a03ae527e21c779c4 Mon Sep 17 00:00:00 2001 From: Philip Liard Date: Thu, 24 Mar 2011 10:51:07 +0000 Subject: [PATCH] Cpp: Adding FormatInOriginalFormat(). --- cpp/src/phonenumberutil.cc | 27 ++++++++++++++++++++ cpp/src/phonenumberutil.h | 9 +++++++ cpp/src/phonenumberutil_test.cc | 44 +++++++++++++++++++++++++++++++++ 3 files changed, 80 insertions(+) diff --git a/cpp/src/phonenumberutil.cc b/cpp/src/phonenumberutil.cc index 8c27478f6..02ba270ee 100644 --- a/cpp/src/phonenumberutil.cc +++ b/cpp/src/phonenumberutil.cc @@ -999,6 +999,33 @@ void PhoneNumberUtil::FormatOutOfCountryCallingNumber( } } +void PhoneNumberUtil::FormatInOriginalFormat(const PhoneNumber& number, + const string& region_calling_from, + string* formatted_number) const { + DCHECK(formatted_number); + + if (!number.has_country_code_source()) { + Format(number, NATIONAL, formatted_number); + return; + } + switch (number.country_code_source()) { + case PhoneNumber::FROM_NUMBER_WITH_PLUS_SIGN: + Format(number, INTERNATIONAL, formatted_number); + return; + case PhoneNumber::FROM_NUMBER_WITH_IDD: + FormatOutOfCountryCallingNumber(number, region_calling_from, + formatted_number); + return; + case PhoneNumber::FROM_NUMBER_WITHOUT_PLUS_SIGN: + Format(number, INTERNATIONAL, formatted_number); + formatted_number->erase(formatted_number->begin()); + return; + case PhoneNumber::FROM_DEFAULT_COUNTRY: + default: + Format(number, NATIONAL, formatted_number); + } +} + void PhoneNumberUtil::FormatOutOfCountryKeepingAlphaChars( const PhoneNumber& number, const string& calling_from, diff --git a/cpp/src/phonenumberutil.h b/cpp/src/phonenumberutil.h index 97f43221b..bcdde8a55 100644 --- a/cpp/src/phonenumberutil.h +++ b/cpp/src/phonenumberutil.h @@ -286,6 +286,15 @@ class PhoneNumberUtil { const string& calling_from, string* formatted_number) const; + // Formats a phone number using the original phone number format that the + // number is parsed from. The original format is embedded in the + // country_code_source field of the PhoneNumber object passed in. If such + // information is missing, the number will be formatted into the NATIONAL + // format by default. + void FormatInOriginalFormat(const PhoneNumber& number, + const string& region_calling_from, + string* formatted_number) const; + // Formats a phone number for out-of-country dialing purpose. // The calling_from parameter is an ISO 3166-1 two-letter country code string. // diff --git a/cpp/src/phonenumberutil_test.cc b/cpp/src/phonenumberutil_test.cc index 4eb639547..1b11df27f 100644 --- a/cpp/src/phonenumberutil_test.cc +++ b/cpp/src/phonenumberutil_test.cc @@ -1217,6 +1217,50 @@ TEST_F(PhoneNumberUtilTest, IsLeadingZeroCountry) { EXPECT_FALSE(PhoneNumberUtil::IsLeadingZeroCountry(1)); // USA } +TEST_F(PhoneNumberUtilTest, FormatUsingOriginalNumberFormat) { + PhoneNumber phone_number; + string formatted_number; + + EXPECT_EQ(PhoneNumberUtil::NO_ERROR, + phone_util_.ParseAndKeepRawInput("+442087654321", "GB", + &phone_number)); + phone_util_.FormatInOriginalFormat(phone_number, "GB", + &formatted_number); + EXPECT_EQ("+44 20 8765 4321", formatted_number); + + phone_number.Clear(); + formatted_number.clear(); + EXPECT_EQ(PhoneNumberUtil::NO_ERROR, + phone_util_.ParseAndKeepRawInput("02087654321", "GB", + &phone_number)); + phone_util_.FormatInOriginalFormat(phone_number, "GB", + &formatted_number); + EXPECT_EQ("(020) 8765 4321", formatted_number); + + phone_number.Clear(); + formatted_number.clear(); + EXPECT_EQ(PhoneNumberUtil::NO_ERROR, + phone_util_.ParseAndKeepRawInput("011442087654321", "US", + &phone_number)); + phone_util_.FormatInOriginalFormat(phone_number, "US", &formatted_number); + EXPECT_EQ("011 44 20 8765 4321", formatted_number); + + phone_number.Clear(); + formatted_number.clear(); + EXPECT_EQ(PhoneNumberUtil::NO_ERROR, + phone_util_.ParseAndKeepRawInput("442087654321", "GB", + &phone_number)); + phone_util_.FormatInOriginalFormat(phone_number, "GB", &formatted_number); + EXPECT_EQ("44 20 8765 4321", formatted_number); + + phone_number.Clear(); + formatted_number.clear(); + EXPECT_EQ(PhoneNumberUtil::NO_ERROR, + phone_util_.Parse("+442087654321", "GB", &phone_number)); + phone_util_.FormatInOriginalFormat(phone_number, "GB", &formatted_number); + EXPECT_EQ("(020) 8765 4321", formatted_number); +} + TEST_F(PhoneNumberUtilTest, IsPremiumRate) { PhoneNumber number; number.set_country_code(1);