Пример #1
0
        private static void GenerateCountryCodeToRegionCodeMap(string inputFileName, string outputDirectory, string filePrefix)
        {
            Directory.CreateDirectory(outputDirectory);

            var file = File.OpenRead(inputFileName);
            var meta = BuildMetadataFromXml.BuildPhoneMetadataCollection(file, false);

            for (var i = 0; i < meta.MetadataCount; ++i)
            {
                var data       = meta.GetMetadata(i);
                var regionCode = data.Id;

                if (string.IsNullOrEmpty(regionCode) || regionCode.Equals("001"))
                {
                    regionCode = data.CountryCode.ToString(CultureInfo.InvariantCulture);
                }

                var outMetadataCollection = new PhoneMetadataCollection();
                outMetadataCollection.MetadataList.Add(data);

                var outputFileName = Path.Combine(outputDirectory, filePrefix + "_" + regionCode);

                var outputForRegion = File.OpenWrite(outputFileName);
                outMetadataCollection.WriteTo(outputForRegion);
            }
        }
Пример #2
0
        public void TestGetNationalPrefix()
        {
            String xmlInput         = "<territory nationalPrefix='00'/>";
            var    territoryElement = parseXmlString(xmlInput);

            Assert.Equal("00", BuildMetadataFromXml.GetNationalPrefix(territoryElement));
        }
Пример #3
0
        // Tests setLeadingDigitsPatterns() in the case of international and national formatting rules
        // being present but not both defined for this numberFormat - we don't want to add them twice.
        [TestMethod] public void testSetLeadingDigitsPatternsNotAddedTwiceWhenInternationalFormatsPresent()
        {
            String xmlInput =
                "  <availableFormats>" +
                "    <numberFormat pattern=\"(1)(\\d{3})\">" +
                "      <leadingDigits>1</leadingDigits>" +
                "      <format>$1</format>" +
                "    </numberFormat>" +
                "    <numberFormat pattern=\"(2)(\\d{3})\">" +
                "      <leadingDigits>2</leadingDigits>" +
                "      <format>$1</format>" +
                "      <intlFormat>9-$1</intlFormat>" +
                "    </numberFormat>" +
                "  </availableFormats>";
            XmlElement element = parseXmlString(xmlInput);

            PhoneMetadata.Builder metadata = PhoneMetadata.newBuilder();
            BuildMetadataFromXml.loadAvailableFormats(
                metadata, element, "0", "", false /* NP not optional */);
            Assert.AreEqual(1, metadata.getNumberFormat(0).leadingDigitsPatternSize());
            Assert.AreEqual(1, metadata.getNumberFormat(1).leadingDigitsPatternSize());
            // When we merge the national format rules into the international format rules, we shouldn't add
            // the leading digit patterns multiple times.
            Assert.AreEqual(1, metadata.getIntlNumberFormat(0).leadingDigitsPatternSize());
            Assert.AreEqual(1, metadata.getIntlNumberFormat(1).leadingDigitsPatternSize());
        }
Пример #4
0
        public void TestValidateREThrowsException()
        {
            String invalidPattern = "[";

            // Should throw an exception when an invalid pattern is provided independently of the last
            // parameter (remove white spaces).
            try
            {
                BuildMetadataFromXml.ValidateRE(invalidPattern, false);
                Assert.Fail();
            }
            catch (ArgumentException)
            {
                // Test passed.
            }
            try
            {
                BuildMetadataFromXml.ValidateRE(invalidPattern, true);
                Assert.Fail();
            }
            catch (ArgumentException)
            {
                // Test passed.
            }
        }
Пример #5
0
        // Tests getNationalPrefix().
        [TestMethod] public void testGetNationalPrefix()
        {
            String     xmlInput         = "<territory nationalPrefix='00'/>";
            XmlElement territoryElement = parseXmlString(xmlInput);

            Assert.AreEqual("00", BuildMetadataFromXml.getNationalPrefix(territoryElement));
        }
