rubysl-cgi 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/.travis.yml +8 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE +25 -0
  6. data/README.md +29 -0
  7. data/Rakefile +2 -0
  8. data/lib/cgi.rb +1 -0
  9. data/lib/rubysl/cgi.rb +2 -0
  10. data/lib/rubysl/cgi/cgi.rb +2333 -0
  11. data/lib/rubysl/cgi/version.rb +5 -0
  12. data/rubysl-cgi.gemspec +23 -0
  13. data/spec/cookie/domain_spec.rb +22 -0
  14. data/spec/cookie/expires_spec.rb +22 -0
  15. data/spec/cookie/initialize_spec.rb +146 -0
  16. data/spec/cookie/name_spec.rb +22 -0
  17. data/spec/cookie/parse_spec.rb +17 -0
  18. data/spec/cookie/path_spec.rb +22 -0
  19. data/spec/cookie/secure_spec.rb +69 -0
  20. data/spec/cookie/to_s_spec.rb +28 -0
  21. data/spec/cookie/value_spec.rb +79 -0
  22. data/spec/escapeElement_spec.rb +19 -0
  23. data/spec/escapeHTML_spec.rb +25 -0
  24. data/spec/escape_spec.rb +13 -0
  25. data/spec/header_spec.rb +7 -0
  26. data/spec/htmlextension/a_spec.rb +48 -0
  27. data/spec/htmlextension/base_spec.rb +32 -0
  28. data/spec/htmlextension/blockquote_spec.rb +32 -0
  29. data/spec/htmlextension/br_spec.rb +21 -0
  30. data/spec/htmlextension/caption_spec.rb +32 -0
  31. data/spec/htmlextension/checkbox_group_spec.rb +77 -0
  32. data/spec/htmlextension/checkbox_spec.rb +76 -0
  33. data/spec/htmlextension/doctype_spec.rb +26 -0
  34. data/spec/htmlextension/file_field_spec.rb +73 -0
  35. data/spec/htmlextension/fixtures/common.rb +16 -0
  36. data/spec/htmlextension/form_spec.rb +57 -0
  37. data/spec/htmlextension/frame_spec.rb +13 -0
  38. data/spec/htmlextension/frameset_spec.rb +13 -0
  39. data/spec/htmlextension/hidden_spec.rb +58 -0
  40. data/spec/htmlextension/html_spec.rb +65 -0
  41. data/spec/htmlextension/image_button_spec.rb +68 -0
  42. data/spec/htmlextension/img_spec.rb +84 -0
  43. data/spec/htmlextension/multipart_form_spec.rb +63 -0
  44. data/spec/htmlextension/password_field_spec.rb +83 -0
  45. data/spec/htmlextension/popup_menu_spec.rb +7 -0
  46. data/spec/htmlextension/radio_button_spec.rb +76 -0
  47. data/spec/htmlextension/radio_group_spec.rb +78 -0
  48. data/spec/htmlextension/reset_spec.rb +56 -0
  49. data/spec/htmlextension/scrolling_list_spec.rb +7 -0
  50. data/spec/htmlextension/shared/popup_menu.rb +94 -0
  51. data/spec/htmlextension/submit_spec.rb +56 -0
  52. data/spec/htmlextension/text_field_spec.rb +83 -0
  53. data/spec/htmlextension/textarea_spec.rb +72 -0
  54. data/spec/http_header_spec.rb +9 -0
  55. data/spec/initialize_spec.rb +171 -0
  56. data/spec/out_spec.rb +50 -0
  57. data/spec/parse_spec.rb +23 -0
  58. data/spec/pretty_spec.rb +23 -0
  59. data/spec/print_spec.rb +25 -0
  60. data/spec/queryextension/accept_charset_spec.rb +21 -0
  61. data/spec/queryextension/accept_encoding_spec.rb +21 -0
  62. data/spec/queryextension/accept_language_spec.rb +21 -0
  63. data/spec/queryextension/accept_spec.rb +21 -0
  64. data/spec/queryextension/auth_type_spec.rb +21 -0
  65. data/spec/queryextension/cache_control_spec.rb +21 -0
  66. data/spec/queryextension/content_length_spec.rb +25 -0
  67. data/spec/queryextension/content_type_spec.rb +21 -0
  68. data/spec/queryextension/cookies_spec.rb +9 -0
  69. data/spec/queryextension/element_reference_spec.rb +33 -0
  70. data/spec/queryextension/from_spec.rb +21 -0
  71. data/spec/queryextension/gateway_interface_spec.rb +21 -0
  72. data/spec/queryextension/has_key_spec.rb +6 -0
  73. data/spec/queryextension/host_spec.rb +21 -0
  74. data/spec/queryextension/include_spec.rb +6 -0
  75. data/spec/queryextension/key_spec.rb +6 -0
  76. data/spec/queryextension/keys_spec.rb +19 -0
  77. data/spec/queryextension/multipart_spec.rb +39 -0
  78. data/spec/queryextension/negotiate_spec.rb +21 -0
  79. data/spec/queryextension/params_spec.rb +44 -0
  80. data/spec/queryextension/path_info_spec.rb +21 -0
  81. data/spec/queryextension/path_translated_spec.rb +21 -0
  82. data/spec/queryextension/pragma_spec.rb +21 -0
  83. data/spec/queryextension/query_string_spec.rb +21 -0
  84. data/spec/queryextension/raw_cookie2_spec.rb +21 -0
  85. data/spec/queryextension/raw_cookie_spec.rb +21 -0
  86. data/spec/queryextension/referer_spec.rb +21 -0
  87. data/spec/queryextension/remote_addr_spec.rb +21 -0
  88. data/spec/queryextension/remote_host_spec.rb +21 -0
  89. data/spec/queryextension/remote_ident_spec.rb +21 -0
  90. data/spec/queryextension/remote_user_spec.rb +21 -0
  91. data/spec/queryextension/request_method_spec.rb +21 -0
  92. data/spec/queryextension/script_name_spec.rb +21 -0
  93. data/spec/queryextension/server_name_spec.rb +21 -0
  94. data/spec/queryextension/server_port_spec.rb +25 -0
  95. data/spec/queryextension/server_protocol_spec.rb +21 -0
  96. data/spec/queryextension/server_software_spec.rb +21 -0
  97. data/spec/queryextension/shared/has_key.rb +19 -0
  98. data/spec/queryextension/user_agent_spec.rb +21 -0
  99. data/spec/rfc1123_date_spec.rb +9 -0
  100. data/spec/shared/http_header.rb +111 -0
  101. data/spec/unescapeElement_spec.rb +19 -0
  102. data/spec/unescapeHTML_spec.rb +33 -0
  103. data/spec/unescape_spec.rb +14 -0
  104. metadata +293 -0
