1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
|
# frozen_string_literal: true
require 'test/unit'
require 'cgi'
require_relative 'update_env'
class CGIModrubyTest < Test::Unit::TestCase
include UpdateEnv
def setup
@environ = {}
update_env(
'SERVER_PROTOCOL' => 'HTTP/1.1',
'REQUEST_METHOD' => 'GET',
#'QUERY_STRING' => 'a=foo&b=bar',
)
CGI.class_eval { const_set(:MOD_RUBY, true) }
Apache._reset()
#@cgi = CGI.new
#@req = Apache.request
end
def teardown
ENV.update(@environ)
CGI.class_eval { remove_const(:MOD_RUBY) }
end
def test_cgi_modruby_simple
req = Apache.request
cgi = CGI.new
assert(req._setup_cgi_env_invoked?)
assert(! req._send_http_header_invoked?)
actual = cgi.http_header
assert_equal('', actual)
assert_equal('text/html', req.content_type)
assert(req._send_http_header_invoked?)
end
def test_cgi_modruby_complex
req = Apache.request
cgi = CGI.new
options = {
'status' => 'FORBIDDEN',
'location' => 'http://www.example.com/',
'type' => 'image/gif',
'content-encoding' => 'deflate',
'cookie' => [ CGI::Cookie.new('name1', 'abc', '123'),
CGI::Cookie.new('name'=>'name2', 'value'=>'value2', 'secure'=>true),
],
}
assert(req._setup_cgi_env_invoked?)
assert(! req._send_http_header_invoked?)
actual = cgi.http_header(options)
assert_equal('', actual)
assert_equal('image/gif', req.content_type)
assert_equal('403 Forbidden', req.status_line)
assert_equal(403, req.status)
assert_equal('deflate', req.content_encoding)
assert_equal('http://www.example.com/', req.headers_out['location'])
assert_equal(["name1=abc&123; path=", "name2=value2; path=; secure"],
req.headers_out['Set-Cookie'])
assert(req._send_http_header_invoked?)
end
def test_cgi_modruby_location
req = Apache.request
cgi = CGI.new
options = {
'status' => '200 OK',
'location' => 'http://www.example.com/',
}
cgi.http_header(options)
assert_equal('200 OK', req.status_line) # should be '302 Found' ?
assert_equal(302, req.status)
assert_equal('http://www.example.com/', req.headers_out['location'])
end
def test_cgi_modruby_requestparams
req = Apache.request
req.args = 'a=foo&b=bar'
cgi = CGI.new
assert_equal('foo', cgi['a'])
assert_equal('bar', cgi['b'])
end
instance_methods.each do |method|
private method if method =~ /^test_(.*)/ && $1 != ENV['TEST']
end if ENV['TEST']
end
## dummy class for mod_ruby
class Apache #:nodoc:
def self._reset
@request = Request.new
end
def self.request
return @request
end
class Request
def initialize
hash = {}
def hash.add(name, value)
(self[name] ||= []) << value
end
@http_header = nil
@headers_out = hash
@status_line = nil
@status = nil
@content_type = nil
@content_encoding = nil
end
attr_accessor :headers_out, :status_line, :status, :content_type, :content_encoding
attr_accessor :args
#def args
# return ENV['QUERY_STRING']
#end
def send_http_header
@http_header = '*invoked*'
end
def _send_http_header_invoked?
@http_header ? true : false
end
def setup_cgi_env
@cgi_env = '*invoked*'
end
def _setup_cgi_env_invoked?
@cgi_env ? true : false
end
end
end
|