Пример #6
0
        public void TestLoadGeneralDescSetsAllDescriptions()
        {
            String xmlInput =
                "<territory countryCode=\"33\">" +
                "  <fixedLine><nationalNumberPattern>\\d{1}</nationalNumberPattern></fixedLine>" +
                "  <mobile><nationalNumberPattern>\\d{2}</nationalNumberPattern></mobile>" +
                "  <pager><nationalNumberPattern>\\d{3}</nationalNumberPattern></pager>" +
                "  <tollFree><nationalNumberPattern>\\d{4}</nationalNumberPattern></tollFree>" +
                "  <premiumRate><nationalNumberPattern>\\d{5}</nationalNumberPattern></premiumRate>" +
                "  <sharedCost><nationalNumberPattern>\\d{6}</nationalNumberPattern></sharedCost>" +
                "  <personalNumber><nationalNumberPattern>\\d{7}</nationalNumberPattern></personalNumber>" +
                "  <voip><nationalNumberPattern>\\d{8}</nationalNumberPattern></voip>" +
                "  <uan><nationalNumberPattern>\\d{9}</nationalNumberPattern></uan>" +
                "  <shortCode><nationalNumberPattern>\\d{10}</nationalNumberPattern></shortCode>" +
                "</territory>";
            XElement territoryElement = parseXmlString(xmlInput);

            PhoneMetadata.Builder metadata = new PhoneMetadata.Builder();
            BuildMetadataFromXml.LoadGeneralDesc(metadata, territoryElement, false);
            Assert.Equal("\\d{1}", metadata.FixedLine.NationalNumberPattern);
            Assert.Equal("\\d{2}", metadata.Mobile.NationalNumberPattern);
            Assert.Equal("\\d{3}", metadata.Pager.NationalNumberPattern);
            Assert.Equal("\\d{4}", metadata.TollFree.NationalNumberPattern);
            Assert.Equal("\\d{5}", metadata.PremiumRate.NationalNumberPattern);
            Assert.Equal("\\d{6}", metadata.SharedCost.NationalNumberPattern);
            Assert.Equal("\\d{7}", metadata.PersonalNumber.NationalNumberPattern);
            Assert.Equal("\\d{8}", metadata.Voip.NationalNumberPattern);
            Assert.Equal("\\d{9}", metadata.Uan.NationalNumberPattern);
        }
Пример #7
0
        // Tests loadTerritoryTagMetadata().
        [TestMethod] public void testLoadTerritoryTagMetadata()
        {
            String xmlInput =
                "<territory countryCode='33' leadingDigits='2' internationalPrefix='00'" +
                "           preferredInternationalPrefix='0011' nationalPrefixForParsing='0'" +
                "           nationalPrefixTransformRule='9$1'" + // nationalPrefix manually injected.
                "           preferredExtnPrefix=' x' mainCountryForCode='true'" +
                "           leadingZeroPossible='true' mobileNumberPortableRegion='true'>" +
                "</territory>";
            XmlElement territoryElement = parseXmlString(xmlInput);

            PhoneMetadata.Builder phoneMetadata =
                BuildMetadataFromXml.loadTerritoryTagMetadata("33", territoryElement, "0");
            Assert.AreEqual(33, phoneMetadata.getCountryCode());
            Assert.AreEqual("2", phoneMetadata.getLeadingDigits());
            Assert.AreEqual("00", phoneMetadata.getInternationalPrefix());
            Assert.AreEqual("0011", phoneMetadata.getPreferredInternationalPrefix());
            Assert.AreEqual("0", phoneMetadata.getNationalPrefixForParsing());
            Assert.AreEqual("9$1", phoneMetadata.getNationalPrefixTransformRule());
            Assert.AreEqual("0", phoneMetadata.getNationalPrefix());
            Assert.AreEqual(" x", phoneMetadata.getPreferredExtnPrefix());
            Assert.IsTrue(phoneMetadata.getMainCountryForCode());
            Assert.IsTrue(phoneMetadata.isLeadingZeroPossible());
            Assert.IsTrue(phoneMetadata.isMobileNumberPortableRegion());
        }
