|
|
|
@ -0,0 +1,118 @@ |
|
|
|
/* |
|
|
|
* Copyright (C) 2011 The Libphonenumber Authors |
|
|
|
* |
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
|
|
* you may not use this file except in compliance with the License. |
|
|
|
* You may obtain a copy of the License at |
|
|
|
* |
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
* |
|
|
|
* Unless required by applicable law or agreed to in writing, software |
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS, |
|
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
|
|
* See the License for the specific language governing permissions and |
|
|
|
* limitations under the License. |
|
|
|
*/ |
|
|
|
|
|
|
|
goog.require('goog.testing.jsunit'); |
|
|
|
goog.require('i18n.phonenumbers.PhoneNumber'); |
|
|
|
goog.require('i18n.phonenumbers.PhoneNumber.CountryCodeSource'); |
|
|
|
goog.require('i18n.phonenumbers.PhoneNumberMatcher'); |
|
|
|
goog.require('i18n.phonenumbers.PhoneNumberMatch'); |
|
|
|
goog.require('i18n.phonenumbers.PhoneNumberUtil'); |
|
|
|
goog.require('i18n.phonenumbers.RegionCode'); |
|
|
|
|
|
|
|
var phoneUtil = i18n.phonenumbers.PhoneNumberUtil.getInstance(); |
|
|
|
var PhoneNumber = i18n.phonenumbers.PhoneNumber; |
|
|
|
var PhoneNumberMatch = i18n.phonenumbers.PhoneNumberMatch; |
|
|
|
var PhoneNumberMatcher = i18n.phonenumbers.PhoneNumberMatcher; |
|
|
|
var CountryCodeSource = i18n.phonenumbers.PhoneNumber.CountryCodeSource; |
|
|
|
var RegionCode = i18n.phonenumbers.RegionCode; |
|
|
|
|
|
|
|
console.log('phoneUtil', phoneUtil); |
|
|
|
console.log('PhoneNumberMatcher', PhoneNumberMatcher); |
|
|
|
|
|
|
|
/** |
|
|
|
* Tests numbers found by {@link PhoneNumberUtil#findNumbers(CharSequence, String)} in various |
|
|
|
* textual contexts. |
|
|
|
* |
|
|
|
* @param number the number to test and the corresponding region code to use |
|
|
|
*/ |
|
|
|
function doTestFindInContext(number, defaultCountry) { |
|
|
|
findPossibleInContext(number, defaultCountry); |
|
|
|
|
|
|
|
var parsed = phoneUtil.parse(number, defaultCountry); |
|
|
|
if (phoneUtil.isValidNumber(parsed)) { |
|
|
|
findValidInContext(number, defaultCountry); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Asserts that the expected match is non-null, and that the raw string and expected |
|
|
|
* proto buffer are set appropriately. |
|
|
|
*/ |
|
|
|
function assertMatchProperties(match, text, number, region) { |
|
|
|
var expectedResult = phoneUtil.parse(number, region); |
|
|
|
assertNotNull("Did not find a number in '" + text + "'; expected " + number, match); |
|
|
|
assertEquals(expectedResult, match.number); |
|
|
|
assertEquals(number, match.rawString); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function testContainsMoreThanOneSlashInNationalNumber() { |
|
|
|
// A date should return true.
|
|
|
|
var number = new PhoneNumber(); |
|
|
|
number.setCountryCode(1); |
|
|
|
number.setCountryCodeSource(CountryCodeSource.FROM_DEFAULT_COUNTRY); |
|
|
|
var candidate = "1/05/2013"; |
|
|
|
assertTrue(PhoneNumberMatcher.containsMoreThanOneSlashInNationalNumber(number, candidate)); |
|
|
|
|
|
|
|
// Here, the country code source thinks it started with a country calling code, but this is not
|
|
|
|
// the same as the part before the slash, so it's still true.
|
|
|
|
number = new PhoneNumber(); |
|
|
|
number.setCountryCode(274); |
|
|
|
number.setCountryCodeSource(CountryCodeSource.FROM_NUMBER_WITHOUT_PLUS_SIGN); |
|
|
|
candidate = "27/4/2013"; |
|
|
|
assertTrue(PhoneNumberMatcher.containsMoreThanOneSlashInNationalNumber(number, candidate)); |
|
|
|
|
|
|
|
// Now it should be false, because the first slash is after the country calling code.
|
|
|
|
number = new PhoneNumber(); |
|
|
|
number.setCountryCode(49); |
|
|
|
number.setCountryCodeSource(CountryCodeSource.FROM_NUMBER_WITH_PLUS_SIGN); |
|
|
|
candidate = "49/69/2013"; |
|
|
|
assertFalse(PhoneNumberMatcher.containsMoreThanOneSlashInNationalNumber(number, candidate)); |
|
|
|
|
|
|
|
number = new PhoneNumber(); |
|
|
|
number.setCountryCode(49); |
|
|
|
number.setCountryCodeSource(CountryCodeSource.FROM_NUMBER_WITHOUT_PLUS_SIGN); |
|
|
|
candidate = "+49/69/2013"; |
|
|
|
assertFalse(PhoneNumberMatcher.containsMoreThanOneSlashInNationalNumber(number, candidate)); |
|
|
|
|
|
|
|
candidate = "+ 49/69/2013"; |
|
|
|
assertFalse(PhoneNumberMatcher.containsMoreThanOneSlashInNationalNumber(number, candidate)); |
|
|
|
|
|
|
|
candidate = "+ 49/69/20/13"; |
|
|
|
assertTrue(PhoneNumberMatcher.containsMoreThanOneSlashInNationalNumber(number, candidate)); |
|
|
|
|
|
|
|
// Here, the first group is not assumed to be the country calling code, even though it is the
|
|
|
|
// same as it, so this should return true.
|
|
|
|
number = new PhoneNumber(); |
|
|
|
number.setCountryCode(49); |
|
|
|
number.setCountryCodeSource(CountryCodeSource.FROM_DEFAULT_COUNTRY); |
|
|
|
candidate = "49/69/2013"; |
|
|
|
assertTrue(PhoneNumberMatcher.containsMoreThanOneSlashInNationalNumber(number, candidate)); |
|
|
|
} |
|
|
|
|
|
|
|
function testMatchesFoundWithMultipleSpaces() { |
|
|
|
var number1 = "(415) 666-7777"; |
|
|
|
var number2 = "(800) 443-1223"; |
|
|
|
var text = number1 + " " + number2; |
|
|
|
|
|
|
|
var iterator = phoneUtil.findNumbers(text, RegionCode.US); |
|
|
|
var match = iterator.hasNext() ? iterator.next() : null; |
|
|
|
assertMatchProperties(match, text, number1, RegionCode.US); |
|
|
|
|
|
|
|
match = iterator.hasNext() ? iterator.next() : null; |
|
|
|
assertMatchProperties(match, text, number2, RegionCode.US); |
|
|
|
} |