@@ -0,0 +1,5 @@
1
+ module RubySL
2
+ module CGI
3
+ VERSION = "1.0.0"
4
+ end
5
+ end
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ require './lib/rubysl/cgi/version'
3
+
4
+ Gem::Specification.new do |spec|
5
+ spec.name = "rubysl-cgi"
6
+ spec.version = RubySL::CGI::VERSION
7
+ spec.authors = ["Brian Shirai"]
8
+ spec.email = ["brixen@gmail.com"]
9
+ spec.description = %q{Ruby standard library cgi.}
10
+ spec.summary = %q{Ruby standard library cgi.}
11
+ spec.homepage = "https://github.com/rubysl/rubysl-cgi"
12
+ spec.license = "BSD"
13
+
14
+ spec.files = `git ls-files`.split($/)
15
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
16
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
+ spec.require_paths = ["lib"]
18
+
19
+ spec.add_development_dependency "bundler", "~> 1.3"
20
+ spec.add_development_dependency "rake", "~> 10.0"
21
+ spec.add_development_dependency "mspec", "~> 1.5"
22
+ spec.add_development_dependency "rubysl-prettyprint", "~> 1.0"
23
+ end
@@ -0,0 +1,22 @@
1
+ require 'cgi'
2
+
3
+ describe "CGI::Cookie#domain" do
4
+ it "returns self's domain" do
5
+ cookie = CGI::Cookie.new("test-cookie")
6
+ cookie.domain.should be_nil
7
+
8
+ cookie = CGI::Cookie.new("name" => "test-cookie", "domain" => "example.com")
9
+ cookie.domain.should == "example.com"
10
+ end
11
+ end
12
+
13
+ describe "CGI::Cookie#domain=" do
14
+ it "sets self's domain" do
15
+ cookie = CGI::Cookie.new("test-cookie")
16
+ cookie.domain = "test.com"
17
+ cookie.domain.should == "test.com"
18
+
19
+ cookie.domain = "example.com"
20
+ cookie.domain.should == "example.com"
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ require 'cgi'
2
+
3
+ describe "CGI::Cookie#expires" do
4
+ it "returns self's expiration date" do
5
+ cookie = CGI::Cookie.new("test-cookie")
6
+ cookie.expires.should be_nil
7
+
8
+ cookie = CGI::Cookie.new("name" => "test-cookie", "expires" => Time.at(1196524602))
9
+ cookie.expires.should == Time.at(1196524602)
10
+ end
11
+ end
12
+
13
+ describe "CGI::Cookie#expires=" do
14
+ it "sets self's expiration date" do
15
+ cookie = CGI::Cookie.new("test-cookie")
16
+ cookie.expires = Time.at(1196524602)
17
+ cookie.expires.should == Time.at(1196524602)
18
+
19
+ cookie.expires = Time.at(1196525000)
20
+ cookie.expires.should == Time.at(1196525000)
21
+ end
22
+ end
@@ -0,0 +1,146 @@
1
+ require 'cgi'
2
+
3
+ describe "CGI::Cookie#initialize when passed String" do
4
+ before(:each) do
5
+ @cookie = CGI::Cookie.allocate
6
+ end
7
+
8
+ it "sets the self's name to the passed String" do
9
+ @cookie.send(:initialize, "test-cookie")
10
+ @cookie.name.should == "test-cookie"
11
+ end
12
+
13
+ it "sets the self's value to an empty Array" do
14
+ @cookie.send(:initialize, "test-cookie")
15
+ @cookie.value.should == []
16
+ end
17
+
18
+ it "sets self to a non-secure cookie" do
19
+ @cookie.send(:initialize, "test")
20
+ @cookie.secure.should be_false
21
+ end
22
+
23
+ it "does set self's path to an empty String when ENV[\"SCRIPT_NAME\"] is not set" do
24
+ @cookie.send(:initialize, "test-cookie")
25
+ @cookie.path.should == ""
26
+ end
27
+
28
+ it "does set self's path based on ENV[\"SCRIPT_NAME\"] when ENV[\"SCRIPT_NAME\"] is set" do
29
+ old_script_name = ENV["SCRIPT_NAME"]
30
+
31
+ begin
32
+ ENV["SCRIPT_NAME"] = "some/path/script.rb"
33
+ @cookie.send(:initialize, "test-cookie")
34
+ @cookie.path.should == "some/path/"
35
+
36
+ ENV["SCRIPT_NAME"] = "script.rb"
37
+ @cookie.send(:initialize, "test-cookie")
38
+ @cookie.path.should == ""
39
+
40
+ ENV["SCRIPT_NAME"] = nil
41
+ @cookie.send(:initialize, "test-cookie")
42
+ @cookie.path.should == ""
43
+ ensure
44
+ ENV["SCRIPT_NAME"] = old_script_name
45
+ end
46
+ end
47
+
48
+ it "does not set self's expiration date" do
49
+ @cookie.expires.should be_nil
50
+ end
51
+
52
+ it "does not set self's domain" do
53
+ @cookie.domain.should be_nil
54
+ end
55
+ end
56
+
57
+ describe "CGI::Cookie#initialize when passed Hash" do
58
+ before(:each) do
59
+ @cookie = CGI::Cookie.allocate
60
+ end
61
+
62
+ it "sets self's contents based on the passed Hash" do
63
+ @cookie.send(:initialize,
64
+ 'name' => 'test-cookie',
65
+ 'value' => ["one", "two", "three"],
66
+ 'path' => 'some/path/',
67
+ 'domain' => 'example.com',
68
+ 'expires' => Time.at(1196524602),
69
+ 'secure' => true)
70
+
71
+ @cookie.name.should == "test-cookie"
72
+ @cookie.value.should == ["one", "two", "three"]
73
+ @cookie.path.should == "some/path/"
74
+ @cookie.domain.should == "example.com"
75
+ @cookie.expires.should == Time.at(1196524602)
76
+ @cookie.secure.should be_true
77
+ end
78
+
79
+ it "does set self's path based on ENV[\"SCRIPT_NAME\"] when the Hash has no 'path' entry" do
80
+ old_script_name = ENV["SCRIPT_NAME"]
81
+
82
+ begin
83
+ ENV["SCRIPT_NAME"] = "some/path/script.rb"
84
+ @cookie.send(:initialize, 'name' => 'test-cookie')
85
+ @cookie.path.should == "some/path/"
86
+
87
+ ENV["SCRIPT_NAME"] = "script.rb"
88
+ @cookie.send(:initialize, 'name' => 'test-cookie')
89
+ @cookie.path.should == ""
90
+
91
+ ENV["SCRIPT_NAME"] = nil
92
+ @cookie.send(:initialize, 'name' => 'test-cookie')
93
+ @cookie.path.should == ""
94
+ ensure
95
+ ENV["SCRIPT_NAME"] = old_script_name
96
+ end
97
+ end
98
+
99
+ it "tries to convert the Hash's 'value' to an Array using #Array" do
100
+ obj = mock("Converted To Array")
101
+ obj.should_receive(:to_ary).and_return(["1", "2", "3"])
102
+ @cookie.send(:initialize,
103
+ 'name' => 'test-cookie',
104
+ 'value' => obj)
105
+ @cookie.value.should == [ "1", "2", "3" ]
106
+
107
+ obj = mock("Converted To Array")
108
+ obj.should_receive(:to_a).and_return(["one", "two", "three"])
109
+ @cookie.send(:initialize,
110
+ 'name' => 'test-cookie',
111
+ 'value' => obj)
112
+ @cookie.value.should == [ "one", "two", "three" ]
113
+
114
+ obj = mock("Put into an Array")
115
+ @cookie.send(:initialize,
116
+ 'name' => 'test-cookie',
117
+ 'value' => obj)
118
+ @cookie.value.should == [ obj ]
119
+ end
120
+
121
+ it "raises a ArgumentError when the passed Hash has no 'name' entry" do
122
+ lambda { @cookie.send(:initialize, {}) }.should raise_error(ArgumentError)
123
+ lambda { @cookie.send(:initialize, "value" => "test") }.should raise_error(ArgumentError)
124
+ end
125
+ end
126
+
127
+ describe "CGI::Cookie#initialize when passed String, values ..." do
128
+ before(:each) do
129
+ @cookie = CGI::Cookie.allocate
130
+ end
131
+
132
+ it "sets the self's name to the passed String" do
133
+ @cookie.send(:initialize, "test-cookie", "one", "two", "three")
134
+ @cookie.name.should == "test-cookie"
135
+ end
136
+
137
+ it "sets the self's value to an Array containing all passed values" do
138
+ @cookie.send(:initialize, "test-cookie", "one", "two", "three")
139
+ @cookie.value.should == ["one", "two", "three"]
140
+ end
141
+
142
+ it "sets self to a non-secure cookie" do
143
+ @cookie.send(:initialize, "test", "one", "two", "three")
144
+ @cookie.secure.should be_false
145
+ end
146
+ end
@@ -0,0 +1,22 @@
1
+ require 'cgi'
2
+
3
+ describe "CGI::Cookie#name" do
4
+ it "returns self's name" do
5
+ cookie = CGI::Cookie.new("test-cookie")
6
+ cookie.name.should == "test-cookie"
7
+
8
+ cookie = CGI::Cookie.new("name" => "another cookie")
9
+ cookie.name.should == "another cookie"
10
+ end
11
+ end
12
+
13
+ describe "CGI::Cookie#name=" do
14
+ it "sets self's expiration date" do
15
+ cookie = CGI::Cookie.new("test-cookie")
16
+ cookie.name = "another name"
17
+ cookie.name.should == "another name"
18
+
19
+ cookie.name = "and one more"
20
+ cookie.name.should == "and one more"
21
+ end
22
+ end
@@ -0,0 +1,17 @@
1
+ require 'cgi'
2
+
3
+ describe "CGI::Cookie.parse" do
4
+ it "parses a raw cookie string into a hash of Cookies" do
5
+ expected = { "test-cookie" => ["one", "two", "three"] }
6
+ CGI::Cookie.parse("test-cookie=one&two&three").should == expected
7
+
8
+ expected = { "second cookie" => ["three", "four"], "first cookie" => ["one", "two"] }
9
+ CGI::Cookie.parse("first cookie=one&two;second cookie=three&four").should == expected
10
+ end
11
+
12
+ it "unescapes the Cookie values" do
13
+ cookie = "test-cookie=+%21%22%23%24%25%26%27%28%29%2A%2B%2C-.%2F0123456789%3A%3B%3C%3D%3E%3F%40ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E"
14
+ expected = { "test-cookie" => [ " !\"\#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~" ] }
15
+ CGI::Cookie.parse(cookie).should == expected
16
+ end
17
+ end
@@ -0,0 +1,22 @@
1
+ require 'cgi'
2
+
3
+ describe "CGI::Cookie#path" do
4
+ it "returns self's path" do
5
+ cookie = CGI::Cookie.new("test-cookie")
6
+ cookie.path.should == ""
7
+
8
+ cookie = CGI::Cookie.new("name" => "test-cookie", "path" => "/some/path/")
9
+ cookie.path.should == "/some/path/"
10
+ end
11
+ end
12
+
13
+ describe "CGI::Cookie#path=" do
14
+ it "sets self's path" do
15
+ cookie = CGI::Cookie.new("test-cookie")
16
+ cookie.path = "/some/path/"
17
+ cookie.path.should == "/some/path/"
18
+
19
+ cookie.path = "/another/path/"
20
+ cookie.path.should == "/another/path/"
21
+ end
22
+ end
@@ -0,0 +1,69 @@
1
+ require 'cgi'
2
+
3
+ describe "CGI::Cookie#secure" do
4
+ before(:each) do
5
+ @cookie = CGI::Cookie.new("test-cookie")
6
+ end
7
+
8
+ it "returns whether self is a secure cookie or not" do
9
+ @cookie.secure = true
10
+ @cookie.secure.should be_true
11
+
12
+ @cookie.secure = false
13
+ @cookie.secure.should be_false
14
+ end
15
+ end
16
+
17
+ describe "CGI::Cookie#secure= when passed true" do
18
+ before(:each) do
19
+ @cookie = CGI::Cookie.new("test-cookie")
20
+ end
21
+
22
+ it "returns true" do
23
+ (@cookie.secure = true).should be_true
24
+ end
25
+
26
+ it "sets self to a secure cookie" do
27
+ @cookie.secure = true
28
+ @cookie.secure.should be_true
29
+ end
30
+ end
31
+
32
+ describe "CGI::Cookie#secure= when passed false" do
33
+ before(:each) do
34
+ @cookie = CGI::Cookie.new("test-cookie")
35
+ end
36
+
37
+ it "returns false" do
38
+ (@cookie.secure = false).should be_false
39
+ end
40
+
41
+ it "sets self to a non-secure cookie" do
42
+ @cookie.secure = false
43
+ @cookie.secure.should be_false
44
+ end
45
+ end
46
+
47
+ describe "CGI::Cookie#secure= when passed Object" do
48
+ before(:each) do
49
+ @cookie = CGI::Cookie.new("test-cookie")
50
+ end
51
+
52
+ it "does not change self's secure value" do
53
+ @cookie.secure = false
54
+
55
+ @cookie.secure = Object.new
56
+ @cookie.secure.should be_false
57
+
58
+ @cookie.secure = "Test"
59
+ @cookie.secure.should be_false
60
+
61
+ @cookie.secure = true
62
+
63
+ @cookie.secure = Object.new
64
+ @cookie.secure.should be_true
65
+
66
+ @cookie.secure = "Test"
67
+ @cookie.secure.should be_true
68
+ end
69
+ end
@@ -0,0 +1,28 @@
1
+ require 'cgi'
2
+
3
+ describe "CGI::Cookie#to_s" do
4
+ it "returns a String representation of self" do
5
+ cookie = CGI::Cookie.new("test-cookie")
6
+ cookie.to_s.should == "test-cookie=; path="
7
+
8
+ cookie = CGI::Cookie.new("test-cookie", "value")
9
+ cookie.to_s.should == "test-cookie=value; path="
10
+
11
+ cookie = CGI::Cookie.new("test-cookie", "one", "two", "three")
12
+ cookie.to_s.should == "test-cookie=one&two&three; path="
13
+
14
+ cookie = CGI::Cookie.new(
15
+ 'name' => 'test-cookie',
16
+ 'value' => ["one", "two", "three"],
17
+ 'path' => 'some/path/',
18
+ 'domain' => 'example.com',
19
+ 'expires' => Time.at(1196524602),
20
+ 'secure' => true)
21
+ cookie.to_s.should == "test-cookie=one&two&three; domain=example.com; path=some/path/; expires=Sat, 01 Dec 2007 15:56:42 GMT; secure"
22
+ end
23
+
24
+ it "escapes the self's values" do
25
+ cookie = CGI::Cookie.new("test-cookie", " !\"\#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~")
26
+ cookie.to_s.should == "test-cookie=+%21%22%23%24%25%26%27%28%29%2A%2B%2C-.%2F0123456789%3A%3B%3C%3D%3E%3F%40ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E; path="
27
+ end
28
+ end
@@ -0,0 +1,79 @@
1
+ require 'cgi'
2
+
3
+ describe "CGI::Cookie#value" do
4
+ it "returns self's value" do
5
+ cookie = CGI::Cookie.new("test-cookie")
6
+ cookie.value.should == []
7
+
8
+ cookie = CGI::Cookie.new("test-cookie", "one")
9
+ cookie.value.should == ["one"]
10
+
11
+ cookie = CGI::Cookie.new("test-cookie", "one", "two", "three")
12
+ cookie.value.should == ["one", "two", "three"]
13
+
14
+ cookie = CGI::Cookie.new("name" => "test-cookie", "value" => ["one", "two", "three"])
15
+ cookie.value.should == ["one", "two", "three"]
16
+ end
17
+
18
+ ruby_bug "http://redmine.ruby-lang.org/issues/show/229", "1.8.7" do
19
+ it "is in synch with self" do
20
+ fail = []
21
+ [
22
+ :pop,
23
+ :shift,
24
+ [:<<, "Hello"],
25
+ [:push, "Hello"],
26
+ [:unshift, "World"],
27
+ [:replace, ["A", "B"]],
28
+ [:[]=, 1, "Set"],
29
+ [:delete, "first"],
30
+ [:delete_at, 0],
31
+ ].each do |method, *args|
32
+ cookie1 = CGI::Cookie.new("test-cookie", "first", "second")
33
+ cookie2 = CGI::Cookie.new("test-cookie", "first", "second")
34
+ cookie1.send(method, *args)
35
+ cookie2.value.send(method, *args)
36
+ fail << method unless cookie1.value == cookie2.value
37
+ end
38
+ fail.should be_empty
39
+ end
40
+ end
41
+ end
42
+
43
+ describe "CGI::Cookie#value=" do
44
+ before(:each) do
45
+ @cookie = CGI::Cookie.new("test-cookie")
46
+ end
47
+
48
+ it "sets self's value" do
49
+ @cookie.value = ["one"]
50
+ @cookie.value.should == ["one"]
51
+
52
+ @cookie.value = ["one", "two", "three"]
53
+ @cookie.value.should == ["one", "two", "three"]
54
+ end
55
+
56
+ ruby_bug "http://redmine.ruby-lang.org/issues/show/229", "1.8.7" do
57
+ it "automatically converts the passed Object to an Array using #Array" do
58
+ @cookie.value = "test"
59
+ @cookie.value.should == ["test"]
60
+
61
+ obj = mock("to_a")
62
+ obj.should_receive(:to_a).and_return(["1", "2"])
63
+ @cookie.value = obj
64
+ @cookie.value.should == ["1", "2"]
65
+
66
+ obj = mock("to_ary")
67
+ obj.should_receive(:to_ary).and_return(["1", "2"])
68
+ @cookie.value = obj
69
+ @cookie.value.should == ["1", "2"]
70
+ end
71
+
72
+ it "does keep self and the values in sync" do
73
+ @cookie.value = ["one", "two", "three"]
74
+ @cookie[0].should == "one"
75
+ @cookie[1].should == "two"
76
+ @cookie[2].should == "three"
77
+ end
78
+ end
79
+ end