From 933f9216fb5771aa7b7752bac965310427242c88 Mon Sep 17 00:00:00 2001 From: "lararennie@google.com" Date: Wed, 12 Sep 2012 08:09:05 +0000 Subject: Java/CPP: libphonenumber v5.1.2 - AYTF fix for numbers in national format in countries with no national prefix. git-svn-id: http://libphonenumber.googlecode.com/svn/trunk@524 ee073f10-1060-11df-b6a4-87a95322a99c --- cpp/src/phonenumbers/asyoutypeformatter.cc | 5 +++-- cpp/test/phonenumbers/asyoutypeformatter_test.cc | 11 +++++++++++ .../src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java | 6 ++++-- .../com/google/i18n/phonenumbers/AsYouTypeFormatterTest.java | 11 +++++++++++ java/release_notes.txt | 5 +++++ 5 files changed, 34 insertions(+), 4 deletions(-) diff --git a/cpp/src/phonenumbers/asyoutypeformatter.cc b/cpp/src/phonenumbers/asyoutypeformatter.cc index df3489f..1111fde 100644 --- a/cpp/src/phonenumbers/asyoutypeformatter.cc +++ b/cpp/src/phonenumbers/asyoutypeformatter.cc @@ -198,10 +198,11 @@ void AsYouTypeFormatter::GetAvailableFormats( current_metadata_->intl_number_format().size() > 0) ? current_metadata_->intl_number_format() : current_metadata_->number_format(); - + bool national_prefix_used_by_country = + current_metadata_->has_national_prefix(); for (RepeatedPtrField::const_iterator it = format_list.begin(); it != format_list.end(); ++it) { - if (is_complete_number_ || + if (!national_prefix_used_by_country || is_complete_number_ || it->national_prefix_optional_when_formatting() || phone_util_.FormattingRuleHasFirstGroupOnly( it->national_prefix_formatting_rule())) { diff --git a/cpp/test/phonenumbers/asyoutypeformatter_test.cc b/cpp/test/phonenumbers/asyoutypeformatter_test.cc index ad5d78d..c9457d0 100644 --- a/cpp/test/phonenumbers/asyoutypeformatter_test.cc +++ b/cpp/test/phonenumbers/asyoutypeformatter_test.cc @@ -1126,6 +1126,17 @@ TEST_F(AsYouTypeFormatterTest, AYTF_ShortNumberFormattingFix_MX) { EXPECT_EQ("+52 800 123 4567", formatter_->InputDigit('7', &result_)); } +TEST_F(AsYouTypeFormatterTest, AYTF_NoNationalPrefix) { + formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::IT())); + + EXPECT_EQ("3", formatter_->InputDigit('3', &result_)); + EXPECT_EQ("33", formatter_->InputDigit('3', &result_)); + EXPECT_EQ("333", formatter_->InputDigit('3', &result_)); + EXPECT_EQ("333 3", formatter_->InputDigit('3', &result_)); + EXPECT_EQ("333 33", formatter_->InputDigit('3', &result_)); + EXPECT_EQ("333 333", formatter_->InputDigit('3', &result_)); +} + TEST_F(AsYouTypeFormatterTest, AYTF_ShortNumberFormattingFix_US) { // For the US, an initial 1 is treated specially. formatter_.reset(phone_util_.GetAsYouTypeFormatter(RegionCode::US())); diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java b/java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java index dfe49d4..c1ea69f 100644 --- a/java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java +++ b/java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java @@ -177,8 +177,10 @@ public class AsYouTypeFormatter { (isCompleteNumber && currentMetaData.intlNumberFormatSize() > 0) ? currentMetaData.intlNumberFormats() : currentMetaData.numberFormats(); + boolean nationalPrefixIsUsedByCountry = currentMetaData.hasNationalPrefix(); for (NumberFormat format : formatList) { - if (isCompleteNumber || format.isNationalPrefixOptionalWhenFormatting() || + if (!nationalPrefixIsUsedByCountry || isCompleteNumber || + format.isNationalPrefixOptionalWhenFormatting() || phoneUtil.formattingRuleHasFirstGroupOnly(format.getNationalPrefixFormattingRule())) { if (isFormatEligible(format.getFormat())) { possibleFormats.add(format); @@ -520,7 +522,7 @@ public class AsYouTypeFormatter { isCompleteNumber = true; } else if (currentMetaData.hasNationalPrefixForParsing()) { Pattern nationalPrefixForParsing = - regexCache.getPatternForRegex(currentMetaData.getNationalPrefixForParsing()); + regexCache.getPatternForRegex(currentMetaData.getNationalPrefixForParsing()); Matcher m = nationalPrefixForParsing.matcher(nationalNumber); if (m.lookingAt()) { // When the national prefix is detected, we use international formatting rules instead of diff --git a/java/libphonenumber/test/com/google/i18n/phonenumbers/AsYouTypeFormatterTest.java b/java/libphonenumber/test/com/google/i18n/phonenumbers/AsYouTypeFormatterTest.java index c8143d9..a9f7346 100644 --- a/java/libphonenumber/test/com/google/i18n/phonenumbers/AsYouTypeFormatterTest.java +++ b/java/libphonenumber/test/com/google/i18n/phonenumbers/AsYouTypeFormatterTest.java @@ -1071,6 +1071,17 @@ public class AsYouTypeFormatterTest extends TestMetadataTestCase { assertEquals("+52 800 123 4567", formatter.inputDigit('7')); } + public void testAYTFNoNationalPrefix() { + AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter(RegionCode.IT); + + assertEquals("3", formatter.inputDigit('3')); + assertEquals("33", formatter.inputDigit('3')); + assertEquals("333", formatter.inputDigit('3')); + assertEquals("333 3", formatter.inputDigit('3')); + assertEquals("333 33", formatter.inputDigit('3')); + assertEquals("333 333", formatter.inputDigit('3')); + } + public void testAYTFShortNumberFormattingFix_US() { // For the US, an initial 1 is treated specially. AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter(RegionCode.US); diff --git a/java/release_notes.txt b/java/release_notes.txt index ab720e8..30a705c 100644 --- a/java/release_notes.txt +++ b/java/release_notes.txt @@ -1,3 +1,8 @@ +Sep 11, 2010: libphonenumber-5.1.2 +* Bug fix: + - Fixing regression in AsYouTypeFormatter where it no longer worked for numbers entered in national + format for countries with no national prefix, e.g. Spain. + Sep 5, 2010: libphonenumber-5.1.1 * Code changes: - Added better logging/exception handling for catching cases where metadata is invalid/missing. -- cgit v1.2.3