cgialt 0.0.1

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.
@@ -0,0 +1,108 @@
1
+ require 'test/unit'
2
+ #require 'cgi'
3
+ require(ENV['CGI'] || 'cgi')
4
+ require 'stringio'
5
+
6
+
7
+ class CGICookieTest < Test::Unit::TestCase
8
+
9
+
10
+ def setup
11
+ ENV['REQUEST_METHOD'] = 'GET'
12
+ end
13
+
14
+ def teardown
15
+ %W[REQUEST_METHOD SCRIPT_NAME].each do |name|
16
+ ENV.delete(name)
17
+ end
18
+ end
19
+
20
+
21
+ def test_cgi_cookie_new_simple
22
+ cookie = CGI::Cookie.new('name1', 'val1', '&<>"', "\245\340\245\271\245\253")
23
+ assert_equal('name1', cookie.name)
24
+ assert_equal(['val1', '&<>"', "\245\340\245\271\245\253"], cookie.value)
25
+ assert_nil(cookie.domain)
26
+ assert_nil(cookie.expires)
27
+ assert_equal('', cookie.path)
28
+ assert_equal(false, cookie.secure)
29
+ assert_equal("name1=val1&%26%3C%3E%22&%A5%E0%A5%B9%A5%AB; path=", cookie.to_s)
30
+ end
31
+
32
+
33
+ def test_cgi_cookie_new_complex
34
+ t = Time.gm(2030, 12, 31, 23, 59, 59)
35
+ value = ['val1', '&<>"', "\245\340\245\271\245\253"]
36
+ cookie = CGI::Cookie.new('name'=>'name1',
37
+ 'value'=>value,
38
+ 'path'=>'/cgi-bin/myapp/',
39
+ 'domain'=>'www.example.com',
40
+ 'expires'=>t,
41
+ 'secure'=>true
42
+ )
43
+ assert_equal('name1', cookie.name)
44
+ assert_equal(value, cookie.value)
45
+ assert_equal('www.example.com', cookie.domain)
46
+ assert_equal(t, cookie.expires)
47
+ assert_equal('/cgi-bin/myapp/', cookie.path)
48
+ assert_equal(true, cookie.secure)
49
+ assert_equal('name1=val1&%26%3C%3E%22&%A5%E0%A5%B9%A5%AB; domain=www.example.com; path=/cgi-bin/myapp/; expires=Tue, 31 Dec 2030 23:59:59 GMT; secure', cookie.to_s)
50
+ end
51
+
52
+
53
+ def test_cgi_cookie_scriptname
54
+ cookie = CGI::Cookie.new('name1', 'value1')
55
+ assert_equal('', cookie.path)
56
+ cookie = CGI::Cookie.new('name'=>'name1', 'value'=>'value1')
57
+ assert_equal('', cookie.path)
58
+ ## when ENV['SCRIPT_NAME'] is set, cookie.path is set automatically
59
+ ENV['SCRIPT_NAME'] = '/cgi-bin/app/example.cgi'
60
+ cookie = CGI::Cookie.new('name1', 'value1')
61
+ assert_equal('/cgi-bin/app/', cookie.path)
62
+ cookie = CGI::Cookie.new('name'=>'name1', 'value'=>'value1')
63
+ assert_equal('/cgi-bin/app/', cookie.path)
64
+ end
65
+
66
+
67
+ def test_cgi_cookie_parse
68
+ ## ';' separator
69
+ cookie_str = 'name1=val1&val2; name2=val2&%26%3C%3E%22;_session_id=12345'
70
+ cookies = CGI::Cookie.parse(cookie_str)
71
+ list = [
72
+ ['name1', ['val1', 'val2']],
73
+ ['name2', ['val2', '&<>"']],
74
+ ['_session_id', ['12345']],
75
+ ]
76
+ list.each do |name, value|
77
+ cookie = cookies[name]
78
+ assert_equal(name, cookie.name)
79
+ assert_equal(value, cookie.value)
80
+ end
81
+ ## ',' separator
82
+ cookie_str = 'name1=val1&val2, name2=val2&%26%3C%3E%22,_session_id=12345'
83
+ cookies = CGI::Cookie.parse(cookie_str)
84
+ list.each do |name, value|
85
+ cookie = cookies[name]
86
+ assert_equal(name, cookie.name)
87
+ assert_equal(value, cookie.value)
88
+ end
89
+ end
90
+
91
+
92
+ def test_cgi_cookie_arrayinterface
93
+ cookie = CGI::Cookie.new('name1', 'a', 'b', 'c')
94
+ assert_equal('a', cookie[0])
95
+ assert_equal('c', cookie[2])
96
+ assert_nil(cookie[3])
97
+ assert_equal('a', cookie.first)
98
+ assert_equal('c', cookie.last)
99
+ assert_equal(['A', 'B', 'C'], cookie.collect{|e| e.upcase})
100
+ end
101
+
102
+
103
+
104
+ instance_methods.each do |method|
105
+ private method if method =~ /^test_(.*)/ && $1 != ENV['TEST']
106
+ end if ENV['TEST']
107
+
108
+ end
@@ -0,0 +1,305 @@
1
+ require 'test/unit'
2
+ #require 'cgi'
3
+ require(ENV['CGI'] || 'cgi')
4
+ require 'stringio'
5
+
6
+
7
+ class CGICoreTest < Test::Unit::TestCase
8
+
9
+
10
+ def setup
11
+ #@environ = {
12
+ # 'SERVER_PROTOCOL' => 'HTTP/1.1',
13
+ # 'REQUEST_METHOD' => 'GET',
14
+ # 'SERVER_SOFTWARE' => 'Apache 2.2.0',
15
+ #}
16
+ #ENV.update(@environ)
17
+ end
18
+
19
+
20
+ def teardown
21
+ @environ.each do |key, val| ENV.delete(key) end
22
+ $stdout = STDOUT
23
+ end
24
+
25
+
26
+ def test_cgi_core_params_GET
27
+ @environ = {
28
+ 'REQUEST_METHOD' => 'GET',
29
+ 'QUERY_STRING' => 'id=123&id=456&id=&str=%40h+%3D%7E+%2F%5E%24%2F',
30
+ 'HTTP_COOKIE' => '_session_id=12345; name1=val1&val2;',
31
+ 'SERVER_SOFTWARE' => 'Apache 2.2.0',
32
+ 'SERVER_PROTOCOL' => 'HTTP/1.1',
33
+ }
34
+ ENV.update(@environ)
35
+ cgi = CGI.new
36
+ ## cgi[]
37
+ assert_equal('123', cgi['id'])
38
+ assert_equal('@h =~ /^$/', cgi['str'])
39
+ ## cgi[][], cgi[].first, cgi[].to_ary
40
+ $stderr = StringIO.new
41
+ begin
42
+ assert_equal('123', cgi['id'][0])
43
+ assert_equal('456', cgi['id'][1])
44
+ assert_equal('', cgi['id'][2])
45
+ assert_nil(cgi['id'][3])
46
+ assert_equal('@h =~ /^$/', cgi['str'][0])
47
+ assert_nil(cgi['str'][1])
48
+ assert_equal('123', cgi['id'].first)
49
+ assert_equal('123', cgi['id'].last) # should be '' ?
50
+ id1, id2, id3 = cgi['id']
51
+ assert_equal(['123', '456', ''], [id1, id2, id3])
52
+ str1, = cgi['str']
53
+ assert_equal('@h =~ /^$/', str1)
54
+ assert_not_same(str1, cgi['str']) # necessary?
55
+ ensure
56
+ $stderr = STDERR
57
+ end
58
+ ## cgi.params
59
+ assert_equal(['123', '456', ''], cgi.params['id'])
60
+ assert_equal(['@h =~ /^$/'], cgi.params['str'])
61
+ ## cgi.keys
62
+ assert_equal(['id', 'str'], cgi.keys.sort)
63
+ ## cgi.key?, cgi.has_key?, cgi.include?
64
+ assert_equal(true, cgi.key?('id'))
65
+ assert_equal(true, cgi.has_key?('id'))
66
+ assert_equal(true, cgi.include?('id'))
67
+ assert_equal(false, cgi.key?('foo'))
68
+ assert_equal(false, cgi.has_key?('foo'))
69
+ assert_equal(false, cgi.include?('foo'))
70
+ ## invalid parameter name
71
+ assert_equal('', cgi['*notfound*']) # [ruby-dev:30740]
72
+ assert_equal([], cgi.params['*notfound*'])
73
+ end
74
+
75
+
76
+ def test_cgi_core_params_POST
77
+ query_str = 'id=123&id=456&id=&str=%40h+%3D%7E+%2F%5E%24%2F'
78
+ @environ = {
79
+ 'REQUEST_METHOD' => 'POST',
80
+ 'CONTENT_LENGTH' => query_str.length.to_s,
81
+ 'HTTP_COOKIE' => '_session_id=12345; name1=val1&val2;',
82
+ 'SERVER_SOFTWARE' => 'Apache 2.2.0',
83
+ 'SERVER_PROTOCOL' => 'HTTP/1.1',
84
+ }
85
+ ENV.update(@environ)
86
+ $stdin = StringIO.new
87
+ $stdin << query_str
88
+ $stdin.rewind
89
+ cgi = CGI.new
90
+ ## cgi[]
91
+ assert_equal('123', cgi['id'])
92
+ assert_equal('@h =~ /^$/', cgi['str'])
93
+ ## cgi.params
94
+ assert_equal(['123', '456', ''], cgi.params['id'])
95
+ assert_equal(['@h =~ /^$/'], cgi.params['str'])
96
+ ## invalid parameter name
97
+ assert_equal('', cgi['*notfound*'])
98
+ assert_equal([], cgi.params['*notfound*'])
99
+ end
100
+
101
+
102
+ def test_cgi_core_cookie
103
+ @environ = {
104
+ 'REQUEST_METHOD' => 'GET',
105
+ 'QUERY_STRING' => 'id=123&id=456&id=&str=%40h+%3D%7E+%2F%5E%24%2F',
106
+ 'HTTP_COOKIE' => '_session_id=12345; name1=val1&val2;',
107
+ 'SERVER_SOFTWARE' => 'Apache 2.2.0',
108
+ 'SERVER_PROTOCOL' => 'HTTP/1.1',
109
+ }
110
+ ENV.update(@environ)
111
+ cgi = CGI.new
112
+ assert_not_nil(cgi.cookies)
113
+ [ ['_session_id', ['12345'], ],
114
+ ['name1', ['val1', 'val2'], ],
115
+ ].each do |key, expected|
116
+ cookie = cgi.cookies[key]
117
+ assert_kind_of(CGI::Cookie, cookie)
118
+ assert_equal(expected, cookie.value)
119
+ assert_equal(false, cookie.secure)
120
+ assert_nil(cookie.expires)
121
+ assert_nil(cookie.domain)
122
+ assert_equal('', cookie.path)
123
+ end
124
+ end
125
+
126
+
127
+ def test_cgi_core_maxcontentlength
128
+ @environ = {
129
+ 'REQUEST_METHOD' => 'POST',
130
+ 'CONTENT_LENGTH' => (64 * 1024 * 1024).to_s
131
+ }
132
+ ENV.update(@environ)
133
+ ex = assert_raise(StandardError) do
134
+ cgi = CGI.new
135
+ end
136
+ assert_equal("too large post data.", ex.message)
137
+ end if CGI.const_defined?(:MAX_CONTENT_LENGTH)
138
+
139
+
140
+ def test_cgi_core_out
141
+ @environ = {
142
+ 'REQUEST_METHOD' => 'GET',
143
+ 'QUERY_STRING' => 'id=123&id=456&id=&str=%40h+%3D%7E+%2F%5E%24%2F',
144
+ 'HTTP_COOKIE' => '_session_id=12345; name1=val1&val2;',
145
+ 'SERVER_SOFTWARE' => 'Apache 2.2.0',
146
+ 'SERVER_PROTOCOL' => 'HTTP/1.1',
147
+ }
148
+ ENV.update(@environ)
149
+ cgi = CGI.new
150
+ ## jis, euc, sjis string
151
+ jis_str = "\e$B8+$m!\"?M$,%4%_$N$h$&$@\e(B"
152
+ euc_str = "\270\253\244\355\241\242\277\315\244\254\245\264\245\337\244\316\244\350\244\246\244\300"
153
+ sjis_str = "\214\251\202\353\201A\220l\202\252\203S\203~\202\314\202\346\202\244\202\276"
154
+ ## iso-2022-jp
155
+ options = { 'charset'=>'iso-2022-jp' }
156
+ $stdout = StringIO.new
157
+ cgi.out(options) { euc_str }
158
+ assert_equal('ja', options['language'])
159
+ actual = $stdout.string
160
+ expected = "Content-Type: text/html; charset=iso-2022-jp\r\n" +
161
+ "Content-Length: 28\r\n" +
162
+ "Content-Language: ja\r\n" +
163
+ "\r\n" +
164
+ jis_str
165
+ assert_equal(expected, actual)
166
+ ## euc-jp
167
+ options = { 'charset'=>'EUC-JP' }
168
+ $stdout = StringIO.new
169
+ cgi.out(options) { euc_str }
170
+ assert_equal('ja', options['language'])
171
+ actual = $stdout.string
172
+ expected = "Content-Type: text/html; charset=EUC-JP\r\n" +
173
+ "Content-Length: 22\r\n" +
174
+ "Content-Language: ja\r\n" +
175
+ "\r\n" +
176
+ euc_str
177
+ assert_equal(expected, actual)
178
+ ## shift_jis
179
+ options = { 'charset'=>'Shift_JIS' }
180
+ $stdout = StringIO.new
181
+ cgi.out(options) { euc_str }
182
+ assert_equal('ja', options['language'])
183
+ actual = $stdout.string
184
+ expected = "Content-Type: text/html; charset=Shift_JIS\r\n" +
185
+ "Content-Length: 22\r\n" +
186
+ "Content-Language: ja\r\n" +
187
+ "\r\n" +
188
+ sjis_str
189
+ assert_equal(expected, actual)
190
+ ## utf8 (not converted)
191
+ options = { 'charset'=>'utf8' }
192
+ $stdout = StringIO.new
193
+ cgi.out(options) { euc_str }
194
+ assert_nil(options['language'])
195
+ actual = $stdout.string
196
+ expected = "Content-Type: text/html; charset=utf8\r\n" +
197
+ "Content-Length: 22\r\n" +
198
+ "\r\n" +
199
+ euc_str
200
+ assert_equal(expected, actual)
201
+ ## language is keeped
202
+ options = { 'charset'=>'Shift_JIS', 'language'=>'en' }
203
+ $stdout = StringIO.new
204
+ cgi.out(options) { euc_str }
205
+ assert_equal('en', options['language'])
206
+ ## HEAD method
207
+ ENV['REQUEST_METHOD'] = 'HEAD'
208
+ options = { 'charset'=>'utf8' }
209
+ $stdout = StringIO.new
210
+ cgi.out(options) { euc_str }
211
+ actual = $stdout.string
212
+ expected = "Content-Type: text/html; charset=utf8\r\n" +
213
+ "Content-Length: 22\r\n" +
214
+ "\r\n"
215
+ assert_equal(expected, actual)
216
+ end
217
+
218
+
219
+ def test_cgi_core_print
220
+ @environ = {
221
+ 'REQUEST_METHOD' => 'GET',
222
+ }
223
+ ENV.update(@environ)
224
+ cgi = CGI.new
225
+ $stdout = StringIO.new
226
+ str = "foobar"
227
+ cgi.print(str)
228
+ expected = str
229
+ actual = $stdout.string
230
+ assert_equal(expected, actual)
231
+ end
232
+
233
+
234
+ def test_cgi_core_environs
235
+ @environ = {
236
+ 'REQUEST_METHOD' => 'GET',
237
+ }
238
+ ENV.update(@environ)
239
+ cgi = CGI.new
240
+ ##
241
+ list1 = %w[ AUTH_TYPE CONTENT_TYPE GATEWAY_INTERFACE PATH_INFO
242
+ PATH_TRANSLATED QUERY_STRING REMOTE_ADDR REMOTE_HOST
243
+ REMOTE_IDENT REMOTE_USER REQUEST_METHOD SCRIPT_NAME
244
+ SERVER_NAME SERVER_PROTOCOL SERVER_SOFTWARE
245
+ HTTP_ACCEPT HTTP_ACCEPT_CHARSET HTTP_ACCEPT_ENCODING
246
+ HTTP_ACCEPT_LANGUAGE HTTP_CACHE_CONTROL HTTP_FROM HTTP_HOST
247
+ HTTP_NEGOTIATE HTTP_PRAGMA HTTP_REFERER HTTP_USER_AGENT
248
+ ]
249
+ list2 = %w[ CONTENT_LENGTH SERVER_PORT ]
250
+ ## string expected
251
+ list1.each do |name|
252
+ @environ[name] = "**#{name}**"
253
+ end
254
+ ENV.update(@environ)
255
+ list1.each do |name|
256
+ method = name.sub(/\AHTTP_/, '').downcase
257
+ actual = cgi.__send__ method
258
+ expected = "**#{name}**"
259
+ assert_equal(expected, actual)
260
+ end
261
+ ## integer expected
262
+ ENV['CONTENT_LENGTH'] = '123'
263
+ ENV['SERVER_PORT'] = '8080'
264
+ assert_equal(123, cgi.content_length)
265
+ assert_equal(8080, cgi.server_port)
266
+ ## raw cookie
267
+ ENV['HTTP_COOKIE'] = 'name1=val1'
268
+ ENV['HTTP_COOKIE2'] = 'name2=val2'
269
+ assert_equal('name1=val1', cgi.raw_cookie)
270
+ assert_equal('name2=val2', cgi.raw_cookie2)
271
+ end
272
+
273
+
274
+ def test_cgi_core_htmltype
275
+ @environ = {
276
+ 'REQUEST_METHOD' => 'GET',
277
+ }
278
+ ENV.update(@environ)
279
+ ## no htmltype
280
+ cgi = CGI.new
281
+ assert_raise(NoMethodError) do cgi.doctype end
282
+ ## html3
283
+ cgi = CGI.new('html3')
284
+ expected = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">'
285
+ assert_equal(expected, cgi.doctype)
286
+ ## html4
287
+ cgi = CGI.new('html4')
288
+ expected = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">'
289
+ assert_equal(expected, cgi.doctype)
290
+ ## html4 transitional
291
+ cgi = CGI.new('html4Tr')
292
+ expected = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">'
293
+ assert_equal(expected, cgi.doctype)
294
+ ## html4 frameset
295
+ cgi = CGI.new('html4Fr')
296
+ expected = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">'
297
+ assert_equal(expected, cgi.doctype)
298
+ end
299
+
300
+
301
+ instance_methods.each do |method|
302
+ private method if method =~ /^test_(.*)/ && $1 != ENV['TEST']
303
+ end if ENV['TEST']
304
+
305
+ end
@@ -0,0 +1,178 @@
1
+ require 'test/unit'
2
+ #require 'cgi'
3
+ require(ENV['CGI'] || 'cgi')
4
+
5
+
6
+ class CGIHeaderTest < Test::Unit::TestCase
7
+
8
+
9
+ def setup
10
+ @environ = {
11
+ 'SERVER_PROTOCOL' => 'HTTP/1.1',
12
+ 'REQUEST_METHOD' => 'GET',
13
+ 'SERVER_SOFTWARE' => 'Apache 2.2.0',
14
+ }
15
+ ENV.update(@environ)
16
+ end
17
+
18
+
19
+ def teardown
20
+ @environ.each do |key, val| ENV.delete(key) end
21
+ end
22
+
23
+
24
+ def test_cgi_header_simple
25
+ cgi = CGI.new
26
+ ## default content type
27
+ expected = "Content-Type: text/html\r\n\r\n"
28
+ actual = cgi.header
29
+ assert_equal(expected, actual)
30
+ ## content type specified as string
31
+ expected = "Content-Type: text/xhtml; charset=utf8\r\n\r\n"
32
+ actual = cgi.header('text/xhtml; charset=utf8')
33
+ assert_equal(expected, actual)
34
+ ## content type specified as hash
35
+ expected = "Content-Type: image/png\r\n\r\n"
36
+ actual = cgi.header('type'=>'image/png')
37
+ assert_equal(expected, actual)
38
+ ## charset specified
39
+ expected = "Content-Type: text/html; charset=utf8\r\n\r\n"
40
+ actual = cgi.header('charset'=>'utf8')
41
+ assert_equal(expected, actual)
42
+ end
43
+
44
+
45
+ def test_cgi_header_complex
46
+ cgi = CGI.new
47
+ options = {
48
+ 'type' => 'text/xhtml',
49
+ 'charset' => 'utf8',
50
+ 'status' => 'REDIRECT',
51
+ 'server' => 'webrick',
52
+ 'connection' => 'close',
53
+ 'length' => 123,
54
+ 'language' => 'ja',
55
+ 'expires' => Time.gm(2000, 1, 23, 12, 34, 56),
56
+ 'location' => 'http://www.ruby-lang.org/',
57
+ }
58
+ expected = "Status: 302 Found\r\n"
59
+ expected << "Server: webrick\r\n"
60
+ expected << "Connection: close\r\n"
61
+ expected << "Content-Type: text/xhtml; charset=utf8\r\n"
62
+ expected << "Content-Length: 123\r\n"
63
+ expected << "Content-Language: ja\r\n"
64
+ expected << "Expires: Sun, 23 Jan 2000 12:34:56 GMT\r\n"
65
+ expected << "location: http://www.ruby-lang.org/\r\n"
66
+ expected << "\r\n"
67
+ actual = cgi.header(options)
68
+ assert_equal(expected, actual)
69
+ end
70
+
71
+
72
+ def test_cgi_header_argerr
73
+ cgi = CGI.new
74
+ #expected = NoMethodError # must be ArgumentError
75
+ if defined?(CGI::RELEASE)
76
+ expected = ArgumentError # for CGIAlt
77
+ else
78
+ expected = NoMethodError # for Ruby1.8
79
+ end
80
+ ex = assert_raise(expected) do
81
+ cgi.header(nil)
82
+ end
83
+ end
84
+
85
+
86
+ def test_cgi_header_cookie
87
+ cgi = CGI.new
88
+ cookie1 = CGI::Cookie.new('name1', 'abc', '123')
89
+ cookie2 = CGI::Cookie.new('name'=>'name2', 'value'=>'value2', 'secure'=>true)
90
+ ctype = "Content-Type: text/html\r\n"
91
+ sep = "\r\n"
92
+ c1 = "Set-Cookie: name1=abc&123; path=\r\n"
93
+ c2 = "Set-Cookie: name2=value2; path=; secure\r\n"
94
+ ## CGI::Cookie object
95
+ actual = cgi.header('cookie'=>cookie1)
96
+ expected = ctype + c1 + sep
97
+ assert_equal(expected, actual)
98
+ ## String
99
+ actual = cgi.header('cookie'=>cookie2.to_s)
100
+ expected = ctype + c2 + sep
101
+ assert_equal(expected, actual)
102
+ ## Array
103
+ actual = cgi.header('cookie'=>[cookie1, cookie2])
104
+ expected = ctype + c1 + c2 + sep
105
+ assert_equal(expected, actual)
106
+ ## Hash
107
+ actual = cgi.header('cookie'=>{'name1'=>cookie1, 'name2'=>cookie2})
108
+ expected = ctype + c1 + c2 + sep
109
+ assert_equal(expected, actual)
110
+ end
111
+
112
+
113
+ def test_cgi_header_output_cookies
114
+ cgi = CGI.new
115
+ ## output cookies
116
+ cookies = [ CGI::Cookie.new('name1', 'abc', '123'),
117
+ CGI::Cookie.new('name'=>'name2', 'value'=>'value2', 'secure'=>true),
118
+ ]
119
+ cgi.instance_variable_set('@output_cookies', cookies)
120
+ expected = "Content-Type: text/html; charset=utf8\r\n"
121
+ expected << "Set-Cookie: name1=abc&123; path=\r\n"
122
+ expected << "Set-Cookie: name2=value2; path=; secure\r\n"
123
+ expected << "\r\n"
124
+ ## header when string
125
+ actual = cgi.header('text/html; charset=utf8')
126
+ assert_equal(expected, actual)
127
+ ## _header_for_string
128
+ actual = cgi.header('type'=>'text/html', 'charset'=>'utf8')
129
+ assert_equal(expected, actual)
130
+ end
131
+
132
+
133
+ def test_cgi_header_nph
134
+ cgi = CGI.new
135
+ ## 'nph' is true
136
+ ENV['SERVER_SOFTWARE'] = 'Apache 2.2.0'
137
+ actual1 = cgi.header('nph'=>true)
138
+ ## when old IIS, NPH-mode is forced
139
+ ENV['SERVER_SOFTWARE'] = 'IIS/4.0'
140
+ actual2 = cgi.header
141
+ actual3 = cgi.header('status'=>'REDIRECT', 'location'=>'http://www.example.com/')
142
+ ## newer IIS doesn't require NPH-mode ## [ruby-dev:30537]
143
+ ENV['SERVER_SOFTWARE'] = 'IIS/5.0'
144
+ actual4 = cgi.header
145
+ actual5 = cgi.header('status'=>'REDIRECT', 'location'=>'http://www.example.com/')
146
+ ## assertion
147
+ now = Time.now
148
+ expected = "HTTP/1.1 200 OK\r\n"
149
+ expected << "Date: #{CGI.rfc1123_date(now)}\r\n"
150
+ expected << "Server: Apache 2.2.0\r\n"
151
+ expected << "Connection: close\r\n"
152
+ expected << "Content-Type: text/html\r\n"
153
+ expected << "\r\n"
154
+ assert_equal(expected, actual1)
155
+ expected.sub!(/^Server: .*?\r\n/, "Server: IIS/4.0\r\n")
156
+ assert_equal(expected, actual2)
157
+ expected.sub!(/^HTTP\/1.1 200 OK\r\n/, "HTTP/1.1 302 Found\r\n")
158
+ expected.sub!(/\r\n\r\n/, "\r\nlocation: http://www.example.com/\r\n\r\n")
159
+ assert_equal(expected, actual3)
160
+ expected = "Content-Type: text/html\r\n"
161
+ expected << "\r\n"
162
+ assert_equal(expected, actual4)
163
+ expected = "Status: 302 Found\r\n"
164
+ expected << "Content-Type: text/html\r\n"
165
+ expected << "location: http://www.example.com/\r\n"
166
+ expected << "\r\n"
167
+ assert_equal(expected, actual5)
168
+ ensure
169
+ ENV.delete('SERVER_SOFTWARE')
170
+ end
171
+
172
+
173
+
174
+ instance_methods.each do |method|
175
+ private method if method =~ /^test_(.*)/ && $1 != ENV['TEST']
176
+ end if ENV['TEST']
177
+
178
+ end