@@ -173,6 +173,76 @@ describe('parse()', function () {
173
173
} ) ;
174
174
} ) ;
175
175
176
+ describe ( 'parse("{floor, selectordinal, =0{ground} one{#st} two{#nd} few{#rd} other{#th}} floor")' , function ( ) {
177
+ var msg = '{floor, selectordinal, =0{ground} one{#st} two{#nd} few{#rd} other{#th}} floor' ;
178
+ var ast = parse ( msg ) ;
179
+
180
+ it ( 'should contain 2 `elements`' , function ( ) {
181
+ expect ( ast . elements ) . to . have . length ( 2 ) ;
182
+ } ) ;
183
+
184
+ it ( 'should contain an `argumentElement`' , function ( ) {
185
+ var element = ast . elements [ 0 ] ;
186
+ expect ( element ) . to . be . an ( 'object' ) ;
187
+ expect ( element ) . to . have . property ( 'type' ) ;
188
+ expect ( element . type ) . to . equal ( 'argumentElement' ) ;
189
+ expect ( element ) . to . have . property ( 'id' ) ;
190
+ expect ( element . id ) . to . equal ( 'floor' ) ;
191
+ expect ( element ) . to . have . property ( 'format' ) ;
192
+
193
+ var format = element . format ;
194
+ expect ( format ) . to . be . an ( 'object' ) ;
195
+ expect ( format ) . to . have . property ( 'type' ) ;
196
+ expect ( format . type ) . to . equal ( 'pluralFormat' ) ;
197
+ expect ( format ) . to . have . property ( 'offset' ) ;
198
+ expect ( format . offset ) . to . equal ( 0 ) ;
199
+ expect ( format . ordinal ) . to . equal ( true ) ;
200
+ } ) ;
201
+
202
+ it ( 'should contain 5 `options`' , function ( ) {
203
+ var options = ast . elements [ 0 ] . format . options ;
204
+ expect ( options ) . to . have . length ( 5 ) ;
205
+
206
+ var option = options [ 0 ] ;
207
+ expect ( option ) . to . be . an ( 'object' ) ;
208
+ expect ( option ) . to . have . property ( 'type' ) ;
209
+ expect ( option . type ) . to . equal ( 'optionalFormatPattern' ) ;
210
+ expect ( option ) . to . have . property ( 'selector' ) ;
211
+ expect ( option . selector ) . to . equal ( '=0' ) ;
212
+ expect ( option ) . to . have . property ( 'value' ) ;
213
+ expect ( option . value ) . to . be . an ( 'object' ) ;
214
+
215
+ expect ( options [ 1 ] . selector ) . to . equal ( 'one' ) ;
216
+ expect ( options [ 2 ] . selector ) . to . equal ( 'two' ) ;
217
+ expect ( options [ 3 ] . selector ) . to . equal ( 'few' ) ;
218
+ expect ( options [ 4 ] . selector ) . to . equal ( 'other' ) ;
219
+ } ) ;
220
+
221
+ it ( 'should contain nested `messageFormatPattern` values for each option' , function ( ) {
222
+ var options = ast . elements [ 0 ] . format . options ;
223
+
224
+ var value = options [ 0 ] . value ;
225
+ expect ( value ) . to . have . property ( 'type' ) ;
226
+ expect ( value . type ) . to . equal ( 'messageFormatPattern' ) ;
227
+ expect ( value ) . to . have . property ( 'elements' ) ;
228
+ expect ( value . elements ) . to . be . an ( 'array' ) ;
229
+ expect ( value . elements ) . to . have . length ( 1 ) ;
230
+
231
+ var element = value . elements [ 0 ] ;
232
+ expect ( element ) . to . be . an ( 'object' ) ;
233
+ expect ( element ) . to . have . property ( 'type' ) ;
234
+ expect ( element . type ) . to . equal ( 'messageTextElement' ) ;
235
+ expect ( element ) . to . have . property ( 'value' ) ;
236
+ expect ( element . value ) . to . equal ( 'ground' ) ;
237
+
238
+ expect ( options [ 0 ] . value . elements [ 0 ] . value ) . to . equal ( 'ground' ) ;
239
+ expect ( options [ 1 ] . value . elements [ 0 ] . value ) . to . equal ( '#st' ) ;
240
+ expect ( options [ 2 ] . value . elements [ 0 ] . value ) . to . equal ( '#nd' ) ;
241
+ expect ( options [ 3 ] . value . elements [ 0 ] . value ) . to . equal ( '#rd' ) ;
242
+ expect ( options [ 4 ] . value . elements [ 0 ] . value ) . to . equal ( '#th' ) ;
243
+ } ) ;
244
+ } ) ;
245
+
176
246
describe ( 'parse("{gender, select, female {woman} male {man} other {person}}")' , function ( ) {
177
247
var msg = '{gender, select, female {woman} male {man} other {person}}' ;
178
248
var ast = parse ( msg ) ;
0 commit comments