Skip to content

Commit fe324f2

Browse files
committed
tests: add simple set-cookie parser for accuracy
1 parent 4f261d0 commit fe324f2

1 file changed

Lines changed: 37 additions & 14 deletions

File tree

test/session.js

Lines changed: 37 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2174,9 +2174,28 @@ function end(req, res) {
21742174
res.end()
21752175
}
21762176

2177-
function expires(res) {
2178-
var match = /Expires=([^;]+)/.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

21822201
function shouldNotHaveHeader(header) {
@@ -2202,35 +2221,39 @@ function shouldNotSetSessionInStore(store) {
22022221
function 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

Comments
 (0)