Пример #8
0
        [TestMethod] public void testNationalPrefixRulesSetCorrectly()
        {
            String xmlInput =
                "<territory countryCode=\"33\" nationalPrefix=\"0\"" +
                " nationalPrefixFormattingRule=\"$NP$FG\">" +
                "  <availableFormats>" +
                "    <numberFormat pattern=\"(1)(\\d{3})\" nationalPrefixOptionalWhenFormatting=\"true\">" +
                "      <leadingDigits>1</leadingDigits>" +
                "      <format>$1</format>" +
                "    </numberFormat>" +
                "    <numberFormat pattern=\"(\\d{3})\" nationalPrefixOptionalWhenFormatting=\"false\">" +
                "      <leadingDigits>2</leadingDigits>" +
                "      <format>$1</format>" +
                "    </numberFormat>" +
                "  </availableFormats>" +
                "  <fixedLine><nationalNumberPattern>\\d{1}</nationalNumberPattern></fixedLine>" +
                "</territory>";
            XmlElement    territoryElement = parseXmlString(xmlInput);
            PhoneMetadata metadata         = BuildMetadataFromXml.loadCountryMetadata("FR", territoryElement,
                                                                                      false /* liteBuild */, false /* isShortNumberMetadata */,
                                                                                      true /* isAlternateFormatsMetadata */);

            Assert.IsTrue(metadata.getNumberFormat(0).isNationalPrefixOptionalWhenFormatting());
            // This is inherited from the territory, with $NP replaced by the actual national prefix, and
            // $FG replaced with $1.
            Assert.AreEqual("0$1", metadata.getNumberFormat(0).getNationalPrefixFormattingRule());
            // Here it is explicitly set to false.
            Assert.IsFalse(metadata.getNumberFormat(1).isNationalPrefixOptionalWhenFormatting());
        }
Пример #9
0
        [TestMethod] public void testAlternateFormatsOmitsDescPatterns()
        {
            String xmlInput =
                "<territory countryCode=\"33\">" +
                "  <availableFormats>" +
                "    <numberFormat pattern=\"(1)(\\d{3})\">" +
                "      <leadingDigits>1</leadingDigits>" +
                "      <format>$1</format>" +
                "    </numberFormat>" +
                "  </availableFormats>" +
                "  <fixedLine><nationalNumberPattern>\\d{1}</nationalNumberPattern></fixedLine>" +
                "  <shortCode><nationalNumberPattern>\\d{2}</nationalNumberPattern></shortCode>" +
                "</territory>";
            XmlElement    territoryElement = parseXmlString(xmlInput);
            PhoneMetadata metadata         = BuildMetadataFromXml.loadCountryMetadata("FR", territoryElement,
                                                                                      false /* liteBuild */, false /* isShortNumberMetadata */,
                                                                                      true /* isAlternateFormatsMetadata */);

            Assert.AreEqual("(1)(\\d{3})", metadata.getNumberFormat(0).getPattern());
            Assert.AreEqual("1", metadata.getNumberFormat(0).getLeadingDigitsPattern(0));
            Assert.AreEqual("$1", metadata.getNumberFormat(0).getFormat());
            Assert.IsFalse(metadata.HasFixedLine());
            Assert.IsNull(metadata.getFixedLine());
            Assert.IsFalse(metadata.HasShortCode());
            Assert.IsNull(metadata.getShortCode());
        }
