Java/CPP: libphonenumber v5.1.2 - AYTF fix for numbers in national format in countrie...
authorlararennie@google.com <lararennie@google.com@ee073f10-1060-11df-b6a4-87a95322a99c>
Wed, 12 Sep 2012 08:09:05 +0000 (08:09 +0000)
committerlararennie@google.com <lararennie@google.com@ee073f10-1060-11df-b6a4-87a95322a99c>
Wed, 12 Sep 2012 08:09:05 +0000 (08:09 +0000)
git-svn-id: http://libphonenumber.googlecode.com/svn/trunk@524 ee073f10-1060-11df-b6a4-87a95322a99c

cpp/src/phonenumbers/asyoutypeformatter.cc
cpp/test/phonenumbers/asyoutypeformatter_test.cc
java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java
java/libphonenumber/test/com/google/i18n/phonenumbers/AsYouTypeFormatterTest.java
java/release_notes.txt

index df3489f..1111fde 100644 (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())) {
index ad5d78d..c9457d0 100644 (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()));
index dfe49d4..c1ea69f 100644 (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
index c8143d9..a9f7346 100644 (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);
index ab720e8..30a705c 100644 (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.