@@ -2174,9 +2174,28 @@ function end(req, res) {
21742174 res . end ( )
21752175}
21762176
2177- function expires ( res ) {
2178- var match = / E x p i r e s = ( [ ^ ; ] + ) / . exec ( cookie ( res ) ) ;
2179- return match ? match [ 1 ] : undefined ;
2177+ function expires ( res ) {
2178+ var header = cookie ( res )
2179+ return header && parseSetCookie ( header ) . expires
2180+ }
2181+
2182+ function parseSetCookie ( header ) {
2183+ var match
2184+ var pairs = [ ]
2185+ var pattern = / \s * ( [ ^ = ; ] + ) (?: = ( [ ^ ; ] * ) ; ? | ; | $ ) / g
2186+
2187+ while ( ( match = pattern . exec ( header ) ) ) {
2188+ pairs . push ( { name : match [ 1 ] , value : match [ 2 ] } )
2189+ }
2190+
2191+ var cookie = pairs . shift ( )
2192+
2193+ for ( var i = 0 ; i < pairs . length ; i ++ ) {
2194+ match = pairs [ i ]
2195+ cookie [ match . name . toLowerCase ( ) ] = ( match . value || true )
2196+ }
2197+
2198+ return cookie
21802199}
21812200
21822201function shouldNotHaveHeader ( header ) {
@@ -2202,35 +2221,39 @@ function shouldNotSetSessionInStore(store) {
22022221function shouldNotSetSecureCookie ( name ) {
22032222 return function ( res ) {
22042223 var header = cookie ( res )
2224+ var data = header && parseSetCookie ( header )
22052225 assert . ok ( header , 'should have a cookie header' )
2206- assert . equal ( header . split ( '=' ) [ 0 ] , name , 'should set cookie ' + name )
2207- assert . ok ( header . toLowerCase ( ) . split ( / ; * / ) . every ( function ( k ) { return k !== ' secure' ; } ) , 'should not set secure cookie' )
2226+ assert . equal ( data . name , name , 'should set cookie ' + name )
2227+ assert . ok ( ! data . secure , 'should not set secure cookie' )
22082228 }
22092229}
22102230
2211- function shouldSetCookie ( name ) {
2231+ function shouldSetCookie ( name ) {
22122232 return function ( res ) {
22132233 var header = cookie ( res )
2234+ var data = header && parseSetCookie ( header )
22142235 assert . ok ( header , 'should have a cookie header' )
2215- assert . equal ( header . split ( '=' ) [ 0 ] , name , 'should set cookie ' + name )
2236+ assert . equal ( data . name , name , 'should set cookie ' + name )
22162237 }
22172238}
22182239
2219- function shouldSetCookieToValue ( name , val ) {
2240+ function shouldSetCookieToValue ( name , val ) {
22202241 return function ( res ) {
2221- var header = cookie ( res ) ;
2242+ var header = cookie ( res )
2243+ var data = header && parseSetCookie ( header )
22222244 assert . ok ( header , 'should have a cookie header' )
2223- assert . equal ( header . split ( '=' ) [ 0 ] , name , 'should set cookie ' + name )
2224- assert . equal ( header . split ( '=' ) [ 1 ] . split ( ';' ) [ 0 ] , val , 'should set cookie ' + name + ' to ' + val )
2245+ assert . equal ( data . name , name , 'should set cookie ' + name )
2246+ assert . equal ( data . value , val , 'should set cookie ' + name + ' to ' + val )
22252247 }
22262248}
22272249
2228- function shouldSetSecureCookie ( name ) {
2250+ function shouldSetSecureCookie ( name ) {
22292251 return function ( res ) {
22302252 var header = cookie ( res )
2253+ var data = header && parseSetCookie ( header )
22312254 assert . ok ( header , 'should have a cookie header' )
2232- assert . equal ( header . split ( '=' ) [ 0 ] , name , 'should set cookie ' + name )
2233- assert . ok ( header . toLowerCase ( ) . split ( / ; * / ) . some ( function ( k ) { return k === ' secure' ; } ) , 'should set secure cookie' )
2255+ assert . equal ( data . name , name , 'should set cookie ' + name )
2256+ assert . ok ( data . secure , 'should set secure cookie' )
22342257 }
22352258}
22362259
0 commit comments