[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 available formats from the provided DOM element. If it does not contain any * nationalPrefixFormattingRule, the one passed-in is retained. The nationalPrefix, * nationalPrefixFormattingRule and nationalPrefixOptionalWhenFormatting values are provided from * the parent (territory) element. */ // @VisibleForTesting internal static void loadAvailableFormats(PhoneMetadata.Builder metadata, XmlElement element, String nationalPrefix, String nationalPrefixFormattingRule, bool nationalPrefixOptionalWhenFormatting) { String carrierCodeFormattingRule = ""; if (element.HasAttribute(CARRIER_CODE_FORMATTING_RULE)) { carrierCodeFormattingRule = validateRE( getDomesticCarrierCodeFormattingRuleFromXmlElement(element, nationalPrefix)); } var numberFormatXmlElements = element.GetElementsByTagName(NUMBER_FORMAT); bool hasExplicitIntlFormatDefined = false; int numOfFormatXmlElements = numberFormatXmlElements.Count; if (numOfFormatXmlElements > 0) { for (int i = 0; i < numOfFormatXmlElements; i++) { XmlElement numberFormatXmlElement = (XmlElement)numberFormatXmlElements.Item(i); NumberFormat.Builder format = NumberFormat.newBuilder(); if (numberFormatXmlElement.HasAttribute(NATIONAL_PREFIX_FORMATTING_RULE)) { format.setNationalPrefixFormattingRule( getNationalPrefixFormattingRuleFromXmlElement(numberFormatXmlElement, nationalPrefix)); } else { format.setNationalPrefixFormattingRule(nationalPrefixFormattingRule); } if (format.HasNationalPrefixFormattingRule()) { if (numberFormatXmlElement.HasAttribute(NATIONAL_PREFIX_OPTIONAL_WHEN_FORMATTING)) { format.setNationalPrefixOptionalWhenFormatting( Boolean.Parse(numberFormatXmlElement.GetAttribute( NATIONAL_PREFIX_OPTIONAL_WHEN_FORMATTING))); } else { format.setNationalPrefixOptionalWhenFormatting(nationalPrefixOptionalWhenFormatting); } } if (numberFormatXmlElement.HasAttribute(CARRIER_CODE_FORMATTING_RULE)) { format.setDomesticCarrierCodeFormattingRule(validateRE( getDomesticCarrierCodeFormattingRuleFromXmlElement(numberFormatXmlElement, nationalPrefix))); } else { format.setDomesticCarrierCodeFormattingRule(carrierCodeFormattingRule); } loadNationalFormat(metadata, numberFormatXmlElement, format); metadata.addNumberFormat(format); if (loadInternationalFormat(metadata, numberFormatXmlElement, format.build())) { hasExplicitIntlFormatDefined = true; } } // Only a small number of regions need to specify the intlFormats in the xml. For the majority // of countries the intlNumberFormat metadata is an exact copy of the national NumberFormat // metadata. To minimize the size of the metadata file, we only keep intlNumberFormats that // actually differ in some way to the national formats. if (!hasExplicitIntlFormatDefined) { metadata.clearIntlNumberFormat(); } } }