Skip to content

Commit 6da191b

Browse files
committed
Message: Add tests for formatters.
1 parent 62e9c96 commit 6da191b

File tree

2 files changed

+328
-6
lines changed

2 files changed

+328
-6
lines changed

test/compiler/cases/message.js

Lines changed: 208 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,228 @@ module.exports = {
44

55
Globalize.load(
66
// core
7-
require( "../../../external/cldr-data/supplemental/likelySubtags.json" )
7+
require( "../../../external/cldr-data/supplemental/likelySubtags.json" ),
8+
// date
9+
require( "../../../external/cldr-data/main/en/ca-gregorian.json" ),
10+
require( "../../../external/cldr-data/main/en/timeZoneNames.json" ),
11+
require( "../../../external/cldr-data/supplemental/metaZones.json" ),
12+
require( "../../../external/cldr-data/supplemental/timeData.json" ),
13+
require( "../../../external/cldr-data/supplemental/weekData.json" ),
14+
// number
15+
require( "../../../external/cldr-data/main/en/numbers.json" ),
16+
require( "../../../external/cldr-data/supplemental/numberingSystems.json" ),
17+
// currency
18+
require( "../../../external/cldr-data/main/en/currencies.json" ),
19+
require( "../../../external/cldr-data/supplemental/currencyData.json" ),
20+
// plural
21+
require( "../../../external/cldr-data/supplemental/plurals.json" ),
22+
require( "../../../external/cldr-data/supplemental/ordinals.json" ),
23+
// relative time
24+
require( "../../../external/cldr-data/main/en/dateFields.json" ),
25+
// unit
26+
require( "../../../external/cldr-data/main/en/units.json" )
827
);
928

1029
Globalize.loadMessages({
1130
en: {
1231
greetings: {
13-
hello: "Hello, {name}"
32+
hello: "Hello",
33+
helloArray: "Hello, {0}",
34+
helloArray2: "Hello, {0} and {1}",
35+
helloName: "Hello, {name}"
36+
},
37+
like: [
38+
"{count, plural, offset:1",
39+
" =0 {Be the first to like this}",
40+
" =1 {You liked this}",
41+
" one {You and {someone} liked this}",
42+
" other {You and # others liked this}",
43+
"}"
44+
],
45+
party: [
46+
"{hostGender, select,",
47+
" female {{host} invites {guest} to her party}",
48+
" male {{host} invites {guest} to his party}",
49+
" other {{host} invites {guest} to their party}",
50+
"}"
51+
],
52+
task: [
53+
"You have {0, plural,",
54+
" one {one task}",
55+
" other {# tasks}",
56+
"} remaining"
57+
],
58+
ordinal: [
59+
"{cat, selectordinal, one{#st} two{#nd} few{#rd} other{#th} }",
60+
"category"
61+
],
62+
date: {
63+
date: "date: {x, date, long}",
64+
time: "time: {x, time, long}",
65+
datetime: "datetime: {x, datetime, long}"
66+
},
67+
relativetime: {
68+
default: "relativetime: {x, relativetime, minute}",
69+
short: "relativetime short: {x, relativetime, minute, short}",
70+
narrow: "relativetime narrow: {x, relativetime, minute, narrow}"
71+
},
72+
number: {
73+
decimal: "number decimal: {x, number}",
74+
percent: "number percent: {x, number, percent}"
75+
},
76+
currency: {
77+
symbol: "currency symbol: {x, currency, USD}",
78+
accounting: "currency accounting: {x, currency, USD, accounting}",
79+
code: "currency code: {x, currency, USD, code}",
80+
name: "currency name: {x, currency, USD, name}"
81+
},
82+
unit: {
83+
long: "unit long: {x, unit, second, long}",
84+
short: "unit short: {x, unit, second, short}",
85+
narrow: "unit narrow: {x, unit, second, narrow}"
1486
}
1587
}
1688
});
1789

1890
return Globalize;
1991
},
2092
cases: function( Globalize ) {
93+
var date = new Date( 2010, 8, 15, 17, 35, 7, 369 );
94+
2195
Globalize.locale( "en" );
2296
return [
23-
{ formatter: Globalize( "en" ).messageFormatter( "greetings/hello" ), args: [ {
24-
name: "Beethoven"
25-
} ] }
97+
{
98+
formatter: Globalize( "en" ).messageFormatter( "greetings/hello" ),
99+
args: []
100+
},
101+
{
102+
formatter: Globalize( "en" ).messageFormatter( "greetings/helloArray" ),
103+
args: [ "Beethoven" ]
104+
},
105+
{
106+
formatter: Globalize( "en" ).messageFormatter( "greetings/helloArray2" ),
107+
args: [ [ "Beethoven", "Mozart" ] ]
108+
},
109+
{
110+
formatter: Globalize( "en" ).messageFormatter( "greetings/helloName" ),
111+
args: [ { name: "Beethoven" } ]
112+
},
113+
{
114+
formatter: Globalize( "en" ).messageFormatter( "task" ),
115+
args: [ 123 ]
116+
},
117+
{
118+
formatter: Globalize( "en" ).messageFormatter( "party" ),
119+
args: [ {
120+
guest: "Mozart",
121+
host: "Beethoven",
122+
hostGender: "male"
123+
} ]
124+
},
125+
{
126+
formatter: Globalize( "en" ).messageFormatter( "like" ),
127+
args: [ { count: 0 } ]
128+
},
129+
{
130+
formatter: Globalize( "en" ).messageFormatter( "like" ),
131+
args: [ { count: 1 } ]
132+
},
133+
{
134+
formatter: Globalize( "en" ).messageFormatter( "like" ),
135+
args: [ { count: 2, someone: "Beethoven" } ]
136+
},
137+
{
138+
formatter: Globalize( "en" ).messageFormatter( "like" ),
139+
args: [ { count: 3 } ]
140+
},
141+
{
142+
formatter: Globalize( "en" ).messageFormatter( "ordinal" ),
143+
args: [ { cat: 1 } ]
144+
},
145+
{
146+
formatter: Globalize( "en" ).messageFormatter( "ordinal" ),
147+
args: [ { cat: 2 } ]
148+
},
149+
{
150+
formatter: Globalize( "en" ).messageFormatter( "ordinal" ),
151+
args: [ { cat: 3 } ]
152+
},
153+
{
154+
formatter: Globalize( "en" ).messageFormatter( "ordinal" ),
155+
args: [ { cat: 4 } ]
156+
},
157+
{
158+
formatter: Globalize( "en" ).messageFormatter( "date/date" ),
159+
args: [ { x: date } ]
160+
},
161+
{
162+
formatter: Globalize( "en" ).messageFormatter( "date/time" ),
163+
args: [ { x: date } ]
164+
},
165+
{
166+
formatter: Globalize( "en" ).messageFormatter( "date/datetime" ),
167+
args: [ { x: date } ]
168+
},
169+
{
170+
formatter: Globalize( "en" ).messageFormatter( "relativetime/default" ),
171+
args: [ { x: 2 } ]
172+
},
173+
{
174+
formatter: Globalize( "en" ).messageFormatter( "relativetime/default" ),
175+
args: [ { x: -2 } ]
176+
},
177+
{
178+
formatter: Globalize( "en" ).messageFormatter( "relativetime/short" ),
179+
args: [ { x: 2 } ]
180+
},
181+
{
182+
formatter: Globalize( "en" ).messageFormatter( "relativetime/short" ),
183+
args: [ { x: -2 } ]
184+
},
185+
{
186+
formatter: Globalize( "en" ).messageFormatter( "relativetime/narrow" ),
187+
args: [ { x: 2 } ]
188+
},
189+
{
190+
formatter: Globalize( "en" ).messageFormatter( "relativetime/narrow" ),
191+
args: [ { x: -2 } ]
192+
},
193+
{
194+
formatter: Globalize( "en" ).messageFormatter( "number/decimal" ),
195+
args: [ { x: 0.5 } ]
196+
},
197+
{
198+
formatter: Globalize( "en" ).messageFormatter( "number/percent" ),
199+
args: [ { x: 0.5 } ]
200+
},
201+
{
202+
formatter: Globalize( "en" ).messageFormatter( "currency/symbol" ),
203+
args: [ { x: 100 } ]
204+
},
205+
{
206+
formatter: Globalize( "en" ).messageFormatter( "currency/accounting" ),
207+
args: [ { x: 100 } ]
208+
},
209+
{
210+
formatter: Globalize( "en" ).messageFormatter( "currency/code" ),
211+
args: [ { x: 100 } ]
212+
},
213+
{
214+
formatter: Globalize( "en" ).messageFormatter( "currency/name" ),
215+
args: [ { x: 100 } ]
216+
},
217+
{
218+
formatter: Globalize( "en" ).messageFormatter( "unit/long" ),
219+
args: [ { x: 42 } ]
220+
},
221+
{
222+
formatter: Globalize( "en" ).messageFormatter( "unit/short" ),
223+
args: [ { x: 42 } ]
224+
},
225+
{
226+
formatter: Globalize( "en" ).messageFormatter( "unit/narrow" ),
227+
args: [ { x: 42 } ]
228+
},
26229
];
27230
}
28231
};

