@@ -173,6 +173,76 @@ describe('parse()', function () {
173173 } ) ;
174174 } ) ;
175175
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+
176246 describe ( 'parse("{gender, select, female {woman} male {man} other {person}}")' , function ( ) {
177247 var msg = '{gender, select, female {woman} male {man} other {person}}' ;
178248 var ast = parse ( msg ) ;
0 commit comments