UNPKG

msub

Version:

Simple, dependency-free, localization-friendly string and date replacement method for String

331 lines (304 loc) 9.44 kB
var msub = require('../dist').msub; var moment = require('moment'); describe('msub v3', () => { beforeEach(done => { done(); }); describe('msub v3', () => { describe('object', () => { it('pass', done => { var s = 'Hello ${aB} to ${c} and ${c}'.msub({ aB: 'Bob', c: 'Harry' }); expect(s).toBe('Hello Bob to Harry and Harry'); expect(typeof s).toBe('string'); done(); }); it('trailing chars', done => { var s = 'Hello ${aB} to ${c} and ${c}!'.msub({ aB: 'Bob', c: 'Harry' }); expect(s).toBe('Hello Bob to Harry and Harry!'); expect(typeof s).toBe('string'); done(); }); it('missing', done => { var s = 'Hello ${aB} to ${c} only'.msub({ aB: 'Bob' }); expect(s).toBe('Hello Bob to ${c} only'); expect(typeof s).toBe('string'); done(); }); it('misformed', done => { var s = 'Hello ${aB} to ${c and ${c}!'.msub({ aB: 'Bob', c: 'Harry' }); expect(s).toBe('Hello Bob to ${c and ${c}!'); expect(typeof s).toBe('string'); done(); }); }); describe('array', () => { it('pass', done => { var s = 'Hello ${0} to ${1} and ${1}'.msub(['Bob', 'Harry']); expect(s).toBe('Hello Bob to Harry and Harry'); done(); }); }); describe('args', () => { it('basic', done => { var s = 'Hello ${0} to ${1} and ${1}'.msub('Bob', 'Harry'); expect(s).toBe('Hello Bob to Harry and Harry'); done(); }); it('missing strings', done => { var s = 'Hello ${0} to ${2} and ${1}'.msub('Bob', 'Harry'); expect(s).toBe('Hello Bob to ${2} and Harry'); done(); }); it('true and false', done => { var s = 'Hello ${0} to ${2} and ${1}'.msub(true, false, true); expect(s).toBe('Hello true to true and false'); done(); }); it('string numbers', done => { var s = 'Hello ${0} to ${2} and ${1}'.msub('0', '1'); expect(s).toBe('Hello 0 to ${2} and 1'); done(); }); it('number', done => { var s = 'Hello ${0} to ${2} and ${1}'.msub(0, 1); expect(s).toBe('Hello 0 to ${2} and 1'); done(); }); it('undefined', done => { var s = 'Hello ${0} to ${2} and ${1}'.msub(); expect(s).toBe('Hello ${0} to ${2} and ${1}'); done(); }); }); describe('number', () => { it('toFixed', done => { var n = 47.32455; var s = 'Hello ${n:toFixed:2} and Sam'.msub({ n: n }); expect(s).toBe('Hello ' + n.toFixed(2) + ' and Sam'); expect(typeof s).toBe('string'); done(); }); it('string toFixed', done => { var n = 47.32455; var s = 'Hello ${n:toFixed:2} and Sam'.msub({ n: String(n) }); expect(s).toBe('Hello ' + String(n) + ' and Sam'); expect(typeof s).toBe('string'); done(); }); }); describe('date', () => { it('today', done => { var d = new Date(); var s = 'Hello ${d:YYYYMMDD} and Sam'.msub({ d: d }); expect(s).toBe('Hello ' + d.toString() + ' and Sam'); expect(typeof s).toBe('string'); done(); }); it('Date object', done => { var d = new Date(1988, 1); var d1 = new Date(); var s = 'Hello ${d0:YYYYMMDD} and ${m3:YYYYMMDD} to ${d0:HHmmSS} and George'.msub( { d0: d, m3: d1 } ); expect(s).toBe( 'Hello ' + d.toString() + ' and ' + d1.toString() + ' to ' + d.toString() + ' and George' ); expect(typeof s).toBe('string'); done(); }); it('Date array', done => { var d0 = new Date(1995, 1); var d1 = new Date(); var s = 'Hello ${0:getFullYear} and ${1:toISOString} to ${0:toDateString} and George'.msub( d0, d1 ); expect(s).toBe( 'Hello 1995 and ' + d1.toISOString() + ' to ' + d0.toDateString() + ' and George' ); expect(typeof s).toBe('string'); done(); }); }); describe('moment', function() { beforeEach(done => { msub.init({ format: (val, format) => { if (val instanceof Date) { return moment(val).format(format); } return val; } }); done(); }); it('today', done => { var d = new Date(); var s = 'Hello ${d:YYYYMMDD} and Sam'.msub({ d: d }); expect(s).toBe('Hello ' + moment(d).format('YYYYMMDD') + ' and Sam'); expect(typeof s).toBe('string'); done(); }); it('Date object', done => { var d = new Date(1988, 3, 22); var d1 = new Date(); var s = 'Hello ${d0:YYYYMMDD} and ${m3:YYYYMMDD} to ${d0:HHmmSS} and George'.msub( { d0: d, m3: d1 } ); expect(s).toBe( 'Hello ' + moment(d).format('YYYYMMDD') + ' and ' + moment(d1).format('YYYYMMDD') + ' to ' + moment(d).format('HHmmSS') + ' and George' ); expect(typeof s).toBe('string'); done(); }); it('date array', done => { var d = new Date(1995, 1); var d1 = new Date(); var s = 'Hello ${0:YYYYMMDD} and ${1:YYYYMMDD} to ${0:HHmmSS} and George'.msub( d, d1 ); expect(s).toBe( 'Hello ' + moment(d).format('YYYYMMDD') + ' and ' + moment(d1).format('YYYYMMDD') + ' to ' + moment(d).format('HHmmSS') + ' and George' ); expect(typeof s).toBe('string'); done(); }); }); describe('exec', () => { it('pass', done => { var s = msub.exec('Hello ${aB} to ${c} and ${c}', { aB: 'Bob', c: 'Harry' }); expect(s).toBe('Hello Bob to Harry and Harry'); expect(typeof s).toBe('string'); done(); }); it('missing', done => { var s = msub.exec('Hello ${aB} to ${c} only', { aB: 'Bob' }); expect(s).toBe('Hello Bob to ${c} only'); expect(typeof s).toBe('string'); done(); }); }); }); describe('msub version 0 behaviour', function() { beforeEach(done => { msub.init({ open: '{', uppercase: true, format: (val, format) => { if (val instanceof Date) { return moment(val).format(format); } return val; } }); done(); }); it('Object replacement', done => { var s = 'Hello {A_B} to {C} and {C}'.msub({ aB: 'Bob', c: 'Harry' }); expect(s).toBe('Hello Bob to Harry and Harry'); expect(typeof s).toBe('string'); done(); }); it('Array replacement', done => { var s = 'Hello {0} to {1} and {1}'.msub(['Bob', 'Harry']); expect(s).toBe('Hello Bob to Harry and Harry'); done(); }); it('Args replacement', done => { var s = 'Hello {0} to {1} and {1}'.msub('Bob', 'Harry'); expect(s).toBe('Hello Bob to Harry and Harry'); done(); }); it('Args replacement with missing strings', done => { var s = 'Hello {0} to {2} and {1}'.msub('Bob', 'Harry'); expect(s).toBe('Hello Bob to {2} and Harry'); done(); }); it('Args replacement with string numbers', done => { var s = 'Hello {0} to {2} and {1}'.msub('0', '1'); expect(s).toBe('Hello 0 to {2} and 1'); done(); }); it('Args number replacement', done => { var s = 'Hello {0} to {2} and {1}'.msub(0, 1); expect(s).toBe('Hello 0 to {2} and 1'); done(); }); it('Args undefined replacement', done => { var s = 'Hello {0} to {2} and {1}'.msub(); expect(s).toBe('Hello {0} to {2} and {1}'); done(); }); it('Date replacement to today', done => { var d = new Date(); var s = 'Hello {D:YYYYMMDD} and Sam'.msub({ d: d }); expect(s).toBe('Hello ' + moment(d).format('YYYYMMDD') + ' and Sam'); expect(typeof s).toBe('string'); done(); }); it('Date replacement to object date', done => { var d = new Date(1988, 11, 22); var d1 = new Date(); var s = 'Hello {D0:YYYYMMDD} and {M3:YYYYMMDD} to {D0:HHmmSS} and George'.msub({ d0: d, m3: d1 }); expect(s).toBe( 'Hello ' + moment(d).format('YYYYMMDD') + ' and ' + moment(d1).format('YYYYMMDD') + ' to ' + moment(d).format('HHmmSS') + ' and George' ); expect(typeof s).toBe('string'); done(); }); it('Date replacement to array date', done => { var d = new Date(1995, 1); var d1 = new Date(); var s = 'Hello {0:YYYYMMDD} and {1:YYYYMMDD} to {0:HHmmSS} and George'.msub(d, d1); expect(s).toBe( 'Hello ' + moment(d).format('YYYYMMDD') + ' and ' + moment(d1).format('YYYYMMDD') + ' to ' + moment(d).format('HHmmSS') + ' and George' ); expect(typeof s).toBe('string'); done(); }); }); });