Пример #10
0
        [TestMethod] public void testSetRelevantDescPatternsSetsAllDescriptionsForRegularLengthNumbers()
        {
            String xmlInput =
                "<territory countryCode=\"33\">" +
                "  <fixedLine><nationalNumberPattern>\\d{1}</nationalNumberPattern></fixedLine>" +
                "  <mobile><nationalNumberPattern>\\d{2}</nationalNumberPattern></mobile>" +
                "  <pager><nationalNumberPattern>\\d{3}</nationalNumberPattern></pager>" +
                "  <tollFree><nationalNumberPattern>\\d{4}</nationalNumberPattern></tollFree>" +
                "  <premiumRate><nationalNumberPattern>\\d{5}</nationalNumberPattern></premiumRate>" +
                "  <sharedCost><nationalNumberPattern>\\d{6}</nationalNumberPattern></sharedCost>" +
                "  <personalNumber><nationalNumberPattern>\\d{7}</nationalNumberPattern></personalNumber>" +
                "  <voip><nationalNumberPattern>\\d{8}</nationalNumberPattern></voip>" +
                "  <uan><nationalNumberPattern>\\d{9}</nationalNumberPattern></uan>" +
                "</territory>";
            XmlElement territoryElement = parseXmlString(xmlInput);

            PhoneMetadata.Builder metadata = PhoneMetadata.newBuilder();
            BuildMetadataFromXml.setRelevantDescPatterns(metadata, territoryElement, false /* liteBuild */,
                                                         false /* isShortNumberMetadata */);
            Assert.AreEqual("\\d{1}", metadata.getFixedLine().getNationalNumberPattern());
            Assert.AreEqual("\\d{2}", metadata.getMobile().getNationalNumberPattern());
            Assert.AreEqual("\\d{3}", metadata.getPager().getNationalNumberPattern());
            Assert.AreEqual("\\d{4}", metadata.getTollFree().getNationalNumberPattern());
            Assert.AreEqual("\\d{5}", metadata.getPremiumRate().getNationalNumberPattern());
            Assert.AreEqual("\\d{6}", metadata.getSharedCost().getNationalNumberPattern());
            Assert.AreEqual("\\d{7}", metadata.getPersonalNumber().getNationalNumberPattern());
            Assert.AreEqual("\\d{8}", metadata.getVoip().getNationalNumberPattern());
            Assert.AreEqual("\\d{9}", metadata.getUan().getNationalNumberPattern());
        }
Пример #11
0
        public void TestValidateRE()
        {
            String validPattern = "[a-zA-Z]d{1,9}";

            // The provided pattern should be left unchanged.
            Assert.Equal(validPattern, BuildMetadataFromXml.ValidateRE(validPattern, false));
        }
Пример #12
0
        public void TestGetNationalPrefixFormattingRuleFromElement()
        {
            String   xmlInput = "<territory nationalPrefixFormattingRule='$NP$FG'/>";
            XElement element  = parseXmlString(xmlInput);

            Assert.Equal("0${1}",
                         BuildMetadataFromXml.GetNationalPrefixFormattingRuleFromElement(element, "0"));
        }
Пример #13
0
        public void TestLoadTerritoryTagMetadataWithRequiredAttributesOnly()
        {
            String   xmlInput         = "<territory countryCode='33' internationalPrefix='00'/>";
            XElement territoryElement = parseXmlString(xmlInput);

            // Should not throw any exception.
            BuildMetadataFromXml.LoadTerritoryTagMetadata("33", territoryElement, "");
        }
Пример #14
0
        public void TestValidateRERemovesWhiteSpaces()
        {
            String input = " hello world ";

            // Should remove all the white spaces contained in the provided string.
            Assert.Equal("helloworld", BuildMetadataFromXml.ValidateRE(input, true));
            // Make sure it only happens when the last parameter is set to true.
            Assert.Equal(" hello world ", BuildMetadataFromXml.ValidateRE(input, false));
        }
Пример #15
0
        public void TestProcessPhoneNumberDescElementWithInvalidInput()
        {
            var territoryElement = ParseXmlString("<territory/>");

            var phoneNumberDesc = BuildMetadataFromXml.ProcessPhoneNumberDescElement(
                null, territoryElement, "invalidType");

            Assert.False(phoneNumberDesc.HasNationalNumberPattern);
        }
