| @ -0,0 +1,133 @@ | |||
| /* | |||
| * Copyright (C) 2009 Google Inc. | |||
| * | |||
| * 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. | |||
| */ | |||
| package com.google.i18n.phonenumbers; | |||
| import com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberType; | |||
| import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber; | |||
| import junit.framework.TestCase; | |||
| import java.util.ArrayList; | |||
| import java.util.EnumSet; | |||
| import java.util.List; | |||
| import java.util.Set; | |||
| import java.util.logging.Level; | |||
| import java.util.logging.Logger; | |||
| /** | |||
| * @author Lara Rennie | |||
| * | |||
| * Verifies all of the example numbers in the metadata are valid and of the correct type. If no | |||
| * example number exists for a particular type, the test still passes. | |||
| */ | |||
| public class ExampleNumbersTest extends TestCase { | |||
| private static final Logger LOGGER = Logger.getLogger(ExampleNumbersTest.class.getName()); | |||
| private PhoneNumberUtil phoneNumberUtil; | |||
| private List<PhoneNumber> invalidCases = new ArrayList<PhoneNumber>(); | |||
| private List<PhoneNumber> wrongTypeCases = new ArrayList<PhoneNumber>(); | |||
| public ExampleNumbersTest() { | |||
| PhoneNumberUtil.resetInstance(); | |||
| phoneNumberUtil = PhoneNumberUtil.getInstance(); | |||
| } | |||
| @Override | |||
| protected void setUp() throws Exception { | |||
| super.setUp(); | |||
| invalidCases.clear(); | |||
| wrongTypeCases.clear(); | |||
| } | |||
| @Override | |||
| protected void tearDown() throws Exception { | |||
| super.tearDown(); | |||
| } | |||
| /** | |||
| * @param exampleNumberRequestedType type we are requesting an example number for | |||
| * @param possibleExpectedTypes acceptable types that this number should match, such as | |||
| * FIXED_LINE and FIXED_LINE_OR_MOBILE for a fixed line example number. | |||
| */ | |||
| private void checkNumbersValidAndCorrectType(PhoneNumberType exampleNumberRequestedType, | |||
| Set<PhoneNumberType> possibleExpectedTypes) { | |||
| for (String regionCode : phoneNumberUtil.getSupportedCountries()) { | |||
| PhoneNumber exampleNumber = | |||
| phoneNumberUtil.getExampleNumberForType(regionCode, exampleNumberRequestedType); | |||
| if (exampleNumber != null) { | |||
| if (!phoneNumberUtil.isValidNumber(exampleNumber)) { | |||
| invalidCases.add(exampleNumber); | |||
| LOGGER.log(Level.SEVERE, "Failed validation for " + exampleNumber.toString()); | |||
| } else { | |||
| // We know the number is valid, now we check the type. | |||
| PhoneNumberType exampleNumberType = phoneNumberUtil.getNumberType(exampleNumber); | |||
| if (!possibleExpectedTypes.contains(exampleNumberType)) { | |||
| wrongTypeCases.add(exampleNumber); | |||
| LOGGER.log(Level.SEVERE, | |||
| "Wrong type for " + exampleNumber.toString() + ": got " + exampleNumberType); | |||
| LOGGER.log(Level.WARNING, "Expected types: "); | |||
| for (PhoneNumberType type : possibleExpectedTypes) { | |||
| LOGGER.log(Level.WARNING, type.toString()); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| public void testFixedLine() throws Exception { | |||
| Set<PhoneNumberType> fixedLineTypes = EnumSet.of(PhoneNumberType.FIXED_LINE, | |||
| PhoneNumberType.FIXED_LINE_OR_MOBILE); | |||
| checkNumbersValidAndCorrectType(PhoneNumberType.FIXED_LINE, fixedLineTypes); | |||
| assertEquals(0, invalidCases.size()); | |||
| assertEquals(0, wrongTypeCases.size()); | |||
| } | |||
| public void testMobile() throws Exception { | |||
| Set<PhoneNumberType> mobileTypes = EnumSet.of(PhoneNumberType.MOBILE, | |||
| PhoneNumberType.FIXED_LINE_OR_MOBILE); | |||
| checkNumbersValidAndCorrectType(PhoneNumberType.MOBILE, mobileTypes); | |||
| assertEquals(0, invalidCases.size()); | |||
| assertEquals(0, wrongTypeCases.size()); | |||
| } | |||
| public void testTollFree() throws Exception { | |||
| Set<PhoneNumberType> tollFreeTypes = EnumSet.of(PhoneNumberType.TOLL_FREE); | |||
| checkNumbersValidAndCorrectType(PhoneNumberType.TOLL_FREE, tollFreeTypes); | |||
| assertEquals(0, invalidCases.size()); | |||
| assertEquals(0, wrongTypeCases.size()); | |||
| } | |||
| public void testPremiumRate() throws Exception { | |||
| Set<PhoneNumberType> premiumRateTypes = EnumSet.of(PhoneNumberType.PREMIUM_RATE); | |||
| checkNumbersValidAndCorrectType(PhoneNumberType.PREMIUM_RATE, premiumRateTypes); | |||
| assertEquals(0, invalidCases.size()); | |||
| assertEquals(0, wrongTypeCases.size()); | |||
| } | |||
| public void testVoip() throws Exception { | |||
| Set<PhoneNumberType> voipTypes = EnumSet.of(PhoneNumberType.VOIP); | |||
| checkNumbersValidAndCorrectType(PhoneNumberType.VOIP, voipTypes); | |||
| assertEquals(0, invalidCases.size()); | |||
| assertEquals(0, wrongTypeCases.size()); | |||
| } | |||
| public void testSharedCost() throws Exception { | |||
| Set<PhoneNumberType> sharedCostTypes = EnumSet.of(PhoneNumberType.SHARED_COST); | |||
| checkNumbersValidAndCorrectType(PhoneNumberType.SHARED_COST, sharedCostTypes); | |||
| assertEquals(0, invalidCases.size()); | |||
| assertEquals(0, wrongTypeCases.size()); | |||
| } | |||
| } | |||