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.
- checksums.yaml +7 -0
- data/.gitignore +18 -0
- data/.travis.yml +8 -0
- data/Gemfile +4 -0
- data/LICENSE +25 -0
- data/README.md +29 -0
- data/Rakefile +2 -0
- data/lib/cgi.rb +1 -0
- data/lib/rubysl/cgi.rb +2 -0
- data/lib/rubysl/cgi/cgi.rb +2333 -0
- data/lib/rubysl/cgi/version.rb +5 -0
- data/rubysl-cgi.gemspec +23 -0
- data/spec/cookie/domain_spec.rb +22 -0
- data/spec/cookie/expires_spec.rb +22 -0
- data/spec/cookie/initialize_spec.rb +146 -0
- data/spec/cookie/name_spec.rb +22 -0
- data/spec/cookie/parse_spec.rb +17 -0
- data/spec/cookie/path_spec.rb +22 -0
- data/spec/cookie/secure_spec.rb +69 -0
- data/spec/cookie/to_s_spec.rb +28 -0
- data/spec/cookie/value_spec.rb +79 -0
- data/spec/escapeElement_spec.rb +19 -0
- data/spec/escapeHTML_spec.rb +25 -0
- data/spec/escape_spec.rb +13 -0
- data/spec/header_spec.rb +7 -0
- data/spec/htmlextension/a_spec.rb +48 -0
- data/spec/htmlextension/base_spec.rb +32 -0
- data/spec/htmlextension/blockquote_spec.rb +32 -0
- data/spec/htmlextension/br_spec.rb +21 -0
- data/spec/htmlextension/caption_spec.rb +32 -0
- data/spec/htmlextension/checkbox_group_spec.rb +77 -0
- data/spec/htmlextension/checkbox_spec.rb +76 -0
- data/spec/htmlextension/doctype_spec.rb +26 -0
- data/spec/htmlextension/file_field_spec.rb +73 -0
- data/spec/htmlextension/fixtures/common.rb +16 -0
- data/spec/htmlextension/form_spec.rb +57 -0
- data/spec/htmlextension/frame_spec.rb +13 -0
- data/spec/htmlextension/frameset_spec.rb +13 -0
- data/spec/htmlextension/hidden_spec.rb +58 -0
- data/spec/htmlextension/html_spec.rb +65 -0
- data/spec/htmlextension/image_button_spec.rb +68 -0
- data/spec/htmlextension/img_spec.rb +84 -0
- data/spec/htmlextension/multipart_form_spec.rb +63 -0
- data/spec/htmlextension/password_field_spec.rb +83 -0
- data/spec/htmlextension/popup_menu_spec.rb +7 -0
- data/spec/htmlextension/radio_button_spec.rb +76 -0
- data/spec/htmlextension/radio_group_spec.rb +78 -0
- data/spec/htmlextension/reset_spec.rb +56 -0
- data/spec/htmlextension/scrolling_list_spec.rb +7 -0
- data/spec/htmlextension/shared/popup_menu.rb +94 -0
- data/spec/htmlextension/submit_spec.rb +56 -0
- data/spec/htmlextension/text_field_spec.rb +83 -0
- data/spec/htmlextension/textarea_spec.rb +72 -0
- data/spec/http_header_spec.rb +9 -0
- data/spec/initialize_spec.rb +171 -0
- data/spec/out_spec.rb +50 -0
- data/spec/parse_spec.rb +23 -0
- data/spec/pretty_spec.rb +23 -0
- data/spec/print_spec.rb +25 -0
- data/spec/queryextension/accept_charset_spec.rb +21 -0
- data/spec/queryextension/accept_encoding_spec.rb +21 -0
- data/spec/queryextension/accept_language_spec.rb +21 -0
- data/spec/queryextension/accept_spec.rb +21 -0
- data/spec/queryextension/auth_type_spec.rb +21 -0
- data/spec/queryextension/cache_control_spec.rb +21 -0
- data/spec/queryextension/content_length_spec.rb +25 -0
- data/spec/queryextension/content_type_spec.rb +21 -0
- data/spec/queryextension/cookies_spec.rb +9 -0
- data/spec/queryextension/element_reference_spec.rb +33 -0
- data/spec/queryextension/from_spec.rb +21 -0
- data/spec/queryextension/gateway_interface_spec.rb +21 -0
- data/spec/queryextension/has_key_spec.rb +6 -0
- data/spec/queryextension/host_spec.rb +21 -0
- data/spec/queryextension/include_spec.rb +6 -0
- data/spec/queryextension/key_spec.rb +6 -0
- data/spec/queryextension/keys_spec.rb +19 -0
- data/spec/queryextension/multipart_spec.rb +39 -0
- data/spec/queryextension/negotiate_spec.rb +21 -0
- data/spec/queryextension/params_spec.rb +44 -0
- data/spec/queryextension/path_info_spec.rb +21 -0
- data/spec/queryextension/path_translated_spec.rb +21 -0
- data/spec/queryextension/pragma_spec.rb +21 -0
- data/spec/queryextension/query_string_spec.rb +21 -0
- data/spec/queryextension/raw_cookie2_spec.rb +21 -0
- data/spec/queryextension/raw_cookie_spec.rb +21 -0
- data/spec/queryextension/referer_spec.rb +21 -0
- data/spec/queryextension/remote_addr_spec.rb +21 -0
- data/spec/queryextension/remote_host_spec.rb +21 -0
- data/spec/queryextension/remote_ident_spec.rb +21 -0
- data/spec/queryextension/remote_user_spec.rb +21 -0
- data/spec/queryextension/request_method_spec.rb +21 -0
- data/spec/queryextension/script_name_spec.rb +21 -0
- data/spec/queryextension/server_name_spec.rb +21 -0
- data/spec/queryextension/server_port_spec.rb +25 -0
- data/spec/queryextension/server_protocol_spec.rb +21 -0
- data/spec/queryextension/server_software_spec.rb +21 -0
- data/spec/queryextension/shared/has_key.rb +19 -0
- data/spec/queryextension/user_agent_spec.rb +21 -0
- data/spec/rfc1123_date_spec.rb +9 -0
- data/spec/shared/http_header.rb +111 -0
- data/spec/unescapeElement_spec.rb +19 -0
- data/spec/unescapeHTML_spec.rb +33 -0
- data/spec/unescape_spec.rb +14 -0
- metadata +293 -0
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'cgi'
|
2
|
+
require File.expand_path('../fixtures/common', __FILE__)
|
3
|
+
|
4
|
+
describe "CGI::HtmlExtension#text_field" do
|
5
|
+
before(:each) do
|
6
|
+
@html = CGISpecs.cgi_new
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "when passed no arguments" do
|
10
|
+
it "returns an text-'input'-element without a name" do
|
11
|
+
output = @html.text_field
|
12
|
+
output.should equal_element("INPUT", {"NAME" => "", "TYPE" => "text", "SIZE" => "40"}, "", :not_closed => true)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "ignores a passed block" do
|
16
|
+
output = @html.text_field { "test" }
|
17
|
+
output.should equal_element("INPUT", {"NAME" => "", "TYPE" => "text", "SIZE" => "40"}, "", :not_closed => true)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "when passed name" do
|
22
|
+
it "returns an text-'input'-element with the passed name" do
|
23
|
+
output = @html.text_field("test")
|
24
|
+
output.should equal_element("INPUT", {"NAME" => "test", "TYPE" => "text", "SIZE" => "40"}, "", :not_closed => true)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "ignores a passed block" do
|
28
|
+
output = @html.text_field("test") { "test" }
|
29
|
+
output.should equal_element("INPUT", {"NAME" => "test", "TYPE" => "text", "SIZE" => "40"}, "", :not_closed => true)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "when passed name, value" do
|
34
|
+
it "returns an text-'input'-element with the passed name and value" do
|
35
|
+
output = @html.text_field("test", "some value")
|
36
|
+
output.should equal_element("INPUT", {"NAME" => "test", "TYPE" => "text", "VALUE" => "some value", "SIZE" => "40"}, "", :not_closed => true)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "ignores a passed block" do
|
40
|
+
output = @html.text_field("test", "some value") { "test" }
|
41
|
+
output.should equal_element("INPUT", {"NAME" => "test", "TYPE" => "text", "VALUE" => "some value", "SIZE" => "40"}, "", :not_closed => true)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "when passed name, value, size" do
|
46
|
+
it "returns an text-'input'-element with the passed name, value and size" do
|
47
|
+
output = @html.text_field("test", "some value", 60)
|
48
|
+
output.should equal_element("INPUT", {"NAME" => "test", "TYPE" => "text", "VALUE" => "some value", "SIZE" => "60"}, "", :not_closed => true)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "ignores a passed block" do
|
52
|
+
output = @html.text_field("test", "some value", 60) { "test" }
|
53
|
+
output.should equal_element("INPUT", {"NAME" => "test", "TYPE" => "text", "VALUE" => "some value", "SIZE" => "60"}, "", :not_closed => true)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "when passed name, value, size, maxlength" do
|
58
|
+
it "returns an text-'input'-element with the passed name, value, size and maxlength" do
|
59
|
+
output = @html.text_field("test", "some value", 60, 12)
|
60
|
+
output.should equal_element("INPUT", {"NAME" => "test", "TYPE" => "text", "VALUE" => "some value", "SIZE" => "60", "MAXLENGTH" => 12}, "", :not_closed => true)
|
61
|
+
end
|
62
|
+
|
63
|
+
it "ignores a passed block" do
|
64
|
+
output = @html.text_field("test", "some value", 60, 12) { "test" }
|
65
|
+
output.should equal_element("INPUT", {"NAME" => "test", "TYPE" => "text", "VALUE" => "some value", "SIZE" => "60", "MAXLENGTH" => 12}, "", :not_closed => true)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe "when passed Hash" do
|
70
|
+
it "returns a checkbox-'input'-element using the passed Hash for attributes" do
|
71
|
+
output = @html.text_field("NAME" => "test", "VALUE" => "some value")
|
72
|
+
output.should equal_element("INPUT", { "NAME" => "test", "VALUE" => "some value", "TYPE" => "text" }, "", :not_closed => true)
|
73
|
+
|
74
|
+
output = @html.text_field("TYPE" => "hidden")
|
75
|
+
output.should equal_element("INPUT", {"TYPE" => "text"}, "", :not_closed => true)
|
76
|
+
end
|
77
|
+
|
78
|
+
it "ignores a passed block" do
|
79
|
+
output = @html.text_field("NAME" => "test", "VALUE" => "some value") { "test" }
|
80
|
+
output.should equal_element("INPUT", { "NAME" => "test", "VALUE" => "some value", "TYPE" => "text" }, "", :not_closed => true)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'cgi'
|
2
|
+
require File.expand_path('../fixtures/common', __FILE__)
|
3
|
+
|
4
|
+
describe "CGI::HtmlExtension#textarea" do
|
5
|
+
before(:each) do
|
6
|
+
@html = CGISpecs.cgi_new
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "when passed no arguments" do
|
10
|
+
it "returns an 'textarea'-element without a name" do
|
11
|
+
output = @html.textarea
|
12
|
+
output.should equal_element("TEXTAREA", {"NAME" => "", "COLS" => "70", "ROWS" => "10"}, "")
|
13
|
+
end
|
14
|
+
|
15
|
+
it "includes the return value of the passed block when passed a block" do
|
16
|
+
output = @html.textarea { "Example" }
|
17
|
+
output.should equal_element("TEXTAREA", {"NAME" => "", "COLS" => "70", "ROWS" => "10"}, "Example")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "when passed name" do
|
22
|
+
it "returns an 'textarea'-element with the passed name" do
|
23
|
+
output = @html.textarea("test")
|
24
|
+
output.should equal_element("TEXTAREA", {"NAME" => "test", "COLS" => "70", "ROWS" => "10"}, "")
|
25
|
+
end
|
26
|
+
|
27
|
+
it "includes the return value of the passed block when passed a block" do
|
28
|
+
output = @html.textarea("test") { "Example" }
|
29
|
+
output.should equal_element("TEXTAREA", {"NAME" => "test", "COLS" => "70", "ROWS" => "10"}, "Example")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "when passed name, cols" do
|
34
|
+
it "returns an 'textarea'-element with the passed name and the passed amount of columns" do
|
35
|
+
output = @html.textarea("test", 40)
|
36
|
+
output.should equal_element("TEXTAREA", {"NAME" => "test", "COLS" => "40", "ROWS" => "10"}, "")
|
37
|
+
end
|
38
|
+
|
39
|
+
it "includes the return value of the passed block when passed a block" do
|
40
|
+
output = @html.textarea("test", 40) { "Example" }
|
41
|
+
output.should equal_element("TEXTAREA", {"NAME" => "test", "COLS" => "40", "ROWS" => "10"}, "Example")
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "when passed name, cols, rows" do
|
46
|
+
it "returns an 'textarea'-element with the passed name, the passed amount of columns and the passed number of rows" do
|
47
|
+
output = @html.textarea("test", 40, 5)
|
48
|
+
output.should equal_element("TEXTAREA", {"NAME" => "test", "COLS" => "40", "ROWS" => "5"}, "")
|
49
|
+
end
|
50
|
+
|
51
|
+
it "includes the return value of the passed block when passed a block" do
|
52
|
+
output = @html.textarea("test", 40, 5) { "Example" }
|
53
|
+
output.should equal_element("TEXTAREA", {"NAME" => "test", "COLS" => "40", "ROWS" => "5"}, "Example")
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "when passed Hash" do
|
58
|
+
it "uses the passed Hash as attributes" do
|
59
|
+
@html.textarea("ID" => "test").should == '<TEXTAREA ID="test"></TEXTAREA>'
|
60
|
+
|
61
|
+
attributes = {"ID" => "test-id", "NAME" => "test-name"}
|
62
|
+
output = @html.textarea(attributes)
|
63
|
+
output.should equal_element("TEXTAREA", attributes, "")
|
64
|
+
end
|
65
|
+
|
66
|
+
it "includes the return value of the passed block when passed a block" do
|
67
|
+
attributes = {"ID" => "test-id", "NAME" => "test-name"}
|
68
|
+
output = @html.textarea(attributes) { "test" }
|
69
|
+
output.should equal_element("TEXTAREA", attributes, "test")
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,171 @@
|
|
1
|
+
require 'cgi'
|
2
|
+
|
3
|
+
describe "CGI#initialize" do
|
4
|
+
it "is private" do
|
5
|
+
CGI.should have_private_instance_method(:initialize)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "CGI#initialize when passed no arguments" do
|
10
|
+
before(:each) do
|
11
|
+
ENV['REQUEST_METHOD'], @old_request_method = "GET", ENV['REQUEST_METHOD']
|
12
|
+
@cgi = CGI.allocate
|
13
|
+
end
|
14
|
+
|
15
|
+
after(:each) do
|
16
|
+
ENV['REQUEST_METHOD'] = @old_request_method
|
17
|
+
end
|
18
|
+
|
19
|
+
it "extends self with CGI::QueryExtension" do
|
20
|
+
@cgi.send(:initialize)
|
21
|
+
@cgi.should be_kind_of(CGI::QueryExtension)
|
22
|
+
end
|
23
|
+
|
24
|
+
it "does not extend self with CGI::HtmlExtension" do
|
25
|
+
@cgi.send(:initialize)
|
26
|
+
@cgi.should_not be_kind_of(CGI::HtmlExtension)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "does not extend self with any of the other HTML modules" do
|
30
|
+
@cgi.send(:initialize)
|
31
|
+
@cgi.should_not be_kind_of(CGI::Html3)
|
32
|
+
@cgi.should_not be_kind_of(CGI::HtmlExtension)
|
33
|
+
@cgi.should_not be_kind_of(CGI::Html4)
|
34
|
+
@cgi.should_not be_kind_of(CGI::Html4Tr)
|
35
|
+
@cgi.should_not be_kind_of(CGI::Html4Fr)
|
36
|
+
end
|
37
|
+
|
38
|
+
it "sets #cookies based on ENV['HTTP_COOKIE']" do
|
39
|
+
begin
|
40
|
+
old_env, ENV["HTTP_COOKIE"] = ENV["HTTP_COOKIE"], "test=test yay"
|
41
|
+
@cgi.send(:initialize)
|
42
|
+
@cgi.cookies.should == { "test"=>[ "test yay" ] }
|
43
|
+
ensure
|
44
|
+
ENV["HTTP_COOKIE"] = old_env
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
it "sets #params based on ENV['QUERY_STRING'] when ENV['REQUEST_METHOD'] is GET" do
|
49
|
+
begin
|
50
|
+
old_env_query, ENV["QUERY_STRING"] = ENV["QUERY_STRING"], "?test=a&test2=b"
|
51
|
+
old_env_method, ENV["REQUEST_METHOD"] = ENV["REQUEST_METHOD"], "GET"
|
52
|
+
@cgi.send(:initialize)
|
53
|
+
@cgi.params.should == { "test2" => ["b"], "?test" => ["a"] }
|
54
|
+
ensure
|
55
|
+
ENV["QUERY_STRING"] = old_env_query
|
56
|
+
ENV["REQUEST_METHOD"] = old_env_method
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
it "sets #params based on ENV['QUERY_STRING'] when ENV['REQUEST_METHOD'] is HEAD" do
|
61
|
+
begin
|
62
|
+
old_env_query, ENV["QUERY_STRING"] = ENV["QUERY_STRING"], "?test=a&test2=b"
|
63
|
+
old_env_method, ENV["REQUEST_METHOD"] = ENV["REQUEST_METHOD"], "HEAD"
|
64
|
+
@cgi.send(:initialize)
|
65
|
+
@cgi.params.should == { "test2" => ["b"], "?test" => ["a"] }
|
66
|
+
ensure
|
67
|
+
ENV["QUERY_STRING"] = old_env_query
|
68
|
+
ENV["REQUEST_METHOD"] = old_env_method
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe "CGI#initialize when passed type" do
|
74
|
+
before(:each) do
|
75
|
+
ENV['REQUEST_METHOD'], @old_request_method = "GET", ENV['REQUEST_METHOD']
|
76
|
+
@cgi = CGI.allocate
|
77
|
+
end
|
78
|
+
|
79
|
+
after(:each) do
|
80
|
+
ENV['REQUEST_METHOD'] = @old_request_method
|
81
|
+
end
|
82
|
+
|
83
|
+
|
84
|
+
it "extends self with CGI::QueryExtension" do
|
85
|
+
@cgi.send(:initialize, "test")
|
86
|
+
@cgi.should be_kind_of(CGI::QueryExtension)
|
87
|
+
end
|
88
|
+
|
89
|
+
it "extends self with CGI::QueryExtension, CGI::Html3 and CGI::HtmlExtension when the passed type is 'html3'" do
|
90
|
+
@cgi.send(:initialize, "html3")
|
91
|
+
@cgi.should be_kind_of(CGI::Html3)
|
92
|
+
@cgi.should be_kind_of(CGI::HtmlExtension)
|
93
|
+
@cgi.should be_kind_of(CGI::QueryExtension)
|
94
|
+
|
95
|
+
@cgi.should_not be_kind_of(CGI::Html4)
|
96
|
+
@cgi.should_not be_kind_of(CGI::Html4Tr)
|
97
|
+
@cgi.should_not be_kind_of(CGI::Html4Fr)
|
98
|
+
end
|
99
|
+
|
100
|
+
it "extends self with CGI::QueryExtension, CGI::Html4 and CGI::HtmlExtension when the passed type is 'html4'" do
|
101
|
+
@cgi.send(:initialize, "html4")
|
102
|
+
@cgi.should be_kind_of(CGI::Html4)
|
103
|
+
@cgi.should be_kind_of(CGI::HtmlExtension)
|
104
|
+
@cgi.should be_kind_of(CGI::QueryExtension)
|
105
|
+
|
106
|
+
@cgi.should_not be_kind_of(CGI::Html3)
|
107
|
+
@cgi.should_not be_kind_of(CGI::Html4Tr)
|
108
|
+
@cgi.should_not be_kind_of(CGI::Html4Fr)
|
109
|
+
end
|
110
|
+
|
111
|
+
it "extends self with CGI::QueryExtension, CGI::Html4Tr and CGI::HtmlExtension when the passed type is 'html4Tr'" do
|
112
|
+
@cgi.send(:initialize, "html4Tr")
|
113
|
+
@cgi.should be_kind_of(CGI::Html4Tr)
|
114
|
+
@cgi.should be_kind_of(CGI::HtmlExtension)
|
115
|
+
@cgi.should be_kind_of(CGI::QueryExtension)
|
116
|
+
|
117
|
+
@cgi.should_not be_kind_of(CGI::Html3)
|
118
|
+
@cgi.should_not be_kind_of(CGI::Html4)
|
119
|
+
@cgi.should_not be_kind_of(CGI::Html4Fr)
|
120
|
+
end
|
121
|
+
|
122
|
+
it "extends self with CGI::QueryExtension, CGI::Html4Tr, CGI::Html4Fr and CGI::HtmlExtension when the passed type is 'html4Fr'" do
|
123
|
+
@cgi.send(:initialize, "html4Fr")
|
124
|
+
@cgi.should be_kind_of(CGI::Html4Tr)
|
125
|
+
@cgi.should be_kind_of(CGI::Html4Fr)
|
126
|
+
@cgi.should be_kind_of(CGI::HtmlExtension)
|
127
|
+
@cgi.should be_kind_of(CGI::QueryExtension)
|
128
|
+
|
129
|
+
@cgi.should_not be_kind_of(CGI::Html3)
|
130
|
+
@cgi.should_not be_kind_of(CGI::Html4)
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
describe "CGI#initialize when CGI_PARAMS is set" do
|
135
|
+
before(:each) do
|
136
|
+
ENV['REQUEST_METHOD'], @old_request_method = "GET", ENV['REQUEST_METHOD']
|
137
|
+
@cgi = CGI.allocate
|
138
|
+
end
|
139
|
+
|
140
|
+
after(:each) do
|
141
|
+
ENV['REQUEST_METHOD'] = @old_request_method
|
142
|
+
end
|
143
|
+
|
144
|
+
|
145
|
+
ruby_version_is "" ... "1.9" do
|
146
|
+
it "prints out a warning" do
|
147
|
+
begin
|
148
|
+
CGI_PARAMS = { "test" => "test" }
|
149
|
+
CGI_COOKIES = [ "cookie!" ]
|
150
|
+
lambda { @cgi.send(:initialize) }.should complain("do not use CGI_PARAMS and CGI_COOKIES\n")
|
151
|
+
ensure
|
152
|
+
Object.send(:remove_const, :CGI_PARAMS)
|
153
|
+
Object.send(:remove_const, :CGI_COOKIES)
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
it "sets #cookies and #params to the contents of CGI_PARAMS and CGI_COOKIES" do
|
158
|
+
begin
|
159
|
+
CGI_PARAMS = { "test" => "test" }
|
160
|
+
CGI_COOKIES = [ "cookie!" ]
|
161
|
+
|
162
|
+
@cgi.send(:initialize)
|
163
|
+
@cgi.params.should == CGI_PARAMS
|
164
|
+
@cgi.cookies.should == CGI_COOKIES
|
165
|
+
ensure
|
166
|
+
Object.send(:remove_const, :CGI_PARAMS)
|
167
|
+
Object.send(:remove_const, :CGI_COOKIES)
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
data/spec/out_spec.rb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'cgi'
|
2
|
+
|
3
|
+
describe "CGI#out" do
|
4
|
+
before(:each) do
|
5
|
+
ENV['REQUEST_METHOD'], @old_request_method = "GET", ENV['REQUEST_METHOD']
|
6
|
+
@cgi = CGI.new
|
7
|
+
$stdout, @old_stdout = IOStub.new, $stdout
|
8
|
+
end
|
9
|
+
|
10
|
+
after(:each) do
|
11
|
+
$stdout = @old_stdout
|
12
|
+
ENV['REQUEST_METHOD'] = @old_request_method
|
13
|
+
end
|
14
|
+
|
15
|
+
it "it writes a HTMl header based on the passed argument to $stdout" do
|
16
|
+
@cgi.out { "" }
|
17
|
+
$stdout.should == "Content-Type: text/html\r\nContent-Length: 0\r\n\r\n"
|
18
|
+
end
|
19
|
+
|
20
|
+
it "appends the block's return value to the HTML header" do
|
21
|
+
@cgi.out { "test!" }
|
22
|
+
$stdout.should == "Content-Type: text/html\r\nContent-Length: 5\r\n\r\ntest!"
|
23
|
+
end
|
24
|
+
|
25
|
+
it "automatically sets the Content-Length Header based on the block's return value" do
|
26
|
+
@cgi.out { "0123456789" }
|
27
|
+
$stdout.should == "Content-Type: text/html\r\nContent-Length: 10\r\n\r\n0123456789"
|
28
|
+
end
|
29
|
+
|
30
|
+
it "includes Cookies in the @output_cookies field" do
|
31
|
+
@cgi.instance_variable_set(:@output_cookies, ["multiple", "cookies"])
|
32
|
+
@cgi.out { "" }
|
33
|
+
$stdout.should == "Content-Type: text/html\r\nContent-Length: 0\r\nSet-Cookie: multiple\r\nSet-Cookie: cookies\r\n\r\n"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "CGI#out when passed no block" do
|
38
|
+
before(:each) do
|
39
|
+
ENV['REQUEST_METHOD'], @old_request_method = "GET", ENV['REQUEST_METHOD']
|
40
|
+
@cgi = CGI.new
|
41
|
+
end
|
42
|
+
|
43
|
+
after(:each) do
|
44
|
+
ENV['REQUEST_METHOD'] = @old_request_method
|
45
|
+
end
|
46
|
+
|
47
|
+
it "raises a LocalJumpError" do
|
48
|
+
lambda { @cgi.out }.should raise_error(LocalJumpError)
|
49
|
+
end
|
50
|
+
end
|
data/spec/parse_spec.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'cgi'
|
2
|
+
|
3
|
+
describe "CGI.parse when passed String" do
|
4
|
+
it "parses a HTTP Query String into a Hash" do
|
5
|
+
CGI.parse("test=test&a=b").should == { "a" => ["b"], "test" => ["test"] }
|
6
|
+
CGI.parse("test=1,2,3").should == { "test" => ["1,2,3"] }
|
7
|
+
CGI.parse("test=a&a=&b=").should == { "test" => ["a"], "a" => [""], "b" => [""] }
|
8
|
+
end
|
9
|
+
|
10
|
+
it "parses query strings with semicolons in place of ampersands" do
|
11
|
+
CGI.parse("test=test;a=b").should == { "a" => ["b"], "test" => ["test"] }
|
12
|
+
CGI.parse("test=a;a=;b=").should == { "test" => ["a"], "a" => [""], "b" => [""] }
|
13
|
+
end
|
14
|
+
|
15
|
+
it "allows passing multiple values for one key" do
|
16
|
+
CGI.parse("test=1&test=2&test=3").should == { "test" => ["1", "2", "3"] }
|
17
|
+
CGI.parse("test[]=1&test[]=2&test[]=3").should == { "test[]" => [ "1", "2", "3" ] }
|
18
|
+
end
|
19
|
+
|
20
|
+
it "unescapes keys and values" do
|
21
|
+
CGI.parse("hello%3F=hello%21").should == { "hello?" => ["hello!"] }
|
22
|
+
end
|
23
|
+
end
|
data/spec/pretty_spec.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'cgi'
|
2
|
+
|
3
|
+
describe "CGI.pretty when passed html" do
|
4
|
+
it "indents the passed html String with two spaces" do
|
5
|
+
CGI.pretty("<HTML><BODY></BODY></HTML>").should == <<-EOS
|
6
|
+
<HTML>
|
7
|
+
<BODY>
|
8
|
+
</BODY>
|
9
|
+
</HTML>
|
10
|
+
EOS
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "CGI.pretty when passed html, indentation_unit" do
|
15
|
+
it "indents the passed html String with the passed indentation_unit" do
|
16
|
+
CGI.pretty("<HTML><BODY></BODY></HTML>", "\t").should == <<-EOS
|
17
|
+
<HTML>
|
18
|
+
\t<BODY>
|
19
|
+
\t</BODY>
|
20
|
+
</HTML>
|
21
|
+
EOS
|
22
|
+
end
|
23
|
+
end
|
data/spec/print_spec.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'cgi'
|
2
|
+
|
3
|
+
describe "CGI#print" do
|
4
|
+
before(:each) do
|
5
|
+
ENV['REQUEST_METHOD'], @old_request_method = "GET", ENV['REQUEST_METHOD']
|
6
|
+
@cgi = CGI.new
|
7
|
+
end
|
8
|
+
|
9
|
+
after(:each) do
|
10
|
+
ENV['REQUEST_METHOD'] = @old_request_method
|
11
|
+
end
|
12
|
+
|
13
|
+
it "passes all arguments to $stdout.print" do
|
14
|
+
$stdout.should_receive(:print).with("test")
|
15
|
+
@cgi.print("test")
|
16
|
+
|
17
|
+
$stdout.should_receive(:print).with("one", "two", "three", ["four", "five"])
|
18
|
+
@cgi.print("one", "two", "three", ["four", "five"])
|
19
|
+
end
|
20
|
+
|
21
|
+
it "returns the result of calling $stdout.print" do
|
22
|
+
$stdout.should_receive(:print).with("test").and_return(:expected)
|
23
|
+
@cgi.print("test").should == :expected
|
24
|
+
end
|
25
|
+
end
|