internal static boolean checkNumberGroupingIsValid( PhoneNumber number, String candidate, PhoneNumberUtil util, NumberGroupingChecker checker) { // TODO: Evaluate how this works for other locales (testing has been limited to NANPA regions) // and optimise if necessary. StringBuilder normalizedCandidate = PhoneNumberUtil.normalizeDigits(candidate, true /* keep non-digits */); String[] formattedNumberGroups = getNationalNumberGroups(util, number, null); if (checker.checkGroups(util, number, normalizedCandidate, formattedNumberGroups)) { return(true); } // If this didn't pass, see if there are any alternate formats, and try them instead. PhoneMetadata alternateFormats = MetadataManager.getAlternateFormatsForCountry(number.getCountryCode()); if (alternateFormats != null) { foreach (NumberFormat alternateFormat in alternateFormats.numberFormats()) { formattedNumberGroups = getNationalNumberGroups(util, number, alternateFormat); if (checker.checkGroups(util, number, normalizedCandidate, formattedNumberGroups)) { return(true); } } } return(false); }
[TestMethod] public void testAlternateFormatsContainsData() { // We should have some data for Germany. PhoneMetadata germanyAlternateFormats = MetadataManager.getAlternateFormatsForCountry(49); assertNotNull(germanyAlternateFormats); assertTrue(germanyAlternateFormats.numberFormats().size() > 0); }
[TestMethod] public void testAlternateFormatsFailsGracefully() { PhoneMetadata noAlternateFormats = MetadataManager.getAlternateFormatsForCountry(999); assertNull(noAlternateFormats); }