test/test_http_cookie.rb in http-cookie-0.1.5 vs test/test_http_cookie.rb in http-cookie-1.0.0.pre1

- old
+ new

@@ -31,20 +31,20 @@ dates = [ "14 Apr 89 03:20:12", "14 Apr 89 03:20 GMT", "Fri, 17 Mar 89 4:01:33", "Fri, 17 Mar 89 4:01 GMT", "Mon Jan 16 16:12 PDT 1989", - "Mon Jan 16 16:12 +0130 1989", + #"Mon Jan 16 16:12 +0130 1989", "6 May 1992 16:41-JST (Wednesday)", #"22-AUG-1993 10:59:12.82", "22-AUG-1993 10:59pm", "22-AUG-1993 12:59am", "22-AUG-1993 12:59 PM", #"Friday, August 04, 1995 3:54 PM", #"06/21/95 04:24:34 PM", #"20/06/95 21:07", - "95-06-08 19:32:48 EDT", + #"95-06-08 19:32:48 EDT", ] dates.each do |date| cookie = "PREF=1; expires=#{date}" silently do @@ -81,11 +81,11 @@ end def test_parse_too_long_cookie uri = URI.parse 'http://example' - cookie_str = "foo=#{'クッキー' * 340}; path=/ab/" + cookie_str = "foo=#{'Cookie' * 680}; path=/ab/" assert_equal(HTTP::Cookie::MAX_LENGTH - 1, cookie_str.bytesize) assert_equal 1, HTTP::Cookie.parse(cookie_str, :origin => uri).size assert_equal 1, HTTP::Cookie.parse(cookie_str.sub(';', 'x;'), :origin => uri).size @@ -99,11 +99,11 @@ uri = URI.parse 'http://example' assert_equal 1, HTTP::Cookie.parse(cookie_str, :origin => uri) { |cookie| assert_equal 'quoted', cookie.name - assert_equal '"value"', cookie.value + assert_equal 'value', cookie.value assert_equal 'comment is "comment"', cookie.comment }.size end def test_parse_weird_cookie @@ -246,16 +246,18 @@ "expired=doh; Expires=Fri, 04 Nov 2011 00:29:51 GMT; Path=/, " \ "a_path=some_path; Expires=Sun, 06 Nov 2011 00:29:51 GMT; Path=/some_path, " \ "no_path1=no_path; Expires=Sun, 06 Nov 2011 00:29:52 GMT, no_expires=nope; Path=/, " \ "no_path2=no_path; Expires=Sun, 06 Nov 2011 00:29:52 GMT; no_expires=nope; Path, " \ "no_path3=no_path; Expires=Sun, 06 Nov 2011 00:29:52 GMT; no_expires=nope; Path=, " \ + "rel_path1=rel_path; Expires=Sun, 06 Nov 2011 00:29:52 GMT; no_expires=nope; Path=foo/bar, " \ + "rel_path1=rel_path; Expires=Sun, 06 Nov 2011 00:29:52 GMT; no_expires=nope; Path=foo, " \ "no_domain1=no_domain; Expires=Sun, 06 Nov 2011 00:29:53 GMT; no_expires=nope, " \ "no_domain2=no_domain; Expires=Sun, 06 Nov 2011 00:29:53 GMT; no_expires=nope; Domain, " \ "no_domain3=no_domain; Expires=Sun, 06 Nov 2011 00:29:53 GMT; no_expires=nope; Domain=" cookies = HTTP::Cookie.parse cookie_str, :origin => url - assert_equal 13, cookies.length + assert_equal 15, cookies.length name = cookies.find { |c| c.name == 'name' } assert_equal "Aaron", name.value assert_equal "/", name.path assert_equal Time.at(1320539391), name.expires @@ -275,10 +277,17 @@ no_path_cookies.each { |c| assert_equal "/", c.path, c.name assert_equal Time.at(1320539392), c.expires, c.name } + rel_path_cookies = cookies.select { |c| c.value == 'rel_path' } + assert_equal 2, rel_path_cookies.size + rel_path_cookies.each { |c| + assert_equal "/", c.path, c.name + assert_equal Time.at(1320539392), c.expires, c.name + } + no_domain_cookies = cookies.select { |c| c.value == 'no_domain' } assert_equal 3, no_domain_cookies.size no_domain_cookies.each { |c| assert !c.for_domain?, c.name assert_equal c.domain, url.host, c.name @@ -362,27 +371,36 @@ end end def test_set_cookie_value url = URI.parse('http://rubyforge.org/') - cookie_params = @cookie_params.merge('secure' => 'secure') - cookie_value = 'foo=bar' - cookie_params.keys.combine.each do |keys| - cookie_text = [cookie_value, *keys.map { |key| cookie_params[key] }].join('; ') - cookie, = HTTP::Cookie.parse(cookie_text, :origin => url) - cookie2, = HTTP::Cookie.parse(cookie.set_cookie_value, :origin => url) + ['foo=bar', 'foo="bar"', 'foo="ba\"r baz"'].each { |cookie_value| + cookie_params = @cookie_params.merge('secure' => 'secure', 'max-age' => 'Max-Age=1000') + date = Time.at(Time.now.to_i) + cookie_params.keys.combine.each do |keys| + cookie_text = [cookie_value, *keys.map { |key| cookie_params[key] }].join('; ') + cookie, = HTTP::Cookie.parse(cookie_text, :origin => url, :date => date) + cookie2, = HTTP::Cookie.parse(cookie.set_cookie_value, :origin => url, :date => date) - assert_equal(cookie.name, cookie2.name) - assert_equal(cookie.value, cookie2.value) - assert_equal(cookie.domain, cookie2.domain) - assert_equal(cookie.for_domain?, cookie2.for_domain?) - assert_equal(cookie.path, cookie2.path) - assert_equal(cookie.expires, cookie2.expires) - assert_equal(cookie.secure?, cookie2.secure?) - assert_equal(cookie.httponly?, cookie2.httponly?) - end + assert_equal(cookie.name, cookie2.name) + assert_equal(cookie.value, cookie2.value) + assert_equal(cookie.domain, cookie2.domain) + assert_equal(cookie.for_domain?, cookie2.for_domain?) + assert_equal(cookie.path, cookie2.path) + assert_equal(cookie.expires, cookie2.expires) + if keys.include?('max-age') + assert_equal(date + 1000, cookie2.expires) + elsif keys.include?('expires') + assert_equal(@expires, cookie2.expires) + else + assert_equal(nil, cookie2.expires) + end + assert_equal(cookie.secure?, cookie2.secure?) + assert_equal(cookie.httponly?, cookie2.httponly?) + end + } end def test_parse_cookie_no_spaces url = URI.parse('http://rubyforge.org/') cookie_params = @cookie_params @@ -443,10 +461,41 @@ :domain => 'rubyforge.org', :origin => 'http://rubyforge.org/' }.merge(options) end + def test_bad_name + [ + "a\tb", "a\vb", "a\rb", "a\nb", 'a b', + "a\\b", 'a"b', # 'a:b', 'a/b', 'a[b]', + 'a=b', 'a,b', 'a;b', + ].each { |name| + assert_raises(ArgumentError) { + HTTP::Cookie.new(cookie_values(:name => name)) + } + cookie = HTTP::Cookie.new(cookie_values) + assert_raises(ArgumentError) { + cookie.name = name + } + } + end + + def test_bad_value + [ + "a\tb", "a\vb", "a\rb", "a\nb", + "a\\b", 'a"b', # 'a:b', 'a/b', 'a[b]', + ].each { |name| + assert_raises(ArgumentError) { + HTTP::Cookie.new(cookie_values(:name => name)) + } + cookie = HTTP::Cookie.new(cookie_values) + assert_raises(ArgumentError) { + cookie.name = name + } + } + end + def test_compare time = Time.now cookies = [ { :created_at => time + 1 }, { :created_at => time - 1 }, @@ -464,11 +513,34 @@ cookie = HTTP::Cookie.new(cookie_values) assert_equal false, cookie.expired? assert_equal true, cookie.expired?(cookie.expires + 1) assert_equal false, cookie.expired?(cookie.expires - 1) - cookie.expire + cookie.expire! assert_equal true, cookie.expired? + end + + def test_session + cookie = HTTP::Cookie.new(cookie_values) + + assert_equal false, cookie.session? + assert_equal nil, cookie.max_age + + cookie.expires = nil + assert_equal true, cookie.session? + assert_equal nil, cookie.max_age + + cookie.expires = Time.now + 3600 + assert_equal false, cookie.session? + assert_equal nil, cookie.max_age + + cookie.max_age = 3600 + assert_equal false, cookie.session? + assert_equal nil, cookie.expires + + cookie.max_age = nil + assert_equal true, cookie.session? + assert_equal nil, cookie.expires end def test_equal assert_not_equal(HTTP::Cookie.new(cookie_values), HTTP::Cookie.new(cookie_values(:value => 'bar')))