Exemplo n.º 1
0
        [TestMethod] public void testLoadNationalFormat()
        {
            String nationalFormat = "$1 $2";
            String xmlInput       = String.Format("<numberFormat><format>{0}</format></numberFormat>",
                                                  nationalFormat);
            XmlElement numberFormatElement = parseXmlString(xmlInput);

            PhoneMetadata.Builder metadata     = PhoneMetadata.newBuilder();
            NumberFormat.Builder  numberFormat = NumberFormat.newBuilder();
            BuildMetadataFromXml.loadNationalFormat(metadata, numberFormatElement, numberFormat);
            Assert.AreEqual(nationalFormat, numberFormat.getFormat());
        }
Exemplo n.º 2
0
        public void TestLoadNationalFormatExpectsExactlyOneFormat()
        {
            String   xmlInput            = "<numberFormat><format/><format/></numberFormat>";
            XElement numberFormatElement = parseXmlString(xmlInput);

            PhoneMetadata.Builder metadata     = new PhoneMetadata.Builder();
            NumberFormat.Builder  numberFormat = new NumberFormat.Builder();

            Assert.ThrowsAny <Exception>(() =>
            {
                BuildMetadataFromXml.LoadNationalFormat(metadata, numberFormatElement, numberFormat);
            });
        }
Exemplo n.º 3
0
        public void TestLoadNationalFormat()
        {
            var nationalFormat = "$1 $2";
            var xmlInput       = string.Format("<numberFormat><format>{0}</format></numberFormat>",
                                               nationalFormat);
            var numberFormatElement = ParseXmlString(xmlInput);
            var metadata            = new PhoneMetadata.Builder();
            var numberFormat        = new NumberFormat.Builder();

            Assert.Equal(nationalFormat,
                         BuildMetadataFromXml.LoadNationalFormat(metadata, numberFormatElement,
                                                                 numberFormat));
        }
Exemplo n.º 4
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.º 5
0
        // Tests setLeadingDigitsPatterns().
        [TestMethod] public void testSetLeadingDigitsPatterns()
        {
            String xmlInput =
                "<numberFormat>" +
                "<leadingDigits>1</leadingDigits><leadingDigits>2</leadingDigits>" +
                "</numberFormat>";
            XmlElement numberFormatElement = parseXmlString(xmlInput);

            NumberFormat.Builder numberFormat = NumberFormat.newBuilder();
            BuildMetadataFromXml.setLeadingDigitsPatterns(numberFormatElement, numberFormat);

            Assert.AreEqual("1", numberFormat.getLeadingDigitsPattern(0));
            Assert.AreEqual("2", numberFormat.getLeadingDigitsPattern(1));
        }
Exemplo n.º 6
0
        public void TestSetLeadingDigitsPatterns()
        {
            String xmlInput =
                "<numberFormat>" +
                "<leadingDigits>1</leadingDigits><leadingDigits>2</leadingDigits>" +
                "</numberFormat>";
            XElement numberFormatElement = parseXmlString(xmlInput);

            NumberFormat.Builder numberFormat = new NumberFormat.Builder();
            BuildMetadataFromXml.SetLeadingDigitsPatterns(numberFormatElement, numberFormat);

            Assert.Equal("1", numberFormat.LeadingDigitsPatternList[0]);
            Assert.Equal("2", numberFormat.LeadingDigitsPatternList[1]);
        }
Exemplo n.º 7
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.º 8
0
        public void TestLoadNationalFormat()
        {
            String nationalFormat = "$1 $2";
            String xmlInput       = String.Format("<numberFormat><format>{0}</format></numberFormat>",
                                                  nationalFormat);
            XElement numberFormatElement = parseXmlString(xmlInput);

            PhoneMetadata.Builder metadata     = new PhoneMetadata.Builder();
            NumberFormat.Builder  numberFormat = new NumberFormat.Builder();

            Assert.AreEqual(nationalFormat,
                            BuildMetadataFromXml.LoadNationalFormat(metadata, numberFormatElement,
                                                                    numberFormat));
        }
