[TestMethod] public void testLoadInternationalFormatDoesNotSetIntlFormatWhenNA() { String xmlInput = "<numberFormat><intlFormat>NA</intlFormat></numberFormat>"; XmlElement numberFormatElement = parseXmlString(xmlInput); PhoneMetadata.Builder metadata = PhoneMetadata.newBuilder(); NumberFormat.Builder nationalFormat = NumberFormat.newBuilder(); nationalFormat.setFormat("$1 $2"); BuildMetadataFromXml.loadInternationalFormat(metadata, numberFormatElement, nationalFormat.build()); Assert.AreEqual(0, metadata.IntlNumberFormatSize()); }
[TestMethod] public void testLoadInternationalFormatCopiesNationalFormatData() { String xmlInput = "<numberFormat></numberFormat>"; XmlElement numberFormatElement = parseXmlString(xmlInput); PhoneMetadata.Builder metadata = PhoneMetadata.newBuilder(); NumberFormat.Builder nationalFormat = NumberFormat.newBuilder(); nationalFormat.setFormat("$1-$2"); nationalFormat.setNationalPrefixOptionalWhenFormatting(true); Assert.IsFalse(BuildMetadataFromXml.loadInternationalFormat(metadata, numberFormatElement, nationalFormat.build())); Assert.IsTrue(metadata.getIntlNumberFormat(0).isNationalPrefixOptionalWhenFormatting()); }
[TestMethod] public void testLoadInternationalFormatWithBothNationalAndIntlFormatsDefined() { String intlFormat = "$1 $2"; String xmlInput = "<numberFormat><intlFormat>" + intlFormat + "</intlFormat></numberFormat>"; XmlElement numberFormatElement = parseXmlString(xmlInput); PhoneMetadata.Builder metadata = PhoneMetadata.newBuilder(); NumberFormat.Builder nationalFormat = NumberFormat.newBuilder(); nationalFormat.setFormat("$1"); Assert.IsTrue(BuildMetadataFromXml.loadInternationalFormat(metadata, numberFormatElement, nationalFormat.build())); Assert.AreEqual(intlFormat, metadata.getIntlNumberFormat(0).getFormat()); }
[TestMethod] public void testLoadInternationalFormatUsesNationalFormatByDefault() { String xmlInput = "<numberFormat></numberFormat>"; XmlElement numberFormatElement = parseXmlString(xmlInput); PhoneMetadata.Builder metadata = PhoneMetadata.newBuilder(); NumberFormat.Builder nationalFormat = NumberFormat.newBuilder(); String nationalPattern = "$1 $2 $3"; nationalFormat.setFormat(nationalPattern); Assert.IsFalse(BuildMetadataFromXml.loadInternationalFormat(metadata, numberFormatElement, nationalFormat.build())); Assert.AreEqual(nationalPattern, metadata.getIntlNumberFormat(0).getFormat()); }
/** * Extracts the pattern for the national format. * * @throws RuntimeException if multiple or no formats have been encountered. */ // @VisibleForTesting internal static void loadNationalFormat(PhoneMetadata.Builder metadata, XmlElement numberFormatXmlElement, NumberFormat.Builder format) { setLeadingDigitsPatterns(numberFormatXmlElement, format); format.setPattern(validateRE(numberFormatXmlElement.GetAttribute(PATTERN))); var formatPattern = numberFormatXmlElement.GetElementsByTagName(FORMAT); int numFormatPatterns = formatPattern.Count; if (numFormatPatterns != 1) { // LOGGER.log(Level.SEVERE, "One format pattern for a numberFormat element should be defined."); String countryId = metadata.getId().Length > 0 ? metadata.getId() : metadata.getCountryCode().ToString(); throw new Exception("Invalid number of format patterns (" + numFormatPatterns + ") for country: " + countryId); } format.setFormat(formatPattern.Item(0).FirstChild.Value); }
/** * Extracts the pattern for international format. If there is no intlFormat, default to using the * national format. If the intlFormat is set to "NA" the intlFormat should be ignored. * * @throws RuntimeException if multiple intlFormats have been encountered. * @return whether an international number format is defined. */ // @VisibleForTesting internal static bool loadInternationalFormat(PhoneMetadata.Builder metadata, XmlElement numberFormatXmlElement, NumberFormat nationalFormat) { NumberFormat.Builder intlFormat = NumberFormat.newBuilder(); var intlFormatPattern = numberFormatXmlElement.GetElementsByTagName(INTL_FORMAT); var hasExplicitIntlFormatDefined = false; if (intlFormatPattern.Count > 1) { // LOGGER.log(Level.SEVERE, // "A maximum of one intlFormat pattern for a numberFormat element should be " + // "defined."); String countryId = metadata.getId().Length > 0 ? metadata.getId() : metadata.getCountryCode().ToString(); throw new Exception("Invalid number of intlFormat patterns for country: " + countryId); } else if (intlFormatPattern.Count == 0) { // Default to use the same as the national pattern if none is defined. intlFormat.mergeFrom(nationalFormat); } else { intlFormat.setPattern(numberFormatXmlElement.GetAttribute(PATTERN)); setLeadingDigitsPatterns(numberFormatXmlElement, intlFormat); String intlFormatPatternValue = intlFormatPattern.Item(0).FirstChild.Value; if (!intlFormatPatternValue.Equals("NA")) { intlFormat.setFormat(intlFormatPatternValue); } hasExplicitIntlFormatDefined = true; } if (intlFormat.HasFormat()) { metadata.addIntlNumberFormat(intlFormat); } return(hasExplicitIntlFormatDefined); }