11524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia/* 2ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia * Copyright (C) 2009 The Libphonenumber Authors 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 1793f6965c2c041ac707bf1b3bcf5a3f60e452f421Shaopeng Jiapackage com.android.i18n.phonenumbers; 181524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 1993f6965c2c041ac707bf1b3bcf5a3f60e452f421Shaopeng Jiaimport com.android.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberFormat; 2093f6965c2c041ac707bf1b3bcf5a3f60e452f421Shaopeng Jiaimport com.android.i18n.phonenumbers.Phonemetadata.NumberFormat; 2193f6965c2c041ac707bf1b3bcf5a3f60e452f421Shaopeng Jiaimport com.android.i18n.phonenumbers.Phonemetadata.PhoneMetadata; 2293f6965c2c041ac707bf1b3bcf5a3f60e452f421Shaopeng Jiaimport com.android.i18n.phonenumbers.Phonemetadata.PhoneNumberDesc; 2393f6965c2c041ac707bf1b3bcf5a3f60e452f421Shaopeng Jiaimport com.android.i18n.phonenumbers.Phonenumber.PhoneNumber; 2493f6965c2c041ac707bf1b3bcf5a3f60e452f421Shaopeng Jiaimport com.android.i18n.phonenumbers.Phonenumber.PhoneNumber.CountryCodeSource; 25f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia 261524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jiaimport java.util.ArrayList; 271524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jiaimport java.util.List; 281524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 291524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia/** 301524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia * Unit tests for PhoneNumberUtil.java 311524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia * 32b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia * Note that these tests use the test metadata, not the normal metadata file, so should not be used 33b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia * for regression test purposes - these tests are illustrative only and test functionality. 341524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia * 351524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia * @author Shaopeng Jia 361524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia * @author Lara Rennie 371524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia */ 38b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jiapublic class PhoneNumberUtilTest extends TestMetadataTestCase { 3952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia // Set up some test numbers to re-use. 4052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia private static final PhoneNumber ALPHA_NUMERIC_NUMBER = 4152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia new PhoneNumber().setCountryCode(1).setNationalNumber(80074935247L); 4252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia private static final PhoneNumber AR_MOBILE = 4352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia new PhoneNumber().setCountryCode(54).setNationalNumber(91187654321L); 4452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia private static final PhoneNumber AR_NUMBER = 4552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia new PhoneNumber().setCountryCode(54).setNationalNumber(1187654321); 4652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia private static final PhoneNumber AU_NUMBER = 4752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia new PhoneNumber().setCountryCode(61).setNationalNumber(236618300L); 4852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia private static final PhoneNumber BS_MOBILE = 4952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia new PhoneNumber().setCountryCode(1).setNationalNumber(2423570000L); 5052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia private static final PhoneNumber BS_NUMBER = 5152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia new PhoneNumber().setCountryCode(1).setNationalNumber(2423651234L); 5252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia // Note that this is the same as the example number for DE in the metadata. 5352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia private static final PhoneNumber DE_NUMBER = 5452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia new PhoneNumber().setCountryCode(49).setNationalNumber(30123456L); 5552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia private static final PhoneNumber DE_SHORT_NUMBER = 5652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia new PhoneNumber().setCountryCode(49).setNationalNumber(1234L); 5752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia private static final PhoneNumber GB_MOBILE = 5852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia new PhoneNumber().setCountryCode(44).setNationalNumber(7912345678L); 5952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia private static final PhoneNumber GB_NUMBER = 6052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia new PhoneNumber().setCountryCode(44).setNationalNumber(2070313000L); 6152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia private static final PhoneNumber IT_MOBILE = 6252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia new PhoneNumber().setCountryCode(39).setNationalNumber(345678901L); 6352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia private static final PhoneNumber IT_NUMBER = 6452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia new PhoneNumber().setCountryCode(39).setNationalNumber(236618300L). 6552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia setItalianLeadingZero(true); 6696a7214cdabf08f53f5b1a560304601c9f65e0b9Shaopeng Jia private static final PhoneNumber JP_STAR_NUMBER = 6796a7214cdabf08f53f5b1a560304601c9f65e0b9Shaopeng Jia new PhoneNumber().setCountryCode(81).setNationalNumber(2345); 68372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // Numbers to test the formatting rules from Mexico. 69372bff8dd464574d36737d47e495cad14346653cShaopeng Jia private static final PhoneNumber MX_MOBILE1 = 70372bff8dd464574d36737d47e495cad14346653cShaopeng Jia new PhoneNumber().setCountryCode(52).setNationalNumber(12345678900L); 71372bff8dd464574d36737d47e495cad14346653cShaopeng Jia private static final PhoneNumber MX_MOBILE2 = 72372bff8dd464574d36737d47e495cad14346653cShaopeng Jia new PhoneNumber().setCountryCode(52).setNationalNumber(15512345678L); 73372bff8dd464574d36737d47e495cad14346653cShaopeng Jia private static final PhoneNumber MX_NUMBER1 = 74372bff8dd464574d36737d47e495cad14346653cShaopeng Jia new PhoneNumber().setCountryCode(52).setNationalNumber(3312345678L); 75372bff8dd464574d36737d47e495cad14346653cShaopeng Jia private static final PhoneNumber MX_NUMBER2 = 76372bff8dd464574d36737d47e495cad14346653cShaopeng Jia new PhoneNumber().setCountryCode(52).setNationalNumber(8211234567L); 7752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia private static final PhoneNumber NZ_NUMBER = 7852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia new PhoneNumber().setCountryCode(64).setNationalNumber(33316005L); 7952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia private static final PhoneNumber SG_NUMBER = 8052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia new PhoneNumber().setCountryCode(65).setNationalNumber(65218000L); 8152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia // A too-long and hence invalid US number. 8252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia private static final PhoneNumber US_LONG_NUMBER = 8352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia new PhoneNumber().setCountryCode(1).setNationalNumber(65025300001L); 8452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia private static final PhoneNumber US_NUMBER = 8552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia new PhoneNumber().setCountryCode(1).setNationalNumber(6502530000L); 8652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia private static final PhoneNumber US_PREMIUM = 8752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia new PhoneNumber().setCountryCode(1).setNationalNumber(9002530000L); 8852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia // Too short, but still possible US numbers. 8952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia private static final PhoneNumber US_LOCAL_NUMBER = 9052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia new PhoneNumber().setCountryCode(1).setNationalNumber(2530000L); 9152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia private static final PhoneNumber US_SHORT_BY_ONE_NUMBER = 9252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia new PhoneNumber().setCountryCode(1).setNationalNumber(650253000L); 9352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia private static final PhoneNumber US_TOLLFREE = 9452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia new PhoneNumber().setCountryCode(1).setNationalNumber(8002530000L); 95082e1e80b0bcb2911de5d26981b592f2c2b9d3f6Shaopeng Jia private static final PhoneNumber US_SPOOF = 96082e1e80b0bcb2911de5d26981b592f2c2b9d3f6Shaopeng Jia new PhoneNumber().setCountryCode(1).setNationalNumber(0L); 97082e1e80b0bcb2911de5d26981b592f2c2b9d3f6Shaopeng Jia private static final PhoneNumber US_SPOOF_WITH_RAW_INPUT = 98082e1e80b0bcb2911de5d26981b592f2c2b9d3f6Shaopeng Jia new PhoneNumber().setCountryCode(1).setNationalNumber(0L) 99082e1e80b0bcb2911de5d26981b592f2c2b9d3f6Shaopeng Jia .setRawInput("000-000-0000"); 100528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia private static final PhoneNumber INTERNATIONAL_TOLL_FREE = 101528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia new PhoneNumber().setCountryCode(800).setNationalNumber(12345678L); 102bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia // We set this to be the same length as numbers for the other non-geographical country prefix that 103bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia // we have in our test metadata. However, this is not considered valid because they differ in 104bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia // their country calling code. 105528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia private static final PhoneNumber INTERNATIONAL_TOLL_FREE_TOO_LONG = 106bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia new PhoneNumber().setCountryCode(800).setNationalNumber(123456789L); 107bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia private static final PhoneNumber UNIVERSAL_PREMIUM_RATE = 108bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia new PhoneNumber().setCountryCode(979).setNationalNumber(123456789L); 10952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia 110372bff8dd464574d36737d47e495cad14346653cShaopeng Jia public void testGetSupportedRegions() { 111372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertTrue(phoneUtil.getSupportedRegions().size() > 0); 112372bff8dd464574d36737d47e495cad14346653cShaopeng Jia } 113372bff8dd464574d36737d47e495cad14346653cShaopeng Jia 114f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia public void testGetInstanceLoadUSMetadata() { 11552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneMetadata metadata = phoneUtil.getMetadataForRegion(RegionCode.US); 116528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("US", metadata.getId()); 1171524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(1, metadata.getCountryCode()); 1181524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("011", metadata.getInternationalPrefix()); 119df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertTrue(metadata.hasNationalPrefix()); 120372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals(2, metadata.numberFormatSize()); 1211524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("(\\d{3})(\\d{3})(\\d{4})", 122d1db4c508088ac27cb0815a222cf2600f16ad5b9Shaopeng Jia metadata.getNumberFormat(1).getPattern()); 123d1db4c508088ac27cb0815a222cf2600f16ad5b9Shaopeng Jia assertEquals("$1 $2 $3", metadata.getNumberFormat(1).getFormat()); 124f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia assertEquals("[13-689]\\d{9}|2[0-35-9]\\d{8}", 1251524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia metadata.getGeneralDesc().getNationalNumberPattern()); 126372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("\\d{7}(?:\\d{3})?", metadata.getGeneralDesc().getPossibleNumberPattern()); 1275724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia assertTrue(metadata.getGeneralDesc().exactlySameAs(metadata.getFixedLine())); 1281524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("\\d{10}", metadata.getTollFree().getPossibleNumberPattern()); 1291524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("900\\d{7}", metadata.getPremiumRate().getNationalNumberPattern()); 1301524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // No shared-cost data is available, so it should be initialised to "NA". 1311524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("NA", metadata.getSharedCost().getNationalNumberPattern()); 1321524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("NA", metadata.getSharedCost().getPossibleNumberPattern()); 1331524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 1341524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 1351524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testGetInstanceLoadDEMetadata() { 13652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneMetadata metadata = phoneUtil.getMetadataForRegion(RegionCode.DE); 137528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("DE", metadata.getId()); 1381524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(49, metadata.getCountryCode()); 1391524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("00", metadata.getInternationalPrefix()); 1401524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("0", metadata.getNationalPrefix()); 141372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals(6, metadata.numberFormatSize()); 142372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals(1, metadata.getNumberFormat(5).leadingDigitsPatternSize()); 14352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("900", metadata.getNumberFormat(5).getLeadingDigitsPattern(0)); 144df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertEquals("(\\d{3})(\\d{3,4})(\\d{4})", 14552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia metadata.getNumberFormat(5).getPattern()); 14652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("$1 $2 $3", metadata.getNumberFormat(5).getFormat()); 147f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia assertEquals("(?:[24-6]\\d{2}|3[03-9]\\d|[789](?:[1-9]\\d|0[2-9]))\\d{1,8}", 1481524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia metadata.getFixedLine().getNationalNumberPattern()); 1491524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("\\d{2,14}", metadata.getFixedLine().getPossibleNumberPattern()); 1501524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("30123456", metadata.getFixedLine().getExampleNumber()); 1511524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("\\d{10}", metadata.getTollFree().getPossibleNumberPattern()); 1521524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("900([135]\\d{6}|9\\d{7})", metadata.getPremiumRate().getNationalNumberPattern()); 1531524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 1541524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 1551524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testGetInstanceLoadARMetadata() { 15652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneMetadata metadata = phoneUtil.getMetadataForRegion(RegionCode.AR); 157528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("AR", metadata.getId()); 1581524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(54, metadata.getCountryCode()); 1591524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("00", metadata.getInternationalPrefix()); 1601524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("0", metadata.getNationalPrefix()); 1611524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("0(?:(11|343|3715)15)?", metadata.getNationalPrefixForParsing()); 1621524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("9$1", metadata.getNationalPrefixTransformRule()); 163372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("$2 15 $3-$4", metadata.getNumberFormat(2).getFormat()); 164372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("(9)(\\d{4})(\\d{2})(\\d{4})", 1651524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia metadata.getNumberFormat(3).getPattern()); 1661524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("(9)(\\d{4})(\\d{2})(\\d{4})", 1671524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia metadata.getIntlNumberFormat(3).getPattern()); 1681524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("$1 $2 $3 $4", metadata.getIntlNumberFormat(3).getFormat()); 1691524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 1701524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 171528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia public void testGetInstanceLoadInternationalTollFreeMetadata() { 172528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia PhoneMetadata metadata = phoneUtil.getMetadataForNonGeographicalRegion(800); 173528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("001", metadata.getId()); 174528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals(800, metadata.getCountryCode()); 175528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("$1 $2", metadata.getNumberFormat(0).getFormat()); 176528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("(\\d{4})(\\d{4})", metadata.getNumberFormat(0).getPattern()); 177528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("12345678", metadata.getGeneralDesc().getExampleNumber()); 178528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("12345678", metadata.getTollFree().getExampleNumber()); 179528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia } 180528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia 181372bff8dd464574d36737d47e495cad14346653cShaopeng Jia public void testIsLeadingZeroPossible() { 182372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertTrue(phoneUtil.isLeadingZeroPossible(39)); // Italy 183372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertFalse(phoneUtil.isLeadingZeroPossible(1)); // USA 184528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertFalse(phoneUtil.isLeadingZeroPossible(800)); // International toll free numbers 185528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertFalse(phoneUtil.isLeadingZeroPossible(888)); // Not in metadata file, just default to 186372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // false. 187372bff8dd464574d36737d47e495cad14346653cShaopeng Jia } 188372bff8dd464574d36737d47e495cad14346653cShaopeng Jia 1895c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia public void testGetLengthOfGeographicalAreaCode() { 1905c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // Google MTV, which has area code "650". 19152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(3, phoneUtil.getLengthOfGeographicalAreaCode(US_NUMBER)); 1925c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 1935c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // A North America toll-free number, which has no area code. 19452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(0, phoneUtil.getLengthOfGeographicalAreaCode(US_TOLLFREE)); 1955c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 1965c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // Google London, which has area code "20". 19752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(2, phoneUtil.getLengthOfGeographicalAreaCode(GB_NUMBER)); 1985c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 1995c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // A UK mobile phone, which has no area code. 20052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(0, phoneUtil.getLengthOfGeographicalAreaCode(GB_MOBILE)); 2015c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 2025c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // Google Buenos Aires, which has area code "11". 20352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(2, phoneUtil.getLengthOfGeographicalAreaCode(AR_NUMBER)); 2045c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 2055c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // Google Sydney, which has area code "2". 20652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(1, phoneUtil.getLengthOfGeographicalAreaCode(AU_NUMBER)); 2075c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 208b210e301245cb5dc90aa3142f378632bd41cb172Shaopeng Jia // Italian numbers - there is no national prefix, but it still has an area code. 209b210e301245cb5dc90aa3142f378632bd41cb172Shaopeng Jia assertEquals(2, phoneUtil.getLengthOfGeographicalAreaCode(IT_NUMBER)); 210b210e301245cb5dc90aa3142f378632bd41cb172Shaopeng Jia 2115c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // Google Singapore. Singapore has no area code and no national prefix. 21252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(0, phoneUtil.getLengthOfGeographicalAreaCode(SG_NUMBER)); 21352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia 21452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia // An invalid US number (1 digit shorter), which has no area code. 21552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(0, phoneUtil.getLengthOfGeographicalAreaCode(US_SHORT_BY_ONE_NUMBER)); 216528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia 217528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia // An international toll free number, which has no area code. 218528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals(0, phoneUtil.getLengthOfGeographicalAreaCode(INTERNATIONAL_TOLL_FREE)); 2195c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia } 2205c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 22174aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia public void testGetLengthOfNationalDestinationCode() { 22274aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia // Google MTV, which has national destination code (NDC) "650". 22352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(3, phoneUtil.getLengthOfNationalDestinationCode(US_NUMBER)); 22474aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia 22574aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia // A North America toll-free number, which has NDC "800". 22652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(3, phoneUtil.getLengthOfNationalDestinationCode(US_TOLLFREE)); 22774aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia 22874aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia // Google London, which has NDC "20". 22952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(2, phoneUtil.getLengthOfNationalDestinationCode(GB_NUMBER)); 23074aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia 23152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia // A UK mobile phone, which has NDC "7912". 23252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(4, phoneUtil.getLengthOfNationalDestinationCode(GB_MOBILE)); 23374aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia 23474aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia // Google Buenos Aires, which has NDC "11". 23552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(2, phoneUtil.getLengthOfNationalDestinationCode(AR_NUMBER)); 23674aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia 23774aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia // An Argentinian mobile which has NDC "911". 23852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(3, phoneUtil.getLengthOfNationalDestinationCode(AR_MOBILE)); 23974aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia 24074aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia // Google Sydney, which has NDC "2". 24152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(1, phoneUtil.getLengthOfNationalDestinationCode(AU_NUMBER)); 24274aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia 24374aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia // Google Singapore, which has NDC "6521". 24452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(4, phoneUtil.getLengthOfNationalDestinationCode(SG_NUMBER)); 24574aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia 24674aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia // An invalid US number (1 digit shorter), which has no NDC. 24752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(0, phoneUtil.getLengthOfNationalDestinationCode(US_SHORT_BY_ONE_NUMBER)); 24874aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia 249372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // A number containing an invalid country calling code, which shouldn't have any NDC. 25052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber number = new PhoneNumber().setCountryCode(123).setNationalNumber(6502530000L); 25174aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia assertEquals(0, phoneUtil.getLengthOfNationalDestinationCode(number)); 252528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia 253528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia // An international toll free number, which has NDC "1234". 254528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals(4, phoneUtil.getLengthOfNationalDestinationCode(INTERNATIONAL_TOLL_FREE)); 25574aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia } 25674aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia 2575c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia public void testGetNationalSignificantNumber() { 258372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("6502530000", phoneUtil.getNationalSignificantNumber(US_NUMBER)); 2595c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 2605c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // An Italian mobile number. 261372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("345678901", phoneUtil.getNationalSignificantNumber(IT_MOBILE)); 2625c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 2635c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // An Italian fixed line number. 264372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("0236618300", phoneUtil.getNationalSignificantNumber(IT_NUMBER)); 265528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia 266528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("12345678", phoneUtil.getNationalSignificantNumber(INTERNATIONAL_TOLL_FREE)); 2675c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia } 2685c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 269f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia public void testGetExampleNumber() { 27052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(DE_NUMBER, phoneUtil.getExampleNumber(RegionCode.DE)); 2711524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 27252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(DE_NUMBER, 27352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.getExampleNumberForType(RegionCode.DE, 2741524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia PhoneNumberUtil.PhoneNumberType.FIXED_LINE)); 2751524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(null, 27652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.getExampleNumberForType(RegionCode.DE, 2771524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia PhoneNumberUtil.PhoneNumberType.MOBILE)); 2781524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // For the US, the example number is placed under general description, and hence should be used 2791524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // for both fixed line and mobile, so neither of these should return null. 28052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertNotNull(phoneUtil.getExampleNumberForType(RegionCode.US, 2811524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia PhoneNumberUtil.PhoneNumberType.FIXED_LINE)); 28252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertNotNull(phoneUtil.getExampleNumberForType(RegionCode.US, 2831524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia PhoneNumberUtil.PhoneNumberType.MOBILE)); 284372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // CS is an invalid region, so we have no data for it. 285372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertNull(phoneUtil.getExampleNumberForType(RegionCode.CS, 286372bff8dd464574d36737d47e495cad14346653cShaopeng Jia PhoneNumberUtil.PhoneNumberType.MOBILE)); 287528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia // RegionCode 001 is reserved for supporting non-geographical country calling code. We don't 288528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia // support getting an example number for it with this method. 289528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals(null, phoneUtil.getExampleNumber(RegionCode.UN001)); 290528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia } 291528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia 292528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia public void testGetExampleNumberForNonGeoEntity() { 293528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals(INTERNATIONAL_TOLL_FREE, phoneUtil.getExampleNumberForNonGeoEntity(800)); 294bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia assertEquals(UNIVERSAL_PREMIUM_RATE, phoneUtil.getExampleNumberForNonGeoEntity(979)); 2951524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 2961524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 297d1db4c508088ac27cb0815a222cf2600f16ad5b9Shaopeng Jia public void testConvertAlphaCharactersInNumber() { 298d1db4c508088ac27cb0815a222cf2600f16ad5b9Shaopeng Jia String input = "1800-ABC-DEF"; 299d1db4c508088ac27cb0815a222cf2600f16ad5b9Shaopeng Jia // Alpha chars are converted to digits; everything else is left untouched. 300d1db4c508088ac27cb0815a222cf2600f16ad5b9Shaopeng Jia String expectedOutput = "1800-222-333"; 301d1db4c508088ac27cb0815a222cf2600f16ad5b9Shaopeng Jia assertEquals(expectedOutput, PhoneNumberUtil.convertAlphaCharactersInNumber(input)); 302d1db4c508088ac27cb0815a222cf2600f16ad5b9Shaopeng Jia } 303d1db4c508088ac27cb0815a222cf2600f16ad5b9Shaopeng Jia 3041524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testNormaliseRemovePunctuation() { 305bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia String inputNumber = "034-56&+#2\u00AD34"; 3061524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String expectedOutput = "03456234"; 3071524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Conversion did not correctly remove punctuation", 3081524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia expectedOutput, 3091524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia PhoneNumberUtil.normalize(inputNumber)); 3101524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 3111524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 3121524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testNormaliseReplaceAlphaCharacters() { 3131524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String inputNumber = "034-I-am-HUNGRY"; 3141524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String expectedOutput = "034426486479"; 3151524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Conversion did not correctly replace alpha characters", 3161524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia expectedOutput, 3171524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia PhoneNumberUtil.normalize(inputNumber)); 3181524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 3191524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 3201524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testNormaliseOtherDigits() { 3211524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String inputNumber = "\uFF125\u0665"; 3221524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String expectedOutput = "255"; 3231524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Conversion did not correctly replace non-latin digits", 3241524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia expectedOutput, 3251524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia PhoneNumberUtil.normalize(inputNumber)); 32674aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia // Eastern-Arabic digits. 32774aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia inputNumber = "\u06F52\u06F0"; 32874aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia expectedOutput = "520"; 32974aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia assertEquals("Conversion did not correctly replace non-latin digits", 33074aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia expectedOutput, 33174aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia PhoneNumberUtil.normalize(inputNumber)); 3321524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 3331524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 3341524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testNormaliseStripAlphaCharacters() { 3351524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String inputNumber = "034-56&+a#234"; 3361524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String expectedOutput = "03456234"; 3371524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Conversion did not correctly remove alpha character", 3381524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia expectedOutput, 3391524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia PhoneNumberUtil.normalizeDigitsOnly(inputNumber)); 3401524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 3411524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 3421524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testFormatUSNumber() { 34352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("650 253 0000", phoneUtil.format(US_NUMBER, PhoneNumberFormat.NATIONAL)); 34452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("+1 650 253 0000", phoneUtil.format(US_NUMBER, PhoneNumberFormat.INTERNATIONAL)); 3451524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 34652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("800 253 0000", phoneUtil.format(US_TOLLFREE, PhoneNumberFormat.NATIONAL)); 34752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("+1 800 253 0000", phoneUtil.format(US_TOLLFREE, PhoneNumberFormat.INTERNATIONAL)); 3481524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 34952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("900 253 0000", phoneUtil.format(US_PREMIUM, PhoneNumberFormat.NATIONAL)); 35052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("+1 900 253 0000", phoneUtil.format(US_PREMIUM, PhoneNumberFormat.INTERNATIONAL)); 351b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia assertEquals("tel:+1-900-253-0000", phoneUtil.format(US_PREMIUM, PhoneNumberFormat.RFC3966)); 352082e1e80b0bcb2911de5d26981b592f2c2b9d3f6Shaopeng Jia // Numbers with all zeros in the national number part will be formatted by using the raw_input 353082e1e80b0bcb2911de5d26981b592f2c2b9d3f6Shaopeng Jia // if that is available no matter which format is specified. 354082e1e80b0bcb2911de5d26981b592f2c2b9d3f6Shaopeng Jia assertEquals("000-000-0000", 355082e1e80b0bcb2911de5d26981b592f2c2b9d3f6Shaopeng Jia phoneUtil.format(US_SPOOF_WITH_RAW_INPUT, PhoneNumberFormat.NATIONAL)); 356082e1e80b0bcb2911de5d26981b592f2c2b9d3f6Shaopeng Jia assertEquals("0", phoneUtil.format(US_SPOOF, PhoneNumberFormat.NATIONAL)); 3571524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 3581524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 3591524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testFormatBSNumber() { 36052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("242 365 1234", phoneUtil.format(BS_NUMBER, PhoneNumberFormat.NATIONAL)); 36152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("+1 242 365 1234", phoneUtil.format(BS_NUMBER, PhoneNumberFormat.INTERNATIONAL)); 3621524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 3631524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 3641524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testFormatGBNumber() { 36552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("(020) 7031 3000", phoneUtil.format(GB_NUMBER, PhoneNumberFormat.NATIONAL)); 36652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("+44 20 7031 3000", phoneUtil.format(GB_NUMBER, PhoneNumberFormat.INTERNATIONAL)); 3671524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 36852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("(07912) 345 678", phoneUtil.format(GB_MOBILE, PhoneNumberFormat.NATIONAL)); 36952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("+44 7912 345 678", phoneUtil.format(GB_MOBILE, PhoneNumberFormat.INTERNATIONAL)); 3701524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 3711524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 3721524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testFormatDENumber() { 37376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber deNumber = new PhoneNumber(); 37476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia deNumber.setCountryCode(49).setNationalNumber(301234L); 375372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("030/1234", phoneUtil.format(deNumber, PhoneNumberFormat.NATIONAL)); 376372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("+49 30/1234", phoneUtil.format(deNumber, PhoneNumberFormat.INTERNATIONAL)); 377b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia assertEquals("tel:+49-30-1234", phoneUtil.format(deNumber, PhoneNumberFormat.RFC3966)); 3781524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 37976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia deNumber.clear(); 38076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia deNumber.setCountryCode(49).setNationalNumber(291123L); 381256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("0291 123", phoneUtil.format(deNumber, PhoneNumberFormat.NATIONAL)); 382256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+49 291 123", phoneUtil.format(deNumber, PhoneNumberFormat.INTERNATIONAL)); 3831524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 38476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia deNumber.clear(); 38576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia deNumber.setCountryCode(49).setNationalNumber(29112345678L); 386256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("0291 12345678", phoneUtil.format(deNumber, PhoneNumberFormat.NATIONAL)); 387256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+49 291 12345678", phoneUtil.format(deNumber, PhoneNumberFormat.INTERNATIONAL)); 3881524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 38976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia deNumber.clear(); 39052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia deNumber.setCountryCode(49).setNationalNumber(912312345L); 39152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("09123 12345", phoneUtil.format(deNumber, PhoneNumberFormat.NATIONAL)); 39252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("+49 9123 12345", phoneUtil.format(deNumber, PhoneNumberFormat.INTERNATIONAL)); 39376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia deNumber.clear(); 394df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia deNumber.setCountryCode(49).setNationalNumber(80212345L); 395256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("08021 2345", phoneUtil.format(deNumber, PhoneNumberFormat.NATIONAL)); 396256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+49 8021 2345", phoneUtil.format(deNumber, PhoneNumberFormat.INTERNATIONAL)); 3971524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Note this number is correctly formatted without national prefix. Most of the numbers that 3981524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // are treated as invalid numbers by the library are short numbers, and they are usually not 3991524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // dialed with national prefix. 40052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("1234", phoneUtil.format(DE_SHORT_NUMBER, PhoneNumberFormat.NATIONAL)); 40152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("+49 1234", phoneUtil.format(DE_SHORT_NUMBER, PhoneNumberFormat.INTERNATIONAL)); 40252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia 403372bff8dd464574d36737d47e495cad14346653cShaopeng Jia deNumber.clear(); 40452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia deNumber.setCountryCode(49).setNationalNumber(41341234); 40552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("04134 1234", phoneUtil.format(deNumber, PhoneNumberFormat.NATIONAL)); 4061524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 4071524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 4081524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testFormatITNumber() { 40952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("02 3661 8300", phoneUtil.format(IT_NUMBER, PhoneNumberFormat.NATIONAL)); 41052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("+39 02 3661 8300", phoneUtil.format(IT_NUMBER, PhoneNumberFormat.INTERNATIONAL)); 41152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("+390236618300", phoneUtil.format(IT_NUMBER, PhoneNumberFormat.E164)); 4121524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 41352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("345 678 901", phoneUtil.format(IT_MOBILE, PhoneNumberFormat.NATIONAL)); 41452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("+39 345 678 901", phoneUtil.format(IT_MOBILE, PhoneNumberFormat.INTERNATIONAL)); 41552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("+39345678901", phoneUtil.format(IT_MOBILE, PhoneNumberFormat.E164)); 416f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia } 4171524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 4181524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testFormatAUNumber() { 41952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("02 3661 8300", phoneUtil.format(AU_NUMBER, PhoneNumberFormat.NATIONAL)); 42052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("+61 2 3661 8300", phoneUtil.format(AU_NUMBER, PhoneNumberFormat.INTERNATIONAL)); 42152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("+61236618300", phoneUtil.format(AU_NUMBER, PhoneNumberFormat.E164)); 42252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia 42352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber auNumber = new PhoneNumber().setCountryCode(61).setNationalNumber(1800123456L); 424256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("1800 123 456", phoneUtil.format(auNumber, PhoneNumberFormat.NATIONAL)); 425256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+61 1800 123 456", phoneUtil.format(auNumber, PhoneNumberFormat.INTERNATIONAL)); 426256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+611800123456", phoneUtil.format(auNumber, PhoneNumberFormat.E164)); 4271524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 4281524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 4291524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testFormatARNumber() { 43052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("011 8765-4321", phoneUtil.format(AR_NUMBER, PhoneNumberFormat.NATIONAL)); 43152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("+54 11 8765-4321", phoneUtil.format(AR_NUMBER, PhoneNumberFormat.INTERNATIONAL)); 43252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("+541187654321", phoneUtil.format(AR_NUMBER, PhoneNumberFormat.E164)); 4331524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 43452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("011 15 8765-4321", phoneUtil.format(AR_MOBILE, PhoneNumberFormat.NATIONAL)); 43552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("+54 9 11 8765 4321", phoneUtil.format(AR_MOBILE, 43652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumberFormat.INTERNATIONAL)); 43752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("+5491187654321", phoneUtil.format(AR_MOBILE, PhoneNumberFormat.E164)); 4381524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 4391524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 440372bff8dd464574d36737d47e495cad14346653cShaopeng Jia public void testFormatMXNumber() { 441372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("045 234 567 8900", phoneUtil.format(MX_MOBILE1, PhoneNumberFormat.NATIONAL)); 442372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("+52 1 234 567 8900", phoneUtil.format( 443372bff8dd464574d36737d47e495cad14346653cShaopeng Jia MX_MOBILE1, PhoneNumberFormat.INTERNATIONAL)); 444372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("+5212345678900", phoneUtil.format(MX_MOBILE1, PhoneNumberFormat.E164)); 445372bff8dd464574d36737d47e495cad14346653cShaopeng Jia 446372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("045 55 1234 5678", phoneUtil.format(MX_MOBILE2, PhoneNumberFormat.NATIONAL)); 447372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("+52 1 55 1234 5678", phoneUtil.format( 448372bff8dd464574d36737d47e495cad14346653cShaopeng Jia MX_MOBILE2, PhoneNumberFormat.INTERNATIONAL)); 449372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("+5215512345678", phoneUtil.format(MX_MOBILE2, PhoneNumberFormat.E164)); 450372bff8dd464574d36737d47e495cad14346653cShaopeng Jia 451372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("01 33 1234 5678", phoneUtil.format(MX_NUMBER1, PhoneNumberFormat.NATIONAL)); 452372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("+52 33 1234 5678", phoneUtil.format(MX_NUMBER1, PhoneNumberFormat.INTERNATIONAL)); 453372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("+523312345678", phoneUtil.format(MX_NUMBER1, PhoneNumberFormat.E164)); 454372bff8dd464574d36737d47e495cad14346653cShaopeng Jia 455372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("01 821 123 4567", phoneUtil.format(MX_NUMBER2, PhoneNumberFormat.NATIONAL)); 456372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("+52 821 123 4567", phoneUtil.format(MX_NUMBER2, PhoneNumberFormat.INTERNATIONAL)); 457372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("+528211234567", phoneUtil.format(MX_NUMBER2, PhoneNumberFormat.E164)); 458372bff8dd464574d36737d47e495cad14346653cShaopeng Jia } 459372bff8dd464574d36737d47e495cad14346653cShaopeng Jia 4601524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testFormatOutOfCountryCallingNumber() { 4611524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("00 1 900 253 0000", 46252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(US_PREMIUM, RegionCode.DE)); 4631524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 4641524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("1 650 253 0000", 46552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(US_NUMBER, RegionCode.BS)); 4661524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 467ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia assertEquals("00 1 650 253 0000", 46852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(US_NUMBER, RegionCode.PL)); 4691524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 4701524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("011 44 7912 345 678", 47152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(GB_MOBILE, RegionCode.US)); 4721524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 4731524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("00 49 1234", 47452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(DE_SHORT_NUMBER, RegionCode.GB)); 4751524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Note this number is correctly formatted without national prefix. Most of the numbers that 4761524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // are treated as invalid numbers by the library are short numbers, and they are usually not 4771524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // dialed with national prefix. 47852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("1234", phoneUtil.formatOutOfCountryCallingNumber(DE_SHORT_NUMBER, RegionCode.DE)); 4791524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 4801524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("011 39 02 3661 8300", 48152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(IT_NUMBER, RegionCode.US)); 4821524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("02 3661 8300", 48352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(IT_NUMBER, RegionCode.IT)); 4841524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("+39 02 3661 8300", 48552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(IT_NUMBER, RegionCode.SG)); 4861524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 48752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("6521 8000", 48852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(SG_NUMBER, RegionCode.SG)); 4891524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 4901524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("011 54 9 11 8765 4321", 49152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(AR_MOBILE, RegionCode.US)); 492528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("011 800 1234 5678", 493528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(INTERNATIONAL_TOLL_FREE, RegionCode.US)); 4941524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 49552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber arNumberWithExtn = new PhoneNumber().mergeFrom(AR_MOBILE).setExtension("1234"); 4961524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("011 54 9 11 8765 4321 ext. 1234", 49752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(arNumberWithExtn, RegionCode.US)); 4981524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("0011 54 9 11 8765 4321 ext. 1234", 49952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(arNumberWithExtn, RegionCode.AU)); 5001524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("011 15 8765-4321 ext. 1234", 50152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(arNumberWithExtn, RegionCode.AR)); 5021524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 5031524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 504a48b2d221ba46df7446d1a87244efa985e8e292fShaopeng Jia public void testFormatOutOfCountryWithInvalidRegion() { 505a48b2d221ba46df7446d1a87244efa985e8e292fShaopeng Jia // AQ/Antarctica isn't a valid region code for phone number formatting, 506a48b2d221ba46df7446d1a87244efa985e8e292fShaopeng Jia // so this falls back to intl formatting. 507a48b2d221ba46df7446d1a87244efa985e8e292fShaopeng Jia assertEquals("+1 650 253 0000", 508528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(US_NUMBER, RegionCode.AQ)); 509528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia // For region code 001, the out-of-country format always turns into the international format. 510528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("+1 650 253 0000", 511528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(US_NUMBER, RegionCode.UN001)); 512a48b2d221ba46df7446d1a87244efa985e8e292fShaopeng Jia } 513a48b2d221ba46df7446d1a87244efa985e8e292fShaopeng Jia 5141524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testFormatOutOfCountryWithPreferredIntlPrefix() { 5151524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // This should use 0011, since that is the preferred international prefix (both 0011 and 0012 5161524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // are accepted as possible international prefixes in our test metadta.) 5171524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("0011 39 02 3661 8300", 51852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(IT_NUMBER, RegionCode.AU)); 5191524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 5201524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 521372bff8dd464574d36737d47e495cad14346653cShaopeng Jia public void testFormatOutOfCountryKeepingAlphaChars() { 522372bff8dd464574d36737d47e495cad14346653cShaopeng Jia PhoneNumber alphaNumericNumber = new PhoneNumber(); 523372bff8dd464574d36737d47e495cad14346653cShaopeng Jia alphaNumericNumber.setCountryCode(1).setNationalNumber(8007493524L) 524372bff8dd464574d36737d47e495cad14346653cShaopeng Jia .setRawInput("1800 six-flag"); 525372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("0011 1 800 SIX-FLAG", 526372bff8dd464574d36737d47e495cad14346653cShaopeng Jia phoneUtil.formatOutOfCountryKeepingAlphaChars(alphaNumericNumber, RegionCode.AU)); 527372bff8dd464574d36737d47e495cad14346653cShaopeng Jia 528372bff8dd464574d36737d47e495cad14346653cShaopeng Jia alphaNumericNumber.setRawInput("1-800-SIX-flag"); 529372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("0011 1 800-SIX-FLAG", 530372bff8dd464574d36737d47e495cad14346653cShaopeng Jia phoneUtil.formatOutOfCountryKeepingAlphaChars(alphaNumericNumber, RegionCode.AU)); 531372bff8dd464574d36737d47e495cad14346653cShaopeng Jia 532372bff8dd464574d36737d47e495cad14346653cShaopeng Jia alphaNumericNumber.setRawInput("Call us from UK: 00 1 800 SIX-flag"); 533372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("0011 1 800 SIX-FLAG", 534372bff8dd464574d36737d47e495cad14346653cShaopeng Jia phoneUtil.formatOutOfCountryKeepingAlphaChars(alphaNumericNumber, RegionCode.AU)); 535372bff8dd464574d36737d47e495cad14346653cShaopeng Jia 536372bff8dd464574d36737d47e495cad14346653cShaopeng Jia alphaNumericNumber.setRawInput("800 SIX-flag"); 537372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("0011 1 800 SIX-FLAG", 538372bff8dd464574d36737d47e495cad14346653cShaopeng Jia phoneUtil.formatOutOfCountryKeepingAlphaChars(alphaNumericNumber, RegionCode.AU)); 539372bff8dd464574d36737d47e495cad14346653cShaopeng Jia 540372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // Formatting from within the NANPA region. 541372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("1 800 SIX-FLAG", 542372bff8dd464574d36737d47e495cad14346653cShaopeng Jia phoneUtil.formatOutOfCountryKeepingAlphaChars(alphaNumericNumber, RegionCode.US)); 543372bff8dd464574d36737d47e495cad14346653cShaopeng Jia 544372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("1 800 SIX-FLAG", 545372bff8dd464574d36737d47e495cad14346653cShaopeng Jia phoneUtil.formatOutOfCountryKeepingAlphaChars(alphaNumericNumber, RegionCode.BS)); 546372bff8dd464574d36737d47e495cad14346653cShaopeng Jia 547372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // Testing that if the raw input doesn't exist, it is formatted using 548372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // formatOutOfCountryCallingNumber. 549372bff8dd464574d36737d47e495cad14346653cShaopeng Jia alphaNumericNumber.clearRawInput(); 550372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("00 1 800 749 3524", 551372bff8dd464574d36737d47e495cad14346653cShaopeng Jia phoneUtil.formatOutOfCountryKeepingAlphaChars(alphaNumericNumber, RegionCode.DE)); 552372bff8dd464574d36737d47e495cad14346653cShaopeng Jia 553372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // Testing AU alpha number formatted from Australia. 554372bff8dd464574d36737d47e495cad14346653cShaopeng Jia alphaNumericNumber.setCountryCode(61).setNationalNumber(827493524L) 555372bff8dd464574d36737d47e495cad14346653cShaopeng Jia .setRawInput("+61 82749-FLAG"); 556372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // This number should have the national prefix fixed. 557372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("082749-FLAG", 558372bff8dd464574d36737d47e495cad14346653cShaopeng Jia phoneUtil.formatOutOfCountryKeepingAlphaChars(alphaNumericNumber, RegionCode.AU)); 559372bff8dd464574d36737d47e495cad14346653cShaopeng Jia 560372bff8dd464574d36737d47e495cad14346653cShaopeng Jia alphaNumericNumber.setRawInput("082749-FLAG"); 561372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("082749-FLAG", 562372bff8dd464574d36737d47e495cad14346653cShaopeng Jia phoneUtil.formatOutOfCountryKeepingAlphaChars(alphaNumericNumber, RegionCode.AU)); 563372bff8dd464574d36737d47e495cad14346653cShaopeng Jia 564372bff8dd464574d36737d47e495cad14346653cShaopeng Jia alphaNumericNumber.setNationalNumber(18007493524L).setRawInput("1-800-SIX-flag"); 565372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // This number should not have the national prefix prefixed, in accordance with the override for 566372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // this specific formatting rule. 567372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("1-800-SIX-FLAG", 568372bff8dd464574d36737d47e495cad14346653cShaopeng Jia phoneUtil.formatOutOfCountryKeepingAlphaChars(alphaNumericNumber, RegionCode.AU)); 569372bff8dd464574d36737d47e495cad14346653cShaopeng Jia 570372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // The metadata should not be permanently changed, since we copied it before modifying patterns. 571372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // Here we check this. 572372bff8dd464574d36737d47e495cad14346653cShaopeng Jia alphaNumericNumber.setNationalNumber(1800749352L); 573372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("1800 749 352", 574372bff8dd464574d36737d47e495cad14346653cShaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(alphaNumericNumber, RegionCode.AU)); 575372bff8dd464574d36737d47e495cad14346653cShaopeng Jia 576372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // Testing a region with multiple international prefixes. 577372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("+61 1-800-SIX-FLAG", 578372bff8dd464574d36737d47e495cad14346653cShaopeng Jia phoneUtil.formatOutOfCountryKeepingAlphaChars(alphaNumericNumber, RegionCode.SG)); 579528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia // Testing the case of calling from a non-supported region. 580528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("+61 1-800-SIX-FLAG", 581528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.formatOutOfCountryKeepingAlphaChars(alphaNumericNumber, RegionCode.AQ)); 582372bff8dd464574d36737d47e495cad14346653cShaopeng Jia 583372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // Testing the case with an invalid country calling code. 584372bff8dd464574d36737d47e495cad14346653cShaopeng Jia alphaNumericNumber.setCountryCode(0).setNationalNumber(18007493524L) 585372bff8dd464574d36737d47e495cad14346653cShaopeng Jia .setRawInput("1-800-SIX-flag"); 586372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // Uses the raw input only. 587372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("1-800-SIX-flag", 588372bff8dd464574d36737d47e495cad14346653cShaopeng Jia phoneUtil.formatOutOfCountryKeepingAlphaChars(alphaNumericNumber, RegionCode.DE)); 589372bff8dd464574d36737d47e495cad14346653cShaopeng Jia 590372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // Testing the case of an invalid alpha number. 591372bff8dd464574d36737d47e495cad14346653cShaopeng Jia alphaNumericNumber.setCountryCode(1).setNationalNumber(80749L).setRawInput("180-SIX"); 592372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // No country-code stripping can be done. 593372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("00 1 180-SIX", 594372bff8dd464574d36737d47e495cad14346653cShaopeng Jia phoneUtil.formatOutOfCountryKeepingAlphaChars(alphaNumericNumber, RegionCode.DE)); 595528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia 596528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia // Testing the case of calling from a non-supported region. 597528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia alphaNumericNumber.setCountryCode(1).setNationalNumber(80749L).setRawInput("180-SIX"); 598528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia // No country-code stripping can be done since the number is invalid. 599528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("+1 180-SIX", 600528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.formatOutOfCountryKeepingAlphaChars(alphaNumericNumber, RegionCode.AQ)); 601372bff8dd464574d36737d47e495cad14346653cShaopeng Jia } 602372bff8dd464574d36737d47e495cad14346653cShaopeng Jia 6034b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia public void testFormatWithCarrierCode() { 60452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia // We only support this for AR in our test metadata, and only for mobile numbers starting with 60552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia // certain values. 60652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber arMobile = new PhoneNumber().setCountryCode(54).setNationalNumber(92234654321L); 60752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("02234 65-4321", phoneUtil.format(arMobile, PhoneNumberFormat.NATIONAL)); 60852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia // Here we force 14 as the carrier code. 60952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("02234 14 65-4321", 61052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.formatNationalNumberWithCarrierCode(arMobile, "14")); 61152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia // Here we force the number to be shown with no carrier code. 61252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("02234 65-4321", 61352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.formatNationalNumberWithCarrierCode(arMobile, "")); 61452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia // Here the international rule is used, so no carrier code should be present. 61552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("+5492234654321", phoneUtil.format(arMobile, PhoneNumberFormat.E164)); 61652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia // We don't support this for the US so there should be no change. 61752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("650 253 0000", phoneUtil.formatNationalNumberWithCarrierCode(US_NUMBER, "15")); 61852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia } 61952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia 62052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia public void testFormatWithPreferredCarrierCode() { 6214b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia // We only support this for AR in our test metadata. 6224b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia PhoneNumber arNumber = new PhoneNumber(); 6234b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia arNumber.setCountryCode(54).setNationalNumber(91234125678L); 62452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia // Test formatting with no preferred carrier code stored in the number itself. 62552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("01234 15 12-5678", 62652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.formatNationalNumberWithPreferredCarrierCode(arNumber, "15")); 62752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("01234 12-5678", 62852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.formatNationalNumberWithPreferredCarrierCode(arNumber, "")); 62952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia // Test formatting with preferred carrier code present. 63052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia arNumber.setPreferredDomesticCarrierCode("19"); 631256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("01234 12-5678", phoneUtil.format(arNumber, PhoneNumberFormat.NATIONAL)); 63252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("01234 19 12-5678", 63352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.formatNationalNumberWithPreferredCarrierCode(arNumber, "15")); 63452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("01234 19 12-5678", 63552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.formatNationalNumberWithPreferredCarrierCode(arNumber, "")); 63652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia // When the preferred_domestic_carrier_code is present (even when it contains an empty string), 63752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia // use it instead of the default carrier code passed in. 63852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia arNumber.setPreferredDomesticCarrierCode(""); 63952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("01234 12-5678", 64052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.formatNationalNumberWithPreferredCarrierCode(arNumber, "15")); 6414b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia // We don't support this for the US so there should be no change. 6424b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia PhoneNumber usNumber = new PhoneNumber(); 64352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia usNumber.setCountryCode(1).setNationalNumber(4241231234L).setPreferredDomesticCarrierCode("99"); 644256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("424 123 1234", phoneUtil.format(usNumber, PhoneNumberFormat.NATIONAL)); 64552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("424 123 1234", 64652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.formatNationalNumberWithPreferredCarrierCode(usNumber, "15")); 6474b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia } 6484b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia 649ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia public void testFormatNumberForMobileDialing() { 650ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia // US toll free numbers are marked as noInternationalDialling in the test metadata for testing 651ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia // purposes. 652ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia assertEquals("800 253 0000", 65396a7214cdabf08f53f5b1a560304601c9f65e0b9Shaopeng Jia phoneUtil.formatNumberForMobileDialing(US_TOLLFREE, RegionCode.US, 65496a7214cdabf08f53f5b1a560304601c9f65e0b9Shaopeng Jia true /* keep formatting */)); 655ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia assertEquals("", phoneUtil.formatNumberForMobileDialing(US_TOLLFREE, RegionCode.CN, true)); 656ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia assertEquals("+1 650 253 0000", 657ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia phoneUtil.formatNumberForMobileDialing(US_NUMBER, RegionCode.US, true)); 658ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia PhoneNumber usNumberWithExtn = new PhoneNumber().mergeFrom(US_NUMBER).setExtension("1234"); 659ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia assertEquals("+1 650 253 0000", 660ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia phoneUtil.formatNumberForMobileDialing(usNumberWithExtn, RegionCode.US, true)); 661ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia 662ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia assertEquals("8002530000", 66396a7214cdabf08f53f5b1a560304601c9f65e0b9Shaopeng Jia phoneUtil.formatNumberForMobileDialing(US_TOLLFREE, RegionCode.US, 66496a7214cdabf08f53f5b1a560304601c9f65e0b9Shaopeng Jia false /* remove formatting */)); 665ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia assertEquals("", phoneUtil.formatNumberForMobileDialing(US_TOLLFREE, RegionCode.CN, false)); 666ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia assertEquals("+16502530000", 667ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia phoneUtil.formatNumberForMobileDialing(US_NUMBER, RegionCode.US, false)); 668ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia assertEquals("+16502530000", 669ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia phoneUtil.formatNumberForMobileDialing(usNumberWithExtn, RegionCode.US, false)); 67096a7214cdabf08f53f5b1a560304601c9f65e0b9Shaopeng Jia 67196a7214cdabf08f53f5b1a560304601c9f65e0b9Shaopeng Jia // An invalid US number, which is one digit too long. 67296a7214cdabf08f53f5b1a560304601c9f65e0b9Shaopeng Jia assertEquals("+165025300001", 67396a7214cdabf08f53f5b1a560304601c9f65e0b9Shaopeng Jia phoneUtil.formatNumberForMobileDialing(US_LONG_NUMBER, RegionCode.US, false)); 67496a7214cdabf08f53f5b1a560304601c9f65e0b9Shaopeng Jia assertEquals("+1 65025300001", 67596a7214cdabf08f53f5b1a560304601c9f65e0b9Shaopeng Jia phoneUtil.formatNumberForMobileDialing(US_LONG_NUMBER, RegionCode.US, true)); 67696a7214cdabf08f53f5b1a560304601c9f65e0b9Shaopeng Jia 67796a7214cdabf08f53f5b1a560304601c9f65e0b9Shaopeng Jia // Star numbers. In real life they appear in Israel, but we have them in JP in our test 67896a7214cdabf08f53f5b1a560304601c9f65e0b9Shaopeng Jia // metadata. 67996a7214cdabf08f53f5b1a560304601c9f65e0b9Shaopeng Jia assertEquals("*2345", 68096a7214cdabf08f53f5b1a560304601c9f65e0b9Shaopeng Jia phoneUtil.formatNumberForMobileDialing(JP_STAR_NUMBER, RegionCode.JP, false)); 68196a7214cdabf08f53f5b1a560304601c9f65e0b9Shaopeng Jia assertEquals("*2345", 68296a7214cdabf08f53f5b1a560304601c9f65e0b9Shaopeng Jia phoneUtil.formatNumberForMobileDialing(JP_STAR_NUMBER, RegionCode.JP, true)); 683528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia 684528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("+80012345678", 685528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.formatNumberForMobileDialing(INTERNATIONAL_TOLL_FREE, RegionCode.JP, false)); 686528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("+800 1234 5678", 687528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.formatNumberForMobileDialing(INTERNATIONAL_TOLL_FREE, RegionCode.JP, true)); 688ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia } 689ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia 6901524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testFormatByPattern() { 6915724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia NumberFormat newNumFormat = new NumberFormat(); 6925724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia newNumFormat.setPattern("(\\d{3})(\\d{3})(\\d{4})"); 6935724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia newNumFormat.setFormat("($1) $2-$3"); 6941524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia List<NumberFormat> newNumberFormats = new ArrayList<NumberFormat>(); 6955724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia newNumberFormats.add(newNumFormat); 6961524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 69752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("(650) 253-0000", phoneUtil.formatByPattern(US_NUMBER, PhoneNumberFormat.NATIONAL, 698256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie newNumberFormats)); 69952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("+1 (650) 253-0000", phoneUtil.formatByPattern(US_NUMBER, 700256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie PhoneNumberFormat.INTERNATIONAL, 701256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie newNumberFormats)); 702b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia assertEquals("tel:+1-650-253-0000", phoneUtil.formatByPattern(US_NUMBER, 703b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia PhoneNumberFormat.RFC3966, 704b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia newNumberFormats)); 7051524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 706df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia // $NP is set to '1' for the US. Here we check that for other NANPA countries the US rules are 707df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia // followed. 708df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia newNumFormat.setNationalPrefixFormattingRule("$NP ($FG)"); 709df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia newNumFormat.setFormat("$1 $2-$3"); 71052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("1 (242) 365-1234", 71152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.formatByPattern(BS_NUMBER, PhoneNumberFormat.NATIONAL, 71252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia newNumberFormats)); 71352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("+1 242 365-1234", 71452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.formatByPattern(BS_NUMBER, PhoneNumberFormat.INTERNATIONAL, 715df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia newNumberFormats)); 71676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia 7175724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia newNumFormat.setPattern("(\\d{2})(\\d{5})(\\d{3})"); 7185724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia newNumFormat.setFormat("$1-$2 $3"); 7195724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia newNumberFormats.set(0, newNumFormat); 7201524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 7211524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("02-36618 300", 72252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.formatByPattern(IT_NUMBER, PhoneNumberFormat.NATIONAL, 72352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia newNumberFormats)); 7241524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("+39 02-36618 300", 72552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.formatByPattern(IT_NUMBER, PhoneNumberFormat.INTERNATIONAL, 7261524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia newNumberFormats)); 7271524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 7285724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia newNumFormat.setNationalPrefixFormattingRule("$NP$FG"); 7295724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia newNumFormat.setPattern("(\\d{2})(\\d{4})(\\d{4})"); 7305724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia newNumFormat.setFormat("$1 $2 $3"); 7315724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia newNumberFormats.set(0, newNumFormat); 73252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("020 7031 3000", 73352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.formatByPattern(GB_NUMBER, PhoneNumberFormat.NATIONAL, 73452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia newNumberFormats)); 7351524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 7365724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia newNumFormat.setNationalPrefixFormattingRule("($NP$FG)"); 73752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("(020) 7031 3000", 73852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.formatByPattern(GB_NUMBER, PhoneNumberFormat.NATIONAL, 73952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia newNumberFormats)); 7405724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia 7415724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia newNumFormat.setNationalPrefixFormattingRule(""); 74252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("20 7031 3000", 74352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.formatByPattern(GB_NUMBER, PhoneNumberFormat.NATIONAL, 74452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia newNumberFormats)); 7451524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 74652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("+44 20 7031 3000", 74752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.formatByPattern(GB_NUMBER, PhoneNumberFormat.INTERNATIONAL, 7481524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia newNumberFormats)); 7491524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 7501524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 7511524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testFormatE164Number() { 75252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("+16502530000", phoneUtil.format(US_NUMBER, PhoneNumberFormat.E164)); 75352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("+4930123456", phoneUtil.format(DE_NUMBER, PhoneNumberFormat.E164)); 754528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("+80012345678", phoneUtil.format(INTERNATIONAL_TOLL_FREE, PhoneNumberFormat.E164)); 7551524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 7561524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 7571524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testFormatNumberWithExtension() { 75852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber nzNumber = new PhoneNumber().mergeFrom(NZ_NUMBER).setExtension("1234"); 7591524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Uses default extension prefix: 760256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("03-331 6005 ext. 1234", phoneUtil.format(nzNumber, PhoneNumberFormat.NATIONAL)); 761372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // Uses RFC 3966 syntax. 762b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia assertEquals("tel:+64-3-331-6005;ext=1234", 763b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia phoneUtil.format(nzNumber, PhoneNumberFormat.RFC3966)); 7641524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Extension prefix overridden in the territory information for the US: 76552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber usNumberWithExtension = new PhoneNumber().mergeFrom(US_NUMBER).setExtension("4567"); 76652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("650 253 0000 extn. 4567", phoneUtil.format(usNumberWithExtension, 76752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumberFormat.NATIONAL)); 7681524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 7691524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 770528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia public void testFormatInOriginalFormat() throws Exception { 77152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber number1 = phoneUtil.parseAndKeepRawInput("+442087654321", RegionCode.GB); 77252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("+44 20 8765 4321", phoneUtil.formatInOriginalFormat(number1, RegionCode.GB)); 77354923fc72f0faeb11fe58a545c0314f6051b14aaShaopeng Jia 77452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber number2 = phoneUtil.parseAndKeepRawInput("02087654321", RegionCode.GB); 77552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("(020) 8765 4321", phoneUtil.formatInOriginalFormat(number2, RegionCode.GB)); 77654923fc72f0faeb11fe58a545c0314f6051b14aaShaopeng Jia 77752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber number3 = phoneUtil.parseAndKeepRawInput("011442087654321", RegionCode.US); 77852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("011 44 20 8765 4321", phoneUtil.formatInOriginalFormat(number3, RegionCode.US)); 77954923fc72f0faeb11fe58a545c0314f6051b14aaShaopeng Jia 78052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber number4 = phoneUtil.parseAndKeepRawInput("442087654321", RegionCode.GB); 78152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("44 20 8765 4321", phoneUtil.formatInOriginalFormat(number4, RegionCode.GB)); 78254923fc72f0faeb11fe58a545c0314f6051b14aaShaopeng Jia 78352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber number5 = phoneUtil.parse("+442087654321", RegionCode.GB); 78452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("(020) 8765 4321", phoneUtil.formatInOriginalFormat(number5, RegionCode.GB)); 785ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia 786528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia // Invalid numbers that we have a formatting pattern for should be formatted properly. Note area 787ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia // codes starting with 7 are intentionally excluded in the test metadata for testing purposes. 788ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia PhoneNumber number6 = phoneUtil.parseAndKeepRawInput("7345678901", RegionCode.US); 789528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("734 567 8901", phoneUtil.formatInOriginalFormat(number6, RegionCode.US)); 790ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia 791528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia // US is not a leading zero country, and the presence of the leading zero leads us to format the 792528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia // number using raw_input. 793528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia PhoneNumber number7 = phoneUtil.parseAndKeepRawInput("0734567 8901", RegionCode.US); 794528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("0734567 8901", phoneUtil.formatInOriginalFormat(number7, RegionCode.US)); 7955cd062f9cba053c771bcea181fec210279ec030bShaopeng Jia 7965cd062f9cba053c771bcea181fec210279ec030bShaopeng Jia // This number is valid, but we don't have a formatting pattern for it. Fall back to the raw 7975cd062f9cba053c771bcea181fec210279ec030bShaopeng Jia // input. 7985cd062f9cba053c771bcea181fec210279ec030bShaopeng Jia PhoneNumber number8 = phoneUtil.parseAndKeepRawInput("02-4567-8900", RegionCode.KR); 7995cd062f9cba053c771bcea181fec210279ec030bShaopeng Jia assertEquals("02-4567-8900", phoneUtil.formatInOriginalFormat(number8, RegionCode.KR)); 800528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia 801528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia PhoneNumber number9 = phoneUtil.parseAndKeepRawInput("01180012345678", RegionCode.US); 802528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("011 800 1234 5678", phoneUtil.formatInOriginalFormat(number9, RegionCode.US)); 803528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia 804528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia PhoneNumber number10 = phoneUtil.parseAndKeepRawInput("+80012345678", RegionCode.KR); 805528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("+800 1234 5678", phoneUtil.formatInOriginalFormat(number10, RegionCode.KR)); 806528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia 807528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia // US local numbers are formatted correctly, as we have formatting patterns for them. 808528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia PhoneNumber localNumberUS = phoneUtil.parseAndKeepRawInput("2530000", RegionCode.US); 809528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("253 0000", phoneUtil.formatInOriginalFormat(localNumberUS, RegionCode.US)); 810528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia 811528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia PhoneNumber numberWithNationalPrefixUS = 812528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.parseAndKeepRawInput("18003456789", RegionCode.US); 813528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("1 800 345 6789", 814528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.formatInOriginalFormat(numberWithNationalPrefixUS, RegionCode.US)); 815528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia 816528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia PhoneNumber numberWithoutNationalPrefixGB = 817528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.parseAndKeepRawInput("2087654321", RegionCode.GB); 818528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("20 8765 4321", 819528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.formatInOriginalFormat(numberWithoutNationalPrefixGB, RegionCode.GB)); 820528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia // Make sure no metadata is modified as a result of the previous function call. 821528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("(020) 8765 4321", phoneUtil.formatInOriginalFormat(number5, RegionCode.GB)); 822528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia 823528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia PhoneNumber numberWithNationalPrefixMX = 824528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.parseAndKeepRawInput("013312345678", RegionCode.MX); 825528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("01 33 1234 5678", 826528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.formatInOriginalFormat(numberWithNationalPrefixMX, RegionCode.MX)); 827528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia 828528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia PhoneNumber numberWithoutNationalPrefixMX = 829528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.parseAndKeepRawInput("3312345678", RegionCode.MX); 830528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("33 1234 5678", 831528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.formatInOriginalFormat(numberWithoutNationalPrefixMX, RegionCode.MX)); 832528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia 833528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia PhoneNumber italianFixedLineNumber = 834528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.parseAndKeepRawInput("0212345678", RegionCode.IT); 835528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("02 1234 5678", 836528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.formatInOriginalFormat(italianFixedLineNumber, RegionCode.IT)); 837528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia 838528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia PhoneNumber numberWithNationalPrefixJP = 839528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.parseAndKeepRawInput("00777012", RegionCode.JP); 840528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("0077-7012", 841528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.formatInOriginalFormat(numberWithNationalPrefixJP, RegionCode.JP)); 842528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia 843528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia PhoneNumber numberWithoutNationalPrefixJP = 844528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.parseAndKeepRawInput("0777012", RegionCode.JP); 845528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("0777012", 846528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.formatInOriginalFormat(numberWithoutNationalPrefixJP, RegionCode.JP)); 847528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia 848528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia PhoneNumber numberWithCarrierCodeBR = 849528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.parseAndKeepRawInput("012 3121286979", RegionCode.BR); 850528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("012 3121286979", 851528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.formatInOriginalFormat(numberWithCarrierCodeBR, RegionCode.BR)); 852528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia 853528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia // The default national prefix used in this case is 045. When a number with national prefix 044 854528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia // is entered, we return the raw input as we don't want to change the number entered. 855528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia PhoneNumber numberWithNationalPrefixMX1 = 856528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.parseAndKeepRawInput("044(33)1234-5678", RegionCode.MX); 857528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("044(33)1234-5678", 858528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.formatInOriginalFormat(numberWithNationalPrefixMX1, RegionCode.MX)); 859528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia 860528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia PhoneNumber numberWithNationalPrefixMX2 = 861528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.parseAndKeepRawInput("045(33)1234-5678", RegionCode.MX); 862528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("045 33 1234 5678", 863528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.formatInOriginalFormat(numberWithNationalPrefixMX2, RegionCode.MX)); 864528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia 865528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia // The default international prefix used in this case is 0011. When a number with international 866528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia // prefix 0012 is entered, we return the raw input as we don't want to change the number 867528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia // entered. 868528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia PhoneNumber outOfCountryNumberFromAU1 = 869528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.parseAndKeepRawInput("0012 16502530000", RegionCode.AU); 870528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("0012 16502530000", 871528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.formatInOriginalFormat(outOfCountryNumberFromAU1, RegionCode.AU)); 872528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia 873528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia PhoneNumber outOfCountryNumberFromAU2 = 874528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.parseAndKeepRawInput("0011 16502530000", RegionCode.AU); 875528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("0011 1 650 253 0000", 876528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.formatInOriginalFormat(outOfCountryNumberFromAU2, RegionCode.AU)); 877bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia 878bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia // Test the star sign is not removed from or added to the original input by this method. 879bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia PhoneNumber starNumber = phoneUtil.parseAndKeepRawInput("*1234", RegionCode.JP); 880bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia assertEquals("*1234", phoneUtil.formatInOriginalFormat(starNumber, RegionCode.JP)); 881bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia PhoneNumber numberWithoutStar = phoneUtil.parseAndKeepRawInput("1234", RegionCode.JP); 882bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia assertEquals("1234", phoneUtil.formatInOriginalFormat(numberWithoutStar, RegionCode.JP)); 88354923fc72f0faeb11fe58a545c0314f6051b14aaShaopeng Jia } 88454923fc72f0faeb11fe58a545c0314f6051b14aaShaopeng Jia 8851524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsPremiumRate() { 88652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.PREMIUM_RATE, phoneUtil.getNumberType(US_PREMIUM)); 88776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia 88852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber premiumRateNumber = new PhoneNumber(); 88976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia premiumRateNumber.setCountryCode(39).setNationalNumber(892123L); 890f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.PREMIUM_RATE, 89176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.getNumberType(premiumRateNumber)); 8921524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 89376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia premiumRateNumber.clear(); 89476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia premiumRateNumber.setCountryCode(44).setNationalNumber(9187654321L); 895f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.PREMIUM_RATE, 89676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.getNumberType(premiumRateNumber)); 8971524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 89876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia premiumRateNumber.clear(); 89976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia premiumRateNumber.setCountryCode(49).setNationalNumber(9001654321L); 9001524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.PREMIUM_RATE, 90176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.getNumberType(premiumRateNumber)); 9021524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 90376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia premiumRateNumber.clear(); 90476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia premiumRateNumber.setCountryCode(49).setNationalNumber(90091234567L); 9051524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.PREMIUM_RATE, 90676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.getNumberType(premiumRateNumber)); 907bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia 908bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.PREMIUM_RATE, 909bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia phoneUtil.getNumberType(UNIVERSAL_PREMIUM_RATE)); 9101524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 9111524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 9121524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsTollFree() { 91376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber tollFreeNumber = new PhoneNumber(); 91476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia 91576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia tollFreeNumber.setCountryCode(1).setNationalNumber(8881234567L); 9161524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.TOLL_FREE, 91776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.getNumberType(tollFreeNumber)); 9181524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 91976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia tollFreeNumber.clear(); 92076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia tollFreeNumber.setCountryCode(39).setNationalNumber(803123L); 9211524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.TOLL_FREE, 92276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.getNumberType(tollFreeNumber)); 9231524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 92476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia tollFreeNumber.clear(); 92576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia tollFreeNumber.setCountryCode(44).setNationalNumber(8012345678L); 9261524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.TOLL_FREE, 92776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.getNumberType(tollFreeNumber)); 9281524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 92976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia tollFreeNumber.clear(); 93076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia tollFreeNumber.setCountryCode(49).setNationalNumber(8001234567L); 9311524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.TOLL_FREE, 93276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.getNumberType(tollFreeNumber)); 933528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia 934528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.TOLL_FREE, 935528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.getNumberType(INTERNATIONAL_TOLL_FREE)); 9361524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 9371524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 9381524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsMobile() { 93952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.MOBILE, phoneUtil.getNumberType(BS_MOBILE)); 94052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.MOBILE, phoneUtil.getNumberType(GB_MOBILE)); 94152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.MOBILE, phoneUtil.getNumberType(IT_MOBILE)); 942372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.MOBILE, phoneUtil.getNumberType(AR_MOBILE)); 9431524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 94452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber mobileNumber = new PhoneNumber(); 94576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia mobileNumber.setCountryCode(49).setNationalNumber(15123456789L); 94652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.MOBILE, phoneUtil.getNumberType(mobileNumber)); 9471524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 9481524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 9491524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsFixedLine() { 95052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.FIXED_LINE, phoneUtil.getNumberType(BS_NUMBER)); 95152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.FIXED_LINE, phoneUtil.getNumberType(IT_NUMBER)); 95252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.FIXED_LINE, phoneUtil.getNumberType(GB_NUMBER)); 95352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.FIXED_LINE, phoneUtil.getNumberType(DE_NUMBER)); 9541524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 9551524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 9561524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsFixedLineAndMobile() { 9571524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.FIXED_LINE_OR_MOBILE, 95852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.getNumberType(US_NUMBER)); 9591524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 96052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber fixedLineAndMobileNumber = new PhoneNumber(). 96152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia setCountryCode(54).setNationalNumber(1987654321L); 9621524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.FIXED_LINE_OR_MOBILE, 96376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.getNumberType(fixedLineAndMobileNumber)); 9641524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 9651524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 9661524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsSharedCost() { 96776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber gbNumber = new PhoneNumber(); 9681524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia gbNumber.setCountryCode(44).setNationalNumber(8431231234L); 96976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.SHARED_COST, phoneUtil.getNumberType(gbNumber)); 9701524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 9711524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 9721524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsVoip() { 97376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber gbNumber = new PhoneNumber(); 9741524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia gbNumber.setCountryCode(44).setNationalNumber(5631231234L); 97576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.VOIP, phoneUtil.getNumberType(gbNumber)); 9761524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 9771524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 9781524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsPersonalNumber() { 97976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber gbNumber = new PhoneNumber(); 9801524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia gbNumber.setCountryCode(44).setNationalNumber(7031231234L); 9811524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.PERSONAL_NUMBER, 98276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.getNumberType(gbNumber)); 9831524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 9841524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 9851524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsUnknown() { 98652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia // Invalid numbers should be of type UNKNOWN. 98752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.UNKNOWN, phoneUtil.getNumberType(US_LOCAL_NUMBER)); 9881524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 9891524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 9901524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsValidNumber() { 99152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertTrue(phoneUtil.isValidNumber(US_NUMBER)); 99252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertTrue(phoneUtil.isValidNumber(IT_NUMBER)); 99352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertTrue(phoneUtil.isValidNumber(GB_MOBILE)); 994528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertTrue(phoneUtil.isValidNumber(INTERNATIONAL_TOLL_FREE)); 995bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia assertTrue(phoneUtil.isValidNumber(UNIVERSAL_PREMIUM_RATE)); 9961524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 99752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber nzNumber = new PhoneNumber().setCountryCode(64).setNationalNumber(21387835L); 99876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertTrue(phoneUtil.isValidNumber(nzNumber)); 9991524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 10001524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 10011524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsValidForRegion() { 10021524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // This number is valid for the Bahamas, but is not a valid US number. 100352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertTrue(phoneUtil.isValidNumber(BS_NUMBER)); 100452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertTrue(phoneUtil.isValidNumberForRegion(BS_NUMBER, RegionCode.BS)); 100552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertFalse(phoneUtil.isValidNumberForRegion(BS_NUMBER, RegionCode.US)); 100652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber bsInvalidNumber = 100752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia new PhoneNumber().setCountryCode(1).setNationalNumber(2421232345L); 10081524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // This number is no longer valid. 100952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertFalse(phoneUtil.isValidNumber(bsInvalidNumber)); 10104b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia 1011df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia // La Mayotte and Reunion use 'leadingDigits' to differentiate them. 10124b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia PhoneNumber reNumber = new PhoneNumber(); 10134b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia reNumber.setCountryCode(262).setNationalNumber(262123456L); 10144b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertTrue(phoneUtil.isValidNumber(reNumber)); 101552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertTrue(phoneUtil.isValidNumberForRegion(reNumber, RegionCode.RE)); 101652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertFalse(phoneUtil.isValidNumberForRegion(reNumber, RegionCode.YT)); 10174b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia // Now change the number to be a number for La Mayotte. 10184b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia reNumber.setNationalNumber(269601234L); 101952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertTrue(phoneUtil.isValidNumberForRegion(reNumber, RegionCode.YT)); 102052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertFalse(phoneUtil.isValidNumberForRegion(reNumber, RegionCode.RE)); 1021df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia // This number is no longer valid for La Reunion. 10224b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia reNumber.setNationalNumber(269123456L); 102352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertFalse(phoneUtil.isValidNumberForRegion(reNumber, RegionCode.YT)); 102452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertFalse(phoneUtil.isValidNumberForRegion(reNumber, RegionCode.RE)); 10254b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertFalse(phoneUtil.isValidNumber(reNumber)); 10264b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia // However, it should be recognised as from La Mayotte, since it is valid for this region. 102752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(RegionCode.YT, phoneUtil.getRegionCodeForNumber(reNumber)); 10284b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia // This number is valid in both places. 10294b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia reNumber.setNationalNumber(800123456L); 103052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertTrue(phoneUtil.isValidNumberForRegion(reNumber, RegionCode.YT)); 103152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertTrue(phoneUtil.isValidNumberForRegion(reNumber, RegionCode.RE)); 1032528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertTrue(phoneUtil.isValidNumberForRegion(INTERNATIONAL_TOLL_FREE, RegionCode.UN001)); 1033528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertFalse(phoneUtil.isValidNumberForRegion(INTERNATIONAL_TOLL_FREE, RegionCode.US)); 1034cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia assertFalse(phoneUtil.isValidNumberForRegion(INTERNATIONAL_TOLL_FREE, RegionCode.ZZ)); 1035cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia 1036cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia PhoneNumber invalidNumber = new PhoneNumber(); 1037cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia // Invalid country calling codes. 1038cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia invalidNumber.setCountryCode(3923).setNationalNumber(2366L); 1039cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia assertFalse(phoneUtil.isValidNumberForRegion(invalidNumber, RegionCode.ZZ)); 1040cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia assertFalse(phoneUtil.isValidNumberForRegion(invalidNumber, RegionCode.UN001)); 1041cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia invalidNumber.setCountryCode(0); 1042b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia assertFalse(phoneUtil.isValidNumberForRegion(invalidNumber, RegionCode.UN001)); 1043cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia assertFalse(phoneUtil.isValidNumberForRegion(invalidNumber, RegionCode.ZZ)); 10441524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 10451524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 10461524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsNotValidNumber() { 104752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertFalse(phoneUtil.isValidNumber(US_LOCAL_NUMBER)); 10481524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 104952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber invalidNumber = new PhoneNumber(); 105052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia invalidNumber.setCountryCode(39).setNationalNumber(23661830000L).setItalianLeadingZero(true); 105152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertFalse(phoneUtil.isValidNumber(invalidNumber)); 10521524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 105352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia invalidNumber.clear(); 105452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia invalidNumber.setCountryCode(44).setNationalNumber(791234567L); 105552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertFalse(phoneUtil.isValidNumber(invalidNumber)); 10561524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 105752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia invalidNumber.clear(); 105852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia invalidNumber.setCountryCode(49).setNationalNumber(1234L); 105952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertFalse(phoneUtil.isValidNumber(invalidNumber)); 10601524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 106152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia invalidNumber.clear(); 106252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia invalidNumber.setCountryCode(64).setNationalNumber(3316005L); 106352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertFalse(phoneUtil.isValidNumber(invalidNumber)); 1064528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia 1065cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia invalidNumber.clear(); 1066cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia // Invalid country calling codes. 1067cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia invalidNumber.setCountryCode(3923).setNationalNumber(2366L); 1068cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia assertFalse(phoneUtil.isValidNumber(invalidNumber)); 1069cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia invalidNumber.setCountryCode(0); 1070cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia assertFalse(phoneUtil.isValidNumber(invalidNumber)); 1071cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia 1072528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertFalse(phoneUtil.isValidNumber(INTERNATIONAL_TOLL_FREE_TOO_LONG)); 10731524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 10741524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 10751524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testGetRegionCodeForCountryCode() { 107652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(RegionCode.US, phoneUtil.getRegionCodeForCountryCode(1)); 107752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(RegionCode.GB, phoneUtil.getRegionCodeForCountryCode(44)); 107852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(RegionCode.DE, phoneUtil.getRegionCodeForCountryCode(49)); 1079528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals(RegionCode.UN001, phoneUtil.getRegionCodeForCountryCode(800)); 1080bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia assertEquals(RegionCode.UN001, phoneUtil.getRegionCodeForCountryCode(979)); 10811524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 10821524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 10831524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testGetRegionCodeForNumber() { 108452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(RegionCode.BS, phoneUtil.getRegionCodeForNumber(BS_NUMBER)); 108552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(RegionCode.US, phoneUtil.getRegionCodeForNumber(US_NUMBER)); 108652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(RegionCode.GB, phoneUtil.getRegionCodeForNumber(GB_MOBILE)); 1087528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals(RegionCode.UN001, phoneUtil.getRegionCodeForNumber(INTERNATIONAL_TOLL_FREE)); 1088bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia assertEquals(RegionCode.UN001, phoneUtil.getRegionCodeForNumber(UNIVERSAL_PREMIUM_RATE)); 10891524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 10901524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 10911524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testGetCountryCodeForRegion() { 109252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(1, phoneUtil.getCountryCodeForRegion(RegionCode.US)); 109352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(64, phoneUtil.getCountryCodeForRegion(RegionCode.NZ)); 10947900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia assertEquals(0, phoneUtil.getCountryCodeForRegion(null)); 109552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(0, phoneUtil.getCountryCodeForRegion(RegionCode.ZZ)); 1096528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals(0, phoneUtil.getCountryCodeForRegion(RegionCode.UN001)); 10977900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia // CS is already deprecated so the library doesn't support it. 109852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(0, phoneUtil.getCountryCodeForRegion(RegionCode.CS)); 10991524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 11001524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 1101f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia public void testGetNationalDiallingPrefixForRegion() { 110252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("1", phoneUtil.getNddPrefixForRegion(RegionCode.US, false)); 1103f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia // Test non-main country to see it gets the national dialling prefix for the main country with 1104f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia // that country calling code. 110552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("1", phoneUtil.getNddPrefixForRegion(RegionCode.BS, false)); 110652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("0", phoneUtil.getNddPrefixForRegion(RegionCode.NZ, false)); 1107f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia // Test case with non digit in the national prefix. 110852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("0~0", phoneUtil.getNddPrefixForRegion(RegionCode.AO, false)); 110952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("00", phoneUtil.getNddPrefixForRegion(RegionCode.AO, true)); 1110f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia // Test cases with invalid regions. 1111f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia assertEquals(null, phoneUtil.getNddPrefixForRegion(null, false)); 111252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(null, phoneUtil.getNddPrefixForRegion(RegionCode.ZZ, false)); 1113528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals(null, phoneUtil.getNddPrefixForRegion(RegionCode.UN001, false)); 1114f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia // CS is already deprecated so the library doesn't support it. 111552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(null, phoneUtil.getNddPrefixForRegion(RegionCode.CS, false)); 1116f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia } 1117f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia 11187900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia public void testIsNANPACountry() { 111952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertTrue(phoneUtil.isNANPACountry(RegionCode.US)); 112052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertTrue(phoneUtil.isNANPACountry(RegionCode.BS)); 1121249f28fc9d984e6a7d5ff05ca78d8e7ce280eb54Shaopeng Jia assertFalse(phoneUtil.isNANPACountry(RegionCode.DE)); 1122249f28fc9d984e6a7d5ff05ca78d8e7ce280eb54Shaopeng Jia assertFalse(phoneUtil.isNANPACountry(RegionCode.ZZ)); 1123528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertFalse(phoneUtil.isNANPACountry(RegionCode.UN001)); 1124249f28fc9d984e6a7d5ff05ca78d8e7ce280eb54Shaopeng Jia assertFalse(phoneUtil.isNANPACountry(null)); 11251524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 11261524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 11271524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsPossibleNumber() { 112852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertTrue(phoneUtil.isPossibleNumber(US_NUMBER)); 112952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertTrue(phoneUtil.isPossibleNumber(US_LOCAL_NUMBER)); 113052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertTrue(phoneUtil.isPossibleNumber(GB_NUMBER)); 1131528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertTrue(phoneUtil.isPossibleNumber(INTERNATIONAL_TOLL_FREE)); 113252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia 113352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertTrue(phoneUtil.isPossibleNumber("+1 650 253 0000", RegionCode.US)); 113452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertTrue(phoneUtil.isPossibleNumber("+1 650 GOO OGLE", RegionCode.US)); 113552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertTrue(phoneUtil.isPossibleNumber("(650) 253-0000", RegionCode.US)); 113652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertTrue(phoneUtil.isPossibleNumber("253-0000", RegionCode.US)); 113752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertTrue(phoneUtil.isPossibleNumber("+1 650 253 0000", RegionCode.GB)); 113852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertTrue(phoneUtil.isPossibleNumber("+44 20 7031 3000", RegionCode.GB)); 113952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertTrue(phoneUtil.isPossibleNumber("(020) 7031 3000", RegionCode.GB)); 114052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertTrue(phoneUtil.isPossibleNumber("7031 3000", RegionCode.GB)); 114152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertTrue(phoneUtil.isPossibleNumber("3331 6005", RegionCode.NZ)); 1142528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertTrue(phoneUtil.isPossibleNumber("+800 1234 5678", RegionCode.UN001)); 11431524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 11441524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 11451524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsPossibleNumberWithReason() { 1146372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // National numbers for country calling code +1 that are within 7 to 10 digits are possible. 11471524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.ValidationResult.IS_POSSIBLE, 114852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.isPossibleNumberWithReason(US_NUMBER)); 11491524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 11501524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.ValidationResult.IS_POSSIBLE, 115152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.isPossibleNumberWithReason(US_LOCAL_NUMBER)); 11521524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 115352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(PhoneNumberUtil.ValidationResult.TOO_LONG, 115452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.isPossibleNumberWithReason(US_LONG_NUMBER)); 115552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia 115652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber number = new PhoneNumber(); 115776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.setCountryCode(0).setNationalNumber(2530000L); 11581524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.ValidationResult.INVALID_COUNTRY_CODE, 115976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.isPossibleNumberWithReason(number)); 11601524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 116176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.clear(); 116276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.setCountryCode(1).setNationalNumber(253000L); 11631524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.ValidationResult.TOO_SHORT, 116476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.isPossibleNumberWithReason(number)); 11651524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 1166372bff8dd464574d36737d47e495cad14346653cShaopeng Jia number.clear(); 1167372bff8dd464574d36737d47e495cad14346653cShaopeng Jia number.setCountryCode(65).setNationalNumber(1234567890L); 1168372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals(PhoneNumberUtil.ValidationResult.IS_POSSIBLE, 1169372bff8dd464574d36737d47e495cad14346653cShaopeng Jia phoneUtil.isPossibleNumberWithReason(number)); 1170372bff8dd464574d36737d47e495cad14346653cShaopeng Jia 1171528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals(PhoneNumberUtil.ValidationResult.TOO_LONG, 1172528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.isPossibleNumberWithReason(INTERNATIONAL_TOLL_FREE_TOO_LONG)); 1173528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia 11744b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia // Try with number that we don't have metadata for. 11754b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia PhoneNumber adNumber = new PhoneNumber(); 11764b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia adNumber.setCountryCode(376).setNationalNumber(12345L); 11774b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertEquals(PhoneNumberUtil.ValidationResult.IS_POSSIBLE, 11784b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia phoneUtil.isPossibleNumberWithReason(adNumber)); 1179bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia adNumber.setCountryCode(376).setNationalNumber(1L); 11804b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertEquals(PhoneNumberUtil.ValidationResult.TOO_SHORT, 11814b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia phoneUtil.isPossibleNumberWithReason(adNumber)); 1182ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia adNumber.setCountryCode(376).setNationalNumber(12345678901234567L); 11834b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertEquals(PhoneNumberUtil.ValidationResult.TOO_LONG, 11844b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia phoneUtil.isPossibleNumberWithReason(adNumber)); 11851524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 11861524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 11871524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsNotPossibleNumber() { 118852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertFalse(phoneUtil.isPossibleNumber(US_LONG_NUMBER)); 1189528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertFalse(phoneUtil.isPossibleNumber(INTERNATIONAL_TOLL_FREE_TOO_LONG)); 11901524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 119152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber number = new PhoneNumber(); 119276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.setCountryCode(1).setNationalNumber(253000L); 119376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertFalse(phoneUtil.isPossibleNumber(number)); 11941524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 119576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.clear(); 119676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia number.setCountryCode(44).setNationalNumber(300L); 119776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertFalse(phoneUtil.isPossibleNumber(number)); 119852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertFalse(phoneUtil.isPossibleNumber("+1 650 253 00000", RegionCode.US)); 119952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertFalse(phoneUtil.isPossibleNumber("(650) 253-00000", RegionCode.US)); 120052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertFalse(phoneUtil.isPossibleNumber("I want a Pizza", RegionCode.US)); 120152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertFalse(phoneUtil.isPossibleNumber("253-000", RegionCode.US)); 120252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertFalse(phoneUtil.isPossibleNumber("1 3000", RegionCode.GB)); 120352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertFalse(phoneUtil.isPossibleNumber("+44 300", RegionCode.GB)); 1204528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertFalse(phoneUtil.isPossibleNumber("+800 1234 5678 9", RegionCode.UN001)); 12051524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 12061524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 1207df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia public void testTruncateTooLongNumber() { 1208df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia // GB number 080 1234 5678, but entered with 4 extra digits at the end. 120952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber tooLongNumber = new PhoneNumber(); 1210df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia tooLongNumber.setCountryCode(44).setNationalNumber(80123456780123L); 121152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber validNumber = new PhoneNumber(); 1212df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia validNumber.setCountryCode(44).setNationalNumber(8012345678L); 1213df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertTrue(phoneUtil.truncateTooLongNumber(tooLongNumber)); 1214df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertEquals(validNumber, tooLongNumber); 1215df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia 1216df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia // IT number 022 3456 7890, but entered with 3 extra digits at the end. 1217df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia tooLongNumber.clear(); 1218df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia tooLongNumber.setCountryCode(39).setNationalNumber(2234567890123L).setItalianLeadingZero(true); 1219df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia validNumber.clear(); 1220df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia validNumber.setCountryCode(39).setNationalNumber(2234567890L).setItalianLeadingZero(true); 1221df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertTrue(phoneUtil.truncateTooLongNumber(tooLongNumber)); 1222df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertEquals(validNumber, tooLongNumber); 1223df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia 1224528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia // US number 650-253-0000, but entered with one additional digit at the end. 1225528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia tooLongNumber.clear(); 1226528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia tooLongNumber.mergeFrom(US_LONG_NUMBER); 1227528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertTrue(phoneUtil.truncateTooLongNumber(tooLongNumber)); 1228528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals(US_NUMBER, tooLongNumber); 1229528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia 1230528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia tooLongNumber.clear(); 1231528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia tooLongNumber.mergeFrom(INTERNATIONAL_TOLL_FREE_TOO_LONG); 1232528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertTrue(phoneUtil.truncateTooLongNumber(tooLongNumber)); 1233528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals(INTERNATIONAL_TOLL_FREE, tooLongNumber); 1234528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia 1235df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia // Tests what happens when a valid number is passed in. 123652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber validNumberCopy = new PhoneNumber().mergeFrom(validNumber); 1237df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertTrue(phoneUtil.truncateTooLongNumber(validNumber)); 1238df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia // Tests the number is not modified. 1239df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertEquals(validNumberCopy, validNumber); 1240df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia 1241df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia // Tests what happens when a number with invalid prefix is passed in. 1242df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia PhoneNumber numberWithInvalidPrefix = new PhoneNumber(); 1243df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia // The test metadata says US numbers cannot have prefix 240. 1244df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia numberWithInvalidPrefix.setCountryCode(1).setNationalNumber(2401234567L); 124552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber invalidNumberCopy = new PhoneNumber().mergeFrom(numberWithInvalidPrefix); 1246df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertFalse(phoneUtil.truncateTooLongNumber(numberWithInvalidPrefix)); 1247df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia // Tests the number is not modified. 1248df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertEquals(invalidNumberCopy, numberWithInvalidPrefix); 1249df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia 1250df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia // Tests what happens when a too short number is passed in. 125152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber tooShortNumber = new PhoneNumber().setCountryCode(1).setNationalNumber(1234L); 125252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber tooShortNumberCopy = new PhoneNumber().mergeFrom(tooShortNumber); 1253df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertFalse(phoneUtil.truncateTooLongNumber(tooShortNumber)); 1254df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia // Tests the number is not modified. 1255df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia assertEquals(tooShortNumberCopy, tooShortNumber); 1256df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia } 1257df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia 12581524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsViablePhoneNumber() { 12591524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Only one or two digits before strange non-possible punctuation. 12601524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertFalse(PhoneNumberUtil.isViablePhoneNumber("12. March")); 12611524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertFalse(PhoneNumberUtil.isViablePhoneNumber("1+1+1")); 12621524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertFalse(PhoneNumberUtil.isViablePhoneNumber("80+0")); 12631524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertFalse(PhoneNumberUtil.isViablePhoneNumber("00")); 12641524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Three digits is viable. 12651524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertTrue(PhoneNumberUtil.isViablePhoneNumber("111")); 12661524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Alpha numbers. 12671524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertTrue(PhoneNumberUtil.isViablePhoneNumber("0800-4-pizza")); 12681524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertTrue(PhoneNumberUtil.isViablePhoneNumber("0800-4-PIZZA")); 1269d1db4c508088ac27cb0815a222cf2600f16ad5b9Shaopeng Jia } 1270d1db4c508088ac27cb0815a222cf2600f16ad5b9Shaopeng Jia 1271d1db4c508088ac27cb0815a222cf2600f16ad5b9Shaopeng Jia public void testIsViablePhoneNumberNonAscii() { 12721524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Only one or two digits before possible punctuation followed by more digits. 12731524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertTrue(PhoneNumberUtil.isViablePhoneNumber("1\u300034")); 12741524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertFalse(PhoneNumberUtil.isViablePhoneNumber("1\u30003+4")); 12751524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Unicode variants of possible starting character and other allowed punctuation/digits. 12761524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertTrue(PhoneNumberUtil.isViablePhoneNumber("\uFF081\uFF09\u30003456789")); 12771524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Testing a leading + is okay. 12781524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertTrue(PhoneNumberUtil.isViablePhoneNumber("+1\uFF09\u30003456789")); 12791524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 12801524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 12811524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testExtractPossibleNumber() { 12821524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Removes preceding funky punctuation and letters but leaves the rest untouched. 12831524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("0800-345-600", PhoneNumberUtil.extractPossibleNumber("Tel:0800-345-600")); 12841524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("0800 FOR PIZZA", PhoneNumberUtil.extractPossibleNumber("Tel:0800 FOR PIZZA")); 12851524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Should not remove plus sign 12861524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("+800-345-600", PhoneNumberUtil.extractPossibleNumber("Tel:+800-345-600")); 12871524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Should recognise wide digits as possible start values. 12881524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("\uFF10\uFF12\uFF13", 12891524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia PhoneNumberUtil.extractPossibleNumber("\uFF10\uFF12\uFF13")); 12901524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Dashes are not possible start values and should be removed. 12911524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("\uFF11\uFF12\uFF13", 12921524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia PhoneNumberUtil.extractPossibleNumber("Num-\uFF11\uFF12\uFF13")); 12931524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // If not possible number present, return empty string. 12941524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("", PhoneNumberUtil.extractPossibleNumber("Num-....")); 12951524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Leading brackets are stripped - these are not used when parsing. 12961524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("650) 253-0000", PhoneNumberUtil.extractPossibleNumber("(650) 253-0000")); 12977900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia 12987900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia // Trailing non-alpha-numeric characters should be removed. 12997900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia assertEquals("650) 253-0000", PhoneNumberUtil.extractPossibleNumber("(650) 253-0000..- ..")); 13007900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia assertEquals("650) 253-0000", PhoneNumberUtil.extractPossibleNumber("(650) 253-0000.")); 13017900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia // This case has a trailing RTL char. 13027900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia assertEquals("650) 253-0000", PhoneNumberUtil.extractPossibleNumber("(650) 253-0000\u200F")); 13031524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 13041524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 13051524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testMaybeStripNationalPrefix() { 130652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneMetadata metadata = new PhoneMetadata(); 130752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia metadata.setNationalPrefixForParsing("34"); 130852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia metadata.setGeneralDesc(new PhoneNumberDesc().setNationalNumberPattern("\\d{4,8}")); 1309372bff8dd464574d36737d47e495cad14346653cShaopeng Jia StringBuilder numberToStrip = new StringBuilder("34356778"); 13101524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String strippedNumber = "356778"; 1311a48b2d221ba46df7446d1a87244efa985e8e292fShaopeng Jia assertTrue(phoneUtil.maybeStripNationalPrefixAndCarrierCode(numberToStrip, metadata, null)); 13121524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Should have had national prefix stripped.", 13131524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia strippedNumber, numberToStrip.toString()); 13141524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Retry stripping - now the number should not start with the national prefix, so no more 13151524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // stripping should occur. 1316a48b2d221ba46df7446d1a87244efa985e8e292fShaopeng Jia assertFalse(phoneUtil.maybeStripNationalPrefixAndCarrierCode(numberToStrip, metadata, null)); 13171524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Should have had no change - no national prefix present.", 13181524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia strippedNumber, numberToStrip.toString()); 13191524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Some countries have no national prefix. Repeat test with none specified. 132052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia metadata.setNationalPrefixForParsing(""); 1321a48b2d221ba46df7446d1a87244efa985e8e292fShaopeng Jia assertFalse(phoneUtil.maybeStripNationalPrefixAndCarrierCode(numberToStrip, metadata, null)); 13221524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Should not strip anything with empty national prefix.", 13231524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia strippedNumber, numberToStrip.toString()); 13241524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // If the resultant number doesn't match the national rule, it shouldn't be stripped. 132552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia metadata.setNationalPrefixForParsing("3"); 1326372bff8dd464574d36737d47e495cad14346653cShaopeng Jia numberToStrip = new StringBuilder("3123"); 13271524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia strippedNumber = "3123"; 1328a48b2d221ba46df7446d1a87244efa985e8e292fShaopeng Jia assertFalse(phoneUtil.maybeStripNationalPrefixAndCarrierCode(numberToStrip, metadata, null)); 13291524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Should have had no change - after stripping, it wouldn't have matched " + 13301524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia "the national rule.", 13311524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia strippedNumber, numberToStrip.toString()); 133252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia // Test extracting carrier selection code. 133352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia metadata.setNationalPrefixForParsing("0(81)?"); 1334372bff8dd464574d36737d47e495cad14346653cShaopeng Jia numberToStrip = new StringBuilder("08122123456"); 133552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia strippedNumber = "22123456"; 1336a48b2d221ba46df7446d1a87244efa985e8e292fShaopeng Jia StringBuilder carrierCode = new StringBuilder(); 1337a48b2d221ba46df7446d1a87244efa985e8e292fShaopeng Jia assertTrue(phoneUtil.maybeStripNationalPrefixAndCarrierCode( 1338a48b2d221ba46df7446d1a87244efa985e8e292fShaopeng Jia numberToStrip, metadata, carrierCode)); 1339a48b2d221ba46df7446d1a87244efa985e8e292fShaopeng Jia assertEquals("81", carrierCode.toString()); 134052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("Should have had national prefix and carrier code stripped.", 134152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia strippedNumber, numberToStrip.toString()); 134252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia // If there was a transform rule, check it was applied. 134352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia metadata.setNationalPrefixTransformRule("5$15"); 134452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia // Note that a capturing group is present here. 134552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia metadata.setNationalPrefixForParsing("0(\\d{2})"); 1346372bff8dd464574d36737d47e495cad14346653cShaopeng Jia numberToStrip = new StringBuilder("031123"); 134752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia String transformedNumber = "5315123"; 1348a48b2d221ba46df7446d1a87244efa985e8e292fShaopeng Jia assertTrue(phoneUtil.maybeStripNationalPrefixAndCarrierCode(numberToStrip, metadata, null)); 134952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("Should transform the 031 to a 5315.", 135052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia transformedNumber, numberToStrip.toString()); 13511524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 13521524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 1353f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia public void testMaybeStripInternationalPrefix() { 13541524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String internationalPrefix = "00[39]"; 1355372bff8dd464574d36737d47e495cad14346653cShaopeng Jia StringBuilder numberToStrip = new StringBuilder("0034567700-3898003"); 13561524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Note the dash is removed as part of the normalization. 1357372bff8dd464574d36737d47e495cad14346653cShaopeng Jia StringBuilder strippedNumber = new StringBuilder("45677003898003"); 13585c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals(CountryCodeSource.FROM_NUMBER_WITH_IDD, 13595c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia phoneUtil.maybeStripInternationalPrefixAndNormalize(numberToStrip, 13605c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia internationalPrefix)); 13611524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("The number supplied was not stripped of its international prefix.", 13621524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia strippedNumber.toString(), numberToStrip.toString()); 13635c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // Now the number no longer starts with an IDD prefix, so it should now report 13645c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // FROM_DEFAULT_COUNTRY. 13655c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals(CountryCodeSource.FROM_DEFAULT_COUNTRY, 13665c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia phoneUtil.maybeStripInternationalPrefixAndNormalize(numberToStrip, 13675c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia internationalPrefix)); 13681524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 1369372bff8dd464574d36737d47e495cad14346653cShaopeng Jia numberToStrip = new StringBuilder("00945677003898003"); 13705c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals(CountryCodeSource.FROM_NUMBER_WITH_IDD, 13715c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia phoneUtil.maybeStripInternationalPrefixAndNormalize(numberToStrip, 13725c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia internationalPrefix)); 13731524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("The number supplied was not stripped of its international prefix.", 13741524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia strippedNumber.toString(), numberToStrip.toString()); 13751524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Test it works when the international prefix is broken up by spaces. 1376372bff8dd464574d36737d47e495cad14346653cShaopeng Jia numberToStrip = new StringBuilder("00 9 45677003898003"); 13775c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals(CountryCodeSource.FROM_NUMBER_WITH_IDD, 13785c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia phoneUtil.maybeStripInternationalPrefixAndNormalize(numberToStrip, 13795c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia internationalPrefix)); 13801524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("The number supplied was not stripped of its international prefix.", 13811524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia strippedNumber.toString(), numberToStrip.toString()); 13825c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // Now the number no longer starts with an IDD prefix, so it should now report 13835c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // FROM_DEFAULT_COUNTRY. 13845c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals(CountryCodeSource.FROM_DEFAULT_COUNTRY, 13855c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia phoneUtil.maybeStripInternationalPrefixAndNormalize(numberToStrip, 13865c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia internationalPrefix)); 13871524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 13881524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Test the + symbol is also recognised and stripped. 1389372bff8dd464574d36737d47e495cad14346653cShaopeng Jia numberToStrip = new StringBuilder("+45677003898003"); 1390372bff8dd464574d36737d47e495cad14346653cShaopeng Jia strippedNumber = new StringBuilder("45677003898003"); 13915c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals(CountryCodeSource.FROM_NUMBER_WITH_PLUS_SIGN, 13925c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia phoneUtil.maybeStripInternationalPrefixAndNormalize(numberToStrip, 13935c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia internationalPrefix)); 13941524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("The number supplied was not stripped of the plus symbol.", 13951524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia strippedNumber.toString(), numberToStrip.toString()); 13961524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 1397372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // If the number afterwards is a zero, we should not strip this - no country calling code begins 1398372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // with 0. 1399372bff8dd464574d36737d47e495cad14346653cShaopeng Jia numberToStrip = new StringBuilder("0090112-3123"); 1400372bff8dd464574d36737d47e495cad14346653cShaopeng Jia strippedNumber = new StringBuilder("00901123123"); 14015c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals(CountryCodeSource.FROM_DEFAULT_COUNTRY, 14025c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia phoneUtil.maybeStripInternationalPrefixAndNormalize(numberToStrip, 14035c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia internationalPrefix)); 14041524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("The number supplied had a 0 after the match so shouldn't be stripped.", 14051524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia strippedNumber.toString(), numberToStrip.toString()); 14061524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Here the 0 is separated by a space from the IDD. 1407372bff8dd464574d36737d47e495cad14346653cShaopeng Jia numberToStrip = new StringBuilder("009 0-112-3123"); 14085c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals(CountryCodeSource.FROM_DEFAULT_COUNTRY, 14095c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia phoneUtil.maybeStripInternationalPrefixAndNormalize(numberToStrip, 14105c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia internationalPrefix)); 14111524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 14121524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 14131524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testMaybeExtractCountryCode() { 141476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber number = new PhoneNumber(); 141552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneMetadata metadata = phoneUtil.getMetadataForRegion(RegionCode.US); 14161524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Note that for the US, the IDD is 011. 14171524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 14181524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String phoneNumber = "011112-3456789"; 14191524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String strippedNumber = "123456789"; 1420372bff8dd464574d36737d47e495cad14346653cShaopeng Jia int countryCallingCode = 1; 1421372bff8dd464574d36737d47e495cad14346653cShaopeng Jia StringBuilder numberToFill = new StringBuilder(); 1422372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("Did not extract country calling code " + countryCallingCode + " correctly.", 1423372bff8dd464574d36737d47e495cad14346653cShaopeng Jia countryCallingCode, 14245c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia phoneUtil.maybeExtractCountryCode(phoneNumber, metadata, numberToFill, true, 14255c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia number)); 14265c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals("Did not figure out CountryCodeSource correctly", 14275c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia CountryCodeSource.FROM_NUMBER_WITH_IDD, number.getCountryCodeSource()); 14281524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Should strip and normalize national significant number. 1429372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("Did not strip off the country calling code correctly.", 14301524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia strippedNumber, 14311524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia numberToFill.toString()); 14321524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 14331524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia fail("Should not have thrown an exception: " + e.toString()); 14341524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 14355c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia number.clear(); 14361524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 14371524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String phoneNumber = "+6423456789"; 1438372bff8dd464574d36737d47e495cad14346653cShaopeng Jia int countryCallingCode = 64; 1439372bff8dd464574d36737d47e495cad14346653cShaopeng Jia StringBuilder numberToFill = new StringBuilder(); 1440372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("Did not extract country calling code " + countryCallingCode + " correctly.", 1441372bff8dd464574d36737d47e495cad14346653cShaopeng Jia countryCallingCode, 14425c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia phoneUtil.maybeExtractCountryCode(phoneNumber, metadata, numberToFill, true, 14435c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia number)); 14445c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals("Did not figure out CountryCodeSource correctly", 14455c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia CountryCodeSource.FROM_NUMBER_WITH_PLUS_SIGN, number.getCountryCodeSource()); 14461524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 14471524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia fail("Should not have thrown an exception: " + e.toString()); 14481524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 14495c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia number.clear(); 14501524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 1451528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia String phoneNumber = "+80012345678"; 1452528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia int countryCallingCode = 800; 1453528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia StringBuilder numberToFill = new StringBuilder(); 1454528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("Did not extract country calling code " + countryCallingCode + " correctly.", 1455528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia countryCallingCode, 1456528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.maybeExtractCountryCode(phoneNumber, metadata, numberToFill, true, 1457528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia number)); 1458528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals("Did not figure out CountryCodeSource correctly", 1459528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia CountryCodeSource.FROM_NUMBER_WITH_PLUS_SIGN, number.getCountryCodeSource()); 1460528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia } catch (NumberParseException e) { 1461528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia fail("Should not have thrown an exception: " + e.toString()); 1462528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia } 1463528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia number.clear(); 1464528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia try { 14651524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String phoneNumber = "2345-6789"; 1466372bff8dd464574d36737d47e495cad14346653cShaopeng Jia StringBuilder numberToFill = new StringBuilder(); 1467372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals( 1468372bff8dd464574d36737d47e495cad14346653cShaopeng Jia "Should not have extracted a country calling code - no international prefix present.", 1469372bff8dd464574d36737d47e495cad14346653cShaopeng Jia 0, 1470372bff8dd464574d36737d47e495cad14346653cShaopeng Jia phoneUtil.maybeExtractCountryCode(phoneNumber, metadata, numberToFill, true, number)); 1471f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia assertEquals("Did not figure out CountryCodeSource correctly", 14725c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia CountryCodeSource.FROM_DEFAULT_COUNTRY, number.getCountryCodeSource()); 14731524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 14741524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia fail("Should not have thrown an exception: " + e.toString()); 14751524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 14765c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia number.clear(); 14771524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 14781524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String phoneNumber = "0119991123456789"; 1479372bff8dd464574d36737d47e495cad14346653cShaopeng Jia StringBuilder numberToFill = new StringBuilder(); 14805c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia phoneUtil.maybeExtractCountryCode(phoneNumber, metadata, numberToFill, true, number); 1481372bff8dd464574d36737d47e495cad14346653cShaopeng Jia fail("Should have thrown an exception, no valid country calling code present."); 14821524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 14831524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Expected. 14841524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Wrong error type stored in exception.", 14851524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia NumberParseException.ErrorType.INVALID_COUNTRY_CODE, 14861524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia e.getErrorType()); 14871524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 14885c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia number.clear(); 14891524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 14901524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String phoneNumber = "(1 610) 619 4466"; 1491372bff8dd464574d36737d47e495cad14346653cShaopeng Jia int countryCallingCode = 1; 1492372bff8dd464574d36737d47e495cad14346653cShaopeng Jia StringBuilder numberToFill = new StringBuilder(); 1493372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("Should have extracted the country calling code of the region passed in", 1494372bff8dd464574d36737d47e495cad14346653cShaopeng Jia countryCallingCode, 14955c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia phoneUtil.maybeExtractCountryCode(phoneNumber, metadata, numberToFill, true, 14965c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia number)); 14975c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals("Did not figure out CountryCodeSource correctly", 14985c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia CountryCodeSource.FROM_NUMBER_WITHOUT_PLUS_SIGN, 14995c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia number.getCountryCodeSource()); 15001524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 15011524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia fail("Should not have thrown an exception: " + e.toString()); 15021524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 15035c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia number.clear(); 15045c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia try { 15055c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia String phoneNumber = "(1 610) 619 4466"; 1506372bff8dd464574d36737d47e495cad14346653cShaopeng Jia int countryCallingCode = 1; 1507372bff8dd464574d36737d47e495cad14346653cShaopeng Jia StringBuilder numberToFill = new StringBuilder(); 1508372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("Should have extracted the country calling code of the region passed in", 1509372bff8dd464574d36737d47e495cad14346653cShaopeng Jia countryCallingCode, 15105c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia phoneUtil.maybeExtractCountryCode(phoneNumber, metadata, numberToFill, false, 15115c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia number)); 15125c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertFalse("Should not contain CountryCodeSource.", number.hasCountryCodeSource()); 15135c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia } catch (NumberParseException e) { 15145c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia fail("Should not have thrown an exception: " + e.toString()); 15155c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia } 15165c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia number.clear(); 15171524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 15181524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String phoneNumber = "(1 610) 619 446"; 1519372bff8dd464574d36737d47e495cad14346653cShaopeng Jia StringBuilder numberToFill = new StringBuilder(); 1520372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("Should not have extracted a country calling code - invalid number after " + 1521372bff8dd464574d36737d47e495cad14346653cShaopeng Jia "extraction of uncertain country calling code.", 15221524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 0, 15235c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia phoneUtil.maybeExtractCountryCode(phoneNumber, metadata, numberToFill, false, 15245c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia number)); 15255c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertFalse("Should not contain CountryCodeSource.", number.hasCountryCodeSource()); 15261524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 15271524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia fail("Should not have thrown an exception: " + e.toString()); 15281524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 15295c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia number.clear(); 15301524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 1531372bff8dd464574d36737d47e495cad14346653cShaopeng Jia String phoneNumber = "(1 610) 619"; 1532372bff8dd464574d36737d47e495cad14346653cShaopeng Jia StringBuilder numberToFill = new StringBuilder(); 1533372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals("Should not have extracted a country calling code - too short number both " + 1534372bff8dd464574d36737d47e495cad14346653cShaopeng Jia "before and after extraction of uncertain country calling code.", 15351524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 0, 15365c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia phoneUtil.maybeExtractCountryCode(phoneNumber, metadata, numberToFill, true, 15375c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia number)); 15385c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals("Did not figure out CountryCodeSource correctly", 15395c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia CountryCodeSource.FROM_DEFAULT_COUNTRY, number.getCountryCodeSource()); 15401524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 15411524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia fail("Should not have thrown an exception: " + e.toString()); 15421524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 15431524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 15441524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 15451524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testParseNationalNumber() throws Exception { 15461524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // National prefix attached. 154752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(NZ_NUMBER, phoneUtil.parse("033316005", RegionCode.NZ)); 154852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(NZ_NUMBER, phoneUtil.parse("33316005", RegionCode.NZ)); 15491524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // National prefix attached and some formatting present. 155052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(NZ_NUMBER, phoneUtil.parse("03-331 6005", RegionCode.NZ)); 155152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(NZ_NUMBER, phoneUtil.parse("03 331 6005", RegionCode.NZ)); 1552b210e301245cb5dc90aa3142f378632bd41cb172Shaopeng Jia // Test parsing RFC3966 format with a phone context. 1553b210e301245cb5dc90aa3142f378632bd41cb172Shaopeng Jia assertEquals(NZ_NUMBER, phoneUtil.parse("tel:03-331-6005;phone-context=+64", RegionCode.NZ)); 1554b210e301245cb5dc90aa3142f378632bd41cb172Shaopeng Jia assertEquals(NZ_NUMBER, phoneUtil.parse("tel:331-6005;phone-context=+64-3", RegionCode.NZ)); 1555b210e301245cb5dc90aa3142f378632bd41cb172Shaopeng Jia assertEquals(NZ_NUMBER, phoneUtil.parse("tel:331-6005;phone-context=+64-3", RegionCode.US)); 1556bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia // Test parsing RFC3966 format with optional user-defined parameters. The parameters will appear 1557bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia // after the context if present. 1558bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia assertEquals(NZ_NUMBER, phoneUtil.parse("tel:03-331-6005;phone-context=+64;a=%A1", 1559bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia RegionCode.NZ)); 1560bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia // Test parsing RFC3966 with an ISDN subaddress. 1561bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia assertEquals(NZ_NUMBER, phoneUtil.parse("tel:03-331-6005;isub=12345;phone-context=+64", 1562bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia RegionCode.NZ)); 1563bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia assertEquals(NZ_NUMBER, phoneUtil.parse("tel:+64-3-331-6005;isub=12345", RegionCode.NZ)); 15641524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Testing international prefixes. 1565372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // Should strip country calling code. 156652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(NZ_NUMBER, phoneUtil.parse("0064 3 331 6005", RegionCode.NZ)); 15671524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Try again, but this time we have an international number with Region Code US. It should 1568372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // recognise the country calling code and parse accordingly. 156952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(NZ_NUMBER, phoneUtil.parse("01164 3 331 6005", RegionCode.US)); 157052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(NZ_NUMBER, phoneUtil.parse("+64 3 331 6005", RegionCode.US)); 1571ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia // We should ignore the leading plus here, since it is not followed by a valid country code but 1572ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia // instead is followed by the IDD for the US. 1573ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia assertEquals(NZ_NUMBER, phoneUtil.parse("+01164 3 331 6005", RegionCode.US)); 1574ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia assertEquals(NZ_NUMBER, phoneUtil.parse("+0064 3 331 6005", RegionCode.NZ)); 1575ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia assertEquals(NZ_NUMBER, phoneUtil.parse("+ 00 64 3 331 6005", RegionCode.NZ)); 15761524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 1577bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia assertEquals(US_LOCAL_NUMBER, 1578bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia phoneUtil.parse("tel:253-0000;phone-context=www.google.com", RegionCode.US)); 1579bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia assertEquals(US_LOCAL_NUMBER, 1580bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia phoneUtil.parse("tel:253-0000;isub=12345;phone-context=www.google.com", RegionCode.US)); 1581bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia // This is invalid because no "+" sign is present as part of phone-context. The phone context 1582bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia // is simply ignored in this case just as if it contains a domain. 1583bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia assertEquals(US_LOCAL_NUMBER, 1584bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia phoneUtil.parse("tel:2530000;isub=12345;phone-context=1-650", RegionCode.US)); 1585bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia assertEquals(US_LOCAL_NUMBER, 1586bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia phoneUtil.parse("tel:2530000;isub=12345;phone-context=1234.com", RegionCode.US)); 1587bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia 158852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber nzNumber = new PhoneNumber(); 158976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia nzNumber.setCountryCode(64).setNationalNumber(64123456L); 159052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(nzNumber, phoneUtil.parse("64(0)64123456", RegionCode.NZ)); 15915c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // Check that using a "/" is fine in a phone number. 159252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(DE_NUMBER, phoneUtil.parse("301/23456", RegionCode.DE)); 15935c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 159476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber usNumber = new PhoneNumber(); 1595372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // Check it doesn't use the '1' as a country calling code when parsing if the phone number was 1596372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // already possible. 159776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia usNumber.setCountryCode(1).setNationalNumber(1234567890L); 159852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(usNumber, phoneUtil.parse("123-456-7890", RegionCode.US)); 1599cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia 1600cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia // Test star numbers. Although this is not strictly valid, we would like to make sure we can 1601cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia // parse the output we produce when formatting the number. 1602cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia assertEquals(JP_STAR_NUMBER, phoneUtil.parse("+81 *2345", RegionCode.JP)); 16035c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia } 16045c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 1605f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia public void testParseNumberWithAlphaCharacters() throws Exception { 16065c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // Test case with alpha characters. 160776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber tollfreeNumber = new PhoneNumber(); 160876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia tollfreeNumber.setCountryCode(64).setNationalNumber(800332005L); 160952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(tollfreeNumber, phoneUtil.parse("0800 DDA 005", RegionCode.NZ)); 161076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber premiumNumber = new PhoneNumber(); 161176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia premiumNumber.setCountryCode(64).setNationalNumber(9003326005L); 161252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(premiumNumber, phoneUtil.parse("0900 DDA 6005", RegionCode.NZ)); 16135c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // Not enough alpha characters for them to be considered intentional, so they are stripped. 161452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(premiumNumber, phoneUtil.parse("0900 332 6005a", RegionCode.NZ)); 161552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(premiumNumber, phoneUtil.parse("0900 332 600a5", RegionCode.NZ)); 161652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(premiumNumber, phoneUtil.parse("0900 332 600A5", RegionCode.NZ)); 161752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(premiumNumber, phoneUtil.parse("0900 a332 600A5", RegionCode.NZ)); 16185c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia } 16191524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 1620b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia public void testParseMaliciousInput() throws Exception { 1621b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia // Lots of leading + signs before the possible number. 1622b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia StringBuilder maliciousNumber = new StringBuilder(6000); 1623b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia for (int i = 0; i < 6000; i++) { 1624b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia maliciousNumber.append('+'); 1625b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia } 1626b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia maliciousNumber.append("12222-33-244 extensioB 343+"); 1627b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia try { 1628b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia phoneUtil.parse(maliciousNumber.toString(), RegionCode.US); 1629b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia fail("This should not parse without throwing an exception " + maliciousNumber); 1630b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia } catch (NumberParseException e) { 1631b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia // Expected this exception. 1632b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia assertEquals("Wrong error type stored in exception.", 1633b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia NumberParseException.ErrorType.TOO_LONG, 1634b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia e.getErrorType()); 1635b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia } 1636b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia StringBuilder maliciousNumberWithAlmostExt = new StringBuilder(6000); 1637b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia for (int i = 0; i < 350; i++) { 1638b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia maliciousNumberWithAlmostExt.append("200"); 1639b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia } 1640b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia maliciousNumberWithAlmostExt.append(" extensiOB 345"); 1641b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia try { 1642b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia phoneUtil.parse(maliciousNumberWithAlmostExt.toString(), RegionCode.US); 1643b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia fail("This should not parse without throwing an exception " + maliciousNumberWithAlmostExt); 1644b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia } catch (NumberParseException e) { 1645b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia // Expected this exception. 1646b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia assertEquals("Wrong error type stored in exception.", 1647b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia NumberParseException.ErrorType.TOO_LONG, 1648b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia e.getErrorType()); 1649b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia } 1650b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia } 1651b0e21c22b1ca6b9aeb1426924cdf42a221c3d416Shaopeng Jia 16525c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia public void testParseWithInternationalPrefixes() throws Exception { 165352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(US_NUMBER, phoneUtil.parse("+1 (650) 253-0000", RegionCode.NZ)); 1654528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals(INTERNATIONAL_TOLL_FREE, phoneUtil.parse("011 800 1234 5678", RegionCode.US)); 165552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(US_NUMBER, phoneUtil.parse("1-650-253-0000", RegionCode.US)); 16561524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Calling the US number from Singapore by using different service providers 16571524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // 1st test: calling using SingTel IDD service (IDD is 001) 165852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(US_NUMBER, phoneUtil.parse("0011-650-253-0000", RegionCode.SG)); 16591524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // 2nd test: calling using StarHub IDD service (IDD is 008) 166052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(US_NUMBER, phoneUtil.parse("0081-650-253-0000", RegionCode.SG)); 16611524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // 3rd test: calling using SingTel V019 service (IDD is 019) 166252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(US_NUMBER, phoneUtil.parse("0191-650-253-0000", RegionCode.SG)); 16631524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Calling the US number from Poland 166452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(US_NUMBER, phoneUtil.parse("0~01-650-253-0000", RegionCode.PL)); 1665256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie // Using "++" at the start. 166652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(US_NUMBER, phoneUtil.parse("++1 (650) 253-0000", RegionCode.PL)); 1667d1db4c508088ac27cb0815a222cf2600f16ad5b9Shaopeng Jia } 1668d1db4c508088ac27cb0815a222cf2600f16ad5b9Shaopeng Jia 1669d1db4c508088ac27cb0815a222cf2600f16ad5b9Shaopeng Jia public void testParseNonAscii() throws Exception { 1670256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie // Using a full-width plus sign. 167152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(US_NUMBER, phoneUtil.parse("\uFF0B1 (650) 253-0000", RegionCode.SG)); 1672bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia // Using a soft hyphen U+00AD. 1673bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia assertEquals(US_NUMBER, phoneUtil.parse("1 (650) 253\u00AD-0000", RegionCode.US)); 1674256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie // The whole number, including punctuation, is here represented in full-width form. 167552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(US_NUMBER, phoneUtil.parse("\uFF0B\uFF11\u3000\uFF08\uFF16\uFF15\uFF10\uFF09" + 167652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia "\u3000\uFF12\uFF15\uFF13\uFF0D\uFF10\uFF10\uFF10" + 167752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia "\uFF10", 167852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia RegionCode.SG)); 167974aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia // Using U+30FC dash instead. 168052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(US_NUMBER, phoneUtil.parse("\uFF0B\uFF11\u3000\uFF08\uFF16\uFF15\uFF10\uFF09" + 168152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia "\u3000\uFF12\uFF15\uFF13\u30FC\uFF10\uFF10\uFF10" + 168252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia "\uFF10", 168352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia RegionCode.SG)); 1684d1db4c508088ac27cb0815a222cf2600f16ad5b9Shaopeng Jia 1685d1db4c508088ac27cb0815a222cf2600f16ad5b9Shaopeng Jia // Using a very strange decimal digit range (Mongolian digits). 1686d1db4c508088ac27cb0815a222cf2600f16ad5b9Shaopeng Jia assertEquals(US_NUMBER, phoneUtil.parse("\u1811 \u1816\u1815\u1810 " + 1687d1db4c508088ac27cb0815a222cf2600f16ad5b9Shaopeng Jia "\u1812\u1815\u1813 \u1810\u1810\u1810\u1810", 1688d1db4c508088ac27cb0815a222cf2600f16ad5b9Shaopeng Jia RegionCode.US)); 16895c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia } 16901524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 16915c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia public void testParseWithLeadingZero() throws Exception { 169252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(IT_NUMBER, phoneUtil.parse("+39 02-36618 300", RegionCode.NZ)); 169352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(IT_NUMBER, phoneUtil.parse("02-36618 300", RegionCode.IT)); 16941524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 169552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(IT_MOBILE, phoneUtil.parse("345 678 901", RegionCode.IT)); 16965c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia } 16971524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 16985c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia public void testParseNationalNumberArgentina() throws Exception { 16991524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Test parsing mobile numbers of Argentina. 170076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber arNumber = new PhoneNumber(); 170176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia arNumber.setCountryCode(54).setNationalNumber(93435551212L); 170252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(arNumber, phoneUtil.parse("+54 9 343 555 1212", RegionCode.AR)); 170352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(arNumber, phoneUtil.parse("0343 15 555 1212", RegionCode.AR)); 17041524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 170576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia arNumber.clear(); 170676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia arNumber.setCountryCode(54).setNationalNumber(93715654320L); 170752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(arNumber, phoneUtil.parse("+54 9 3715 65 4320", RegionCode.AR)); 170852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(arNumber, phoneUtil.parse("03715 15 65 4320", RegionCode.AR)); 170952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(AR_MOBILE, phoneUtil.parse("911 876 54321", RegionCode.AR)); 17101524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 17111524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Test parsing fixed-line numbers of Argentina. 171252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(AR_NUMBER, phoneUtil.parse("+54 11 8765 4321", RegionCode.AR)); 171352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(AR_NUMBER, phoneUtil.parse("011 8765 4321", RegionCode.AR)); 17141524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 171576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia arNumber.clear(); 171676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia arNumber.setCountryCode(54).setNationalNumber(3715654321L); 171752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(arNumber, phoneUtil.parse("+54 3715 65 4321", RegionCode.AR)); 171852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(arNumber, phoneUtil.parse("03715 65 4321", RegionCode.AR)); 17191524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 172076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia arNumber.clear(); 172176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia arNumber.setCountryCode(54).setNationalNumber(2312340000L); 172252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(arNumber, phoneUtil.parse("+54 23 1234 0000", RegionCode.AR)); 172352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(arNumber, phoneUtil.parse("023 1234 0000", RegionCode.AR)); 17245c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia } 17251524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 17265c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia public void testParseWithXInNumber() throws Exception { 17271524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Test that having an 'x' in the phone number at the start is ok and that it just gets removed. 172852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(AR_NUMBER, phoneUtil.parse("01187654321", RegionCode.AR)); 172952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(AR_NUMBER, phoneUtil.parse("(0) 1187654321", RegionCode.AR)); 173052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(AR_NUMBER, phoneUtil.parse("0 1187654321", RegionCode.AR)); 173152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(AR_NUMBER, phoneUtil.parse("(0xx) 1187654321", RegionCode.AR)); 173276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber arFromUs = new PhoneNumber(); 173376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia arFromUs.setCountryCode(54).setNationalNumber(81429712L); 17341524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // This test is intentionally constructed such that the number of digit after xx is larger than 17351524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // 7, so that the number won't be mistakenly treated as an extension, as we allow extensions up 17361524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // to 7 digits. This assumption is okay for now as all the countries where a carrier selection 17371524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // code is written in the form of xx have a national significant number of length larger than 7. 173852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(arFromUs, phoneUtil.parse("011xx5481429712", RegionCode.US)); 17395c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia } 17401524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 17415c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia public void testParseNumbersMexico() throws Exception { 17421524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Test parsing fixed-line numbers of Mexico. 174376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber mxNumber = new PhoneNumber(); 174476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia mxNumber.setCountryCode(52).setNationalNumber(4499780001L); 174552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(mxNumber, phoneUtil.parse("+52 (449)978-0001", RegionCode.MX)); 174652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(mxNumber, phoneUtil.parse("01 (449)978-0001", RegionCode.MX)); 174752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(mxNumber, phoneUtil.parse("(449)978-0001", RegionCode.MX)); 17481524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 17491524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Test parsing mobile numbers of Mexico. 175076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia mxNumber.clear(); 175176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia mxNumber.setCountryCode(52).setNationalNumber(13312345678L); 175252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(mxNumber, phoneUtil.parse("+52 1 33 1234-5678", RegionCode.MX)); 175352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(mxNumber, phoneUtil.parse("044 (33) 1234-5678", RegionCode.MX)); 175452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(mxNumber, phoneUtil.parse("045 33 1234-5678", RegionCode.MX)); 17551524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 17561524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 17571524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testFailedParseOnInvalidNumbers() { 17581524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 17591524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String sentencePhoneNumber = "This is not a phone number"; 176052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.parse(sentencePhoneNumber, RegionCode.NZ); 17611524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia fail("This should not parse without throwing an exception " + sentencePhoneNumber); 17621524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 17631524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Expected this exception. 17641524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Wrong error type stored in exception.", 17651524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia NumberParseException.ErrorType.NOT_A_NUMBER, 17661524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia e.getErrorType()); 17671524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 17681524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 17691524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String tooLongPhoneNumber = "01495 72553301873 810104"; 177052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.parse(tooLongPhoneNumber, RegionCode.GB); 17711524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia fail("This should not parse without throwing an exception " + tooLongPhoneNumber); 17721524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 17731524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Expected this exception. 17741524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Wrong error type stored in exception.", 17751524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia NumberParseException.ErrorType.TOO_LONG, 17761524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia e.getErrorType()); 17771524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 17781524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 17794b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia String plusMinusPhoneNumber = "+---"; 178052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.parse(plusMinusPhoneNumber, RegionCode.DE); 17814b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia fail("This should not parse without throwing an exception " + plusMinusPhoneNumber); 17824b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia } catch (NumberParseException e) { 17834b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia // Expected this exception. 17844b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertEquals("Wrong error type stored in exception.", 17854b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia NumberParseException.ErrorType.NOT_A_NUMBER, 17864b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia e.getErrorType()); 17874b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia } 17884b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia try { 1789cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia String plusStar = "+***"; 1790cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia phoneUtil.parse(plusStar, RegionCode.DE); 1791cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia fail("This should not parse without throwing an exception " + plusStar); 1792cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia } catch (NumberParseException e) { 1793cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia // Expected this exception. 1794cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia assertEquals("Wrong error type stored in exception.", 1795cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia NumberParseException.ErrorType.NOT_A_NUMBER, 1796cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia e.getErrorType()); 1797cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia } 1798cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia try { 1799cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia String plusStarPhoneNumber = "+*******91"; 1800cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia phoneUtil.parse(plusStarPhoneNumber, RegionCode.DE); 1801cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia fail("This should not parse without throwing an exception " + plusStarPhoneNumber); 1802cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia } catch (NumberParseException e) { 1803cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia // Expected this exception. 1804cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia assertEquals("Wrong error type stored in exception.", 1805cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia NumberParseException.ErrorType.NOT_A_NUMBER, 1806cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia e.getErrorType()); 1807cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia } 1808cc0ae7326023c5da91dd9a84035c3dc3f6cc372fShaopeng Jia try { 18091524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String tooShortPhoneNumber = "+49 0"; 181052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.parse(tooShortPhoneNumber, RegionCode.DE); 18111524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia fail("This should not parse without throwing an exception " + tooShortPhoneNumber); 18121524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 18131524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Expected this exception. 18141524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Wrong error type stored in exception.", 18151524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia NumberParseException.ErrorType.TOO_SHORT_NSN, 18161524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia e.getErrorType()); 18171524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 18181524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 18191524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String invalidCountryCode = "+210 3456 56789"; 182052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.parse(invalidCountryCode, RegionCode.NZ); 1821372bff8dd464574d36737d47e495cad14346653cShaopeng Jia fail("This is not a recognised region code: should fail: " + invalidCountryCode); 18221524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 18231524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Expected this exception. 18241524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Wrong error type stored in exception.", 18251524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia NumberParseException.ErrorType.INVALID_COUNTRY_CODE, 18261524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia e.getErrorType()); 18271524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 18281524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 1829ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia String plusAndIddAndInvalidCountryCode = "+ 00 210 3 331 6005"; 1830ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia phoneUtil.parse(plusAndIddAndInvalidCountryCode, RegionCode.NZ); 1831ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia fail("This should not parse without throwing an exception."); 1832ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia } catch (NumberParseException e) { 1833ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia // Expected this exception. 00 is a correct IDD, but 210 is not a valid country code. 1834ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia assertEquals("Wrong error type stored in exception.", 1835ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia NumberParseException.ErrorType.INVALID_COUNTRY_CODE, 1836ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia e.getErrorType()); 1837ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia } 1838ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia try { 18391524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String someNumber = "123 456 7890"; 1840372bff8dd464574d36737d47e495cad14346653cShaopeng Jia phoneUtil.parse(someNumber, RegionCode.ZZ); 1841372bff8dd464574d36737d47e495cad14346653cShaopeng Jia fail("'Unknown' region code not allowed: should fail."); 18421524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 18431524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Expected this exception. 18441524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Wrong error type stored in exception.", 18451524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia NumberParseException.ErrorType.INVALID_COUNTRY_CODE, 18461524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia e.getErrorType()); 18471524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 18481524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 18491524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String someNumber = "123 456 7890"; 185052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.parse(someNumber, RegionCode.CS); 1851372bff8dd464574d36737d47e495cad14346653cShaopeng Jia fail("Deprecated region code not allowed: should fail."); 18524b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia } catch (NumberParseException e) { 18534b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia // Expected this exception. 18544b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertEquals("Wrong error type stored in exception.", 18554b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia NumberParseException.ErrorType.INVALID_COUNTRY_CODE, 18564b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia e.getErrorType()); 18574b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia } 18584b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia try { 18594b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia String someNumber = "123 456 7890"; 18601524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.parse(someNumber, null); 1861372bff8dd464574d36737d47e495cad14346653cShaopeng Jia fail("Null region code not allowed: should fail."); 18621524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 18631524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Expected this exception. 18641524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Wrong error type stored in exception.", 18651524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia NumberParseException.ErrorType.INVALID_COUNTRY_CODE, 18661524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia e.getErrorType()); 18671524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 18681524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 18691524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String someNumber = "0044------"; 187052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.parse(someNumber, RegionCode.GB); 1871372bff8dd464574d36737d47e495cad14346653cShaopeng Jia fail("No number provided, only region code: should fail"); 18721524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 18731524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Expected this exception. 18741524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Wrong error type stored in exception.", 18751524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia NumberParseException.ErrorType.TOO_SHORT_AFTER_IDD, 18761524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia e.getErrorType()); 18771524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 18781524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 18791524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String someNumber = "0044"; 188052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.parse(someNumber, RegionCode.GB); 1881372bff8dd464574d36737d47e495cad14346653cShaopeng Jia fail("No number provided, only region code: should fail"); 18821524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 18831524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Expected this exception. 18841524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Wrong error type stored in exception.", 18851524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia NumberParseException.ErrorType.TOO_SHORT_AFTER_IDD, 18861524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia e.getErrorType()); 18871524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 18881524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 18891524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String someNumber = "011"; 189052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.parse(someNumber, RegionCode.US); 18911524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia fail("Only IDD provided - should fail."); 18921524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 18931524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Expected this exception. 18941524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Wrong error type stored in exception.", 18951524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia NumberParseException.ErrorType.TOO_SHORT_AFTER_IDD, 18961524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia e.getErrorType()); 18971524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 18981524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia try { 18991524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia String someNumber = "0119"; 190052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.parse(someNumber, RegionCode.US); 19011524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia fail("Only IDD provided and then 9 - should fail."); 19021524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } catch (NumberParseException e) { 19031524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Expected this exception. 19041524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("Wrong error type stored in exception.", 19051524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia NumberParseException.ErrorType.TOO_SHORT_AFTER_IDD, 19061524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia e.getErrorType()); 19071524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 1908256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie try { 1909256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie String emptyNumber = ""; 1910256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie // Invalid region. 191152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.parse(emptyNumber, RegionCode.ZZ); 1912256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie fail("Empty string - should fail."); 1913256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie } catch (NumberParseException e) { 1914256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie // Expected this exception. 1915256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("Wrong error type stored in exception.", 1916256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie NumberParseException.ErrorType.NOT_A_NUMBER, 1917256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie e.getErrorType()); 1918256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie } 191974aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia try { 192074aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia String nullNumber = null; 192174aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia // Invalid region. 192252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.parse(nullNumber, RegionCode.ZZ); 192374aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia fail("Null string - should fail."); 192474aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia } catch (NumberParseException e) { 192574aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia // Expected this exception. 192674aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia assertEquals("Wrong error type stored in exception.", 192774aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia NumberParseException.ErrorType.NOT_A_NUMBER, 192874aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia e.getErrorType()); 192974aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia } catch (NullPointerException e) { 193074aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia fail("Null string - but should not throw a null pointer exception."); 193174aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia } 193274aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia try { 193374aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia String nullNumber = null; 193452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.parse(nullNumber, RegionCode.US); 193574aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia fail("Null string - should fail."); 193674aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia } catch (NumberParseException e) { 193774aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia // Expected this exception. 193874aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia assertEquals("Wrong error type stored in exception.", 193974aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia NumberParseException.ErrorType.NOT_A_NUMBER, 194074aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia e.getErrorType()); 194174aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia } catch (NullPointerException e) { 194274aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia fail("Null string - but should not throw a null pointer exception."); 194374aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia } 1944b210e301245cb5dc90aa3142f378632bd41cb172Shaopeng Jia try { 1945bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia String domainRfcPhoneContext = "tel:555-1234;phone-context=www.google.com"; 1946bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia phoneUtil.parse(domainRfcPhoneContext, RegionCode.ZZ); 1947bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia fail("'Unknown' region code not allowed: should fail."); 1948b210e301245cb5dc90aa3142f378632bd41cb172Shaopeng Jia } catch (NumberParseException e) { 1949b210e301245cb5dc90aa3142f378632bd41cb172Shaopeng Jia // Expected this exception. 1950b210e301245cb5dc90aa3142f378632bd41cb172Shaopeng Jia assertEquals("Wrong error type stored in exception.", 1951bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia NumberParseException.ErrorType.INVALID_COUNTRY_CODE, 1952b210e301245cb5dc90aa3142f378632bd41cb172Shaopeng Jia e.getErrorType()); 1953b210e301245cb5dc90aa3142f378632bd41cb172Shaopeng Jia } 1954b210e301245cb5dc90aa3142f378632bd41cb172Shaopeng Jia try { 1955b210e301245cb5dc90aa3142f378632bd41cb172Shaopeng Jia // This is invalid because no "+" sign is present as part of phone-context. This should not 1956b210e301245cb5dc90aa3142f378632bd41cb172Shaopeng Jia // succeed in being parsed. 1957bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia String invalidRfcPhoneContext = "tel:555-1234;phone-context=1-331"; 1958bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia phoneUtil.parse(invalidRfcPhoneContext, RegionCode.ZZ); 1959bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia fail("'Unknown' region code not allowed: should fail."); 1960b210e301245cb5dc90aa3142f378632bd41cb172Shaopeng Jia } catch (NumberParseException e) { 1961b210e301245cb5dc90aa3142f378632bd41cb172Shaopeng Jia // Expected this exception. 1962b210e301245cb5dc90aa3142f378632bd41cb172Shaopeng Jia assertEquals("Wrong error type stored in exception.", 1963bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia NumberParseException.ErrorType.INVALID_COUNTRY_CODE, 1964b210e301245cb5dc90aa3142f378632bd41cb172Shaopeng Jia e.getErrorType()); 1965b210e301245cb5dc90aa3142f378632bd41cb172Shaopeng Jia } 19661524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 19671524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 19684b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia public void testParseNumbersWithPlusWithNoRegion() throws Exception { 1969372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // RegionCode.ZZ is allowed only if the number starts with a '+' - then the country calling code 1970372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // can be calculated. 197152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(NZ_NUMBER, phoneUtil.parse("+64 3 331 6005", RegionCode.ZZ)); 197274aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia // Test with full-width plus. 197352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(NZ_NUMBER, phoneUtil.parse("\uFF0B64 3 331 6005", RegionCode.ZZ)); 197474aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia // Test with normal plus but leading characters that need to be stripped. 197552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(NZ_NUMBER, phoneUtil.parse("Tel: +64 3 331 6005", RegionCode.ZZ)); 197652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(NZ_NUMBER, phoneUtil.parse("+64 3 331 6005", null)); 1977528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals(INTERNATIONAL_TOLL_FREE, phoneUtil.parse("+800 1234 5678", null)); 1978bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia assertEquals(UNIVERSAL_PREMIUM_RATE, phoneUtil.parse("+979 123 456 789", null)); 197952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia 1980b210e301245cb5dc90aa3142f378632bd41cb172Shaopeng Jia // Test parsing RFC3966 format with a phone context. 1981b210e301245cb5dc90aa3142f378632bd41cb172Shaopeng Jia assertEquals(NZ_NUMBER, phoneUtil.parse("tel:03-331-6005;phone-context=+64", RegionCode.ZZ)); 1982b210e301245cb5dc90aa3142f378632bd41cb172Shaopeng Jia assertEquals(NZ_NUMBER, phoneUtil.parse(" tel:03-331-6005;phone-context=+64", RegionCode.ZZ)); 1983bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia assertEquals(NZ_NUMBER, phoneUtil.parse("tel:03-331-6005;isub=12345;phone-context=+64", 1984bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia RegionCode.ZZ)); 1985b210e301245cb5dc90aa3142f378632bd41cb172Shaopeng Jia 198652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia // It is important that we set the carrier code to an empty string, since we used 198752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia // ParseAndKeepRawInput and no carrier code was found. 198852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber nzNumberWithRawInput = new PhoneNumber().mergeFrom(NZ_NUMBER). 198952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia setRawInput("+64 3 331 6005"). 199052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia setCountryCodeSource(CountryCodeSource.FROM_NUMBER_WITH_PLUS_SIGN). 199152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia setPreferredDomesticCarrierCode(""); 199252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(nzNumberWithRawInput, phoneUtil.parseAndKeepRawInput("+64 3 331 6005", 199352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia RegionCode.ZZ)); 19944b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia // Null is also allowed for the region code in these cases. 199552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(nzNumberWithRawInput, phoneUtil.parseAndKeepRawInput("+64 3 331 6005", null)); 19964b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia } 19974b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia 19981524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testParseExtensions() throws Exception { 199976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber nzNumber = new PhoneNumber(); 200076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia nzNumber.setCountryCode(64).setNationalNumber(33316005L).setExtension("3456"); 200152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(nzNumber, phoneUtil.parse("03 331 6005 ext 3456", RegionCode.NZ)); 200252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(nzNumber, phoneUtil.parse("03-3316005x3456", RegionCode.NZ)); 200352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(nzNumber, phoneUtil.parse("03-3316005 int.3456", RegionCode.NZ)); 200452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(nzNumber, phoneUtil.parse("03 3316005 #3456", RegionCode.NZ)); 20051524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Test the following do not extract extensions: 200652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(ALPHA_NUMERIC_NUMBER, phoneUtil.parse("1800 six-flags", RegionCode.US)); 200752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(ALPHA_NUMERIC_NUMBER, phoneUtil.parse("1800 SIX FLAGS", RegionCode.US)); 200852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(ALPHA_NUMERIC_NUMBER, phoneUtil.parse("0~0 1800 7493 5247", RegionCode.PL)); 200952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(ALPHA_NUMERIC_NUMBER, phoneUtil.parse("(1800) 7493.5247", RegionCode.US)); 20101524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Check that the last instance of an extension token is matched. 201152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber extnNumber = new PhoneNumber().mergeFrom(ALPHA_NUMERIC_NUMBER).setExtension("1234"); 201252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(extnNumber, phoneUtil.parse("0~0 1800 7493 5247 ~1234", RegionCode.PL)); 20131524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Verifying bug-fix where the last digit of a number was previously omitted if it was a 0 when 20141524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // extracting the extension. Also verifying a few different cases of extensions. 201576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber ukNumber = new PhoneNumber(); 201676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia ukNumber.setCountryCode(44).setNationalNumber(2034567890L).setExtension("456"); 201752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(ukNumber, phoneUtil.parse("+44 2034567890x456", RegionCode.NZ)); 201852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(ukNumber, phoneUtil.parse("+44 2034567890x456", RegionCode.GB)); 201952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(ukNumber, phoneUtil.parse("+44 2034567890 x456", RegionCode.GB)); 202052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(ukNumber, phoneUtil.parse("+44 2034567890 X456", RegionCode.GB)); 202152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(ukNumber, phoneUtil.parse("+44 2034567890 X 456", RegionCode.GB)); 202252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(ukNumber, phoneUtil.parse("+44 2034567890 X 456", RegionCode.GB)); 202352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(ukNumber, phoneUtil.parse("+44 2034567890 x 456 ", RegionCode.GB)); 202452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(ukNumber, phoneUtil.parse("+44 2034567890 X 456", RegionCode.GB)); 2025372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertEquals(ukNumber, phoneUtil.parse("+44-2034567890;ext=456", RegionCode.GB)); 2026b210e301245cb5dc90aa3142f378632bd41cb172Shaopeng Jia assertEquals(ukNumber, phoneUtil.parse("tel:2034567890;ext=456;phone-context=+44", 2027b210e301245cb5dc90aa3142f378632bd41cb172Shaopeng Jia RegionCode.ZZ)); 2028528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia // Full-width extension, "extn" only. 2029528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals(ukNumber, phoneUtil.parse("+442034567890\uFF45\uFF58\uFF54\uFF4E456", 2030528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia RegionCode.GB)); 2031528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia // "xtn" only. 2032528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals(ukNumber, phoneUtil.parse("+442034567890\uFF58\uFF54\uFF4E456", 2033528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia RegionCode.GB)); 2034528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia // "xt" only. 2035528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals(ukNumber, phoneUtil.parse("+442034567890\uFF58\uFF54456", 2036528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia RegionCode.GB)); 20371524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 203876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber usWithExtension = new PhoneNumber(); 203976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia usWithExtension.setCountryCode(1).setNationalNumber(8009013355L).setExtension("7246433"); 204052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(usWithExtension, phoneUtil.parse("(800) 901-3355 x 7246433", RegionCode.US)); 204152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(usWithExtension, phoneUtil.parse("(800) 901-3355 , ext 7246433", RegionCode.US)); 20421524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(usWithExtension, 204352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.parse("(800) 901-3355 ,extension 7246433", RegionCode.US)); 204474aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia assertEquals(usWithExtension, 204552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.parse("(800) 901-3355 ,extensi\u00F3n 7246433", RegionCode.US)); 204674aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia // Repeat with the small letter o with acute accent created by combining characters. 204774aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia assertEquals(usWithExtension, 204852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.parse("(800) 901-3355 ,extensio\u0301n 7246433", RegionCode.US)); 204952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(usWithExtension, phoneUtil.parse("(800) 901-3355 , 7246433", RegionCode.US)); 205052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(usWithExtension, phoneUtil.parse("(800) 901-3355 ext: 7246433", RegionCode.US)); 20515c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 20525c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // Test that if a number has two extensions specified, we ignore the second. 205376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber usWithTwoExtensionsNumber = new PhoneNumber(); 205476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia usWithTwoExtensionsNumber.setCountryCode(1).setNationalNumber(2121231234L).setExtension("508"); 20555c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals(usWithTwoExtensionsNumber, phoneUtil.parse("(212)123-1234 x508/x1234", 205652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia RegionCode.US)); 20575c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals(usWithTwoExtensionsNumber, phoneUtil.parse("(212)123-1234 x508/ x1234", 205852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia RegionCode.US)); 20595c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia assertEquals(usWithTwoExtensionsNumber, phoneUtil.parse("(212)123-1234 x508\\x1234", 206052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia RegionCode.US)); 20615c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 20625c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // Test parsing numbers in the form (645) 123-1234-910# works, where the last 3 digits before 20635c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // the # are an extension. 206476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia usWithExtension.clear(); 206576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia usWithExtension.setCountryCode(1).setNationalNumber(6451231234L).setExtension("910"); 206652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(usWithExtension, phoneUtil.parse("+1 (645) 123 1234-910#", RegionCode.US)); 20677c2324a9b0c98842a8f34ee79226c6606f843aafShaopeng Jia // Retry with the same number in a slightly different format. 206852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(usWithExtension, phoneUtil.parse("+1 (645) 123 1234 ext. 910#", RegionCode.US)); 20691524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 20701524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 20717900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia public void testParseAndKeepRaw() throws Exception { 207252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber alphaNumericNumber = new PhoneNumber().mergeFrom(ALPHA_NUMERIC_NUMBER). 207352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia setRawInput("800 six-flags"). 207452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia setCountryCodeSource(CountryCodeSource.FROM_DEFAULT_COUNTRY). 207552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia setPreferredDomesticCarrierCode(""); 207676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertEquals(alphaNumericNumber, 207752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.parseAndKeepRawInput("800 six-flags", RegionCode.US)); 20785c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 207952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber shorterAlphaNumber = new PhoneNumber(). 208052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia setCountryCode(1).setNationalNumber(8007493524L). 208152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia setRawInput("1800 six-flag"). 208252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia setCountryCodeSource(CountryCodeSource.FROM_NUMBER_WITHOUT_PLUS_SIGN). 208352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia setPreferredDomesticCarrierCode(""); 208452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(shorterAlphaNumber, 208552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.parseAndKeepRawInput("1800 six-flag", RegionCode.US)); 20865c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 208752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia shorterAlphaNumber.setRawInput("+1800 six-flag"). 208876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia setCountryCodeSource(CountryCodeSource.FROM_NUMBER_WITH_PLUS_SIGN); 208952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(shorterAlphaNumber, 209052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.parseAndKeepRawInput("+1800 six-flag", RegionCode.NZ)); 20915c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 209252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia shorterAlphaNumber.setRawInput("001800 six-flag"). 209376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia setCountryCodeSource(CountryCodeSource.FROM_NUMBER_WITH_IDD); 209452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(shorterAlphaNumber, 209552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.parseAndKeepRawInput("001800 six-flag", RegionCode.NZ)); 20964b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia 20974b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia // Invalid region code supplied. 20984b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia try { 209952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.parseAndKeepRawInput("123 456 7890", RegionCode.CS); 2100372bff8dd464574d36737d47e495cad14346653cShaopeng Jia fail("Deprecated region code not allowed: should fail."); 21014b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia } catch (NumberParseException e) { 21024b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia // Expected this exception. 21034b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia assertEquals("Wrong error type stored in exception.", 21044b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia NumberParseException.ErrorType.INVALID_COUNTRY_CODE, 21054b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia e.getErrorType()); 21064b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia } 210752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia 210852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber koreanNumber = new PhoneNumber(); 210952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia koreanNumber.setCountryCode(82).setNationalNumber(22123456).setRawInput("08122123456"). 211052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia setCountryCodeSource(CountryCodeSource.FROM_DEFAULT_COUNTRY). 211152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia setPreferredDomesticCarrierCode("81"); 211252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(koreanNumber, phoneUtil.parseAndKeepRawInput("08122123456", RegionCode.KR)); 21137900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia } 21147900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia 21151524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testCountryWithNoNumberDesc() { 21165c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia // Andorra is a country where we don't have PhoneNumberDesc info in the metadata. 211776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber adNumber = new PhoneNumber(); 211876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia adNumber.setCountryCode(376).setNationalNumber(12345L); 2119256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+376 12345", phoneUtil.format(adNumber, PhoneNumberFormat.INTERNATIONAL)); 2120256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("+37612345", phoneUtil.format(adNumber, PhoneNumberFormat.E164)); 2121256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie assertEquals("12345", phoneUtil.format(adNumber, PhoneNumberFormat.NATIONAL)); 2122f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia assertEquals(PhoneNumberUtil.PhoneNumberType.UNKNOWN, phoneUtil.getNumberType(adNumber)); 21231524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertTrue(phoneUtil.isValidNumber(adNumber)); 21241524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 21251524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Test dialing a US number from within Andorra. 21261524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals("00 1 650 253 0000", 212752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.formatOutOfCountryCallingNumber(US_NUMBER, RegionCode.AD)); 21281524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 21291524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 21301524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testUnknownCountryCallingCodeForValidation() { 213176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber invalidNumber = new PhoneNumber(); 21321524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia invalidNumber.setCountryCode(0).setNationalNumber(1234L); 213376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia assertFalse(phoneUtil.isValidNumber(invalidNumber)); 21341524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 21351524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 21361524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsNumberMatchMatches() throws Exception { 2137372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // Test simple matches where formatting is different, or leading zeroes, or country calling code 2138372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // has been specified. 21391524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.EXACT_MATCH, 21401524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("+64 3 331 6005", "+64 03 331 6005")); 21411524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.EXACT_MATCH, 2142528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.isNumberMatch("+800 1234 5678", "+80012345678")); 2143528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals(PhoneNumberUtil.MatchType.EXACT_MATCH, 21441524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("+64 03 331-6005", "+64 03331 6005")); 21451524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.EXACT_MATCH, 21461524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("+643 331-6005", "+64033316005")); 21471524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.EXACT_MATCH, 21481524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("+643 331-6005", "+6433316005")); 21491524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.EXACT_MATCH, 21501524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("+64 3 331-6005", "+6433316005")); 2151bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.EXACT_MATCH, 2152bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia phoneUtil.isNumberMatch("+64 3 331-6005", "tel:+64-3-331-6005;isub=123")); 21531524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Test alpha numbers. 21541524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.EXACT_MATCH, 21551524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("+1800 siX-Flags", "+1 800 7493 5247")); 21561524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Test numbers with extensions. 21571524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.EXACT_MATCH, 21581524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("+64 3 331-6005 extn 1234", "+6433316005#1234")); 21591524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Test proto buffers. 21601524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.EXACT_MATCH, 216152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.isNumberMatch(NZ_NUMBER, "+6403 331 6005")); 216252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia 216352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber nzNumber = new PhoneNumber().mergeFrom(NZ_NUMBER).setExtension("3456"); 21641524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.EXACT_MATCH, 216552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.isNumberMatch(nzNumber, "+643 331 6005 ext 3456")); 21661524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Check empty extensions are ignored. 216776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia nzNumber.setExtension(""); 21681524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.EXACT_MATCH, 216976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.isNumberMatch(nzNumber, "+6403 331 6005")); 21701524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Check variant with two proto buffers. 217152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals("Number " + nzNumber.toString() + " did not match " + NZ_NUMBER.toString(), 21721524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia PhoneNumberUtil.MatchType.EXACT_MATCH, 217352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.isNumberMatch(nzNumber, NZ_NUMBER)); 217452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia 217552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia // Check raw_input, country_code_source and preferred_domestic_carrier_code are ignored. 217652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber brNumberOne = new PhoneNumber(); 217752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber brNumberTwo = new PhoneNumber(); 217852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia brNumberOne.setCountryCode(55).setNationalNumber(3121286979L) 217952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia .setCountryCodeSource(PhoneNumber.CountryCodeSource.FROM_NUMBER_WITH_PLUS_SIGN) 218052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia .setPreferredDomesticCarrierCode("12").setRawInput("012 3121286979"); 218152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia brNumberTwo.setCountryCode(55).setNationalNumber(3121286979L) 218252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia .setCountryCodeSource(PhoneNumber.CountryCodeSource.FROM_DEFAULT_COUNTRY) 218352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia .setPreferredDomesticCarrierCode("14").setRawInput("143121286979"); 218452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(PhoneNumberUtil.MatchType.EXACT_MATCH, 218552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.isNumberMatch(brNumberOne, brNumberTwo)); 21861524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 21871524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 21881524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsNumberMatchNonMatches() throws Exception { 21891524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Non-matches. 21901524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.NO_MATCH, 21911524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("03 331 6005", "03 331 6006")); 2192528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertEquals(PhoneNumberUtil.MatchType.NO_MATCH, 2193528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia phoneUtil.isNumberMatch("+800 1234 5678", "+1 800 1234 5678")); 2194372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // Different country calling code, partial number match. 21951524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.NO_MATCH, 21961524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("+64 3 331-6005", "+16433316005")); 2197372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // Different country calling code, same number. 21981524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.NO_MATCH, 21991524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("+64 3 331-6005", "+6133316005")); 22001524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Extension different, all else the same. 22011524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.NO_MATCH, 22021524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("+64 3 331-6005 extn 1234", "0116433316005#1235")); 2203bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.NO_MATCH, 2204bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia phoneUtil.isNumberMatch( 2205bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia "+64 3 331-6005 extn 1234", "tel:+64-3-331-6005;ext=1235")); 22061524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // NSN matches, but extension is different - not the same number. 22071524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.NO_MATCH, 22081524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("+64 3 331-6005 ext.1235", "3 331 6005#1234")); 220974aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia 221074aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia // Invalid numbers that can't be parsed. 221174aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.NOT_A_NUMBER, 221274aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia phoneUtil.isNumberMatch("43", "3 331 6043")); 221374aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.NOT_A_NUMBER, 221474aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia phoneUtil.isNumberMatch("+43", "+64 3 331 6005")); 221574aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.NOT_A_NUMBER, 221674aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia phoneUtil.isNumberMatch("+43", "64 3 331 6005")); 221774aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.NOT_A_NUMBER, 221874aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia phoneUtil.isNumberMatch("Dog", "64 3 331 6005")); 22191524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 22201524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 22211524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsNumberMatchNsnMatches() throws Exception { 22221524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // NSN matches. 22231524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.NSN_MATCH, 22241524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("+64 3 331-6005", "03 331 6005")); 22251524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.NSN_MATCH, 2226bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia phoneUtil.isNumberMatch( 2227bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia "+64 3 331-6005", "tel:03-331-6005;isub=1234;phone-context=abc.nz")); 2228bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.NSN_MATCH, 222952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.isNumberMatch(NZ_NUMBER, "03 331 6005")); 2230372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // Here the second number possibly starts with the country calling code for New Zealand, 2231372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // although we are unsure. 223252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia PhoneNumber unchangedNzNumber = new PhoneNumber().mergeFrom(NZ_NUMBER); 223374aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.NSN_MATCH, 223452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.isNumberMatch(unchangedNzNumber, "(64-3) 331 6005")); 22351524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Check the phone number proto was not edited during the method call. 223652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertEquals(NZ_NUMBER, unchangedNzNumber); 223774aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia 223874aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia // Here, the 1 might be a national prefix, if we compare it to the US number, so the resultant 223974aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia // match is an NSN match. 224074aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.NSN_MATCH, 224152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.isNumberMatch(US_NUMBER, "1-650-253-0000")); 224274aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.NSN_MATCH, 224352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.isNumberMatch(US_NUMBER, "6502530000")); 224474aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.NSN_MATCH, 224552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.isNumberMatch("+1 650-253 0000", "1 650 253 0000")); 224674aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.NSN_MATCH, 224752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.isNumberMatch("1 650-253 0000", "1 650 253 0000")); 224874aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.NSN_MATCH, 224952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.isNumberMatch("1 650-253 0000", "+1 650 253 0000")); 225074aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia // For this case, the match will be a short NSN match, because we cannot assume that the 1 might 225174aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia // be a national prefix, so don't remove it when parsing. 225274aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia PhoneNumber randomNumber = new PhoneNumber(); 225352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia randomNumber.setCountryCode(41).setNationalNumber(6502530000L); 225474aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH, 225552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia phoneUtil.isNumberMatch(randomNumber, "1-650-253-0000")); 22561524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 22571524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 22581524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public void testIsNumberMatchShortNsnMatches() throws Exception { 22591524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Short NSN matches with the country not specified for either one or both numbers. 22601524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH, 22611524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("+64 3 331-6005", "331 6005")); 2262bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH, 2263bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia phoneUtil.isNumberMatch("+64 3 331-6005", "tel:331-6005;phone-context=abc.nz")); 2264bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH, 2265bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia phoneUtil.isNumberMatch("+64 3 331-6005", 2266bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia "tel:331-6005;isub=1234;phone-context=abc.nz")); 2267bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH, 2268bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia phoneUtil.isNumberMatch("+64 3 331-6005", 2269bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia "tel:331-6005;isub=1234;phone-context=abc.nz;a=%A1")); 2270f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia // We did not know that the "0" was a national prefix since neither number has a country code, 2271f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia // so this is considered a SHORT_NSN_MATCH. 2272f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH, 2273f7e0224b862054893f28d2736b3f6804d9935886Shaopeng Jia phoneUtil.isNumberMatch("3 331-6005", "03 331 6005")); 22741524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH, 22751524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("3 331-6005", "331 6005")); 22761524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH, 2277bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia phoneUtil.isNumberMatch("3 331-6005", "tel:331-6005;phone-context=abc.nz")); 2278bf5d9756fe9b13f5b2e0696c62949cea77396687Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH, 22791524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("3 331-6005", "+64 331 6005")); 22801524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // Short NSN match with the country specified. 22811524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH, 22821524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("03 331-6005", "331 6005")); 22831524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH, 22841524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("1 234 345 6789", "345 6789")); 22851524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH, 22861524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("+1 (234) 345 6789", "345 6789")); 2287372bff8dd464574d36737d47e495cad14346653cShaopeng Jia // NSN matches, country calling code omitted for one number, extension missing for one. 22881524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH, 22891524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia phoneUtil.isNumberMatch("+64 3 331-6005", "3 331 6005#1234")); 22901524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // One has Italian leading zero, one does not. 229176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber italianNumberOne = new PhoneNumber(); 229276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia italianNumberOne.setCountryCode(39).setNationalNumber(1234L).setItalianLeadingZero(true); 229376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia PhoneNumber italianNumberTwo = new PhoneNumber(); 229476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia italianNumberTwo.setCountryCode(39).setNationalNumber(1234L); 22951524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH, 229676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.isNumberMatch(italianNumberOne, italianNumberTwo)); 22971524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // One has an extension, the other has an extension of "". 229876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia italianNumberOne.setExtension("1234").clearItalianLeadingZero(); 229976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia italianNumberTwo.setExtension(""); 23001524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH, 230176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia phoneUtil.isNumberMatch(italianNumberOne, italianNumberTwo)); 23021524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 230374aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia 230474aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia public void testCanBeInternationallyDialled() throws Exception { 230552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia // We have no-international-dialling rules for the US in our test metadata that say that 230652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia // toll-free numbers cannot be dialled internationally. 230752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertFalse(phoneUtil.canBeInternationallyDialled(US_TOLLFREE)); 230874aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia 230952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia // Normal US numbers can be internationally dialled. 231052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertTrue(phoneUtil.canBeInternationallyDialled(US_NUMBER)); 231174aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia 231274aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia // Invalid number. 231352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertTrue(phoneUtil.canBeInternationallyDialled(US_LOCAL_NUMBER)); 231474aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia 231574aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia // We have no data for NZ - should return true. 231652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia assertTrue(phoneUtil.canBeInternationallyDialled(NZ_NUMBER)); 2317528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertTrue(phoneUtil.canBeInternationallyDialled(INTERNATIONAL_TOLL_FREE)); 231874aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia } 2319372bff8dd464574d36737d47e495cad14346653cShaopeng Jia 2320372bff8dd464574d36737d47e495cad14346653cShaopeng Jia public void testIsAlphaNumber() throws Exception { 2321372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertTrue(phoneUtil.isAlphaNumber("1800 six-flags")); 2322372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertTrue(phoneUtil.isAlphaNumber("1800 six-flags ext. 1234")); 2323528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertTrue(phoneUtil.isAlphaNumber("+800 six-flags")); 2324372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertFalse(phoneUtil.isAlphaNumber("1800 123-1234")); 2325372bff8dd464574d36737d47e495cad14346653cShaopeng Jia assertFalse(phoneUtil.isAlphaNumber("1800 123-1234 extension: 1234")); 2326528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia assertFalse(phoneUtil.isAlphaNumber("+800 1234-1234")); 2327372bff8dd464574d36737d47e495cad14346653cShaopeng Jia } 23281524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia} 2329