@@ -299,6 +299,39 @@ describe('Cookie Tests:', function() {
299
299
} )
300
300
} ) // end it
301
301
302
+ /**
303
+ * There is no definitive standard on what the cookie value can contain.
304
+ * The most restrictive definition I could find comes from Safari which only supports
305
+ * the ASCII character set, excluding semi-colon, comma, backslash, and white space.
306
+ *
307
+ * The % character is also ambiguous, as it is used as part of the URL encoded scheme. For the purpose of this test, we will leave this character out.
308
+ *
309
+ * @see {@link https://stackoverflow.com/a/1969339 | This StackOverflow answer which provides more context regarding the cookie value }
310
+ */
311
+ it ( 'Parse cookie with the entire supported set of ASCII characters' , async function ( ) {
312
+ let asciiCharacterSet = ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~' ;
313
+
314
+ asciiCharacterSet =
315
+ asciiCharacterSet . replace ( ' ' , '' )
316
+ . replace ( ';' , '' )
317
+ . replace ( ',' , '' )
318
+ . replace ( '/' , '' )
319
+ . replace ( '%' , '' ) ;
320
+
321
+ let _event = Object . assign ( { } , event , {
322
+ path : '/cookieParse' ,
323
+ multiValueHeaders : {
324
+ cookie : [ `test=${ asciiCharacterSet } ` ]
325
+ }
326
+ } )
327
+ let result = await new Promise ( r => api . run ( _event , { } , ( e , res ) => { r ( res ) } ) )
328
+ expect ( JSON . parse ( result . body ) ) . toEqual ( {
329
+ cookies : {
330
+ test : asciiCharacterSet ,
331
+ } ,
332
+ } )
333
+ } ) // end it
334
+
302
335
it ( 'Parse & decode two cookies' , async function ( ) {
303
336
let _event = Object . assign ( { } , event , {
304
337
path : '/cookieParse' ,
@@ -330,6 +363,31 @@ describe('Cookie Tests:', function() {
330
363
} )
331
364
} ) // end it
332
365
366
+ it ( 'Parse & decode multiple cookies with the entire supported set of ASCII characters' , async function ( ) {
367
+ let asciiCharacterSet = ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~' ;
368
+
369
+ asciiCharacterSet =
370
+ asciiCharacterSet . replace ( ' ' , '' )
371
+ . replace ( ';' , '' )
372
+ . replace ( ',' , '' )
373
+ . replace ( '/' , '' )
374
+ . replace ( '%' , '' ) ;
375
+
376
+ let _event = Object . assign ( { } , event , {
377
+ path : '/cookieParse' ,
378
+ multiValueHeaders : {
379
+ cookie : [ `test=${ asciiCharacterSet } ; test2=${ asciiCharacterSet } ` ]
380
+ }
381
+ } )
382
+ let result = await new Promise ( r => api . run ( _event , { } , ( e , res ) => { r ( res ) } ) )
383
+ expect ( JSON . parse ( result . body ) ) . toEqual ( {
384
+ cookies : {
385
+ test : asciiCharacterSet ,
386
+ test2 : asciiCharacterSet ,
387
+ } ,
388
+ } )
389
+ } ) // end it
390
+
333
391
} ) // end parse tests
334
392
335
393
describe ( "Clear" , function ( ) {
0 commit comments