/
format.js
101 lines (84 loc) · 3.18 KB
/
format.js
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import expect from 'expect';
import expectJSX from 'expect-jsx';
import React from 'react';
import {createRenderer} from 'react-addons-test-utils';
expect.extend(expectJSX);
export default function (ReactIntl) {
describe('format', () => {
const {
IntlProvider,
FormattedDate,
FormattedTime,
FormattedRelative,
FormattedNumber,
FormattedMessage,
} = ReactIntl;
let renderer;
let intlProvider;
beforeEach(() => {
renderer = createRenderer();
intlProvider = new IntlProvider({locale: 'en'}, {});
});
it('formats dates', () => {
const date = new Date();
const el = <FormattedDate value={date} month="numeric" />;
renderer.render(el, intlProvider.getChildContext());
expect(renderer.getRenderOutput()).toEqualJSX(
<span>{date.getMonth() + 1}</span>
);
});
it('formats times', () => {
const date = new Date();
const el = <FormattedTime value={date} />;
const hours = date.getHours();
const minutes = date.getMinutes();
renderer.render(el, intlProvider.getChildContext());
expect(renderer.getRenderOutput()).toEqualJSX(
<span>
{
`${hours > 12 ? (hours % 12) : (hours || '12')}:` +
`${minutes < 10 ? `0${minutes}` : minutes} ` +
`${hours < 12 ? 'AM' : 'PM'}`
}
</span>
);
});
it('formats dates relative to "now"', () => {
const now = Date.now();
const el = <FormattedRelative value={now - 1000} initialNow={now} />;
renderer.render(el, intlProvider.getChildContext());
expect(renderer.getRenderOutput()).toEqualJSX(
<span>1 second ago</span>
);
});
it('formats numbers with thousands separators', () => {
const el = <FormattedNumber value={1000} />;
renderer.render(el, intlProvider.getChildContext());
expect(renderer.getRenderOutput()).toEqualJSX(
<span>1,000</span>
);
});
it('formats numbers with decimal separators', () => {
const el = <FormattedNumber value={0.1} minimumFractionDigits={2} />;
renderer.render(el, intlProvider.getChildContext());
expect(renderer.getRenderOutput()).toEqualJSX(
<span>0.10</span>
);
});
it('pluralizes labels in strings', () => {
const el = (
<FormattedMessage
id="num_emails"
defaultMessage="You have {emails, plural, one {# email} other {# emails}}."
values={{
emails: 1000,
}}
/>
);
renderer.render(el, intlProvider.getChildContext());
expect(renderer.getRenderOutput()).toEqualJSX(
<span>You have 1,000 emails.</span>
);
});
});
}