From 692395b81fde0eba2578fdf22f0daf056b3b1926 Mon Sep 17 00:00:00 2001 From: naruse Date: Thu, 28 Aug 2008 00:22:57 +0000 Subject: [PATCH] * 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 --- ChangeLog | 5 ++ test/cgi/test_cgi_modruby.rb | 145 +++++++++++++++++++++++++++++++++++ 2 files changed, 150 insertions(+) create mode 100755 test/cgi/test_cgi_modruby.rb diff --git a/ChangeLog b/ChangeLog index 514f722ec0..8f01ff2131 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Thu Aug 28 09:22:01 2008 NARUSE, Yui + + * test/cgi/test_cgi_modruby.rb: add test for mod_ruby adaptor. + Patch by Takeyuki Fujioka. [ruby-dev:36013] + Thu Aug 28 09:17:10 2008 NARUSE, Yui * test/cgi/test_cgi_header.rb: add test for CGI::Header. 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