def testEmergencyNumberForSharedCountryCallingCode(self): # Test the emergency number 112, which is valid in both Australia and # the Christmas Islands. self.assertTrue(is_emergency_number("112", "AU")) self.assertTrue( shortnumberinfo.is_valid_short_number_for_region( _parse("112", "AU"), "AU")) self.assertEqual( ShortNumberCost.TOLL_FREE, shortnumberinfo.expected_cost_for_region(_parse("112", "AU"), "AU")) self.assertTrue(is_emergency_number("112", "CX")) self.assertTrue( shortnumberinfo.is_valid_short_number_for_region( _parse("112", "CX"), "CX")) self.assertEqual( ShortNumberCost.TOLL_FREE, shortnumberinfo.expected_cost_for_region(_parse("112", "CX"), "CX")) sharedEmergencyNumber = PhoneNumber(country_code=61, national_number=112) self.assertTrue( shortnumberinfo.is_valid_short_number(sharedEmergencyNumber)) self.assertEqual(ShortNumberCost.TOLL_FREE, shortnumberinfo.expected_cost(sharedEmergencyNumber))
def testOverlappingNANPANumber(self): # 211 is an emergency number in Barbados, while it is a toll-free # information line in Canada and the USA. self.assertTrue(is_emergency_number("211", "BB")) self.assertEqual(ShortNumberCost.TOLL_FREE, shortnumberinfo.expected_cost_for_region(_parse("211", "BB"), "BB")) self.assertFalse(is_emergency_number("211", "US")) self.assertEqual(ShortNumberCost.UNKNOWN_COST, shortnumberinfo.expected_cost_for_region(_parse("211", "US"), "US")) self.assertFalse(is_emergency_number("211", "CA")) self.assertEqual(ShortNumberCost.UNKNOWN_COST, shortnumberinfo.expected_cost_for_region(_parse("211", "CA"), "CA"))
def testOverlappingNANPANumber(self): # 211 is an emergency number in Barbados, while it is a toll-free # information line in Canada and the USA. self.assertTrue(is_emergency_number("211", "BB")) self.assertEqual(ShortNumberCost.TOLL_FREE, shortnumberinfo.expected_cost_for_region(_parse("211", "BB"), "BB")) self.assertFalse(is_emergency_number("211", "US")) self.assertEqual(ShortNumberCost.UNKNOWN_COST, shortnumberinfo.expected_cost_for_region(_parse("211", "US"), "US")) self.assertFalse(is_emergency_number("211", "CA")) self.assertEqual(ShortNumberCost.TOLL_FREE, shortnumberinfo.expected_cost_for_region(_parse("211", "CA"), "CA"))
def testEmergencyNumberForSharedCountryCallingCode(self): # Test the emergency number 112, which is valid in both Australia and # the Christmas Islands. self.assertTrue(is_emergency_number("112", "AU")) self.assertTrue(shortnumberinfo.is_valid_short_number_for_region(_parse("112", "AU"), "AU")) self.assertEqual(ShortNumberCost.TOLL_FREE, shortnumberinfo.expected_cost_for_region(_parse("112", "AU"), "AU")) self.assertTrue(is_emergency_number("112", "CX")) self.assertTrue(shortnumberinfo.is_valid_short_number_for_region(_parse("112", "CX"), "CX")) self.assertEqual(ShortNumberCost.TOLL_FREE, shortnumberinfo.expected_cost_for_region(_parse("112", "CX"), "CX")) sharedEmergencyNumber = PhoneNumber(country_code=61, national_number=112) self.assertTrue(shortnumberinfo.is_valid_short_number(sharedEmergencyNumber)) self.assertEqual(ShortNumberCost.TOLL_FREE, shortnumberinfo.expected_cost(sharedEmergencyNumber))
def testShortNumbersValidAndCorrectCost(self): invalid_string_cases = [] for regionCode in phonenumberutil.SUPPORTED_SHORT_REGIONS: exampleShortNumber = shortnumberinfo._example_short_number( regionCode) phoneNumber = phonenumberutil.parse(exampleShortNumber, regionCode) if not shortnumberinfo.is_valid_short_number_for_region( phoneNumber, regionCode): invalid_string_case = "region_code: %s, national_number: %s" % ( regionCode, exampleShortNumber) invalid_string_cases.append(invalid_string_case) prnt("Failed validation from string %s" % invalid_string_case, file=sys.stderr) if not shortnumberinfo.is_valid_short_number(phoneNumber): self.invalid_cases.append(phoneNumber) prnt("Failed validation for %s" % phoneNumber, file=sys.stderr) for cost in [ ShortNumberCost.TOLL_FREE, ShortNumberCost.STANDARD_RATE, ShortNumberCost.PREMIUM_RATE, ShortNumberCost.UNKNOWN_COST ]: exampleShortNumber = shortnumberinfo._example_short_number_for_cost( regionCode, cost) if exampleShortNumber != "": phoneNumber = phonenumberutil.parse( exampleShortNumber, regionCode) exampleCost = shortnumberinfo.expected_cost_for_region( phoneNumber, regionCode) if cost != exampleCost: self.wrong_type_cases.append(phoneNumber) prnt("Wrong cost for %s: got %s, expected: %s" % (phoneNumber, exampleCost, cost), file=sys.stderr) self.assertEqual(0, len(invalid_string_cases)) self.assertEqual(0, len(self.invalid_cases)) self.assertEqual(0, len(self.wrong_type_cases))
def testEmergency(self): wrongTypeCounter = 0 for regionCode in phonenumberutil.SUPPORTED_SHORT_REGIONS: metadata = PhoneMetadata.short_metadata_for_region(regionCode, None) desc = metadata.emergency if desc.example_number is not None: exampleNumber = desc.example_number if (not fullmatch(re.compile(desc.possible_number_pattern), exampleNumber) or not is_emergency_number(exampleNumber, regionCode)): wrongTypeCounter += 1 prnt("Emergency example number test failed for %s" % regionCode, file=sys.stderr) elif shortnumberinfo.expected_cost_for_region(exampleNumber, regionCode) != ShortNumberCost.TOLL_FREE: wrongTypeCounter += 1 prnt("Emergency example number not toll free for %s" % regionCode, file=sys.stderr) self.assertEqual(0, wrongTypeCounter)
def testEmergency(self): wrongTypeCounter = 0 for regionCode in shortnumberinfo.SUPPORTED_SHORT_REGIONS: metadata = PhoneMetadata.short_metadata_for_region(regionCode, None) desc = metadata.emergency if desc is not None and desc.example_number is not None: exampleNumber = desc.example_number phoneNumber = phonenumberutil.parse(exampleNumber, regionCode) if (not is_possible_short_number_for_region(phoneNumber, regionCode) or not is_emergency_number(exampleNumber, regionCode)): wrongTypeCounter += 1 prnt("Emergency example number test failed for %s" % regionCode, file=sys.stderr) elif shortnumberinfo.expected_cost_for_region(phoneNumber, regionCode) != ShortNumberCost.TOLL_FREE: wrongTypeCounter += 1 prnt("Emergency example number not toll free for %s" % regionCode, file=sys.stderr) self.assertEqual(0, wrongTypeCounter)
def testShortNumbersValidAndCorrectCost(self): invalid_string_cases = [] for regionCode in phonenumberutil.SUPPORTED_SHORT_REGIONS: exampleShortNumber = shortnumberinfo._example_short_number(regionCode) phoneNumber = phonenumberutil.parse(exampleShortNumber, regionCode) if not shortnumberinfo.is_valid_short_number_for_region(phoneNumber, regionCode): invalid_string_case = "region_code: %s, national_number: %s" % (regionCode, exampleShortNumber) invalid_string_cases.append(invalid_string_case) prnt("Failed validation from string %s" % invalid_string_case, file=sys.stderr) if not shortnumberinfo.is_valid_short_number(phoneNumber): self.invalid_cases.append(phoneNumber) prnt("Failed validation for %s" % phoneNumber, file=sys.stderr) for cost in [ShortNumberCost.TOLL_FREE, ShortNumberCost.STANDARD_RATE, ShortNumberCost.PREMIUM_RATE, ShortNumberCost.UNKNOWN_COST]: exampleShortNumber = shortnumberinfo._example_short_number_for_cost(regionCode, cost) if exampleShortNumber != "": phoneNumber = phonenumberutil.parse(exampleShortNumber, regionCode) if cost != shortnumberinfo.expected_cost_for_region(phoneNumber, regionCode): self.wrong_type_cases.append(phoneNumber) prnt("Wrong cost for %s" % phoneNumber, file=sys.stderr) self.assertEqual(0, len(invalid_string_cases)) self.assertEqual(0, len(self.invalid_cases)) self.assertEqual(0, len(self.wrong_type_cases))
def testGetExpectedCostForSharedCountryCallingCode(self): # Test some numbers which have different costs in countries sharing # the same country calling code. In Australia, 1234 is premium-rate, # 1194 is standard-rate, and 733 is toll-free. These are not known to # be valid numbers in the Christmas Islands. ambiguousPremiumRateString = "1234" ambiguousPremiumRateNumber = PhoneNumber(country_code=61, national_number=1234) ambiguousStandardRateString = "1194" ambiguousStandardRateNumber = PhoneNumber(country_code=61, national_number=1194) ambiguousTollFreeString = "733" ambiguousTollFreeNumber = PhoneNumber(country_code=61, national_number=733) self.assertTrue(shortnumberinfo.is_valid_short_number(ambiguousPremiumRateNumber)) self.assertTrue(shortnumberinfo.is_valid_short_number(ambiguousStandardRateNumber)) self.assertTrue(shortnumberinfo.is_valid_short_number(ambiguousTollFreeNumber)) self.assertTrue(shortnumberinfo.is_valid_short_number_for_region(_parse(ambiguousPremiumRateString, "AU"), "AU")) self.assertEqual(ShortNumberCost.PREMIUM_RATE, shortnumberinfo.expected_cost_for_region(_parse(ambiguousPremiumRateString, "AU"), "AU")) self.assertFalse(shortnumberinfo.is_valid_short_number_for_region(_parse(ambiguousPremiumRateString, "CX"), "CX")) self.assertEqual(ShortNumberCost.UNKNOWN_COST, shortnumberinfo.expected_cost_for_region(_parse(ambiguousPremiumRateString, "CX"), "CX")) # PREMIUM_RATE takes precedence over UNKNOWN_COST. self.assertEqual(ShortNumberCost.PREMIUM_RATE, shortnumberinfo.expected_cost(ambiguousPremiumRateNumber)) self.assertTrue(shortnumberinfo.is_valid_short_number_for_region(_parse(ambiguousStandardRateString, "AU"), "AU")) self.assertEqual(ShortNumberCost.STANDARD_RATE, shortnumberinfo.expected_cost_for_region(_parse(ambiguousStandardRateString, "AU"), "AU")) self.assertFalse(shortnumberinfo.is_valid_short_number_for_region(_parse(ambiguousStandardRateString, "CX"), "CX")) self.assertEqual(ShortNumberCost.UNKNOWN_COST, shortnumberinfo.expected_cost_for_region(_parse(ambiguousStandardRateString, "CX"), "CX")) self.assertEqual(ShortNumberCost.UNKNOWN_COST, shortnumberinfo.expected_cost(ambiguousStandardRateNumber)) self.assertTrue(shortnumberinfo.is_valid_short_number_for_region(_parse(ambiguousTollFreeString, "AU"), "AU")) self.assertEqual(ShortNumberCost.TOLL_FREE, shortnumberinfo.expected_cost_for_region(_parse(ambiguousTollFreeString, "AU"), "AU")) self.assertFalse(shortnumberinfo.is_valid_short_number_for_region(_parse(ambiguousTollFreeString, "CX"), "CX")) self.assertEqual(ShortNumberCost.UNKNOWN_COST, shortnumberinfo.expected_cost_for_region(_parse(ambiguousTollFreeString, "CX"), "CX")) self.assertEqual(ShortNumberCost.UNKNOWN_COST, shortnumberinfo.expected_cost(ambiguousTollFreeNumber))