Exemplo n.º 1
0
        [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());
        }
Exemplo n.º 2
0
        [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());
        }
Exemplo n.º 3
0
        [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());
        }
Exemplo n.º 4
0
        [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());
        }
Exemplo n.º 5
0
        /**
         *  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();
                }
            }
        }