summaryrefslogtreecommitdiff
path: root/test/cgi
diff options
context:
space:
mode:
authornaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-08-28 00:22:57 +0000
committernaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-08-28 00:22:57 +0000
commit692395b81fde0eba2578fdf22f0daf056b3b1926 (patch)
tree6194014054683ff48188f5b7b2682e77a1c5381b /test/cgi
parentf30670001b75860875d7a3d8efea824145df2a4d (diff)
* test/cgi/test_cgi_modruby.rb: add test for mod_ruby adaptor.
Patch by Takeyuki Fujioka. [ruby-dev:36013] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18889 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/cgi')
-rwxr-xr-xtest/cgi/test_cgi_modruby.rb145
1 files changed, 145 insertions, 0 deletions
diff --git a/test/cgi/test_cgi_modruby.rb b/test/cgi/test_cgi_modruby.rb
new file mode 100755
index 0000000000..4eb02fac56
--- /dev/null
+++ b/test/cgi/test_cgi_modruby.rb
@@ -0,0 +1,145 @@
+require 'test/unit'
+require 'cgi'
+
+
+class CGIModrubyTest < Test::Unit::TestCase
+
+
+ def setup
+ @environ = {
+ 'SERVER_PROTOCOL' => 'HTTP/1.1',
+ 'REQUEST_METHOD' => 'GET',
+ #'QUERY_STRING' => 'a=foo&b=bar',
+ }
+ ENV.update(@environ)
+ CGI.class_eval { const_set(:MOD_RUBY, true) }
+ Apache._reset()
+ #@cgi = CGI.new
+ #@req = Apache.request
+ end
+
+
+ def teardown
+ @environ.each do |key, val| ENV.delete(key) end
+ 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.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.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/',
+ }
+ actual = cgi.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
+ @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