UNPKG

@botique/libphonenumber-js

Version:

A simpler (and smaller) rewrite of Google Android's popular libphonenumber library

311 lines (258 loc) 9.04 kB
'use strict'; var _metadata = require('../metadata.min'); var _metadata2 = _interopRequireDefault(_metadata); var _parse = require('../source/parse'); var _parse2 = _interopRequireDefault(_parse); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function parse() { for (var _len = arguments.length, parameters = Array(_len), _key = 0; _key < _len; _key++) { parameters[_key] = arguments[_key]; } parameters.push(_metadata2.default); return _parse2.default.apply(this, parameters); } describe('parse', function () { it('should not parse invalid phone numbers', function () { // Too short. parse('+7 (800) 55-35-35').should.deep.equal({}); // Too long. parse('+7 (800) 55-35-35-55').should.deep.equal({}); parse('+7 (800) 55-35-35', 'US').should.deep.equal({}); parse('(800) 55 35 35', { defaultCountry: 'RU' }).should.deep.equal({}); parse('+1 187 215 5230', 'US').should.deep.equal({}); parse('+1 1877 215 5230', 'US').should.deep.equal({}); }); it('should parse valid phone numbers', function () { // Instant loans // https://www.youtube.com/watch?v=6e1pMrYH5jI // // Restrict to RU parse('8 (800) 555 35 35', 'RU').should.deep.equal({ country: 'RU', phone: '8005553535', starts_at: 0, ends_at: 17 }); // International format parse('+7 (800) 555-35-35').should.deep.equal({ country: 'RU', phone: '8005553535', starts_at: 0, ends_at: 18 }); // // Restrict to US, but not a US country phone code supplied // parse('+7 (800) 555-35-35', 'US').should.deep.equal({}) // Restrict to RU parse('(800) 555 35 35', 'RU').should.deep.equal({ country: 'RU', phone: '8005553535', starts_at: 0, ends_at: 15 }); // Default to RU parse('8 (800) 555 35 35', { defaultCountry: 'RU' }).should.deep.equal({ country: 'RU', phone: '8005553535', starts_at: 0, ends_at: 17 }); // Gangster partyline parse('+1-213-373-4253').should.deep.equal({ country: 'US', phone: '2133734253', starts_at: 0, ends_at: 15 }); // Switzerland (just in case) parse('044 668 18 00', 'CH').should.deep.equal({ country: 'CH', phone: '446681800', starts_at: 0, ends_at: 13 }); // China, Beijing parse('010-852644821', 'CN').should.deep.equal({ country: 'CN', phone: '10852644821', starts_at: 0, ends_at: 13 }); // France parse('+33169454850').should.deep.equal({ country: 'FR', phone: '169454850', starts_at: 0, ends_at: 12 }); // UK (Jersey) parse('+44 7700 300000').should.deep.equal({ country: 'JE', phone: '7700300000', starts_at: 0, ends_at: 15 }); // KZ parse('+7 702 211 1111').should.deep.equal({ country: 'KZ', phone: '7022111111', starts_at: 0, ends_at: 15 }); // Brazil parse('11987654321', 'BR').should.deep.equal({ country: 'BR', phone: '11987654321', starts_at: 0, ends_at: 11 }); // Long country phone code. parse('+212659777777').should.deep.equal({ country: 'MA', phone: '659777777', starts_at: 0, ends_at: 13 }); // No country could be derived. // parse('+212569887076').should.deep.equal({ countryPhoneCode: '212', phone: '569887076' }) }); it('should parse possible numbers', function () { // Invalid phone number for a given country. parse('1112223344', 'RU', { extended: true }).should.deep.equal({ country: 'RU', countryCallingCode: '7', phone: '1112223344', ext: undefined, valid: false, possible: true, starts_at: 0, ends_at: 10 }); // International phone number. // Several countries with the same country phone code. parse('+71112223344').should.deep.equal({}); parse('+71112223344', { extended: true }).should.deep.equal({ country: undefined, countryCallingCode: '7', phone: '1112223344', ext: undefined, valid: false, possible: true, starts_at: 0, ends_at: 12 }); // International phone number. // Single country with the given country phone code. parse('+33011222333', { extended: true }).should.deep.equal({ country: 'FR', countryCallingCode: '33', phone: '011222333', ext: undefined, valid: false, possible: true, starts_at: 0, ends_at: 12 }); // Too short. parse('+7 (800) 55-35-35 hey', { extended: true }).should.deep.equal({ country: undefined, countryCallingCode: '7', phone: '800553535', ext: undefined, valid: false, possible: false, starts_at: 0, ends_at: 17 }); // Too long. parse('+7 (800) 55-35-35-55', { extended: true }).should.deep.equal({ country: undefined, countryCallingCode: '7', phone: '80055353555', ext: undefined, valid: false, possible: false, starts_at: 0, ends_at: 20 }); // Too long (extra text) parse('hi my number is +7 (800) 55-35-35-55 please get back to me', { extended: true }).should.deep.equal({ country: undefined, countryCallingCode: '7', phone: '80055353555', ext: undefined, valid: false, possible: false, starts_at: 16, ends_at: 36 }); // No national number to be parsed. parse('+996', { extended: true }).should.deep.equal({ countryCallingCode: '996' }); // Valid number. parse('+78005553535', { extended: true }).should.deep.equal({ country: 'RU', countryCallingCode: '7', phone: '8005553535', ext: undefined, valid: true, possible: true, starts_at: 0, ends_at: 12 }); // Valid number extra text. parse('my number is +78005553535 thank you', { extended: true }).should.deep.equal({ country: 'RU', countryCallingCode: '7', phone: '8005553535', ext: undefined, valid: true, possible: true, starts_at: 13, ends_at: 25 }); }); it('should parse non-European digits', function () { parse('+١٢١٢٢٣٢٣٢٣٢').should.deep.equal({ country: 'US', phone: '2122323232', starts_at: 0, ends_at: 12 }); }); it('should work in edge cases', function () { var thrower = void 0; // No input parse('').should.deep.equal({}); // No country phone code parse('+').should.deep.equal({}); // No country at all (non international number and no explicit country code) parse('123').should.deep.equal({}); // No country metadata for this `require` country code thrower = function thrower() { return parse('123', 'ZZ'); }; thrower.should.throw('Unknown country'); // No country metadata for this `default` country code thrower = function thrower() { return parse('123', { defaultCountry: 'ZZ' }); }; thrower.should.throw('Unknown country'); // Invalid country phone code parse('+210').should.deep.equal({}); // Country phone code beginning with a '0' parse('+0123').should.deep.equal({}); // Barbados NANPA phone number parse('+12460000000').should.deep.equal({ country: 'BB', phone: '2460000000', starts_at: 0, ends_at: 12 }); // // A case when country (restricted to) is not equal // // to the one parsed out of an international number. // parse('+1-213-373-4253', 'RU').should.deep.equal({}) // National (significant) number too short parse('2', 'US').should.deep.equal({}); // National (significant) number too long parse('222222222222222222', 'US').should.deep.equal({}); // No `national_prefix_for_parsing` parse('41111', 'AC').should.deep.equal({ country: 'AC', phone: '41111', starts_at: 0, ends_at: 5 }); // National prefix transform rule (Mexico). // Local cell phone from a land line: 044 -> 1. parse('0445511111111', 'MX').should.deep.equal({ country: 'MX', phone: '15511111111', starts_at: 0, ends_at: 13 }); // No metadata thrower = function thrower() { return (0, _parse2.default)(''); }; thrower.should.throw('Metadata is required'); // No metadata thrower = function thrower() { return (0, _parse2.default)('', {}); }; thrower.should.throw('Metadata is required'); // Numerical `value` thrower = function thrower() { return parse(2141111111, 'US'); }; thrower.should.throw('A phone number for parsing must be a string.'); }); it('should parse phone number extensions', function () { // "ext" parse('2134567890 ext 123', 'US').should.deep.equal({ country: 'US', phone: '2134567890', ext: '123', starts_at: 0, ends_at: 18 }); // "ext." parse('+12134567890 ext. 12345', 'US').should.deep.equal({ country: 'US', phone: '2134567890', ext: '12345', starts_at: 0, ends_at: 23 }); // "#" parse('+12134567890#1234').should.deep.equal({ country: 'US', phone: '2134567890', ext: '1234', starts_at: 0, ends_at: 17 }); // "x" parse('+78005553535 x1234').should.deep.equal({ country: 'RU', phone: '8005553535', ext: '1234', starts_at: 0, ends_at: 18 }); // Not a valid extension parse('2134567890 ext. 1234567890', 'US').should.deep.equal({}); }); it('should parse RFC 3966 phone numbers', function () { parse('tel:+78005553535;ext:123').should.deep.equal({ country: 'RU', phone: '8005553535', ext: '123', starts_at: 0, ends_at: 24 }); // Invalid number. parse('tel:+7x8005553535;ext:123').should.deep.equal({}); }); }); //# sourceMappingURL=parse.test.js.map