Пример #16
0
        // Tests getDomesticCarrierCodeFormattingRuleFromElement().
        [TestMethod] public void testGetDomesticCarrierCodeFormattingRuleFromElement()
        {
            String     xmlInput = "<territory carrierCodeFormattingRule='$NP$CC $FG'/>";
            XmlElement element  = parseXmlString(xmlInput);

            Assert.AreEqual("0$CC $1",
                            BuildMetadataFromXml.getDomesticCarrierCodeFormattingRuleFromXmlElement(element,
                                                                                                    "0"));
        }
        public void TestLoadInternationalFormatDoesNotSetIntlFormatWhenNA()
        {
            var xmlInput            = "<numberFormat><intlFormat>NA</intlFormat></numberFormat>";
            var numberFormatElement = parseXmlString(xmlInput);
            var metadata            = new PhoneMetadata.Builder();
            var nationalFormat      = "$1 $2";

            BuildMetadataFromXml.LoadInternationalFormat(metadata, numberFormatElement, nationalFormat);
            Assert.AreEqual(0, metadata.IntlNumberFormatCount);
        }
Пример #18
0
        public void TestLoadTerritoryTagMetadataSetsBooleanFieldsToFalseByDefault()
        {
            String   xmlInput         = "<territory countryCode='33'/>";
            XElement territoryElement = parseXmlString(xmlInput);

            PhoneMetadata.Builder phoneMetadata =
                BuildMetadataFromXml.LoadTerritoryTagMetadata("33", territoryElement, "");
            Assert.False(phoneMetadata.MainCountryForCode);
            Assert.False(phoneMetadata.LeadingZeroPossible);
        }
Пример #19
0
        public void TestProcessPhoneNumberDescElementWithInvalidInput()
        {
            XElement territoryElement = parseXmlString("<territory/>");

            var phoneNumberDesc = BuildMetadataFromXml.ProcessPhoneNumberDescElement(
                null, territoryElement, "invalidType", false);

            Assert.Equal("NA", phoneNumberDesc.PossibleNumberPattern);
            Assert.Equal("NA", phoneNumberDesc.NationalNumberPattern);
        }
Пример #20
0
        public void TestGetDomesticCarrierCodeFormattingRuleFromElement()
        {
            String   xmlInput = "<territory carrierCodeFormattingRule='$NP$CC $FG'/>";
            XElement element  = parseXmlString(xmlInput);

            // C#: the output regex differs from Java one
            Assert.Equal("0$CC ${1}",
                         BuildMetadataFromXml.GetDomesticCarrierCodeFormattingRuleFromElement(element,
                                                                                              "0"));
        }
Пример #21
0
        [TestMethod] public void testLoadTerritoryTagMetadataSetsBooleanFieldsToFalseByDefault()
        {
            String     xmlInput         = "<territory countryCode='33'/>";
            XmlElement territoryElement = parseXmlString(xmlInput);

            PhoneMetadata.Builder phoneMetadata =
                BuildMetadataFromXml.loadTerritoryTagMetadata("33", territoryElement, "");
            Assert.IsFalse(phoneMetadata.getMainCountryForCode());
            Assert.IsFalse(phoneMetadata.isLeadingZeroPossible());
            Assert.IsFalse(phoneMetadata.isMobileNumberPortableRegion());
        }
Пример #22
0
        public void TestProcessPhoneNumberDescElementMergesWithGeneralDesc()
        {
            PhoneNumberDesc generalDesc = new PhoneNumberDesc.Builder()
                                          .SetPossibleNumberPattern("\\d{6}").Build();
            XElement territoryElement = parseXmlString("<territory><fixedLine/></territory>");

            var phoneNumberDesc = BuildMetadataFromXml.ProcessPhoneNumberDescElement(
                generalDesc, territoryElement, "fixedLine", false);

            Assert.Equal("\\d{6}", phoneNumberDesc.PossibleNumberPattern);
        }
Пример #23
0
        public void TestLoadInternationalFormatUsesNationalFormatByDefault()
        {
            var xmlInput            = "<numberFormat></numberFormat>";
            var numberFormatElement = ParseXmlString(xmlInput);
            var metadata            = new PhoneMetadata.Builder();
            var nationalFormat      = "$1 $2 $3";

            Assert.False(BuildMetadataFromXml.LoadInternationalFormat(metadata, numberFormatElement,
                                                                      nationalFormat));
            Assert.Equal(nationalFormat, metadata.IntlNumberFormatList[0].Format);
        }
