@@ -80,6 +80,19 @@ describe("Replacement", function() {
8080 expect ( parse ( 'one {plural} ' ) [ 1 ] . arg ) . to . eql ( 'plural' ) ;
8181 } ) ;
8282
83+ it ( "should correctly handle apostrophes" , function ( ) {
84+ // This mirrors the default DOUBLE_OPTIONAL behavior of ICU.
85+ expect ( parse ( "I see '{many}'" ) [ 0 ] ) . to . eql ( "I see {many}" ) ;
86+ expect ( parse ( "I said '{''Wow!''}'" ) [ 0 ] ) . to . eql ( "I said {'Wow!'}" ) ;
87+ expect ( parse ( "I don't know" ) [ 0 ] ) . to . eql ( "I don't know" ) ;
88+ expect ( parse ( "I don''t know" ) [ 0 ] ) . to . eql ( "I don't know" ) ;
89+ expect ( parse ( "A'a''a'A" ) [ 0 ] ) . to . eql ( "A'a'a'A" ) ;
90+ expect ( parse ( "A'{a''a}'A" ) [ 0 ] ) . to . eql ( "A{a'a}A" ) ;
91+
92+ // # and | are not special here.
93+ expect ( parse ( "A '#' A" ) [ 0 ] ) . to . eql ( "A '#' A" ) ;
94+ expect ( parse ( "A '|' A" ) [ 0 ] ) . to . eql ( "A '|' A" ) ;
95+ } ) ;
8396} ) ;
8497describe ( "Simple arguments" , function ( ) {
8598
@@ -216,6 +229,30 @@ describe("Plurals", function() {
216229 ) . to . eql ( 4 ) ;
217230 } ) ;
218231
232+ it ( "should support quoting" , function ( ) {
233+ expect ( parse ( "{NUM, plural, one{{x,date,y-M-dd # '#'}} two{two}}" ) [ 0 ] . cases [ 0 ] . tokens [ 0 ] . type ) . to . eql ( 'function' ) ;
234+ expect ( parse ( "{NUM, plural, one{{x,date,y-M-dd # '#'}} two{two}}" ) [ 0 ] . cases [ 0 ] . tokens [ 0 ] . arg ) . to . eql ( 'x' ) ;
235+ expect ( parse ( "{NUM, plural, one{{x,date,y-M-dd # '#'}} two{two}}" ) [ 0 ] . cases [ 0 ] . tokens [ 0 ] . key ) . to . eql ( 'date' ) ;
236+ // Octothorpe is not special here regardless of strict number sign
237+ expect ( parse ( "{NUM, plural, one{{x,date,y-M-dd # '#'}} two{two}}" ) [ 0 ] . cases [ 0 ] . tokens [ 0 ] . params [ 0 ] ) . to . eql ( "y-M-dd # '#'" ) ;
238+
239+ expect ( parse ( "{NUM, plural, one{# '' #} two{two}}" ) [ 0 ] . cases [ 0 ] . tokens [ 0 ] . type ) . to . eql ( 'octothorpe' ) ;
240+ expect ( parse ( "{NUM, plural, one{# '' #} two{two}}" ) [ 0 ] . cases [ 0 ] . tokens [ 1 ] ) . to . eql ( " ' " ) ;
241+ expect ( parse ( "{NUM, plural, one{# '' #} two{two}}" ) [ 0 ] . cases [ 0 ] . tokens [ 2 ] . type ) . to . eql ( 'octothorpe' ) ;
242+ expect ( parse ( "{NUM, plural, one{# '#'} two{two}}" ) [ 0 ] . cases [ 0 ] . tokens [ 0 ] . type ) . to . eql ( 'octothorpe' ) ;
243+ expect ( parse ( "{NUM, plural, one{# '#'} two{two}}" ) [ 0 ] . cases [ 0 ] . tokens [ 1 ] ) . to . eql ( " #" ) ;
244+
245+ expect ( parse ( "{NUM, plural, one{one#} two{two}}" ) [ 0 ] . cases [ 0 ] . tokens [ 0 ] ) . to . eql ( 'one' ) ;
246+ expect ( parse ( "{NUM, plural, one{one#} two{two}}" ) [ 0 ] . cases [ 0 ] . tokens [ 1 ] . type ) . to . eql ( 'octothorpe' ) ;
247+
248+ // without strict number sign
249+ expect ( parse ( "{NUM, plural, one{# {VAR,select,key{# '#' one#}}} two{two}}" ) [ 0 ] . cases [ 0 ] . tokens [ 2 ] . cases [ 0 ] . tokens [ 0 ] . type ) . to . eql ( 'octothorpe' )
250+ expect ( parse ( "{NUM, plural, one{# {VAR,select,key{# '#' one#}}} two{two}}" ) [ 0 ] . cases [ 0 ] . tokens [ 2 ] . cases [ 0 ] . tokens [ 1 ] ) . to . eql ( ' # one' )
251+ expect ( parse ( "{NUM, plural, one{# {VAR,select,key{# '#' one#}}} two{two}}" ) [ 0 ] . cases [ 0 ] . tokens [ 2 ] . cases [ 0 ] . tokens [ 2 ] . type ) . to . eql ( 'octothorpe' )
252+ // with strict number sign
253+ expect ( parse ( "{NUM, plural, one{# {VAR,select,key{# '#' one#}}} two{two}}" , { strictNumberSign : true } ) [ 0 ] . cases [ 0 ] . tokens [ 2 ] . cases [ 0 ] . tokens [ 0 ] ) . to . eql ( '# \'#\' one#' )
254+ } ) ;
255+
219256} ) ;
220257describe ( "Ordinals" , function ( ) {
221258
0 commit comments