test/functional/message/message-formatter.js

Lines changed: 120 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,43 @@
11
define([
22
"globalize",
33
"json!cldr-data/supplemental/likelySubtags.json",
4+
"json!cldr-data/supplemental/numberingSystems.json",
5+
"json!cldr-data/supplemental/currencyData.json",
46
"json!cldr-data/supplemental/plurals.json",
57
"json!cldr-data/supplemental/ordinals.json",
8+
"json!cldr-data/supplemental/timeData.json",
9+
"json!cldr-data/supplemental/weekData.json",
10+
"json!cldr-data/main/en/numbers.json",
11+
"json!cldr-data/main/en/units.json",
12+
"json!cldr-data/main/en/currencies.json",
13+
"json!cldr-data/main/en/ca-gregorian.json",
14+
"json!cldr-data/main/en/timeZoneNames.json",
15+
"json!cldr-data/main/en/dateFields.json",
16+
"json!iana-tz-data.json",
617
"../../util",
718

819
"cldr/unresolved",
920
"globalize/message",
1021
"globalize/plural"
11-
], function( Globalize, likelySubtags, plurals, ordinals, util ) {
22+
], function( Globalize, likelySubtags, numberingSystems, currencyData, plurals,
23+
ordinals, timeData, weekData, enNumbers, enUnitFields, enCurrencies, enCaGregorian,
24+
enTimeZoneNames, enDateFields, ianaTimezoneData, util ) {
25+
26+
function extraSetup() {
27+
Globalize.load(
28+
numberingSystems,
29+
currencyData,
30+
enNumbers,
31+
enUnitFields,
32+
enCurrencies,
33+
timeData,
34+
weekData,
35+
enCaGregorian,
36+
enTimeZoneNames,
37+
enDateFields
38+
);
39+
Globalize.loadTimeZone( ianaTimezoneData );
40+
}
1241

1342
QUnit.assert.messageFormatter = function( locale, path, variables, expected ) {
1443
if ( arguments.length === 3 ) {
@@ -67,6 +96,31 @@ QUnit.module( ".messageFormatter( path )", {
6796
"{cat, selectordinal, one{#st} two{#nd} few{#rd} other{#th} }",
6897
"category"
6998
],
99+
date: {
100+
date: "date: {x, date, long}",
101+
time: "time: {x, time, long}",
102+
datetime: "datetime: {x, datetime, long}"
103+
},
104+
relativetime: {
105+
default: "relativetime: {x, relativetime, minute}",
106+
short: "relativetime short: {x, relativetime, minute, short}",
107+
narrow: "relativetime narrow: {x, relativetime, minute, narrow}"
108+
},
109+
number: {
110+
decimal: "number decimal: {x, number}",
111+
percent: "number percent: {x, number, percent}"
112+
},
113+
currency: {
114+
symbol: "currency symbol: {x, currency, USD}",
115+
accounting: "currency accounting: {x, currency, USD, accounting}",
116+
code: "currency code: {x, currency, USD, code}",
117+
name: "currency name: {x, currency, USD, name}"
118+
},
119+
unit: {
120+
long: "unit long: {x, unit, second, long}",
121+
short: "unit short: {x, unit, second, short}",
122+
narrow: "unit narrow: {x, unit, second, narrow}"
123+
}
70124
},
71125
"en-GB": {},
72126
fr: {},
@@ -198,6 +252,71 @@ QUnit.test( "should support ICU message format", function( assert ) {
198252
}, "4th category" );
199253
});
200254

255+
QUnit.test( "should support formatters in messages", function( assert ) {
256+
extraSetup();
257+
258+
var date = new Date( 2010, 8, 15, 17, 35, 7, 369 );
259+
260+
assert.messageFormatter( "en", "date/date", {
261+
x: date,
262+
}, "date: September 15, 2010" );
263+
assert.messageFormatter( "en", "date/time", {
264+
x: date,
265+
}, "time: 5:35:07 PM GMT+2" );
266+
assert.messageFormatter( "en", "date/datetime", {
267+
x: date,
268+
}, "datetime: September 15, 2010 at 5:35:07 PM GMT+2" );
269+
270+
assert.messageFormatter( "en", "relativetime/default", {
271+
x: 2,
272+
}, "relativetime: in 2 minutes" );
273+
assert.messageFormatter( "en", "relativetime/default", {
274+
x: -2,
275+
}, "relativetime: 2 minutes ago" );
276+
assert.messageFormatter( "en", "relativetime/short", {
277+
x: 2,
278+
}, "relativetime short: in 2 min." );
279+
assert.messageFormatter( "en", "relativetime/short", {
280+
x: -2,
281+
}, "relativetime short: 2 min. ago" );
282+
assert.messageFormatter( "en", "relativetime/narrow", {
283+
x: 2,
284+
}, "relativetime narrow: in 2 min." );
285+
assert.messageFormatter( "en", "relativetime/narrow", {
286+
x: -2,
287+
}, "relativetime narrow: 2 min. ago" );
288+
289+
assert.messageFormatter( "en", "number/decimal", {
290+
x: 0.5,
291+
}, "number decimal: 0.5" );
292+
assert.messageFormatter( "en", "number/percent", {
293+
x: 0.5,
294+
}, "number percent: 50%" );
295+
296+
assert.messageFormatter( "en", "currency/symbol", {
297+
x: 100,
298+
}, "currency symbol: $100.00" );
299+
assert.messageFormatter( "en", "currency/accounting", {
300+
x: 100,
301+
}, "currency accounting: $100.00" );
302+
assert.messageFormatter( "en", "currency/code", {
303+
x: 100,
304+
}, "currency code: 100.00 USD" );
305+
assert.messageFormatter( "en", "currency/name", {
306+
x: 100,
307+
}, "currency name: 100.00 US dollars" );
308+
309+
assert.messageFormatter( "en", "unit/long", {
310+
x: 42,
311+
}, "unit long: 42 seconds" );
312+
assert.messageFormatter( "en", "unit/short", {
313+
x: 42,
314+
}, "unit short: 42 sec" );
315+
assert.messageFormatter( "en", "unit/narrow", {
316+
x: 42,
317+
}, "unit narrow: 42s" );
318+
});
319+
201320
// Reference #473
202321
QUnit.test( "should NOT merge array data", function( assert ) {
203322
// Re-loading a message that uses array syntax.

0 commit comments

Comments
 (0)