Browse Source

Java/CPP: libphonenumber v5.1.2 - AYTF fix for numbers in national format in countries with no national prefix.

pull/567/head
Lara Scheidegger 13 years ago
committed by Mihaela Rosca
parent
commit
af2b6b190a
5 changed files with 34 additions and 4 deletions
  1. +3
    -2
      cpp/src/phonenumbers/asyoutypeformatter.cc
  2. +11
    -0
      cpp/test/phonenumbers/asyoutypeformatter_test.cc
  3. +4
    -2
      java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java
  4. +11
    -0
      java/libphonenumber/test/com/google/i18n/phonenumbers/AsYouTypeFormatterTest.java
  5. +5
    -0
      java/release_notes.txt

+ 3
- 2
cpp/src/phonenumbers/asyoutypeformatter.cc View File

@ -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<NumberFormat>::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())) {


+ 11
- 0
cpp/test/phonenumbers/asyoutypeformatter_test.cc View File

@ -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()));


+ 4
- 2
java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java View File

@ -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


+ 11
- 0
java/libphonenumber/test/com/google/i18n/phonenumbers/AsYouTypeFormatterTest.java View File

@ -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);


+ 5
- 0
java/release_notes.txt View File

@ -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.


Loading…
Cancel
Save