@@ -132,8 +132,8 @@ module HTTP
132132 it " raises on invalid value" do
133133 cookie = HTTP ::Cookie .new(" x" , " " )
134134 invalid_values = {
135- '"' , ',' , ';' , '\\ ' , # invalid printable ascii characters
136- ' ' , ' \r' , '\t' , '\n' , # non-printable ascii characters
135+ '"' , ',' , ';' , '\\ ' , # invalid printable ascii characters
136+ '\r' , '\t' , '\n' , # non-printable ascii characters
137137 }.map { |c | " foo#{ c } bar" }
138138
139139 invalid_values.each do |invalid_value |
@@ -235,12 +235,6 @@ module HTTP
235235 cookie.to_set_cookie_header.should eq(" key=value" )
236236 end
237237
238- it " parse_set_cookie with space" do
239- cookie = parse_set_cookie(" key=value; path=/test" )
240- parse_set_cookie(" key=value;path=/test" ).should eq cookie
241- parse_set_cookie(" key=value; \t\n path=/test" ).should eq cookie
242- end
243-
244238 it " parses key=" do
245239 cookie = parse_first_cookie(" key=" )
246240 cookie.name.should eq(" key" )
@@ -285,9 +279,60 @@ module HTTP
285279 first.value.should eq(" bar" )
286280 second.value.should eq(" baz" )
287281 end
282+
283+ it " parses cookie with spaces in value" do
284+ parse_first_cookie(%[ key=some value] ).value.should eq " some value"
285+ parse_first_cookie(%[ key="some value"] ).value.should eq " some value"
286+ end
287+
288+ it " strips spaces around value only when it's unquoted" do
289+ parse_first_cookie(%[ key= some value ] ).value.should eq " some value"
290+ parse_first_cookie(%[ key=" some value "] ).value.should eq " some value "
291+ parse_first_cookie(%[ key= " some value " ] ).value.should eq " some value "
292+ end
288293 end
289294
290295 describe " parse_set_cookie" do
296+ it " with space" do
297+ cookie = parse_set_cookie(" key=value; path=/test" )
298+ parse_set_cookie(" key=value;path=/test" ).should eq cookie
299+ parse_set_cookie(" key=value; \t\n path=/test" ).should eq cookie
300+ end
301+
302+ it " parses cookie with spaces in value" do
303+ parse_set_cookie(%[ key=some value] ).value.should eq " some value"
304+ parse_set_cookie(%[ key="some value"] ).value.should eq " some value"
305+ end
306+
307+ it " removes leading and trailing whitespaces" do
308+ cookie = parse_set_cookie(%[ key= \t value \t ; \t\n path=/test] )
309+ cookie.name.should eq " key"
310+ cookie.value.should eq " value"
311+ cookie.path.should eq " /test"
312+
313+ cookie = parse_set_cookie(%[ key\t =value \n ;path=/test] )
314+ cookie.name.should eq " key"
315+ cookie.value.should eq " value"
316+ cookie.path.should eq " /test"
317+ end
318+
319+ it " strips spaces around value only when it's unquoted" do
320+ cookie = parse_set_cookie(%[ key= value ; \t path=/test] )
321+ cookie.name.should eq " key"
322+ cookie.value.should eq " value"
323+ cookie.path.should eq " /test"
324+
325+ cookie = parse_set_cookie(%[ key=" value "; \t path=/test] )
326+ cookie.name.should eq " key"
327+ cookie.value.should eq " value "
328+ cookie.path.should eq " /test"
329+
330+ cookie = parse_set_cookie(%[ key= " value "\t ; \t path=/test] )
331+ cookie.name.should eq " key"
332+ cookie.value.should eq " value "
333+ cookie.path.should eq " /test"
334+ end
335+
291336 it " parses path" do
292337 cookie = parse_set_cookie(" key=value; path=/test" )
293338 cookie.name.should eq(" key" )
0 commit comments