Пример #24
0
        public void TestLoadTerritoryTagMetadataSetsNationalPrefixForParsingByDefault()
        {
            String   xmlInput         = "<territory countryCode='33'/>";
            XElement territoryElement = parseXmlString(xmlInput);

            PhoneMetadata.Builder phoneMetadata =
                BuildMetadataFromXml.LoadTerritoryTagMetadata("33", territoryElement, "00");
            // When unspecified, nationalPrefixForParsing defaults to nationalPrefix.
            Assert.Equal("00", phoneMetadata.NationalPrefix);
            Assert.Equal(phoneMetadata.NationalPrefix, phoneMetadata.NationalPrefixForParsing);
        }
Пример #25
0
        [TestMethod] public void testProcessPhoneNumberDescElementMergesWithGeneralDesc()
        {
            PhoneNumberDesc.Builder generalDesc = PhoneNumberDesc.newBuilder();
            generalDesc.setPossibleNumberPattern("\\d{6}");
            XmlElement territoryElement = parseXmlString("<territory><fixedLine/></territory>");

            PhoneNumberDesc.Builder phoneNumberDesc;

            phoneNumberDesc = BuildMetadataFromXml.processPhoneNumberDescElement(
                generalDesc, territoryElement, "fixedLine", false);
            Assert.AreEqual("\\d{6}", phoneNumberDesc.getPossibleNumberPattern());
        }
Пример #26
0
        public void TestLoadInternationalFormatWithBothNationalAndIntlFormatsDefined()
        {
            var intlFormat          = "$1 $2";
            var xmlInput            = "<numberFormat><intlFormat>" + intlFormat + "</intlFormat></numberFormat>";
            var numberFormatElement = ParseXmlString(xmlInput);
            var metadata            = new PhoneMetadata.Builder();
            var nationalFormat      = "$1";

            Assert.True(BuildMetadataFromXml.LoadInternationalFormat(metadata, numberFormatElement,
                                                                     nationalFormat));
            Assert.Equal(intlFormat, metadata.IntlNumberFormatList[0].Format);
        }
Пример #27
0
        public void TestProcessPhoneNumberDescElementHandlesLiteBuild()
        {
            String xmlInput =
                "<territory><fixedLine>" +
                "  <exampleNumber>01 01 01 01</exampleNumber>" +
                "</fixedLine></territory>";
            XElement territoryElement = parseXmlString(xmlInput);
            var      phoneNumberDesc  = BuildMetadataFromXml.ProcessPhoneNumberDescElement(
                null, territoryElement, "fixedLine", true);

            Assert.Equal("", phoneNumberDesc.ExampleNumber);
        }
Пример #28
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());
        }
Пример #29
0
        // Tests processPhoneNumberDescElement().
        [TestMethod] public void testProcessPhoneNumberDescElementWithInvalidInput()
        {
            PhoneNumberDesc.Builder generalDesc = PhoneNumberDesc.newBuilder();
            XmlElement territoryElement         = parseXmlString("<territory/>");

            PhoneNumberDesc.Builder phoneNumberDesc;

            phoneNumberDesc = BuildMetadataFromXml.processPhoneNumberDescElement(
                generalDesc, territoryElement, "invalidType", false);
            Assert.AreEqual("NA", phoneNumberDesc.getPossibleNumberPattern());
            Assert.AreEqual("NA", phoneNumberDesc.getNationalNumberPattern());
        }
Пример #30
0
        public void TestProcessPhoneNumberDescRemovesWhiteSpacesInPatterns()
        {
            String xmlInput =
                "<territory><fixedLine>" +
                "  <possibleNumberPattern>\t \\d { 6 } </possibleNumberPattern>" +
                "</fixedLine></territory>";
            XElement countryElement = parseXmlString(xmlInput);

            var phoneNumberDesc = BuildMetadataFromXml.ProcessPhoneNumberDescElement(
                null, countryElement, "fixedLine", false);

            Assert.Equal("\\d{6}", phoneNumberDesc.PossibleNumberPattern);
        }