all files / src/__tests__/ format-message.spec.js

100% Statements 44/44
100% Branches 4/4
100% Functions 7/7
100% Lines 41/41
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65                                                  
import assert from 'assert'
import Validators from '../validators'
 
var formatMessage = global.ValidatorsFormatMessage
 
describe('formatMessage', function () {
  it('should return the default value or id', function () {
    assert.equal('foo', formatMessage({ defaultMessage: 'foo', id: 'bar' }))
    assert.equal('bar', formatMessage({ id: 'bar' }))
  })
  it('should handle FormattedMessage obj', function () {
    assert.equal('foo', formatMessage({ props: { defaultMessage: 'foo', id: 'bar' } }))
  })
  it('should replace the vars', function () {
    assert.equal('foo 1 2', formatMessage({ defaultMessage: 'foo {bar} {foobar}', values: { bar: 1, foobar: 2 } }))
    assert.equal('foo 1', formatMessage({ defaultMessage: 'foo {count, number}', values: { count: 1 } }))
    assert.equal('foo 1', formatMessage({ defaultMessage: 'foo {count}', values: { count: 1 } }))
  })
  it('should pluralize', function () {
    let msg = '{count, number} {count, plural, one {char} other {chars}}'
    assert.equal('0 chars', formatMessage({ defaultMessage: msg, values: { count: 0 } }))
    assert.equal('1 char', formatMessage({ defaultMessage: msg, values: { count: 1 } }))
    assert.equal('9 chars', formatMessage({ defaultMessage: msg, values: { count: 9 } }))
    assert.equal('1 char1 char', formatMessage({ defaultMessage: msg + msg, values: { count: 1 } }))
 
    msg = '{count, number} {count, plural, one {} other {chars}}'
    assert.equal('1 ', formatMessage({ defaultMessage: msg, values: { count: 1 } }))
 
    msg = '{count, number} {count, plural, one {one} other {{size, number} chars}}'
    assert.equal('1 one', formatMessage({ defaultMessage: msg, values: { count: 1, size: 28 } }))
    assert.equal('2 28 chars', formatMessage({ defaultMessage: msg, values: { count: 2, size: 28 } }))
  })
  it('should pluralize with given pluralRules', function () {
    let defaultPluralRules = Validators.pluralRules
 
    Validators.pluralRules = {
      1: 'one',
      5: 'one',
      7: 'one',
      8: 'one',
      9: 'one',
      10: 'one',
      2: 'two',
      3: 'two',
      4: 'few',
      6: 'many'
    }
    let msg = '{count, plural, one {one} two {two_three} few {four} many {six} other {other}}'
 
    assert.equal('other', formatMessage({ defaultMessage: msg, values: { count: 0 } }))
    assert.equal('one', formatMessage({ defaultMessage: msg, values: { count: 1 } }))
    assert.equal('two_three', formatMessage({ defaultMessage: msg, values: { count: 2 } }))
    assert.equal('two_three', formatMessage({ defaultMessage: msg, values: { count: 3 } }))
    assert.equal('four', formatMessage({ defaultMessage: msg, values: { count: 4 } }))
    assert.equal('one', formatMessage({ defaultMessage: msg, values: { count: 5 } }))
    assert.equal('six', formatMessage({ defaultMessage: msg, values: { count: 6 } }))
    assert.equal('one', formatMessage({ defaultMessage: msg, values: { count: 7 } }))
    assert.equal('one', formatMessage({ defaultMessage: msg, values: { count: 8 } }))
    assert.equal('one', formatMessage({ defaultMessage: msg, values: { count: 9 } }))
    assert.equal('one', formatMessage({ defaultMessage: msg, values: { count: 10 } }))
 
    Validators.pluralRules = defaultPluralRules
  })
})