diff --git a/java/build.xml b/java/build.xml index edc5b41f8..f16cf3c96 100644 --- a/java/build.xml +++ b/java/build.xml @@ -2,6 +2,7 @@ + @@ -23,6 +24,7 @@ + @@ -45,7 +47,7 @@ - + @@ -57,7 +59,7 @@ - + diff --git a/java/src/com/google/i18n/phonenumbers/AsYouTypeFormatterTest.java b/java/test/com/google/i18n/phonenumbers/AsYouTypeFormatterTest.java similarity index 100% rename from java/src/com/google/i18n/phonenumbers/AsYouTypeFormatterTest.java rename to java/test/com/google/i18n/phonenumbers/AsYouTypeFormatterTest.java diff --git a/java/test/com/google/i18n/phonenumbers/ExampleNumbersTest.java b/java/test/com/google/i18n/phonenumbers/ExampleNumbersTest.java new file mode 100644 index 000000000..d3fd37c98 --- /dev/null +++ b/java/test/com/google/i18n/phonenumbers/ExampleNumbersTest.java @@ -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 invalidCases = new ArrayList(); + private List wrongTypeCases = new ArrayList(); + + 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 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 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 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 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 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 voipTypes = EnumSet.of(PhoneNumberType.VOIP); + checkNumbersValidAndCorrectType(PhoneNumberType.VOIP, voipTypes); + assertEquals(0, invalidCases.size()); + assertEquals(0, wrongTypeCases.size()); + } + + public void testSharedCost() throws Exception { + Set sharedCostTypes = EnumSet.of(PhoneNumberType.SHARED_COST); + checkNumbersValidAndCorrectType(PhoneNumberType.SHARED_COST, sharedCostTypes); + assertEquals(0, invalidCases.size()); + assertEquals(0, wrongTypeCases.size()); + } +} diff --git a/java/src/com/google/i18n/phonenumbers/PhoneNumberMetaDataForTesting.xml b/java/test/com/google/i18n/phonenumbers/PhoneNumberMetaDataForTesting.xml similarity index 100% rename from java/src/com/google/i18n/phonenumbers/PhoneNumberMetaDataForTesting.xml rename to java/test/com/google/i18n/phonenumbers/PhoneNumberMetaDataForTesting.xml diff --git a/java/src/com/google/i18n/phonenumbers/PhoneNumberMetadataProtoForTesting b/java/test/com/google/i18n/phonenumbers/PhoneNumberMetadataProtoForTesting similarity index 100% rename from java/src/com/google/i18n/phonenumbers/PhoneNumberMetadataProtoForTesting rename to java/test/com/google/i18n/phonenumbers/PhoneNumberMetadataProtoForTesting diff --git a/java/src/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java b/java/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java similarity index 100% rename from java/src/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java rename to java/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java