Exemplo n.º 9
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.º 10
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());
        }
        public void TestLoadNationalFormatRequiresFormat()
        {
            var xmlInput            = "<numberFormat></numberFormat>";
            var numberFormatElement = parseXmlString(xmlInput);
            var metadata            = new PhoneMetadata.Builder();
            var numberFormat        = new NumberFormat.Builder();

            try
            {
                BuildMetadataFromXml.LoadNationalFormat(metadata, numberFormatElement, numberFormat);
                Assert.Fail();
            }
            catch (Exception)
            {
                // Test passed.
            }
        }
Exemplo n.º 12
0
        public void TestLoadNationalFormatExpectsExactlyOneFormat()
        {
            var xmlInput            = "<numberFormat><format/><format/></numberFormat>";
            var numberFormatElement = ParseXmlString(xmlInput);
            var metadata            = new PhoneMetadata.Builder();
            var numberFormat        = new NumberFormat.Builder();

            try
            {
                BuildMetadataFromXml.LoadNationalFormat(metadata, numberFormatElement, numberFormat);
                Assert.True(false);
            }
            catch (Exception)
            {
                // Test passed.
            }
        }
Exemplo n.º 13
0
        [TestMethod] public void testLoadNationalFormatExpectsExactlyOneFormat()
        {
            String     xmlInput            = "<numberFormat><format/><format/></numberFormat>";
            XmlElement numberFormatElement = parseXmlString(xmlInput);

            PhoneMetadata.Builder metadata     = PhoneMetadata.newBuilder();
            NumberFormat.Builder  numberFormat = NumberFormat.newBuilder();

            try
            {
                BuildMetadataFromXml.loadNationalFormat(metadata, numberFormatElement, numberFormat);
                Assert.Fail();
            }
            catch (Exception)
            {
                // Test passed.
            }
        }
