PhoneNumberUtilTest.java revision 256a5f71a05ffd182a0fda2cfed6f93345cc889f
11524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia/* 21524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia * Copyright (C) 2009 Google Inc. 31524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia * 41524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia * Licensed under the Apache License, Version 2.0 (the "License"); 51524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia * you may not use this file except in compliance with the License. 61524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia * You may obtain a copy of the License at 71524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia * 81524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia * http://www.apache.org/licenses/LICENSE-2.0 91524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia * 101524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia * Unless required by applicable law or agreed to in writing, software 111524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia * distributed under the License is distributed on an "AS IS" BASIS, 121524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia * See the License for the specific language governing permissions and 141524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia * limitations under the License. 151524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia */ 161524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 171524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jiapackage com.google.i18n.phonenumbers; 181524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 191524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jiaimport com.google.i18n.phonenumbers.Phonemetadata.NumberFormat; 201524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jiaimport com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadata; 211524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jiaimport com.google.i18n.phonenumbers.Phonenumber.PhoneNumber; 225c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jiaimport com.google.i18n.phonenumbers.Phonenumber.PhoneNumber.CountryCodeSource; 23256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennieimport com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberFormat; 24f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia 251524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jiaimport junit.framework.TestCase; 261524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 271524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jiaimport java.util.ArrayList; 281524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jiaimport java.util.List; 291524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jiaimport java.util.regex.Pattern; 301524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 311524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia/** 321524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia * Unit tests for PhoneNumberUtil.java 331524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia * 34fa42140081949568565af7dc8c22f0600ad90a8aShaopeng Jia * Note that these tests use the metadata contained in the files with TEST_META_DATA_FILE_PREFIX, 35fa42140081949568565af7dc8c22f0600ad90a8aShaopeng Jia * not the normal metadata files, so should not be used for regression test purposes - these tests 361524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia * are illustrative only and test functionality. 371524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia * 381524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia * @author Shaopeng Jia 391524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia * @author Lara Rennie 401524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia */ 411524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jiapublic class PhoneNumberUtilTest extends TestCase { 421524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia private PhoneNumberUtil phoneUtil; 43b2697412130f6d087dde01fb1a978f7e5840a5faShaopeng Jia static final String TEST_META_DATA_FILE_PREFIX = 44fa42140081949568565af7dc8c22f0600ad90a8aShaopeng Jia "/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting"; 45b2697412130f6d087dde01fb1a978f7e5840a5faShaopeng Jia static final String TEST_COUNTRY_CODE_TO_REGION_CODE_MAP_CLASS_NAME = 46b2697412130f6d087dde01fb1a978f7e5840a5faShaopeng Jia "CountryCodeToRegionCodeMapForTesting"; 471524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 481524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public PhoneNumberUtilTest() { 49fa42140081949568565af7dc8c22f0600ad90a8aShaopeng Jia phoneUtil = initilizePhoneUtilForTesting(); 50fa42140081949568565af7dc8c22f0600ad90a8aShaopeng Jia } 51fa42140081949568565af7dc8c22f0600ad90a8aShaopeng Jia 52fa42140081949568565af7dc8c22f0600ad90a8aShaopeng Jia PhoneNumberUtil initilizePhoneUtilForTesting() { 531524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia PhoneNumberUtil.resetInstance(); 54fa42140081949568565af7dc8c22f0600ad90a8aShaopeng Jia return PhoneNumberUtil.getInstance(TEST_META_DATA_FILE_PREFIX, 55b2697412130f6d087dde01fb1a978f7e5840a5faShaopeng Jia CountryCodeToRegionCodeMapForTesting.getCountryCodeToRegionCodeMap()); 561524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 571524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 581524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia @Override 591524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia protected void setUp() throws Exception { 601524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia super.setUp(); 611524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 621524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 631524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia @Override 641524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia protected void tearDown() throws Exception { 651524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia super.tearDown(); 661524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 671524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 68df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia private void assertEquals(PhoneNumber number1, PhoneNumber number2) { 69df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia boolean equal = false; 7076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia if (number1 == null && number2 == null) { 71df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia equal = true; 72df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia } else if (number1 != null && number2 != null) { 73df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia equal = number1.exactlySameAs(number2); 7476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia } 75df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia if (!equal) { 76df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia fail("The phone numbers do not match"); 7776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia } 7876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia } 7976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia 80f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia public void testGetInstanceLoadUSMetadata() { 817900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia PhoneMetadata metadata = phoneUtil.getMetadataForRegion("US"); 821524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("US", metadata.getId()); 831524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(1, metadata.getCountryCode()); 841524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("011", metadata.getInternationalPrefix()); 85df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertTrue(metadata.hasNationalPrefix()); 861524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(2, metadata.getNumberFormatCount()); 871524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("(\\d{3})(\\d{3})(\\d{4})", 881524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia metadata.getNumberFormat(0).getPattern()); 891524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("$1 $2 $3", metadata.getNumberFormat(0).getFormat()); 901524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("[13-9]\\d{9}|2[0-35-9]\\d{8}", 911524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia metadata.getGeneralDesc().getNationalNumberPattern()); 921524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("\\d{7,10}", metadata.getGeneralDesc().getPossibleNumberPattern()); 935724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia assertTrue(metadata.getGeneralDesc().exactlySameAs(metadata.getFixedLine())); 941524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("\\d{10}", metadata.getTollFree().getPossibleNumberPattern()); 951524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("900\\d{7}", metadata.getPremiumRate().getNationalNumberPattern()); 961524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // No shared-cost data is available, so it should be initialised to "NA". 971524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("NA", metadata.getSharedCost().getNationalNumberPattern()); 981524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("NA", metadata.getSharedCost().getPossibleNumberPattern()); 991524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 1001524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 1011524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testGetInstanceLoadDEMetadata() { 1027900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia PhoneMetadata metadata = phoneUtil.getMetadataForRegion("DE"); 1031524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("DE", metadata.getId()); 1041524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(49, metadata.getCountryCode()); 1051524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("00", metadata.getInternationalPrefix()); 1061524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("0", metadata.getNationalPrefix()); 107df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertEquals(5, metadata.getNumberFormatCount()); 108df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertEquals(1, metadata.getNumberFormat(4).getLeadingDigitsPatternCount()); 109df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertEquals("900", metadata.getNumberFormat(4).getLeadingDigitsPattern(0)); 110df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertEquals("(\\d{3})(\\d{3,4})(\\d{4})", 111df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia metadata.getNumberFormat(4).getPattern()); 112df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertEquals("$1 $2 $3", metadata.getNumberFormat(4).getFormat()); 1131524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("(?:[24-6]\\d{2}|3[03-9]\\d|[789](?:[1-9]\\d|0[2-9]))\\d{3,8}", 1141524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia metadata.getFixedLine().getNationalNumberPattern()); 1151524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("\\d{2,14}", metadata.getFixedLine().getPossibleNumberPattern()); 1161524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("30123456", metadata.getFixedLine().getExampleNumber()); 1171524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("\\d{10}", metadata.getTollFree().getPossibleNumberPattern()); 1181524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("900([135]\\d{6}|9\\d{7})", metadata.getPremiumRate().getNationalNumberPattern()); 1191524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 1201524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 1211524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testGetInstanceLoadARMetadata() { 1227900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia PhoneMetadata metadata = phoneUtil.getMetadataForRegion("AR"); 1231524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("AR", metadata.getId()); 1241524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(54, metadata.getCountryCode()); 1251524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("00", metadata.getInternationalPrefix()); 1261524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("0", metadata.getNationalPrefix()); 1271524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("0(?:(11|343|3715)15)?", metadata.getNationalPrefixForParsing()); 1281524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("9$1", metadata.getNationalPrefixTransformRule()); 1294b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertEquals("$1 15 $2-$3", metadata.getNumberFormat(2).getFormat()); 1301524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("9(\\d{4})(\\d{2})(\\d{4})", 1311524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia metadata.getNumberFormat(3).getPattern()); 1321524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("(9)(\\d{4})(\\d{2})(\\d{4})", 1331524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia metadata.getIntlNumberFormat(3).getPattern()); 1341524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("$1 $2 $3 $4", metadata.getIntlNumberFormat(3).getFormat()); 1351524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 1361524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 1375c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia public void testGetLengthOfGeographicalAreaCode() { 13876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber number = new PhoneNumber(); 1395c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // Google MTV, which has area code "650". 14076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.setCountryCode(1).setNationalNumber(6502530000L); 14176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(3, phoneUtil.getLengthOfGeographicalAreaCode(number)); 1425c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 1435c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // A North America toll-free number, which has no area code. 14476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.setCountryCode(1).setNationalNumber(8002530000L); 14576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(0, phoneUtil.getLengthOfGeographicalAreaCode(number)); 1465c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 1475c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // An invalid US number (1 digit shorter), which has no area code. 14876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.setCountryCode(1).setNationalNumber(650253000L); 14976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(0, phoneUtil.getLengthOfGeographicalAreaCode(number)); 1505c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 1515c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // Google London, which has area code "20". 15276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.setCountryCode(44).setNationalNumber(2070313000L); 15376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(2, phoneUtil.getLengthOfGeographicalAreaCode(number)); 1545c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 1555c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // A UK mobile phone, which has no area code. 15676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.setCountryCode(44).setNationalNumber(7123456789L); 15776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(0, phoneUtil.getLengthOfGeographicalAreaCode(number)); 1585c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 1595c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // Google Buenos Aires, which has area code "11". 16076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.setCountryCode(54).setNationalNumber(1155303000L); 16176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(2, phoneUtil.getLengthOfGeographicalAreaCode(number)); 1625c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 1635c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // Google Sydney, which has area code "2". 16476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.setCountryCode(61).setNationalNumber(293744000L); 16576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(1, phoneUtil.getLengthOfGeographicalAreaCode(number)); 1665c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 1675c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // Google Singapore. Singapore has no area code and no national prefix. 16876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.setCountryCode(65).setNationalNumber(65218000L); 16976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(0, phoneUtil.getLengthOfGeographicalAreaCode(number)); 1705c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia } 1715c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 1725c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia public void testGetNationalSignificantNumber() { 17376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber number = new PhoneNumber(); 17476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.setCountryCode(1).setNationalNumber(6502530000L); 17576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals("6502530000", PhoneNumberUtil.getNationalSignificantNumber(number)); 1765c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 1775c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // An Italian mobile number. 17876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.setCountryCode(39).setNationalNumber(312345678L); 17976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals("312345678", PhoneNumberUtil.getNationalSignificantNumber(number)); 1805c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 1815c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // An Italian fixed line number. 18276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.setCountryCode(39).setNationalNumber(236618300L).setItalianLeadingZero(true); 18376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals("0236618300", PhoneNumberUtil.getNationalSignificantNumber(number)); 1845c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia } 1855c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 186f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia public void testGetExampleNumber() { 18776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber deNumber = new PhoneNumber(); 18876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia deNumber.setCountryCode(49).setNationalNumber(30123456); 1891524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(deNumber, phoneUtil.getExampleNumber("DE")); 1905c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals(deNumber, phoneUtil.getExampleNumber("de")); 1911524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 1921524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(deNumber, 1931524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.getExampleNumberForType("DE", 1941524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia PhoneNumberUtil.PhoneNumberType.FIXED_LINE)); 1951524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(null, 1961524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.getExampleNumberForType("DE", 1971524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia PhoneNumberUtil.PhoneNumberType.MOBILE)); 1981524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // For the US, the example number is placed under general description, and hence should be used 1991524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // for both fixed line and mobile, so neither of these should return null. 2001524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertNotNull(phoneUtil.getExampleNumberForType("US", 2011524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia PhoneNumberUtil.PhoneNumberType.FIXED_LINE)); 2021524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertNotNull(phoneUtil.getExampleNumberForType("US", 2031524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia PhoneNumberUtil.PhoneNumberType.MOBILE)); 2041524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 2051524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 2061524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testNormaliseRemovePunctuation() { 2071524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String inputNumber = "034-56&+#234"; 2081524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String expectedOutput = "03456234"; 2091524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Conversion did not correctly remove punctuation", 2101524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia expectedOutput, 2111524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia PhoneNumberUtil.normalize(inputNumber)); 2121524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 2131524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 2141524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testNormaliseReplaceAlphaCharacters() { 2151524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String inputNumber = "034-I-am-HUNGRY"; 2161524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String expectedOutput = "034426486479"; 2171524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Conversion did not correctly replace alpha characters", 2181524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia expectedOutput, 2191524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia PhoneNumberUtil.normalize(inputNumber)); 2201524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 2211524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 2221524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testNormaliseOtherDigits() { 2231524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String inputNumber = "\uFF125\u0665"; 2241524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String expectedOutput = "255"; 2251524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Conversion did not correctly replace non-latin digits", 2261524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia expectedOutput, 2271524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia PhoneNumberUtil.normalize(inputNumber)); 2281524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 2291524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 2301524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testNormaliseStripAlphaCharacters() { 2311524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String inputNumber = "034-56&+a#234"; 2321524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String expectedOutput = "03456234"; 2331524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Conversion did not correctly remove alpha character", 2341524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia expectedOutput, 2351524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia PhoneNumberUtil.normalizeDigitsOnly(inputNumber)); 2361524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 2371524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 2381524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testFormatUSNumber() { 23976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber usNumber = new PhoneNumber(); 24076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia usNumber.setCountryCode(1).setNationalNumber(6502530000L); 241256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("650 253 0000", phoneUtil.format(usNumber, PhoneNumberFormat.NATIONAL)); 242256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+1 650 253 0000", phoneUtil.format(usNumber, PhoneNumberFormat.INTERNATIONAL)); 2431524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 24476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia usNumber.clear(); 24576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia usNumber.setCountryCode(1).setNationalNumber(8002530000L); 246256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("800 253 0000", phoneUtil.format(usNumber, PhoneNumberFormat.NATIONAL)); 247256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+1 800 253 0000", phoneUtil.format(usNumber, PhoneNumberFormat.INTERNATIONAL)); 2481524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 24976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia usNumber.clear(); 25076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia usNumber.setCountryCode(1).setNationalNumber(9002530000L); 251256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("900 253 0000", phoneUtil.format(usNumber, PhoneNumberFormat.NATIONAL)); 252256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+1 900 253 0000", phoneUtil.format(usNumber, PhoneNumberFormat.INTERNATIONAL)); 2531524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 2541524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 2551524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testFormatBSNumber() { 25676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber bsNumber = new PhoneNumber(); 25776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia bsNumber.setCountryCode(1).setNationalNumber(2421234567L); 258256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("242 123 4567", phoneUtil.format(bsNumber, PhoneNumberFormat.NATIONAL)); 259256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+1 242 123 4567", phoneUtil.format(bsNumber, PhoneNumberFormat.INTERNATIONAL)); 2601524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 26176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia bsNumber.clear(); 26276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia bsNumber.setCountryCode(1).setNationalNumber(8002530000L); 263256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("800 253 0000", phoneUtil.format(bsNumber, PhoneNumberFormat.NATIONAL)); 264256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+1 800 253 0000", phoneUtil.format(bsNumber, PhoneNumberFormat.INTERNATIONAL)); 2651524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 26676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia bsNumber.clear(); 26776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia bsNumber.setCountryCode(1).setNationalNumber(9002530000L); 268256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("900 253 0000", phoneUtil.format(bsNumber, PhoneNumberFormat.NATIONAL)); 269256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+1 900 253 0000", phoneUtil.format(bsNumber, PhoneNumberFormat.INTERNATIONAL)); 2701524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 2711524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 2721524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testFormatGBNumber() { 27376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber gbNumber = new PhoneNumber(); 27476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia gbNumber.setCountryCode(44).setNationalNumber(2087389353L); 275256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("(020) 8738 9353", phoneUtil.format(gbNumber, PhoneNumberFormat.NATIONAL)); 276256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+44 20 8738 9353", phoneUtil.format(gbNumber, PhoneNumberFormat.INTERNATIONAL)); 2771524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 27876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia gbNumber.clear(); 27976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia gbNumber.setCountryCode(44).setNationalNumber(7912345678L); 280256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("(07912) 345 678", phoneUtil.format(gbNumber, PhoneNumberFormat.NATIONAL)); 281256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+44 7912 345 678", phoneUtil.format(gbNumber, PhoneNumberFormat.INTERNATIONAL)); 2821524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 2831524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 2841524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testFormatDENumber() { 28576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber deNumber = new PhoneNumber(); 28676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia deNumber.setCountryCode(49).setNationalNumber(301234L); 287256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("030 1234", phoneUtil.format(deNumber, PhoneNumberFormat.NATIONAL)); 288256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+49 30 1234", phoneUtil.format(deNumber, PhoneNumberFormat.INTERNATIONAL)); 2891524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 29076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia deNumber.clear(); 29176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia deNumber.setCountryCode(49).setNationalNumber(291123L); 292256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("0291 123", phoneUtil.format(deNumber, PhoneNumberFormat.NATIONAL)); 293256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+49 291 123", phoneUtil.format(deNumber, PhoneNumberFormat.INTERNATIONAL)); 2941524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 29576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia deNumber.clear(); 29676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia deNumber.setCountryCode(49).setNationalNumber(29112345678L); 297256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("0291 12345678", phoneUtil.format(deNumber, PhoneNumberFormat.NATIONAL)); 298256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+49 291 12345678", phoneUtil.format(deNumber, PhoneNumberFormat.INTERNATIONAL)); 2991524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 30076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia deNumber.clear(); 30176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia deNumber.setCountryCode(49).setNationalNumber(9123123L); 302256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("09123 123", phoneUtil.format(deNumber, PhoneNumberFormat.NATIONAL)); 303256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+49 9123 123", phoneUtil.format(deNumber, PhoneNumberFormat.INTERNATIONAL)); 30476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia deNumber.clear(); 305df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia deNumber.setCountryCode(49).setNationalNumber(80212345L); 306256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("08021 2345", phoneUtil.format(deNumber, PhoneNumberFormat.NATIONAL)); 307256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+49 8021 2345", phoneUtil.format(deNumber, PhoneNumberFormat.INTERNATIONAL)); 308df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia deNumber.clear(); 30976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia deNumber.setCountryCode(49).setNationalNumber(1234L); 3101524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Note this number is correctly formatted without national prefix. Most of the numbers that 3111524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // are treated as invalid numbers by the library are short numbers, and they are usually not 3121524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // dialed with national prefix. 313256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("1234", phoneUtil.format(deNumber, PhoneNumberFormat.NATIONAL)); 314256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+49 1234", phoneUtil.format(deNumber, PhoneNumberFormat.INTERNATIONAL)); 3151524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 3161524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 3171524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testFormatITNumber() { 31876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber itNumber = new PhoneNumber(); 31976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia itNumber.setCountryCode(39).setNationalNumber(236618300L).setItalianLeadingZero(true); 320256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("02 3661 8300", phoneUtil.format(itNumber, PhoneNumberFormat.NATIONAL)); 321256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+39 02 3661 8300", phoneUtil.format(itNumber, PhoneNumberFormat.INTERNATIONAL)); 322256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+390236618300", phoneUtil.format(itNumber, PhoneNumberFormat.E164)); 3231524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 32476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia itNumber.clear(); 32576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia itNumber.setCountryCode(39).setNationalNumber(345678901L); 326256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("345 678 901", phoneUtil.format(itNumber, PhoneNumberFormat.NATIONAL)); 327256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+39 345 678 901", phoneUtil.format(itNumber, PhoneNumberFormat.INTERNATIONAL)); 328256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+39345678901", phoneUtil.format(itNumber, PhoneNumberFormat.E164)); 329f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia } 3301524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 3311524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testFormatAUNumber() { 33276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber auNumber = new PhoneNumber(); 33376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia auNumber.setCountryCode(61).setNationalNumber(236618300L); 334256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("02 3661 8300", phoneUtil.format(auNumber, PhoneNumberFormat.NATIONAL)); 335256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+61 2 3661 8300", phoneUtil.format(auNumber, PhoneNumberFormat.INTERNATIONAL)); 336256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+61236618300", phoneUtil.format(auNumber, PhoneNumberFormat.E164)); 3371524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 33876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia auNumber.clear(); 33976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia auNumber.setCountryCode(61).setNationalNumber(1800123456L); 340256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("1800 123 456", phoneUtil.format(auNumber, PhoneNumberFormat.NATIONAL)); 341256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+61 1800 123 456", phoneUtil.format(auNumber, PhoneNumberFormat.INTERNATIONAL)); 342256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+611800123456", phoneUtil.format(auNumber, PhoneNumberFormat.E164)); 3431524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 3441524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 3451524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testFormatARNumber() { 34676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber arNumber = new PhoneNumber(); 34776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia arNumber.setCountryCode(54).setNationalNumber(1187654321L); 348256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("011 8765-4321", phoneUtil.format(arNumber, PhoneNumberFormat.NATIONAL)); 349256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+54 11 8765-4321", phoneUtil.format(arNumber, PhoneNumberFormat.INTERNATIONAL)); 350256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+541187654321", phoneUtil.format(arNumber, PhoneNumberFormat.E164)); 3511524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 35276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia arNumber.clear(); 35376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia arNumber.setCountryCode(54).setNationalNumber(91187654321L); 354256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("011 15 8765-4321", phoneUtil.format(arNumber, PhoneNumberFormat.NATIONAL)); 355256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+54 9 11 8765 4321", phoneUtil.format(arNumber, PhoneNumberFormat.INTERNATIONAL)); 356256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+5491187654321", phoneUtil.format(arNumber, PhoneNumberFormat.E164)); 3571524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 3581524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 3591524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testFormatOutOfCountryCallingNumber() { 36076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber usNumber = new PhoneNumber(); 36176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia usNumber.setCountryCode(1).setNationalNumber(9002530000L); 3621524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("00 1 900 253 0000", 36376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(usNumber, "DE")); 3641524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 36576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia usNumber.clear(); 36676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia usNumber.setCountryCode(1).setNationalNumber(6502530000L); 3671524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("1 650 253 0000", 36876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(usNumber, "BS")); 3691524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 3701524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("0~0 1 650 253 0000", 37176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(usNumber, "PL")); 3721524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 37376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber gbNumber = new PhoneNumber(); 37476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia gbNumber.setCountryCode(44).setNationalNumber(7912345678L); 3751524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("011 44 7912 345 678", 3761524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(gbNumber, "US")); 3771524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 37876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber deNumber = new PhoneNumber(); 37976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia deNumber.setCountryCode(49).setNationalNumber(1234L); 3801524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("00 49 1234", 3811524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(deNumber, "GB")); 3821524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Note this number is correctly formatted without national prefix. Most of the numbers that 3831524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // are treated as invalid numbers by the library are short numbers, and they are usually not 3841524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // dialed with national prefix. 3851524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("1234", 3861524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(deNumber, "DE")); 3871524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 38876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber itNumber = new PhoneNumber(); 38976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia itNumber.setCountryCode(39).setNationalNumber(236618300L).setItalianLeadingZero(true); 3901524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("011 39 02 3661 8300", 3911524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(itNumber, "US")); 3921524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("02 3661 8300", 3931524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(itNumber, "IT")); 3941524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("+39 02 3661 8300", 3951524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(itNumber, "SG")); 3961524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 39776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber sgNumber = new PhoneNumber(); 39876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia sgNumber.setCountryCode(65).setNationalNumber(94777892L); 3991524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("9477 7892", 4001524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(sgNumber, "SG")); 4011524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 40276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber arNumber = new PhoneNumber(); 40376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia arNumber.setCountryCode(54).setNationalNumber(91187654321L); 4041524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("011 54 9 11 8765 4321", 40576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(arNumber, "US")); 4061524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 40776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia arNumber.setExtension("1234"); 4081524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("011 54 9 11 8765 4321 ext. 1234", 40976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(arNumber, "US")); 4101524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("0011 54 9 11 8765 4321 ext. 1234", 41176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(arNumber, "AU")); 4121524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("011 15 8765-4321 ext. 1234", 41376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(arNumber, "AR")); 4145c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals("011 15 8765-4321 ext. 1234", 41576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(arNumber, "ar")); 4161524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 4171524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 4181524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testFormatOutOfCountryWithPreferredIntlPrefix() { 41976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber itNumber = new PhoneNumber(); 4201524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia itNumber.setCountryCode(39).setNationalNumber(236618300L).setItalianLeadingZero(true); 4211524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // This should use 0011, since that is the preferred international prefix (both 0011 and 0012 4221524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // are accepted as possible international prefixes in our test metadta.) 4231524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("0011 39 02 3661 8300", 42476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(itNumber, "AU")); 4251524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 4261524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 4274b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia public void testFormatWithCarrierCode() { 4284b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia // We only support this for AR in our test metadata. 4294b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia PhoneNumber arNumber = new PhoneNumber(); 4304b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia arNumber.setCountryCode(54).setNationalNumber(91234125678L); 431256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("01234 12-5678", phoneUtil.format(arNumber, PhoneNumberFormat.NATIONAL)); 4324b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia // Test formatting with a carrier code. 4334b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertEquals("01234 15 12-5678", phoneUtil.formatNationalNumberWithCarrierCode(arNumber, "15")); 4344b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia // Here the international rule is used, so no carrier code should be present. 435256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+5491234125678", phoneUtil.format(arNumber, PhoneNumberFormat.E164)); 4364b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia // We don't support this for the US so there should be no change. 4374b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia PhoneNumber usNumber = new PhoneNumber(); 4384b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia usNumber.setCountryCode(1).setNationalNumber(4241231234L); 439256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("424 123 1234", phoneUtil.format(usNumber, PhoneNumberFormat.NATIONAL)); 4404b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertEquals("424 123 1234", phoneUtil.formatNationalNumberWithCarrierCode(usNumber, "15")); 4414b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia } 4424b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia 4431524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testFormatByPattern() { 44476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber usNumber = new PhoneNumber(); 44576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia usNumber.setCountryCode(1).setNationalNumber(6502530000L); 446f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia 4475724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia NumberFormat newNumFormat = new NumberFormat(); 4485724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia newNumFormat.setPattern("(\\d{3})(\\d{3})(\\d{4})"); 4495724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia newNumFormat.setFormat("($1) $2-$3"); 4501524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia List<NumberFormat> newNumberFormats = new ArrayList<NumberFormat>(); 4515724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia newNumberFormats.add(newNumFormat); 4521524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 453256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("(650) 253-0000", phoneUtil.formatByPattern(usNumber, PhoneNumberFormat.NATIONAL, 454256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie newNumberFormats)); 455256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+1 (650) 253-0000", phoneUtil.formatByPattern(usNumber, 456256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie PhoneNumberFormat.INTERNATIONAL, 457256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie newNumberFormats)); 4581524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 459df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia // $NP is set to '1' for the US. Here we check that for other NANPA countries the US rules are 460df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia // followed. 461df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia newNumFormat.setNationalPrefixFormattingRule("$NP ($FG)"); 462df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia newNumFormat.setFormat("$1 $2-$3"); 463df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia PhoneNumber bsNumber = new PhoneNumber(); 464df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia bsNumber.setCountryCode(1).setNationalNumber(4168819999L); 465df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertEquals("1 (416) 881-9999", 466256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie phoneUtil.formatByPattern(bsNumber, PhoneNumberFormat.NATIONAL, newNumberFormats)); 467df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertEquals("+1 416 881-9999", 468256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie phoneUtil.formatByPattern(bsNumber, PhoneNumberFormat.INTERNATIONAL, 469df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia newNumberFormats)); 470df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia 47176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber itNumber = new PhoneNumber(); 47276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia itNumber.setCountryCode(39).setNationalNumber(236618300L).setItalianLeadingZero(true); 47376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia 4745724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia newNumFormat.setPattern("(\\d{2})(\\d{5})(\\d{3})"); 4755724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia newNumFormat.setFormat("$1-$2 $3"); 4765724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia newNumberFormats.set(0, newNumFormat); 4771524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 4781524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("02-36618 300", 479256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie phoneUtil.formatByPattern(itNumber, PhoneNumberFormat.NATIONAL, newNumberFormats)); 4801524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("+39 02-36618 300", 481256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie phoneUtil.formatByPattern(itNumber, PhoneNumberFormat.INTERNATIONAL, 4821524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia newNumberFormats)); 4831524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 4845724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia PhoneNumber gbNumber = new PhoneNumber(); 4855724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia gbNumber.setCountryCode(44).setNationalNumber(2012345678L); 4861524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 4875724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia newNumFormat.setNationalPrefixFormattingRule("$NP$FG"); 4885724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia newNumFormat.setPattern("(\\d{2})(\\d{4})(\\d{4})"); 4895724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia newNumFormat.setFormat("$1 $2 $3"); 4905724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia newNumberFormats.set(0, newNumFormat); 4911524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("020 1234 5678", 492256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie phoneUtil.formatByPattern(gbNumber, PhoneNumberFormat.NATIONAL, newNumberFormats)); 4931524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 4945724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia newNumFormat.setNationalPrefixFormattingRule("($NP$FG)"); 4951524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("(020) 1234 5678", 496256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie phoneUtil.formatByPattern(gbNumber, PhoneNumberFormat.NATIONAL, newNumberFormats)); 4975724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia 4985724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia newNumFormat.setNationalPrefixFormattingRule(""); 4991524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("20 1234 5678", 500256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie phoneUtil.formatByPattern(gbNumber, PhoneNumberFormat.NATIONAL, newNumberFormats)); 5011524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 5025724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia newNumFormat.setNationalPrefixFormattingRule(""); 5031524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("+44 20 1234 5678", 504256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie phoneUtil.formatByPattern(gbNumber, PhoneNumberFormat.INTERNATIONAL, 5051524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia newNumberFormats)); 5061524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 5071524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 5081524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testFormatE164Number() { 50976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber usNumber = new PhoneNumber(); 5101524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia usNumber.setCountryCode(1).setNationalNumber(6502530000L); 511256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+16502530000", phoneUtil.format(usNumber, PhoneNumberFormat.E164)); 51276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber deNumber = new PhoneNumber(); 5131524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia deNumber.setCountryCode(49).setNationalNumber(301234L); 514256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+49301234", phoneUtil.format(deNumber, PhoneNumberFormat.E164)); 5151524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 5161524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 5171524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testFormatNumberWithExtension() { 51876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber nzNumber = new PhoneNumber(); 5191524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia nzNumber.setCountryCode(64).setNationalNumber(33316005L).setExtension("1234"); 5201524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Uses default extension prefix: 521256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("03-331 6005 ext. 1234", phoneUtil.format(nzNumber, PhoneNumberFormat.NATIONAL)); 5221524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Extension prefix overridden in the territory information for the US: 52376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber usNumber = new PhoneNumber(); 5241524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia usNumber.setCountryCode(1).setNationalNumber(6502530000L).setExtension("4567"); 525256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("650 253 0000 extn. 4567", phoneUtil.format(usNumber, PhoneNumberFormat.NATIONAL)); 5261524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 5271524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 52854923fc72f0faeb11fe58a545c0314f6051b14aaShaopeng Jia public void testFormatUsingOriginalNumberFormat() throws Exception { 52954923fc72f0faeb11fe58a545c0314f6051b14aaShaopeng Jia PhoneNumber number1 = phoneUtil.parseAndKeepRawInput("+442087654321", "GB"); 5304b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertEquals("+44 20 8765 4321", phoneUtil.formatInOriginalFormat(number1, "GB")); 53154923fc72f0faeb11fe58a545c0314f6051b14aaShaopeng Jia 53254923fc72f0faeb11fe58a545c0314f6051b14aaShaopeng Jia PhoneNumber number2 = phoneUtil.parseAndKeepRawInput("02087654321", "GB"); 5334b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertEquals("(020) 8765 4321", phoneUtil.formatInOriginalFormat(number2, "GB")); 53454923fc72f0faeb11fe58a545c0314f6051b14aaShaopeng Jia 53554923fc72f0faeb11fe58a545c0314f6051b14aaShaopeng Jia PhoneNumber number3 = phoneUtil.parseAndKeepRawInput("011442087654321", "US"); 5364b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertEquals("011 44 20 8765 4321", phoneUtil.formatInOriginalFormat(number3, "US")); 53754923fc72f0faeb11fe58a545c0314f6051b14aaShaopeng Jia 53854923fc72f0faeb11fe58a545c0314f6051b14aaShaopeng Jia PhoneNumber number4 = phoneUtil.parseAndKeepRawInput("442087654321", "GB"); 5394b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertEquals("44 20 8765 4321", phoneUtil.formatInOriginalFormat(number4, "GB")); 54054923fc72f0faeb11fe58a545c0314f6051b14aaShaopeng Jia 54154923fc72f0faeb11fe58a545c0314f6051b14aaShaopeng Jia PhoneNumber number5 = phoneUtil.parse("+442087654321", "GB"); 5424b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertEquals("(020) 8765 4321", phoneUtil.formatInOriginalFormat(number5, "GB")); 54354923fc72f0faeb11fe58a545c0314f6051b14aaShaopeng Jia } 54454923fc72f0faeb11fe58a545c0314f6051b14aaShaopeng Jia 5451524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsPremiumRate() { 54676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber premiumRateNumber = new PhoneNumber(); 54776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia 54876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia premiumRateNumber.setCountryCode(1).setNationalNumber(9004433030L); 5491524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.PREMIUM_RATE, 55076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.getNumberType(premiumRateNumber)); 5511524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 55276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia premiumRateNumber.clear(); 55376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia premiumRateNumber.setCountryCode(39).setNationalNumber(892123L); 554f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.PREMIUM_RATE, 55576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.getNumberType(premiumRateNumber)); 5561524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 55776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia premiumRateNumber.clear(); 55876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia premiumRateNumber.setCountryCode(44).setNationalNumber(9187654321L); 559f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.PREMIUM_RATE, 56076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.getNumberType(premiumRateNumber)); 5611524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 56276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia premiumRateNumber.clear(); 56376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia premiumRateNumber.setCountryCode(49).setNationalNumber(9001654321L); 5641524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.PREMIUM_RATE, 56576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.getNumberType(premiumRateNumber)); 5661524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 56776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia premiumRateNumber.clear(); 56876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia premiumRateNumber.setCountryCode(49).setNationalNumber(90091234567L); 5691524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.PREMIUM_RATE, 57076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.getNumberType(premiumRateNumber)); 5711524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 5721524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 5731524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsTollFree() { 57476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber tollFreeNumber = new PhoneNumber(); 57576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia 57676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia tollFreeNumber.setCountryCode(1).setNationalNumber(8881234567L); 5771524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.TOLL_FREE, 57876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.getNumberType(tollFreeNumber)); 5791524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 58076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia tollFreeNumber.clear(); 58176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia tollFreeNumber.setCountryCode(39).setNationalNumber(803123L); 5821524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.TOLL_FREE, 58376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.getNumberType(tollFreeNumber)); 5841524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 58576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia tollFreeNumber.clear(); 58676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia tollFreeNumber.setCountryCode(44).setNationalNumber(8012345678L); 5871524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.TOLL_FREE, 58876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.getNumberType(tollFreeNumber)); 5891524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 59076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia tollFreeNumber.clear(); 59176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia tollFreeNumber.setCountryCode(49).setNationalNumber(8001234567L); 5921524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.TOLL_FREE, 59376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.getNumberType(tollFreeNumber)); 5941524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 5951524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 5961524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsMobile() { 59776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber mobileNumber = new PhoneNumber(); 59876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia 59976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia // A Bahama mobile number 60076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia mobileNumber.setCountryCode(1).setNationalNumber(2423570000L); 6011524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.MOBILE, 60276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.getNumberType(mobileNumber)); 6031524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 60476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia mobileNumber.clear(); 60576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia mobileNumber.setCountryCode(39).setNationalNumber(312345678L); 6061524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.MOBILE, 60776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.getNumberType(mobileNumber)); 6081524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 60976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia mobileNumber.clear(); 61076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia mobileNumber.setCountryCode(44).setNationalNumber(7912345678L); 6111524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.MOBILE, 61276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.getNumberType(mobileNumber)); 6131524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 61476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia mobileNumber.clear(); 61576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia mobileNumber.setCountryCode(49).setNationalNumber(15123456789L); 6161524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.MOBILE, 61776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.getNumberType(mobileNumber)); 6181524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 61976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia mobileNumber.clear(); 62076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia mobileNumber.setCountryCode(54).setNationalNumber(91187654321L); 6211524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.MOBILE, 62276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.getNumberType(mobileNumber)); 6231524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 6241524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 6251524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsFixedLine() { 62676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber fixedLineNumber = new PhoneNumber(); 62776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia 6281524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // A Bahama fixed-line number 62976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia fixedLineNumber.setCountryCode(1).setNationalNumber(2423651234L); 6301524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.FIXED_LINE, 63176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.getNumberType(fixedLineNumber)); 6321524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 6331524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // An Italian fixed-line number 63476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia fixedLineNumber.clear(); 63576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia fixedLineNumber.setCountryCode(39).setNationalNumber(236618300L).setItalianLeadingZero(true); 6361524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.FIXED_LINE, 63776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.getNumberType(fixedLineNumber)); 6381524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 63976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia fixedLineNumber.clear(); 64076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia fixedLineNumber.setCountryCode(44).setNationalNumber(2012345678L); 6411524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.FIXED_LINE, 64276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.getNumberType(fixedLineNumber)); 6431524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 64476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia fixedLineNumber.clear(); 64576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia fixedLineNumber.setCountryCode(49).setNationalNumber(301234L); 6461524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.FIXED_LINE, 64776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.getNumberType(fixedLineNumber)); 6481524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 6491524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 6501524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsFixedLineAndMobile() { 65176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber fixedLineAndMobileNumber = new PhoneNumber(); 65276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia fixedLineAndMobileNumber.setCountryCode(1).setNationalNumber(6502531111L); 6531524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.FIXED_LINE_OR_MOBILE, 65476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.getNumberType(fixedLineAndMobileNumber)); 6551524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 65676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia fixedLineAndMobileNumber.clear(); 65776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia fixedLineAndMobileNumber.setCountryCode(54).setNationalNumber(1987654321L); 6581524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.FIXED_LINE_OR_MOBILE, 65976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.getNumberType(fixedLineAndMobileNumber)); 6601524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 6611524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 6621524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsSharedCost() { 66376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber gbNumber = new PhoneNumber(); 6641524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia gbNumber.setCountryCode(44).setNationalNumber(8431231234L); 66576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.SHARED_COST, phoneUtil.getNumberType(gbNumber)); 6661524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 6671524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 6681524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsVoip() { 66976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber gbNumber = new PhoneNumber(); 6701524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia gbNumber.setCountryCode(44).setNationalNumber(5631231234L); 67176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.VOIP, phoneUtil.getNumberType(gbNumber)); 6721524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 6731524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 6741524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsPersonalNumber() { 67576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber gbNumber = new PhoneNumber(); 6761524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia gbNumber.setCountryCode(44).setNationalNumber(7031231234L); 6771524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.PERSONAL_NUMBER, 67876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.getNumberType(gbNumber)); 6791524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 6801524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 6811524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsUnknown() { 68276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber unknownNumber = new PhoneNumber(); 6831524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia unknownNumber.setCountryCode(1).setNationalNumber(65025311111L); 6841524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.UNKNOWN, 68576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.getNumberType(unknownNumber)); 6861524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 6871524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 6881524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsValidNumber() { 68976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber usNumber = new PhoneNumber(); 6901524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia usNumber.setCountryCode(1).setNationalNumber(6502530000L); 69176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertTrue(phoneUtil.isValidNumber(usNumber)); 6921524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 69376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber itNumber = new PhoneNumber(); 6941524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia itNumber.setCountryCode(39).setNationalNumber(236618300L).setItalianLeadingZero(true); 69576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertTrue(phoneUtil.isValidNumber(itNumber)); 6961524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 69776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber gbNumber = new PhoneNumber(); 6981524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia gbNumber.setCountryCode(44).setNationalNumber(7912345678L); 69976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertTrue(phoneUtil.isValidNumber(gbNumber)); 7001524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 70176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber nzNumber = new PhoneNumber(); 7021524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia nzNumber.setCountryCode(64).setNationalNumber(21387835L); 70376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertTrue(phoneUtil.isValidNumber(nzNumber)); 7041524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 7051524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 7061524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsValidForRegion() { 7071524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // This number is valid for the Bahamas, but is not a valid US number. 70876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber bsNumber = new PhoneNumber(); 70976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia bsNumber.setCountryCode(1).setNationalNumber(2423232345L); 71076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertTrue(phoneUtil.isValidNumber(bsNumber)); 71176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertTrue(phoneUtil.isValidNumberForRegion(bsNumber, "BS")); 71276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertTrue(phoneUtil.isValidNumberForRegion(bsNumber, "bs")); 71376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertFalse(phoneUtil.isValidNumberForRegion(bsNumber, "US")); 71476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia bsNumber.setNationalNumber(2421232345L); 7151524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // This number is no longer valid. 71676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertFalse(phoneUtil.isValidNumber(bsNumber)); 7174b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia 718df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia // La Mayotte and Reunion use 'leadingDigits' to differentiate them. 7194b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia PhoneNumber reNumber = new PhoneNumber(); 7204b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia reNumber.setCountryCode(262).setNationalNumber(262123456L); 7214b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertTrue(phoneUtil.isValidNumber(reNumber)); 7224b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertTrue(phoneUtil.isValidNumberForRegion(reNumber, "RE")); 7234b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertFalse(phoneUtil.isValidNumberForRegion(reNumber, "YT")); 7244b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia // Now change the number to be a number for La Mayotte. 7254b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia reNumber.setNationalNumber(269601234L); 7264b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertTrue(phoneUtil.isValidNumberForRegion(reNumber, "YT")); 7274b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertFalse(phoneUtil.isValidNumberForRegion(reNumber, "RE")); 728df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia // This number is no longer valid for La Reunion. 7294b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia reNumber.setNationalNumber(269123456L); 7304b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertFalse(phoneUtil.isValidNumberForRegion(reNumber, "YT")); 7314b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertFalse(phoneUtil.isValidNumberForRegion(reNumber, "RE")); 7324b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertFalse(phoneUtil.isValidNumber(reNumber)); 7334b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia // However, it should be recognised as from La Mayotte, since it is valid for this region. 7344b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertEquals("YT", phoneUtil.getRegionCodeForNumber(reNumber)); 7354b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia // This number is valid in both places. 7364b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia reNumber.setNationalNumber(800123456L); 7374b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertTrue(phoneUtil.isValidNumberForRegion(reNumber, "YT")); 7384b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertTrue(phoneUtil.isValidNumberForRegion(reNumber, "RE")); 7391524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 7401524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 7411524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsNotValidNumber() { 74276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber usNumber = new PhoneNumber(); 7431524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia usNumber.setCountryCode(1).setNationalNumber(2530000L); 74476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertFalse(phoneUtil.isValidNumber(usNumber)); 7451524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 74676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber itNumber = new PhoneNumber(); 7471524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia itNumber.setCountryCode(39).setNationalNumber(23661830000L).setItalianLeadingZero(true); 74876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertFalse(phoneUtil.isValidNumber(itNumber)); 7491524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 75076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber gbNumber = new PhoneNumber(); 7511524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia gbNumber.setCountryCode(44).setNationalNumber(791234567L); 75276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertFalse(phoneUtil.isValidNumber(gbNumber)); 7531524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 75476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber deNumber = new PhoneNumber(); 7551524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia deNumber.setCountryCode(49).setNationalNumber(1234L); 75676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertFalse(phoneUtil.isValidNumber(deNumber)); 7571524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 75876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber nzNumber = new PhoneNumber(); 7591524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia nzNumber.setCountryCode(64).setNationalNumber(3316005L); 76076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertFalse(phoneUtil.isValidNumber(nzNumber)); 7611524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 7621524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 7631524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testGetRegionCodeForCountryCode() { 7641524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("US", phoneUtil.getRegionCodeForCountryCode(1)); 7651524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("GB", phoneUtil.getRegionCodeForCountryCode(44)); 7661524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("DE", phoneUtil.getRegionCodeForCountryCode(49)); 7671524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 7681524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 7691524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testGetRegionCodeForNumber() { 77076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber bsNumber = new PhoneNumber(); 7711524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia bsNumber.setCountryCode(1).setNationalNumber(2423027000L); 77276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals("BS", phoneUtil.getRegionCodeForNumber(bsNumber)); 7731524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 77476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber usNumber = new PhoneNumber(); 7751524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia usNumber.setCountryCode(1).setNationalNumber(6502530000L); 77676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals("US", phoneUtil.getRegionCodeForNumber(usNumber)); 7771524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 77876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber gbNumber = new PhoneNumber(); 7791524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia gbNumber.setCountryCode(44).setNationalNumber(7912345678L); 78076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals("GB", phoneUtil.getRegionCodeForNumber(gbNumber)); 7811524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 7821524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 7831524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testGetCountryCodeForRegion() { 7841524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(1, phoneUtil.getCountryCodeForRegion("US")); 7851524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(64, phoneUtil.getCountryCodeForRegion("NZ")); 7865c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals(64, phoneUtil.getCountryCodeForRegion("nz")); 7877900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia assertEquals(0, phoneUtil.getCountryCodeForRegion(null)); 7887900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia assertEquals(0, phoneUtil.getCountryCodeForRegion("ZZ")); 7897900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia // CS is already deprecated so the library doesn't support it. 7907900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia assertEquals(0, phoneUtil.getCountryCodeForRegion("CS")); 7911524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 7921524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 793f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia @SuppressWarnings("deprecation") 794f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia public void testGetNationalDiallingPrefixForRegion() { 795f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia assertEquals("1", phoneUtil.getNddPrefixForRegion("US", false)); 796f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia // Test non-main country to see it gets the national dialling prefix for the main country with 797f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia // that country calling code. 798f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia assertEquals("1", phoneUtil.getNddPrefixForRegion("BS", false)); 799f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia assertEquals("0", phoneUtil.getNddPrefixForRegion("NZ", false)); 800f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia // Test case with non digit in the national prefix. 801f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia assertEquals("0~0", phoneUtil.getNddPrefixForRegion("AO", false)); 802f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia assertEquals("00", phoneUtil.getNddPrefixForRegion("AO", true)); 803f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia // Test cases with invalid regions. 804f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia assertEquals(null, phoneUtil.getNddPrefixForRegion(null, false)); 805f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia assertEquals(null, phoneUtil.getNddPrefixForRegion("ZZ", false)); 806f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia // CS is already deprecated so the library doesn't support it. 807f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia assertEquals(null, phoneUtil.getNddPrefixForRegion("CS", false)); 808f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia } 809f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia 8107900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia public void testIsNANPACountry() { 8117900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia assertTrue(phoneUtil.isNANPACountry("US")); 8127900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia assertTrue(phoneUtil.isNANPACountry("BS")); 8135c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertTrue(phoneUtil.isNANPACountry("bs")); 8141524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 8151524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 8161524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsPossibleNumber() { 81776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber number = new PhoneNumber(); 81876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.setCountryCode(1).setNationalNumber(6502530000L); 81976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertTrue(phoneUtil.isPossibleNumber(number)); 8201524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 82176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.clear(); 82276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.setCountryCode(1).setNationalNumber(2530000L); 82376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertTrue(phoneUtil.isPossibleNumber(number)); 82476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia 82576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.clear(); 82676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.setCountryCode(44).setNationalNumber(2070313000L); 82776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertTrue(phoneUtil.isPossibleNumber(number)); 8281524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 8291524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertTrue(phoneUtil.isPossibleNumber("+1 650 253 0000", "US")); 8301524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertTrue(phoneUtil.isPossibleNumber("+1 650 GOO OGLE", "US")); 8311524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertTrue(phoneUtil.isPossibleNumber("(650) 253-0000", "US")); 8321524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertTrue(phoneUtil.isPossibleNumber("253-0000", "US")); 8331524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertTrue(phoneUtil.isPossibleNumber("+1 650 253 0000", "GB")); 8341524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertTrue(phoneUtil.isPossibleNumber("+44 20 7031 3000", "GB")); 8351524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertTrue(phoneUtil.isPossibleNumber("(020) 7031 3000", "GB")); 8361524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertTrue(phoneUtil.isPossibleNumber("7031 3000", "GB")); 8371524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertTrue(phoneUtil.isPossibleNumber("3331 6005", "NZ")); 8385c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertTrue(phoneUtil.isPossibleNumber("3331 6005", "nz")); 8391524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 8401524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 8411524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsPossibleNumberWithReason() { 8421524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // FYI, national numbers for country code +1 that are within 7 to 10 digits are possible. 84376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber number = new PhoneNumber(); 84476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.setCountryCode(1).setNationalNumber(6502530000L); 8451524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.ValidationResult.IS_POSSIBLE, 84676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.isPossibleNumberWithReason(number)); 8471524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 84876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.clear(); 84976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.setCountryCode(1).setNationalNumber(2530000L); 8501524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.ValidationResult.IS_POSSIBLE, 85176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.isPossibleNumberWithReason(number)); 8521524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 85376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.clear(); 85476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.setCountryCode(0).setNationalNumber(2530000L); 8551524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.ValidationResult.INVALID_COUNTRY_CODE, 85676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.isPossibleNumberWithReason(number)); 8571524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 85876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.clear(); 85976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.setCountryCode(1).setNationalNumber(253000L); 8601524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.ValidationResult.TOO_SHORT, 86176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.isPossibleNumberWithReason(number)); 8621524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 86376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.clear(); 86476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.setCountryCode(1).setNationalNumber(65025300000L); 8651524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.ValidationResult.TOO_LONG, 86676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.isPossibleNumberWithReason(number)); 8674b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia 8684b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia // Try with number that we don't have metadata for. 8694b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia PhoneNumber adNumber = new PhoneNumber(); 8704b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia adNumber.setCountryCode(376).setNationalNumber(12345L); 8714b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertEquals(PhoneNumberUtil.ValidationResult.IS_POSSIBLE, 8724b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia phoneUtil.isPossibleNumberWithReason(adNumber)); 8734b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia adNumber.setCountryCode(376).setNationalNumber(13L); 8744b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertEquals(PhoneNumberUtil.ValidationResult.TOO_SHORT, 8754b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia phoneUtil.isPossibleNumberWithReason(adNumber)); 8764b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia adNumber.setCountryCode(376).setNationalNumber(1234567890123456L); 8774b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertEquals(PhoneNumberUtil.ValidationResult.TOO_LONG, 8784b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia phoneUtil.isPossibleNumberWithReason(adNumber)); 8791524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 8801524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 8811524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsNotPossibleNumber() { 88276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber number = new PhoneNumber(); 88376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.setCountryCode(1).setNationalNumber(65025300000L); 88476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertFalse(phoneUtil.isPossibleNumber(number)); 8851524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 88676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.clear(); 88776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.setCountryCode(1).setNationalNumber(253000L); 88876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertFalse(phoneUtil.isPossibleNumber(number)); 8891524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 89076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.clear(); 89176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.setCountryCode(44).setNationalNumber(300L); 89276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertFalse(phoneUtil.isPossibleNumber(number)); 8931524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 8941524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertFalse(phoneUtil.isPossibleNumber("+1 650 253 00000", "US")); 8951524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertFalse(phoneUtil.isPossibleNumber("(650) 253-00000", "US")); 8961524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertFalse(phoneUtil.isPossibleNumber("I want a Pizza", "US")); 8971524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertFalse(phoneUtil.isPossibleNumber("253-000", "US")); 8981524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertFalse(phoneUtil.isPossibleNumber("1 3000", "GB")); 8991524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertFalse(phoneUtil.isPossibleNumber("+44 300", "GB")); 9001524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 9011524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 902df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia public void testTruncateTooLongNumber() { 903df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia // US number 650-253-0000, but entered with one additional digit at the end. 904df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia PhoneNumber tooLongNumber = new PhoneNumber(); 905df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia tooLongNumber.setCountryCode(1).setNationalNumber(65025300001L); 906df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia PhoneNumber validNumber = new PhoneNumber(); 907df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia validNumber.setCountryCode(1).setNationalNumber(6502530000L); 908df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertTrue(phoneUtil.truncateTooLongNumber(tooLongNumber)); 909df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertEquals(validNumber, tooLongNumber); 910df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia 911df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia // GB number 080 1234 5678, but entered with 4 extra digits at the end. 912df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia tooLongNumber.clear(); 913df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia tooLongNumber.setCountryCode(44).setNationalNumber(80123456780123L); 914df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia validNumber.clear(); 915df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia validNumber.setCountryCode(44).setNationalNumber(8012345678L); 916df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertTrue(phoneUtil.truncateTooLongNumber(tooLongNumber)); 917df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertEquals(validNumber, tooLongNumber); 918df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia 919df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia // IT number 022 3456 7890, but entered with 3 extra digits at the end. 920df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia tooLongNumber.clear(); 921df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia tooLongNumber.setCountryCode(39).setNationalNumber(2234567890123L).setItalianLeadingZero(true); 922df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia validNumber.clear(); 923df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia validNumber.setCountryCode(39).setNationalNumber(2234567890L).setItalianLeadingZero(true); 924df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertTrue(phoneUtil.truncateTooLongNumber(tooLongNumber)); 925df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertEquals(validNumber, tooLongNumber); 926df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia 927df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia // Tests what happens when a valid number is passed in. 928df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia PhoneNumber validNumberCopy = new PhoneNumber(); 929df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia validNumberCopy.mergeFrom(validNumber); 930df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertTrue(phoneUtil.truncateTooLongNumber(validNumber)); 931df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia // Tests the number is not modified. 932df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertEquals(validNumberCopy, validNumber); 933df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia 934df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia // Tests what happens when a number with invalid prefix is passed in. 935df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia PhoneNumber numberWithInvalidPrefix = new PhoneNumber(); 936df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia // The test metadata says US numbers cannot have prefix 240. 937df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia numberWithInvalidPrefix.setCountryCode(1).setNationalNumber(2401234567L); 938df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia PhoneNumber invalidNumberCopy = new PhoneNumber(); 939df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia invalidNumberCopy.mergeFrom(numberWithInvalidPrefix); 940df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertFalse(phoneUtil.truncateTooLongNumber(numberWithInvalidPrefix)); 941df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia // Tests the number is not modified. 942df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertEquals(invalidNumberCopy, numberWithInvalidPrefix); 943df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia 944df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia // Tests what happens when a too short number is passed in. 945df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia PhoneNumber tooShortNumber = new PhoneNumber(); 946df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia tooShortNumber.setCountryCode(1).setNationalNumber(1234L); 947df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia PhoneNumber tooShortNumberCopy = new PhoneNumber(); 948df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia tooShortNumberCopy.mergeFrom(tooShortNumber); 949df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertFalse(phoneUtil.truncateTooLongNumber(tooShortNumber)); 950df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia // Tests the number is not modified. 951df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertEquals(tooShortNumberCopy, tooShortNumber); 952df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia } 953df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia 9541524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsViablePhoneNumber() { 9551524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Only one or two digits before strange non-possible punctuation. 9561524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertFalse(PhoneNumberUtil.isViablePhoneNumber("12. March")); 9571524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertFalse(PhoneNumberUtil.isViablePhoneNumber("1+1+1")); 9581524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertFalse(PhoneNumberUtil.isViablePhoneNumber("80+0")); 9591524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertFalse(PhoneNumberUtil.isViablePhoneNumber("00")); 9601524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Three digits is viable. 9611524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertTrue(PhoneNumberUtil.isViablePhoneNumber("111")); 9621524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Alpha numbers. 9631524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertTrue(PhoneNumberUtil.isViablePhoneNumber("0800-4-pizza")); 9641524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertTrue(PhoneNumberUtil.isViablePhoneNumber("0800-4-PIZZA")); 9651524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Only one or two digits before possible punctuation followed by more digits. 9661524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertTrue(PhoneNumberUtil.isViablePhoneNumber("1\u300034")); 9671524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertFalse(PhoneNumberUtil.isViablePhoneNumber("1\u30003+4")); 9681524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Unicode variants of possible starting character and other allowed punctuation/digits. 9691524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertTrue(PhoneNumberUtil.isViablePhoneNumber("\uFF081\uFF09\u30003456789")); 9701524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Testing a leading + is okay. 9711524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertTrue(PhoneNumberUtil.isViablePhoneNumber("+1\uFF09\u30003456789")); 9721524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 9731524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 9741524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testExtractPossibleNumber() { 9751524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Removes preceding funky punctuation and letters but leaves the rest untouched. 9761524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("0800-345-600", PhoneNumberUtil.extractPossibleNumber("Tel:0800-345-600")); 9771524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("0800 FOR PIZZA", PhoneNumberUtil.extractPossibleNumber("Tel:0800 FOR PIZZA")); 9781524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Should not remove plus sign 9791524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("+800-345-600", PhoneNumberUtil.extractPossibleNumber("Tel:+800-345-600")); 9801524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Should recognise wide digits as possible start values. 9811524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("\uFF10\uFF12\uFF13", 9821524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia PhoneNumberUtil.extractPossibleNumber("\uFF10\uFF12\uFF13")); 9831524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Dashes are not possible start values and should be removed. 9841524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("\uFF11\uFF12\uFF13", 9851524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia PhoneNumberUtil.extractPossibleNumber("Num-\uFF11\uFF12\uFF13")); 9861524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // If not possible number present, return empty string. 9871524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("", PhoneNumberUtil.extractPossibleNumber("Num-....")); 9881524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Leading brackets are stripped - these are not used when parsing. 9891524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("650) 253-0000", PhoneNumberUtil.extractPossibleNumber("(650) 253-0000")); 9907900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia 9917900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia // Trailing non-alpha-numeric characters should be removed. 9927900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia assertEquals("650) 253-0000", PhoneNumberUtil.extractPossibleNumber("(650) 253-0000..- ..")); 9937900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia assertEquals("650) 253-0000", PhoneNumberUtil.extractPossibleNumber("(650) 253-0000.")); 9947900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia // This case has a trailing RTL char. 9957900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia assertEquals("650) 253-0000", PhoneNumberUtil.extractPossibleNumber("(650) 253-0000\u200F")); 9961524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 9971524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 9981524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testMaybeStripNationalPrefix() { 9991524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String nationalPrefix = "34"; 10001524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia StringBuffer numberToStrip = new StringBuffer("34356778"); 10011524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String strippedNumber = "356778"; 10021524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String nationalRuleRegExp = "\\d{4,7}"; 10031524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia Pattern nationalRule = Pattern.compile(nationalRuleRegExp); 10041524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.maybeStripNationalPrefix(numberToStrip, nationalPrefix, "", nationalRule); 10051524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Should have had national prefix stripped.", 10061524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia strippedNumber, numberToStrip.toString()); 10071524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Retry stripping - now the number should not start with the national prefix, so no more 10081524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // stripping should occur. 10091524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.maybeStripNationalPrefix(numberToStrip, nationalPrefix, "", nationalRule); 10101524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Should have had no change - no national prefix present.", 10111524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia strippedNumber, numberToStrip.toString()); 10121524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Some countries have no national prefix. Repeat test with none specified. 10131524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia nationalPrefix = ""; 10141524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.maybeStripNationalPrefix(numberToStrip, nationalPrefix, "", nationalRule); 10151524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Should not strip anything with empty national prefix.", 10161524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia strippedNumber, numberToStrip.toString()); 10171524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // If the resultant number doesn't match the national rule, it shouldn't be stripped. 10181524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia nationalPrefix = "3"; 10191524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia numberToStrip = new StringBuffer("3123"); 10201524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia strippedNumber = "3123"; 10211524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.maybeStripNationalPrefix(numberToStrip, nationalPrefix, "", nationalRule); 10221524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Should have had no change - after stripping, it wouldn't have matched " + 10231524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia "the national rule.", 10241524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia strippedNumber, numberToStrip.toString()); 10251524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 10261524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 1027f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia public void testMaybeStripInternationalPrefix() { 10281524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String internationalPrefix = "00[39]"; 10291524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia StringBuffer numberToStrip = new StringBuffer("0034567700-3898003"); 10301524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Note the dash is removed as part of the normalization. 10311524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia StringBuffer strippedNumber = new StringBuffer("45677003898003"); 10325c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals(CountryCodeSource.FROM_NUMBER_WITH_IDD, 10335c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia phoneUtil.maybeStripInternationalPrefixAndNormalize(numberToStrip, 10345c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia internationalPrefix)); 10351524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("The number supplied was not stripped of its international prefix.", 10361524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia strippedNumber.toString(), numberToStrip.toString()); 10375c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // Now the number no longer starts with an IDD prefix, so it should now report 10385c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // FROM_DEFAULT_COUNTRY. 10395c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals(CountryCodeSource.FROM_DEFAULT_COUNTRY, 10405c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia phoneUtil.maybeStripInternationalPrefixAndNormalize(numberToStrip, 10415c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia internationalPrefix)); 10421524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 10431524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia numberToStrip = new StringBuffer("00945677003898003"); 10445c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals(CountryCodeSource.FROM_NUMBER_WITH_IDD, 10455c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia phoneUtil.maybeStripInternationalPrefixAndNormalize(numberToStrip, 10465c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia internationalPrefix)); 10471524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("The number supplied was not stripped of its international prefix.", 10481524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia strippedNumber.toString(), numberToStrip.toString()); 10491524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Test it works when the international prefix is broken up by spaces. 10501524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia numberToStrip = new StringBuffer("00 9 45677003898003"); 10515c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals(CountryCodeSource.FROM_NUMBER_WITH_IDD, 10525c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia phoneUtil.maybeStripInternationalPrefixAndNormalize(numberToStrip, 10535c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia internationalPrefix)); 10541524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("The number supplied was not stripped of its international prefix.", 10551524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia strippedNumber.toString(), numberToStrip.toString()); 10565c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // Now the number no longer starts with an IDD prefix, so it should now report 10575c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // FROM_DEFAULT_COUNTRY. 10585c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals(CountryCodeSource.FROM_DEFAULT_COUNTRY, 10595c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia phoneUtil.maybeStripInternationalPrefixAndNormalize(numberToStrip, 10605c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia internationalPrefix)); 10611524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 10621524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Test the + symbol is also recognised and stripped. 10631524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia numberToStrip = new StringBuffer("+45677003898003"); 10641524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia strippedNumber = new StringBuffer("45677003898003"); 10655c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals(CountryCodeSource.FROM_NUMBER_WITH_PLUS_SIGN, 10665c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia phoneUtil.maybeStripInternationalPrefixAndNormalize(numberToStrip, 10675c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia internationalPrefix)); 10681524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("The number supplied was not stripped of the plus symbol.", 10691524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia strippedNumber.toString(), numberToStrip.toString()); 10701524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 10711524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // If the number afterwards is a zero, we should not strip this - no country code begins with 0. 10721524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia numberToStrip = new StringBuffer("0090112-3123"); 10731524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia strippedNumber = new StringBuffer("00901123123"); 10745c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals(CountryCodeSource.FROM_DEFAULT_COUNTRY, 10755c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia phoneUtil.maybeStripInternationalPrefixAndNormalize(numberToStrip, 10765c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia internationalPrefix)); 10771524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("The number supplied had a 0 after the match so shouldn't be stripped.", 10781524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia strippedNumber.toString(), numberToStrip.toString()); 10791524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Here the 0 is separated by a space from the IDD. 10801524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia numberToStrip = new StringBuffer("009 0-112-3123"); 10815c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals(CountryCodeSource.FROM_DEFAULT_COUNTRY, 10825c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia phoneUtil.maybeStripInternationalPrefixAndNormalize(numberToStrip, 10835c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia internationalPrefix)); 10841524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 10851524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 10861524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testMaybeExtractCountryCode() { 108776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber number = new PhoneNumber(); 10887900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia PhoneMetadata metadata = phoneUtil.getMetadataForRegion("US"); 10891524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Note that for the US, the IDD is 011. 10901524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 10911524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String phoneNumber = "011112-3456789"; 10921524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String strippedNumber = "123456789"; 10931524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia int countryCode = 1; 10941524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia StringBuffer numberToFill = new StringBuffer(); 10951524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Did not extract country code " + countryCode + " correctly.", 10961524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia countryCode, 10975c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia phoneUtil.maybeExtractCountryCode(phoneNumber, metadata, numberToFill, true, 10985c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia number)); 10995c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals("Did not figure out CountryCodeSource correctly", 11005c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia CountryCodeSource.FROM_NUMBER_WITH_IDD, number.getCountryCodeSource()); 11011524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Should strip and normalize national significant number. 11021524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Did not strip off the country code correctly.", 11031524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia strippedNumber, 11041524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia numberToFill.toString()); 11051524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 11061524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia fail("Should not have thrown an exception: " + e.toString()); 11071524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 11085c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia number.clear(); 11091524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 11101524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String phoneNumber = "+6423456789"; 11111524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia int countryCode = 64; 11121524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia StringBuffer numberToFill = new StringBuffer(); 11131524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Did not extract country code " + countryCode + " correctly.", 11141524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia countryCode, 11155c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia phoneUtil.maybeExtractCountryCode(phoneNumber, metadata, numberToFill, true, 11165c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia number)); 11175c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals("Did not figure out CountryCodeSource correctly", 11185c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia CountryCodeSource.FROM_NUMBER_WITH_PLUS_SIGN, number.getCountryCodeSource()); 11191524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 11201524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia fail("Should not have thrown an exception: " + e.toString()); 11211524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 11225c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia number.clear(); 11231524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 11241524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String phoneNumber = "2345-6789"; 11251524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia StringBuffer numberToFill = new StringBuffer(); 11261524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Should not have extracted a country code - no international prefix present.", 11271524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 0, 11285c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia phoneUtil.maybeExtractCountryCode(phoneNumber, metadata, numberToFill, true, 11295c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia number)); 1130f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia assertEquals("Did not figure out CountryCodeSource correctly", 11315c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia CountryCodeSource.FROM_DEFAULT_COUNTRY, number.getCountryCodeSource()); 11321524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 11331524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia fail("Should not have thrown an exception: " + e.toString()); 11341524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 11355c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia number.clear(); 11361524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 11371524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String phoneNumber = "0119991123456789"; 11381524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia StringBuffer numberToFill = new StringBuffer(); 11395c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia phoneUtil.maybeExtractCountryCode(phoneNumber, metadata, numberToFill, true, number); 11401524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia fail("Should have thrown an exception, no valid country code present."); 11411524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 11421524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Expected. 11431524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Wrong error type stored in exception.", 11441524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia NumberParseException.ErrorType.INVALID_COUNTRY_CODE, 11451524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia e.getErrorType()); 11461524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 11475c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia number.clear(); 11481524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 11491524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String phoneNumber = "(1 610) 619 4466"; 11501524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia int countryCode = 1; 11511524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia StringBuffer numberToFill = new StringBuffer(); 11521524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Should have extracted the country code of the region passed in", 11531524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia countryCode, 11545c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia phoneUtil.maybeExtractCountryCode(phoneNumber, metadata, numberToFill, true, 11555c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia number)); 11565c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals("Did not figure out CountryCodeSource correctly", 11575c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia CountryCodeSource.FROM_NUMBER_WITHOUT_PLUS_SIGN, 11585c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia number.getCountryCodeSource()); 11591524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 11601524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia fail("Should not have thrown an exception: " + e.toString()); 11611524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 11625c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia number.clear(); 11635c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia try { 11645c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia String phoneNumber = "(1 610) 619 4466"; 11655c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia int countryCode = 1; 11665c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia StringBuffer numberToFill = new StringBuffer(); 11675c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals("Should have extracted the country code of the region passed in", 11685c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia countryCode, 11695c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia phoneUtil.maybeExtractCountryCode(phoneNumber, metadata, numberToFill, false, 11705c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia number)); 11715c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertFalse("Should not contain CountryCodeSource.", number.hasCountryCodeSource()); 11725c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia } catch (NumberParseException e) { 11735c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia fail("Should not have thrown an exception: " + e.toString()); 11745c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia } 11755c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia number.clear(); 11761524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 11771524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String phoneNumber = "(1 610) 619 446"; 11781524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia StringBuffer numberToFill = new StringBuffer(); 11791524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Should not have extracted a country code - invalid number after extraction " + 11801524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia "of uncertain country code.", 11811524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 0, 11825c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia phoneUtil.maybeExtractCountryCode(phoneNumber, metadata, numberToFill, false, 11835c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia number)); 11845c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertFalse("Should not contain CountryCodeSource.", number.hasCountryCodeSource()); 11851524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 11861524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia fail("Should not have thrown an exception: " + e.toString()); 11871524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 11885c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia number.clear(); 11891524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 1190df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia String phoneNumber = "(1 610) 619 43"; 11911524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia StringBuffer numberToFill = new StringBuffer(); 11921524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Should not have extracted a country code - invalid number both before and " + 11931524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia "after extraction of uncertain country code.", 11941524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 0, 11955c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia phoneUtil.maybeExtractCountryCode(phoneNumber, metadata, numberToFill, true, 11965c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia number)); 11975c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals("Did not figure out CountryCodeSource correctly", 11985c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia CountryCodeSource.FROM_DEFAULT_COUNTRY, number.getCountryCodeSource()); 11991524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 12001524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia fail("Should not have thrown an exception: " + e.toString()); 12011524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 12021524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 12031524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 12041524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testParseNationalNumber() throws Exception { 120576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber nzNumber = new PhoneNumber(); 120676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia nzNumber.setCountryCode(64).setNationalNumber(33316005L); 12071524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 12081524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // National prefix attached. 12091524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(nzNumber, phoneUtil.parse("033316005", "NZ")); 12105c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals(nzNumber, phoneUtil.parse("033316005", "nz")); 12111524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(nzNumber, phoneUtil.parse("33316005", "NZ")); 12121524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // National prefix attached and some formatting present. 12131524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(nzNumber, phoneUtil.parse("03-331 6005", "NZ")); 12141524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(nzNumber, phoneUtil.parse("03 331 6005", "NZ")); 12151524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 12161524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Testing international prefixes. 12171524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Should strip country code. 12181524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(nzNumber, phoneUtil.parse("0064 3 331 6005", "NZ")); 12191524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Try again, but this time we have an international number with Region Code US. It should 12201524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // recognise the country code and parse accordingly. 12211524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(nzNumber, phoneUtil.parse("01164 3 331 6005", "US")); 12221524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(nzNumber, phoneUtil.parse("+64 3 331 6005", "US")); 12231524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 122476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia nzNumber.clear(); 122576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia nzNumber.setCountryCode(64).setNationalNumber(64123456L); 122676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(nzNumber, phoneUtil.parse("64(0)64123456", "NZ")); 12275c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // Check that using a "/" is fine in a phone number. 122876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber deNumber = new PhoneNumber(); 122976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia deNumber.setCountryCode(49).setNationalNumber(12345678L); 12305c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals(deNumber, phoneUtil.parse("123/45678", "DE")); 12315c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 123276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber usNumber = new PhoneNumber(); 12335c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // Check it doesn't use the '1' as a country code when parsing if the phone number was already 12345c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // possible. 123576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia usNumber.setCountryCode(1).setNationalNumber(1234567890L); 12365c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals(usNumber, phoneUtil.parse("123-456-7890", "US")); 12375c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia } 12385c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 1239f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia public void testParseNumberWithAlphaCharacters() throws Exception { 12405c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // Test case with alpha characters. 124176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber tollfreeNumber = new PhoneNumber(); 124276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia tollfreeNumber.setCountryCode(64).setNationalNumber(800332005L); 1243f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia assertEquals(tollfreeNumber, phoneUtil.parse("0800 DDA 005", "NZ")); 124476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber premiumNumber = new PhoneNumber(); 124576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia premiumNumber.setCountryCode(64).setNationalNumber(9003326005L); 12465c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals(premiumNumber, phoneUtil.parse("0900 DDA 6005", "NZ")); 12475c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // Not enough alpha characters for them to be considered intentional, so they are stripped. 12485c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals(premiumNumber, phoneUtil.parse("0900 332 6005a", "NZ")); 12495c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals(premiumNumber, phoneUtil.parse("0900 332 600a5", "NZ")); 12505c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals(premiumNumber, phoneUtil.parse("0900 332 600A5", "NZ")); 12515c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals(premiumNumber, phoneUtil.parse("0900 a332 600A5", "NZ")); 12525c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia } 12531524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 12545c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia public void testParseWithInternationalPrefixes() throws Exception { 125576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber usNumber = new PhoneNumber(); 125676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia usNumber.setCountryCode(1).setNationalNumber(6503336000L); 12571524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(usNumber, phoneUtil.parse("+1 (650) 333-6000", "NZ")); 12581524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(usNumber, phoneUtil.parse("1-650-333-6000", "US")); 12591524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Calling the US number from Singapore by using different service providers 12601524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // 1st test: calling using SingTel IDD service (IDD is 001) 12611524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(usNumber, phoneUtil.parse("0011-650-333-6000", "SG")); 12621524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // 2nd test: calling using StarHub IDD service (IDD is 008) 12631524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(usNumber, phoneUtil.parse("0081-650-333-6000", "SG")); 12641524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // 3rd test: calling using SingTel V019 service (IDD is 019) 12651524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(usNumber, phoneUtil.parse("0191-650-333-6000", "SG")); 12661524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Calling the US number from Poland 12671524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(usNumber, phoneUtil.parse("0~01-650-333-6000", "PL")); 1268256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie // Using "++" at the start. 1269256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals(usNumber, phoneUtil.parse("++1 (650) 333-6000", "PL")); 1270256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie // Using a full-width plus sign. 1271256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals(usNumber, phoneUtil.parse("\uFF0B1 (650) 333-6000", "SG")); 1272256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie // The whole number, including punctuation, is here represented in full-width form. 1273256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals(usNumber, phoneUtil.parse("\uFF0B\uFF11\u3000\uFF08\uFF16\uFF15\uFF10\uFF09" + 1274256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie "\u3000\uFF13\uFF13\uFF13\uFF0D\uFF16\uFF10\uFF10\uFF10", 1275256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie "SG")); 12765c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia } 12771524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 12785c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia public void testParseWithLeadingZero() throws Exception { 127976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber itNumber = new PhoneNumber(); 128076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia itNumber.setCountryCode(39).setNationalNumber(236618300L).setItalianLeadingZero(true); 12811524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(itNumber, phoneUtil.parse("+39 02-36618 300", "NZ")); 12821524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(itNumber, phoneUtil.parse("02-36618 300", "IT")); 12831524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 128476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia itNumber.clear(); 128576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia itNumber.setCountryCode(39).setNationalNumber(312345678L); 128676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(itNumber, phoneUtil.parse("312 345 678", "IT")); 12875c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia } 12881524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 12895c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia public void testParseNationalNumberArgentina() throws Exception { 12901524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Test parsing mobile numbers of Argentina. 129176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber arNumber = new PhoneNumber(); 129276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia 129376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia arNumber.setCountryCode(54).setNationalNumber(93435551212L); 12941524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(arNumber, phoneUtil.parse("+54 9 343 555 1212", "AR")); 12951524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(arNumber, phoneUtil.parse("0343 15 555 1212", "AR")); 12961524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 129776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia arNumber.clear(); 129876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia arNumber.setCountryCode(54).setNationalNumber(93715654320L); 129976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(arNumber, phoneUtil.parse("+54 9 3715 65 4320", "AR")); 130076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(arNumber, phoneUtil.parse("03715 15 65 4320", "AR")); 13011524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 13021524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Test parsing fixed-line numbers of Argentina. 130376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia arNumber.clear(); 130476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia arNumber.setCountryCode(54).setNationalNumber(1137970000L); 130576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(arNumber, phoneUtil.parse("+54 11 3797 0000", "AR")); 130676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(arNumber, phoneUtil.parse("011 3797 0000", "AR")); 13071524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 130876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia arNumber.clear(); 130976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia arNumber.setCountryCode(54).setNationalNumber(3715654321L); 131076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(arNumber, phoneUtil.parse("+54 3715 65 4321", "AR")); 131176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(arNumber, phoneUtil.parse("03715 65 4321", "AR")); 13121524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 131376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia arNumber.clear(); 131476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia arNumber.setCountryCode(54).setNationalNumber(2312340000L); 131576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(arNumber, phoneUtil.parse("+54 23 1234 0000", "AR")); 131676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(arNumber, phoneUtil.parse("023 1234 0000", "AR")); 13175c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia } 13181524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 13195c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia public void testParseWithXInNumber() throws Exception { 13201524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Test that having an 'x' in the phone number at the start is ok and that it just gets removed. 132176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber arNumber = new PhoneNumber(); 132276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia arNumber.setCountryCode(54).setNationalNumber(123456789L); 132376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(arNumber, phoneUtil.parse("0123456789", "AR")); 132476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(arNumber, phoneUtil.parse("(0) 123456789", "AR")); 132576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(arNumber, phoneUtil.parse("0 123456789", "AR")); 132676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(arNumber, phoneUtil.parse("(0xx) 123456789", "AR")); 132776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber arFromUs = new PhoneNumber(); 132876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia arFromUs.setCountryCode(54).setNationalNumber(81429712L); 13291524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // This test is intentionally constructed such that the number of digit after xx is larger than 13301524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // 7, so that the number won't be mistakenly treated as an extension, as we allow extensions up 13311524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // to 7 digits. This assumption is okay for now as all the countries where a carrier selection 13321524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // code is written in the form of xx have a national significant number of length larger than 7. 13331524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(arFromUs, phoneUtil.parse("011xx5481429712", "US")); 13345c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia } 13351524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 13365c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia public void testParseNumbersMexico() throws Exception { 13371524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Test parsing fixed-line numbers of Mexico. 133876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber mxNumber = new PhoneNumber(); 133976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia mxNumber.setCountryCode(52).setNationalNumber(4499780001L); 13401524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(mxNumber, phoneUtil.parse("+52 (449)978-0001", "MX")); 13411524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(mxNumber, phoneUtil.parse("01 (449)978-0001", "MX")); 13421524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(mxNumber, phoneUtil.parse("(449)978-0001", "MX")); 13431524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 13441524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Test parsing mobile numbers of Mexico. 134576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia mxNumber.clear(); 134676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia mxNumber.setCountryCode(52).setNationalNumber(13312345678L); 134776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(mxNumber, phoneUtil.parse("+52 1 33 1234-5678", "MX")); 134876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(mxNumber, phoneUtil.parse("044 (33) 1234-5678", "MX")); 134976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(mxNumber, phoneUtil.parse("045 33 1234-5678", "MX")); 13501524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 13511524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 13521524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testFailedParseOnInvalidNumbers() { 13531524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 13541524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String sentencePhoneNumber = "This is not a phone number"; 13551524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.parse(sentencePhoneNumber, "NZ"); 13561524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia fail("This should not parse without throwing an exception " + sentencePhoneNumber); 13571524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 13581524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Expected this exception. 13591524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Wrong error type stored in exception.", 13601524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia NumberParseException.ErrorType.NOT_A_NUMBER, 13611524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia e.getErrorType()); 13621524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 13631524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 13641524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String tooLongPhoneNumber = "01495 72553301873 810104"; 13651524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.parse(tooLongPhoneNumber, "GB"); 13661524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia fail("This should not parse without throwing an exception " + tooLongPhoneNumber); 13671524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 13681524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Expected this exception. 13691524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Wrong error type stored in exception.", 13701524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia NumberParseException.ErrorType.TOO_LONG, 13711524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia e.getErrorType()); 13721524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 13731524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 13744b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia String plusMinusPhoneNumber = "+---"; 13754b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia phoneUtil.parse(plusMinusPhoneNumber, "DE"); 13764b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia fail("This should not parse without throwing an exception " + plusMinusPhoneNumber); 13774b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia } catch (NumberParseException e) { 13784b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia // Expected this exception. 13794b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertEquals("Wrong error type stored in exception.", 13804b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia NumberParseException.ErrorType.NOT_A_NUMBER, 13814b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia e.getErrorType()); 13824b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia } 13834b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia try { 13841524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String tooShortPhoneNumber = "+49 0"; 13851524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.parse(tooShortPhoneNumber, "DE"); 13861524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia fail("This should not parse without throwing an exception " + tooShortPhoneNumber); 13871524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 13881524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Expected this exception. 13891524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Wrong error type stored in exception.", 13901524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia NumberParseException.ErrorType.TOO_SHORT_NSN, 13911524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia e.getErrorType()); 13921524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 13931524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 13941524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String invalidCountryCode = "+210 3456 56789"; 13951524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.parse(invalidCountryCode, "NZ"); 13961524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia fail("This is not a recognised country code: should fail: " + invalidCountryCode); 13971524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 13981524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Expected this exception. 13991524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Wrong error type stored in exception.", 14001524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia NumberParseException.ErrorType.INVALID_COUNTRY_CODE, 14011524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia e.getErrorType()); 14021524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 14031524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 14041524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String someNumber = "123 456 7890"; 1405be1af2f8b62d5435eca48f3dd5c82e3d2c9bfa17Shaopeng Jia phoneUtil.parse(someNumber, "YY"); 14061524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia fail("'Unknown' country code not allowed: should fail."); 14071524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 14081524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Expected this exception. 14091524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Wrong error type stored in exception.", 14101524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia NumberParseException.ErrorType.INVALID_COUNTRY_CODE, 14111524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia e.getErrorType()); 14121524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 14131524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 14141524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String someNumber = "123 456 7890"; 14154b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia phoneUtil.parse(someNumber, "CS"); 14164b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia fail("Deprecated country code not allowed: should fail."); 14174b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia } catch (NumberParseException e) { 14184b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia // Expected this exception. 14194b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertEquals("Wrong error type stored in exception.", 14204b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia NumberParseException.ErrorType.INVALID_COUNTRY_CODE, 14214b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia e.getErrorType()); 14224b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia } 14234b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia try { 14244b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia String someNumber = "123 456 7890"; 14251524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.parse(someNumber, null); 14261524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia fail("Null country code not allowed: should fail."); 14271524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 14281524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Expected this exception. 14291524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Wrong error type stored in exception.", 14301524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia NumberParseException.ErrorType.INVALID_COUNTRY_CODE, 14311524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia e.getErrorType()); 14321524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 14331524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 14341524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String someNumber = "0044------"; 14351524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.parse(someNumber, "GB"); 14361524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia fail("No number provided, only country code: should fail"); 14371524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 14381524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Expected this exception. 14391524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Wrong error type stored in exception.", 14401524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia NumberParseException.ErrorType.TOO_SHORT_AFTER_IDD, 14411524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia e.getErrorType()); 14421524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 14431524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 14441524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String someNumber = "0044"; 14451524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.parse(someNumber, "GB"); 14461524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia fail("No number provided, only country code: should fail"); 14471524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 14481524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Expected this exception. 14491524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Wrong error type stored in exception.", 14501524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia NumberParseException.ErrorType.TOO_SHORT_AFTER_IDD, 14511524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia e.getErrorType()); 14521524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 14531524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 14541524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String someNumber = "011"; 14551524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.parse(someNumber, "US"); 14561524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia fail("Only IDD provided - should fail."); 14571524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 14581524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Expected this exception. 14591524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Wrong error type stored in exception.", 14601524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia NumberParseException.ErrorType.TOO_SHORT_AFTER_IDD, 14611524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia e.getErrorType()); 14621524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 14631524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 14641524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String someNumber = "0119"; 14651524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.parse(someNumber, "US"); 14661524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia fail("Only IDD provided and then 9 - should fail."); 14671524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 14681524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Expected this exception. 14691524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Wrong error type stored in exception.", 14701524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia NumberParseException.ErrorType.TOO_SHORT_AFTER_IDD, 14711524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia e.getErrorType()); 14721524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 1473256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie try { 1474256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie String emptyNumber = ""; 1475256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie // Invalid region. 1476256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie phoneUtil.parse(emptyNumber, "ZZ"); 1477256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie fail("Empty string - should fail."); 1478256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie } catch (NumberParseException e) { 1479256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie // Expected this exception. 1480256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("Wrong error type stored in exception.", 1481256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie NumberParseException.ErrorType.NOT_A_NUMBER, 1482256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie e.getErrorType()); 1483256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie } 14841524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 14851524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 14864b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia public void testParseNumbersWithPlusWithNoRegion() throws Exception { 14874b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia PhoneNumber nzNumber = new PhoneNumber(); 14884b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia nzNumber.setCountryCode(64).setNationalNumber(33316005L); 14894b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia // "ZZ" is allowed only if the number starts with a '+' - then the country code can be 14904b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia // calculated. 14914b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertEquals(nzNumber, phoneUtil.parse("+64 3 331 6005", "ZZ")); 14924b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertEquals(nzNumber, phoneUtil.parse("+64 3 331 6005", null)); 14934b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia nzNumber.setRawInput("+64 3 331 6005"). 14944b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia setCountryCodeSource(CountryCodeSource.FROM_NUMBER_WITH_PLUS_SIGN); 14954b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertEquals(nzNumber, phoneUtil.parseAndKeepRawInput("+64 3 331 6005", "ZZ")); 14964b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia // Null is also allowed for the region code in these cases. 14974b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertEquals(nzNumber, phoneUtil.parseAndKeepRawInput("+64 3 331 6005", null)); 14984b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia } 14994b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia 15001524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testParseExtensions() throws Exception { 150176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber nzNumber = new PhoneNumber(); 150276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia nzNumber.setCountryCode(64).setNationalNumber(33316005L).setExtension("3456"); 15031524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(nzNumber, phoneUtil.parse("03 331 6005 ext 3456", "NZ")); 15041524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(nzNumber, phoneUtil.parse("03-3316005x3456", "NZ")); 15051524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(nzNumber, phoneUtil.parse("03-3316005 int.3456", "NZ")); 15061524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(nzNumber, phoneUtil.parse("03 3316005 #3456", "NZ")); 15071524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Test the following do not extract extensions: 150876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber nonExtnNumber = new PhoneNumber(); 1509df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia nonExtnNumber.setCountryCode(1).setNationalNumber(80074935247L); 15101524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(nonExtnNumber, phoneUtil.parse("1800 six-flags", "US")); 15111524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(nonExtnNumber, phoneUtil.parse("1800 SIX FLAGS", "US")); 1512df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertEquals(nonExtnNumber, phoneUtil.parse("0~0 1800 7493 5247", "PL")); 15131524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(nonExtnNumber, phoneUtil.parse("(1800) 7493.5247", "US")); 15141524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Check that the last instance of an extension token is matched. 151576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber extnNumber = new PhoneNumber(); 1516df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia extnNumber.setCountryCode(1).setNationalNumber(80074935247L).setExtension("1234"); 1517df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertEquals(extnNumber, phoneUtil.parse("0~0 1800 7493 5247 ~1234", "PL")); 15181524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Verifying bug-fix where the last digit of a number was previously omitted if it was a 0 when 15191524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // extracting the extension. Also verifying a few different cases of extensions. 152076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber ukNumber = new PhoneNumber(); 152176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia ukNumber.setCountryCode(44).setNationalNumber(2034567890L).setExtension("456"); 15221524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(ukNumber, phoneUtil.parse("+44 2034567890x456", "NZ")); 15231524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(ukNumber, phoneUtil.parse("+44 2034567890x456", "GB")); 15241524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(ukNumber, phoneUtil.parse("+44 2034567890 x456", "GB")); 15251524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(ukNumber, phoneUtil.parse("+44 2034567890 X456", "GB")); 15261524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(ukNumber, phoneUtil.parse("+44 2034567890 X 456", "GB")); 15271524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(ukNumber, phoneUtil.parse("+44 2034567890 X 456", "GB")); 15281524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(ukNumber, phoneUtil.parse("+44 2034567890 x 456 ", "GB")); 15291524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(ukNumber, phoneUtil.parse("+44 2034567890 X 456", "GB")); 15301524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 153176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber usWithExtension = new PhoneNumber(); 153276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia usWithExtension.setCountryCode(1).setNationalNumber(8009013355L).setExtension("7246433"); 15331524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(usWithExtension, phoneUtil.parse("(800) 901-3355 x 7246433", "US")); 15341524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(usWithExtension, phoneUtil.parse("(800) 901-3355 , ext 7246433", "US")); 15351524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(usWithExtension, 15361524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.parse("(800) 901-3355 ,extension 7246433", "US")); 15371524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(usWithExtension, phoneUtil.parse("(800) 901-3355 , 7246433", "US")); 15381524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(usWithExtension, phoneUtil.parse("(800) 901-3355 ext: 7246433", "US")); 15395c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 15405c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // Test that if a number has two extensions specified, we ignore the second. 154176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber usWithTwoExtensionsNumber = new PhoneNumber(); 154276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia usWithTwoExtensionsNumber.setCountryCode(1).setNationalNumber(2121231234L).setExtension("508"); 15435c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals(usWithTwoExtensionsNumber, phoneUtil.parse("(212)123-1234 x508/x1234", 15445c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia "US")); 15455c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals(usWithTwoExtensionsNumber, phoneUtil.parse("(212)123-1234 x508/ x1234", 15465c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia "US")); 15475c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals(usWithTwoExtensionsNumber, phoneUtil.parse("(212)123-1234 x508\\x1234", 15485c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia "US")); 15495c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 15505c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // Test parsing numbers in the form (645) 123-1234-910# works, where the last 3 digits before 15515c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // the # are an extension. 155276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia usWithExtension.clear(); 155376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia usWithExtension.setCountryCode(1).setNationalNumber(6451231234L).setExtension("910"); 155476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(usWithExtension, phoneUtil.parse("+1 (645) 123 1234-910#", "US")); 15557c2324a9b0c98842a8f34ee79226c6606f843aafShaopeng Jia // Retry with the same number in a slightly different format. 15567c2324a9b0c98842a8f34ee79226c6606f843aafShaopeng Jia assertEquals(usWithExtension, phoneUtil.parse("+1 (645) 123 1234 ext. 910#", "US")); 15571524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 15581524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 15597900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia public void testParseAndKeepRaw() throws Exception { 156076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber alphaNumericNumber = new PhoneNumber(); 156176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia alphaNumericNumber. 1562df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia setCountryCode(1).setNationalNumber(80074935247L).setRawInput("800 six-flags"). 156376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia setCountryCodeSource(CountryCodeSource.FROM_DEFAULT_COUNTRY); 156476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(alphaNumericNumber, 1565df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia phoneUtil.parseAndKeepRawInput("800 six-flags", "US")); 15665c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 156776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia alphaNumericNumber. 156876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia setCountryCode(1).setNationalNumber(8007493524L).setRawInput("1800 six-flag"). 156976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia setCountryCodeSource(CountryCodeSource.FROM_NUMBER_WITHOUT_PLUS_SIGN); 157076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(alphaNumericNumber, 15715c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia phoneUtil.parseAndKeepRawInput("1800 six-flag", "US")); 15725c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 157376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia alphaNumericNumber. 157476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia setCountryCode(1).setNationalNumber(8007493524L).setRawInput("+1800 six-flag"). 157576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia setCountryCodeSource(CountryCodeSource.FROM_NUMBER_WITH_PLUS_SIGN); 157676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(alphaNumericNumber, 1577be1af2f8b62d5435eca48f3dd5c82e3d2c9bfa17Shaopeng Jia phoneUtil.parseAndKeepRawInput("+1800 six-flag", "NZ")); 15785c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 157976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia alphaNumericNumber. 158076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia setCountryCode(1).setNationalNumber(8007493524L).setRawInput("001800 six-flag"). 158176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia setCountryCodeSource(CountryCodeSource.FROM_NUMBER_WITH_IDD); 158276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(alphaNumericNumber, 15835c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia phoneUtil.parseAndKeepRawInput("001800 six-flag", "NZ")); 15844b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia 15854b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia // Invalid region code supplied. 15864b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia try { 15874b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia phoneUtil.parseAndKeepRawInput("123 456 7890", "CS"); 15884b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia fail("Deprecated country code not allowed: should fail."); 15894b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia } catch (NumberParseException e) { 15904b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia // Expected this exception. 15914b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertEquals("Wrong error type stored in exception.", 15924b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia NumberParseException.ErrorType.INVALID_COUNTRY_CODE, 15934b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia e.getErrorType()); 15944b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia } 15957900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia } 15967900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia 15971524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testCountryWithNoNumberDesc() { 15985c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // Andorra is a country where we don't have PhoneNumberDesc info in the metadata. 159976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber adNumber = new PhoneNumber(); 160076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia adNumber.setCountryCode(376).setNationalNumber(12345L); 1601256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+376 12345", phoneUtil.format(adNumber, PhoneNumberFormat.INTERNATIONAL)); 1602256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+37612345", phoneUtil.format(adNumber, PhoneNumberFormat.E164)); 1603256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("12345", phoneUtil.format(adNumber, PhoneNumberFormat.NATIONAL)); 1604f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.UNKNOWN, phoneUtil.getNumberType(adNumber)); 16051524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertTrue(phoneUtil.isValidNumber(adNumber)); 16061524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 16071524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Test dialing a US number from within Andorra. 160876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber usNumber = new PhoneNumber(); 160976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia usNumber.setCountryCode(1).setNationalNumber(6502530000L); 16101524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("00 1 650 253 0000", 16111524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(usNumber, "AD")); 16121524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 16131524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 16141524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testUnknownCountryCallingCodeForValidation() { 161576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber invalidNumber = new PhoneNumber(); 16161524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia invalidNumber.setCountryCode(0).setNationalNumber(1234L); 161776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertFalse(phoneUtil.isValidNumber(invalidNumber)); 16181524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 16191524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 16201524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsNumberMatchMatches() throws Exception { 16211524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Test simple matches where formatting is different, or leading zeroes, or country code has 16221524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // been specified. 16231524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.EXACT_MATCH, 16241524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("+64 3 331 6005", "+64 03 331 6005")); 16251524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.EXACT_MATCH, 16261524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("+64 03 331-6005", "+64 03331 6005")); 16271524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.EXACT_MATCH, 16281524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("+643 331-6005", "+64033316005")); 16291524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.EXACT_MATCH, 16301524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("+643 331-6005", "+6433316005")); 16311524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.EXACT_MATCH, 16321524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("+64 3 331-6005", "+6433316005")); 16331524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Test alpha numbers. 16341524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.EXACT_MATCH, 16351524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("+1800 siX-Flags", "+1 800 7493 5247")); 16361524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Test numbers with extensions. 16371524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.EXACT_MATCH, 16381524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("+64 3 331-6005 extn 1234", "+6433316005#1234")); 16391524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Test proto buffers. 164076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber nzNumber = new PhoneNumber(); 164176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia nzNumber.setCountryCode(64).setNationalNumber(33316005L).setExtension("3456"); 16421524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.EXACT_MATCH, 16431524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch(nzNumber, "+643 331 6005 ext 3456")); 164476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia nzNumber.clearExtension(); 16451524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.EXACT_MATCH, 164676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.isNumberMatch(nzNumber, "+6403 331 6005")); 16471524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Check empty extensions are ignored. 164876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia nzNumber.setExtension(""); 16491524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.EXACT_MATCH, 165076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.isNumberMatch(nzNumber, "+6403 331 6005")); 16511524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Check variant with two proto buffers. 165276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber nzNumberTwo = new PhoneNumber(); 165376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia nzNumberTwo.setCountryCode(64).setNationalNumber(33316005L); 165476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals("Number " + nzNumber.toString() + " did not match " + nzNumberTwo.toString(), 16551524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia PhoneNumberUtil.MatchType.EXACT_MATCH, 165676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.isNumberMatch(nzNumber, nzNumberTwo)); 16571524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 16581524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 16591524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsNumberMatchNonMatches() throws Exception { 16601524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Non-matches. 16611524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.NO_MATCH, 16621524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("03 331 6005", "03 331 6006")); 16631524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Different country code, partial number match. 16641524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.NO_MATCH, 16651524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("+64 3 331-6005", "+16433316005")); 16661524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Different country code, same number. 16671524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.NO_MATCH, 16681524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("+64 3 331-6005", "+6133316005")); 16691524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Extension different, all else the same. 16701524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.NO_MATCH, 16711524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("+64 3 331-6005 extn 1234", "0116433316005#1235")); 16721524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // NSN matches, but extension is different - not the same number. 16731524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.NO_MATCH, 16741524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("+64 3 331-6005 ext.1235", "3 331 6005#1234")); 16751524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 16761524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 16771524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsNumberMatchNsnMatches() throws Exception { 16781524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // NSN matches. 16791524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.NSN_MATCH, 16801524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("+64 3 331-6005", "03 331 6005")); 16811524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.NSN_MATCH, 16821524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("3 331-6005", "03 331 6005")); 168376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber nzNumber = new PhoneNumber(); 168476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia nzNumber.setCountryCode(64).setNationalNumber(33316005L).setExtension(""); 16851524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.NSN_MATCH, 16861524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch(nzNumber, "03 331 6005")); 168776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber unchangedNzNumber = new PhoneNumber(); 168876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia unchangedNzNumber.setCountryCode(64).setNationalNumber(33316005L).setExtension(""); 16891524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Check the phone number proto was not edited during the method call. 16901524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(unchangedNzNumber, nzNumber); 16911524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 16921524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 16931524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsNumberMatchShortNsnMatches() throws Exception { 16941524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Short NSN matches with the country not specified for either one or both numbers. 16951524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH, 16961524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("+64 3 331-6005", "331 6005")); 16971524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH, 16981524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("3 331-6005", "331 6005")); 16991524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH, 17001524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("3 331-6005", "+64 331 6005")); 17011524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Short NSN match with the country specified. 17021524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH, 17031524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("03 331-6005", "331 6005")); 17041524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH, 17051524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("1 234 345 6789", "345 6789")); 17061524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH, 17071524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("+1 (234) 345 6789", "345 6789")); 17081524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // NSN matches, country code omitted for one number, extension missing for one. 17091524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH, 17101524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("+64 3 331-6005", "3 331 6005#1234")); 17111524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // One has Italian leading zero, one does not. 171276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber italianNumberOne = new PhoneNumber(); 171376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia italianNumberOne.setCountryCode(39).setNationalNumber(1234L).setItalianLeadingZero(true); 171476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber italianNumberTwo = new PhoneNumber(); 171576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia italianNumberTwo.setCountryCode(39).setNationalNumber(1234L); 17161524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH, 171776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.isNumberMatch(italianNumberOne, italianNumberTwo)); 17181524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // One has an extension, the other has an extension of "". 171976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia italianNumberOne.setExtension("1234").clearItalianLeadingZero(); 172076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia italianNumberTwo.setExtension(""); 17211524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH, 172276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.isNumberMatch(italianNumberOne, italianNumberTwo)); 17231524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 17241524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia} 1725