Exemplo n.º 14
0
        /**
         * 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);
        }
Exemplo n.º 15
0
        /**
         * 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);
        }
        public void TestSetLeadingDigitsPatterns()
        {
            String xmlInput =
                "<numberFormat>" +
                "<leadingDigits>1</leadingDigits><leadingDigits>2</leadingDigits>" +
                "</numberFormat>";
            XElement numberFormatElement = parseXmlString(xmlInput);
            NumberFormat.Builder numberFormat = new NumberFormat.Builder();
            BuildMetadataFromXml.SetLeadingDigitsPatterns(numberFormatElement, numberFormat);

            Assert.AreEqual("1", numberFormat.LeadingDigitsPatternList[0]);
            Assert.AreEqual("2", numberFormat.LeadingDigitsPatternList[1]);
        }
        public void TestLoadNationalFormatExpectsExactlyOneFormat()
        {
            String xmlInput = "<numberFormat><format/><format/></numberFormat>";
            XElement numberFormatElement = parseXmlString(xmlInput);
            PhoneMetadata.Builder metadata = new PhoneMetadata.Builder();
            NumberFormat.Builder numberFormat = new NumberFormat.Builder();

            try
            {
                BuildMetadataFromXml.LoadNationalFormat(metadata, numberFormatElement, numberFormat);
                Assert.Fail();
            }
            catch (Exception)
            {
                // Test passed.
            }
        }
        public void TestLoadNationalFormat()
        {
            String nationalFormat = "$1 $2";
            String xmlInput = String.Format("<numberFormat><format>{0}</format></numberFormat>",
                                            nationalFormat);
            XElement numberFormatElement = parseXmlString(xmlInput);
            PhoneMetadata.Builder metadata = new PhoneMetadata.Builder();
            NumberFormat.Builder numberFormat = new NumberFormat.Builder();

            Assert.AreEqual(nationalFormat,
                         BuildMetadataFromXml.LoadNationalFormat(metadata, numberFormatElement,
                                                                 numberFormat));
        }
Exemplo n.º 19
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();
                }
            }
        }
Exemplo n.º 20
0
        // @VisibleForTesting
        internal static void setLeadingDigitsPatterns(XmlElement numberFormatXmlElement, NumberFormat.Builder format)
        {
            var leadingDigitsPatternNodes  = numberFormatXmlElement.GetElementsByTagName(LEADING_DIGITS);
            int numOfLeadingDigitsPatterns = leadingDigitsPatternNodes.Count;

            if (numOfLeadingDigitsPatterns > 0)
            {
                for (int i = 0; i < numOfLeadingDigitsPatterns; i++)
                {
                    format.addLeadingDigitsPattern(
                        validateRE((leadingDigitsPatternNodes.Item(i)).FirstChild.Value, true));
                }
            }
        }
        public void TestFormatByPattern()
        {
            NumberFormat newNumFormat = new NumberFormat.Builder()
                .SetPattern("(\\d{3})(\\d{3})(\\d{4})")
                .SetFormat("($1) $2-$3").Build();
            List<NumberFormat> newNumberFormats = new List<NumberFormat>();
            newNumberFormats.Add(newNumFormat);

            Assert.AreEqual("(650) 253-0000", phoneUtil.FormatByPattern(US_NUMBER, PhoneNumberFormat.NATIONAL,
                newNumberFormats));
            Assert.AreEqual("+1 (650) 253-0000", phoneUtil.FormatByPattern(US_NUMBER,
                PhoneNumberFormat.INTERNATIONAL,
                newNumberFormats));
            Assert.AreEqual("tel:+1-650-253-0000", phoneUtil.FormatByPattern(US_NUMBER,
                PhoneNumberFormat.RFC3966, newNumberFormats));


            // $NP is set to '1' for the US. Here we check that for other NANPA countries the US rules are
            // followed.
            newNumberFormats[0] = Update(newNumberFormats[0])
                .SetNationalPrefixFormattingRule("$NP ($FG)")
                .SetFormat("$1 $2-$3").Build();
            Assert.AreEqual("1 (242) 365-1234",
                phoneUtil.FormatByPattern(BS_NUMBER, PhoneNumberFormat.NATIONAL,
                newNumberFormats));
            Assert.AreEqual("+1 242 365-1234",
                phoneUtil.FormatByPattern(BS_NUMBER, PhoneNumberFormat.INTERNATIONAL,
                newNumberFormats));

            newNumberFormats[0] = Update(newNumberFormats[0])
                .SetPattern("(\\d{2})(\\d{5})(\\d{3})")
                .SetFormat("$1-$2 $3").Build();

            Assert.AreEqual("02-36618 300",
                phoneUtil.FormatByPattern(IT_NUMBER, PhoneNumberFormat.NATIONAL,
                newNumberFormats));
            Assert.AreEqual("+39 02-36618 300",
                phoneUtil.FormatByPattern(IT_NUMBER, PhoneNumberFormat.INTERNATIONAL,
                newNumberFormats));

            newNumberFormats[0] = Update(newNumberFormats[0]).SetNationalPrefixFormattingRule("$NP$FG")
                .SetPattern("(\\d{2})(\\d{4})(\\d{4})")
                .SetFormat("$1 $2 $3").Build();
            Assert.AreEqual("020 7031 3000",
                phoneUtil.FormatByPattern(GB_NUMBER, PhoneNumberFormat.NATIONAL,
                newNumberFormats));

            newNumberFormats[0] = Update(newNumberFormats[0]).SetNationalPrefixFormattingRule("($NP$FG)").Build();
            Assert.AreEqual("(020) 7031 3000",
                phoneUtil.FormatByPattern(GB_NUMBER, PhoneNumberFormat.NATIONAL,
                newNumberFormats));

            newNumberFormats[0] = Update(newNumberFormats[0]).SetNationalPrefixFormattingRule("").Build();
            Assert.AreEqual("20 7031 3000",
                phoneUtil.FormatByPattern(GB_NUMBER, PhoneNumberFormat.NATIONAL,
                newNumberFormats));

            Assert.AreEqual("+44 20 7031 3000",
                phoneUtil.FormatByPattern(GB_NUMBER, PhoneNumberFormat.INTERNATIONAL,
                newNumberFormats));
        }